linux中asm⽂件夹,定位数据在ASM中的位置
有时候我们想要知道⼀个特定的database block位于ASM的哪个磁盘,磁盘的哪个AU以及AU的哪⼀个块。本篇⽂章将向⼤家展⽰如何解决这个问题。
⾸先在数据库⾥创建测试表空间:
SQL> create tablespace t_cs datafile '+testdg' size 50M autoextend off;
Tablespace created.
SQL> set long 200
SQL> set linesize 200
SQL> select f.file#, f.name "file", t.name "tablespace"
2 from v$datafile f, v$tablespace t
3 where t.name='T_CS' and f.ts# = t.ts#;
FILE# file tablespace
---------- -------------------------------------------------- ------------------------------
11 +TESTDG/jyrac/datafile/t_cs.256.932913341 T_CS
注意到ASM file number是256,现在创建⼀张测试表并插⼊数据:
SQL> create table t(n number,name varchar2(20)) tablespace t_cs;
Table created.
SQL> insert into t values(1,'JY');
1 row created.
SQL> commit;
Commit complete.
查询表T所占⽤的数据块号:
SQL> select rowid,name from t;
ROWID NAME
------------------ --------------------------------------------------
AAAV/pAALAAAACHAAA JY
SQL> select wid_block_number('AAAV/pAALAAAACHAAA') "block number" from dual;
block number
------------
135
查询数据⽂件的块⼤⼩:
SQL> select block_size from v$datafile where file#=11;
8192
可以看到插⼊的数据位于135号块,数据⽂件块⼤⼩为8K。
连接ASM实例,查询256号⽂件的区分布:
SQL> select group_number from v$asm_diskgroup where name='TESTDG'; GROUP_NUMBER
------------
5
SQL> select
2 xnum_kffxp, -- virtual extent number
3 pxn_kffxp, -- physical extent number
4 disk_kffxp, -- disk number
5 au_kffxp -- allocation unit number
6 from x$kffxp
7 where number_kffxp=256 -- asm file 256
8 and group_kffxp=5 -- group number 1
9 order by 1,2,3;
XNUM_KFFXP PXN_KFFXP DISK_KFFXP AU_KFFXP
---------- ---------- ---------- ----------
0 0 2 41
0 1 3 38
1 2 3 39
1 3
2 42
2 4 1 41
2 5 0 36
3 6 0 37
3 7 2 43
4 8 2 45
4 9 1 42
5 10 3 40
5 11 1 43
6 12 1 44
6 13 2 47
9 19 0 40
10 20 1 46
10 21 3 44
11 22 0 41
11 23 3 45
12 24 2 49
12 25 3 46
13 26 3 47
13 27 2 46
14 28 1 47
14 29 0 42
15 30 0 43
15 31 2 52
16 32 2 53
16 33 1 48
17 34 3 48
17 35 1 49
18 36 1 50
18 37 2 54
19 38 0 44
19 39 1 51
20 40 2 55
20 41 0 45
21 42 3 50
21 43 0 46
22 44 1 52
22 45 3 51
23 46 0 47 23 47 3 52
26 53 0 48
27 54 0 49
27 55 2 60
28 56 2 61
28 57 1 54
29 58 3 55
29 59 1 56
30 60 1 58
30 61 2 65
31 62 0 51
31 63 1 59
32 64 2 66
32 65 0 52
33 66 3 57
33 67 0 53
34 68 1 60
34 69 3 58
35 70 0 54linux查看当前文件夹内容
35 71 3 59
36 72 2 67
36 73 3 60
37 74 3 61
37 75 2 68
38 76 1 61
38 77 0 55
39 78 0 56
39 79 2 71
40 80 2 72 40 81 1 63
43 87 1 66
44 88 2 74
44 89 0 58
45 90 3 64
45 91 0 59
46 92 1 67
46 93 3 65
47 94 0 60
47 95 3 66
48 96 2 77
48 97 3 67
49 98 3 69
49 99 2 78
50 100 1 69
50 101 0 61
2147483648 0 1 57
2147483648 1 0 50
2147483648 2 2 62
105 rows selected.
可以看到⽂件的区分布在所有磁盘,由于数据⽂件为Normal冗余,每个区都是两副本。注意我说的是数据⽂件为Normal冗余。默认情况下,⽂件会继承磁盘组的冗余策略。控制⽂件是个例外:即使在Normal冗余的磁盘组,如果磁盘组包含⾄少3个failgroup,控制⽂件也会被创建为high冗余。
查询磁盘组的AU⼤⼩:
SQL> select block_size,allocation_unit_size from v$asm_diskgroup where group_number=5;
BLOCK_SIZE ALLOCATION_UNIT_SIZE
---------- --------------------
4096 1048576
AU⼤⼩为1MB。注意每个磁盘组可以有不同的AU⼤⼩。
现在已知测试数据在256号ASM file的135号块。数据块为8K的情况下,每个AU可以包含128个块。这就意味着135号块位于第⼆个virtual extent的第7个块。第⼆个virtual extent包含3号磁盘的39号au和2号磁盘的42号au.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论