定位資料在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 dbms_rowid.rowid_block_number('AAAV/pAALAAAACHAAA') "block number" from dual; block number ------------ 135
查詢資料檔案的塊大小:
SQL> select block_size from v$datafile where file#=11; BLOCK_SIZE ---------- 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 7 14 0 38 7 15 1 45 8 16 2 48 8 17 0 39 9 18 3 43 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 24 48 2 56 24 49 3 53 25 50 3 54 25 51 2 59 26 52 1 53 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 54 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 41 82 3 63 41 83 1 64 42 84 1 65 42 85 2 73 43 86 0 57 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.
查詢磁碟2和3的名字:
SQL> set long 200 SQL> set linesize 200 SQL> select disk_number, name,path from v$asm_disk where group_number=5 and disk_number in (2,3); DISK_NUMBER NAME PATH ----------- ------------------------------------------------------------ -------------------------------------------------- 2 TESTDG_0002 /dev/raw/raw13 3 TESTDG_0003 /dev/raw/raw14
測試資料位於2號磁碟的42號AU的第7個塊。我們首先將這個AU的資料dd出來:
[grid@jyrac1 ~]$ dd if=/dev/raw/raw13 bs=1024k count=1 skip=42 of=AU42.dd 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.021209 seconds, 49.4 MB/s
注意幾個引數的含義:
bs=1024k -- AU的大小
skip=42 -- 它是指跳過檔案的前42個資料塊,從第43個資料塊開始,因為AU的序號是從0開始
count=1 -- 只需要匯出一個AU
然後將7號塊的資料從AU中匯出:
[grid@jyrac1 ~]$ dd if=AU42.dd bs=8k count=1 skip=7 of=block135.dd 1+0 records in 1+0 records out 8192 bytes (8.2 kB) copied, 9.3e-05 seconds, 88.1 MB/s
注意bs指定為8k(資料塊大小),skip指它是指跳過檔案的前7個資料塊,從第8個資料塊開始,因為AU中的塊號也是從0開始(要匯出的塊號)。
檢視資料塊內容:
[grid@jyrac1 ~]$ od -c block135.dd 0000000 006 242 \0 \0 207 \0 300 002 020 W 314 \0 \0 \0 001 006 0000020 305 276 \0 \0 001 \0 020 \0 351 _ 001 \0 016 W 314 \0 0000040 \0 \0 350 037 002 037 2 \0 200 \0 300 002 005 \0 \r \0 .... 0017760 001 200 001 , 001 002 002 301 002 002 J Y 001 006 020 W 0020000
在內容的最後可以看到插入的資料 -- JY.注意Oracle資料塊從下向上填充。
檢視3號磁碟/dev/raw/raw14的39號AU,結果是一樣的
[grid@jyrac1 ~]$ dd if=/dev/raw/raw14 bs=1024k count=1 skip=39 of=AU39.dd 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.017309 seconds, 60.6 MB/s [grid@jyrac1 ~]$ dd if=AU39.dd bs=8k count=1 skip=7 of=block135_copy.dd 1+0 records in 1+0 records out 8192 bytes (8.2 kB) copied, 0.000207 seconds, 39.6 MB/s 0000000 006 242 \0 \0 207 \0 300 002 020 W 314 \0 \0 \0 001 006 0000020 305 276 \0 \0 001 \0 020 \0 351 _ 001 \0 016 W 314 \0 0000040 \0 \0 350 037 002 037 2 \0 200 \0 300 002 005 \0 \r \0 .... 0017760 001 200 001 , 001 002 002 301 002 002 J Y 001 006 020 W 0020000
小結:
要定位ASM中資料塊的位置,需要知道資料塊位於哪個資料檔案。然後透過X$KFFXP檢視檢視資料檔案的區分佈。還需要資料塊大小和ASM AU大小去定位資料塊位於哪個AU。 以上操作和ASM或者RDBMS的版本無關。(V$ASM_ATTRIBUTE檢視除外,因為在10g中沒有該檢視)在Normal和high冗餘模式下,將會有多副本資料。但是定位資料塊的方法是相同的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2132295/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從定位資料塊所在ASM磁碟到ASM strippingASM
- 檢視Oracle表中的指定記錄在資料檔案中的位置Oracle
- jquery 在指定位置彈出div框jQuery
- 在JS陣列指定位置插入元素JS陣列
- Android TextView 在指定位置自動省略字元AndroidTextView字元
- JavaScript 滾動條定位指定位置JavaScript
- 爬蟲之xpath精準定位--位置定位爬蟲
- 在指定位置插入一個新的li元素程式碼例項
- Oracle中定位資料表的最近DML時間Oracle
- 遷移已存在的資料庫到ASM中資料庫ASM
- 在ASM Diskgroup間移動資料檔案ASM
- XamarinSQLite教程在Xamarin.iOS專案中定位資料庫檔案SQLiteiOS資料庫
- jQuery元素在陣列中的索引位置jQuery陣列索引
- RecyclerView平滑到指定位置View
- 在win10系統中檢視電源管理設定位置的方法Win10
- JavaScript 元素在document文件中位置JavaScript
- 定位windows8收藏夾位置的技巧Windows
- 固定位置的Js懸浮視窗JS
- 如何定位導致Crash的程式碼位置
- 【32asm】04 - 重定位ASM
- 點選可以平滑定位到網頁指定位置網頁
- XamarinSQLite教程在Xamarin.Android專案中定位資料庫檔案SQLiteAndroid資料庫
- JavaScript獲取元素在陣列中的位置JavaScript陣列
- 根據IP定位地理位置
- 滾動到指定位置jsJS
- 修改集合列表指定位置元素
- 關於CSS中的定位使用子絕父相(子類絕對位置和父類相對位置)CSS
- 存貯在asm中的ocr/votedisk/asm磁碟組損害的恢復ASM
- Flex ASM自動重定位ASM例項測試FlexASM
- 在不同的資料庫中解析SQLServer資料資料庫SQLServer
- 外部資料在資料分析中的應用
- 在excel中快速定位到具體的行Excel
- ASM之建立ASM例項及ASM資料庫ASM資料庫
- 微信定位真的洩露了你的精確位置
- Storm大資料位置ORM大資料
- webpack配置檔案中屬性的位置和資料結構Web資料結構
- js如何獲取元素在頁面中的位置JS
- Elasticsearch在資料湖中的地位Elasticsearch