首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle ASM 文件 AU 分佈定位與 kfed/dd 實戰提取 spfile、控制檔

     編輯:Oracle 資料庫相關知識

ASM (Automatic Storage Management) 將文件條帶化分散於磁碟組各磁碟的 Allocation Unit (AU)。本文實戰示範如何透過 V$ASM_ALIAS、X$KFFXP、X$KFDAT 定位文件 AU 分佈,再用 kfed 解析元數據、dd 提取 spfile 與控制檔至 OS 層面。

核心視圖與欄位

  • V$ASM_ALIAS:文件名 ↔ GROUP_NUMBER, FILE_NUMBER
  • X$KFFXP:Extent 映射 → DISK_KFFXP, AU_KFFXP, XNUM_KFFXP (Extent 編號)
  • X$KFDAT:文件直接 AU 映射 (僅 External Redundancy 適用)
  • V$ASM_DISK:DISK_NUMBER ↔ OS 路徑 (如 /dev/asm11g-f)

案例一:定位並提取 SPFILE

1. 找出 SPFILE 別名對應 FILE_NUMBER

SELECT NAME, GROUP_NUMBER, FILE_NUMBER
FROM V$ASM_ALIAS
WHERE LOWER(NAME) = 'spfilegt11g.ora';
-- 結果:GROUP=1, FILE_NUMBER=265

2. 查詢 Extent 分佈 (X$KFFXP)

SELECT GROUP_KFFXP, NUMBER_KFFXP, PXN_KFFXP, XNUM_KFFXP, DISK_KFFXP
FROM X$KFFXP
WHERE GROUP_KFFXP=1 AND NUMBER_KFFXP=265;
-- 顯示:Extent 0 在 Disk 0, AU 2

3. 確認磁碟 OS 路徑

SELECT GROUP_NUMBER, DISK_NUMBER, PATH
FROM V$ASM_DISK
WHERE GROUP_NUMBER=1 AND DISK_NUMBER=0;
-- /dev/asm11g-f

4. kfed 解析 AU 元數據 (從 AU 2, BLKN 1 開始)

kfed read /dev/asm11g-f aun=2 blkn=1 | more
-- 關鍵輸出:kfffde[0].xptr.au=2, disk=0 (主 extent)
--          kfffde[1].xptr.au=31, disk=1 (鏡像 extent,External redundancy 無此行)

5. 定位 FILE 265 實際資料 AU (BLKN = 265-255 = 10 → blkn=9)

kfed read /dev/asm11g-g aun=31 blkn=9
-- 找到 kfffde[0].xptr.au=936, disk=1

6. X$KFDAT 直接查詢驗證 (External Redundancy 適用)

SELECT GROUP_KFDAT, NUMBER_KFDAT, AUNUM_KFDAT
FROM X$KFDAT
WHERE FNUM_KFDAT=265;
-- 結果:GROUP=1, DISK=1, AU=936

7. dd 提取 SPFILE 至 OS

dd if=/dev/asm11g-g skip=936 of=/tmp/dbspfile bs=1024k count=1
cat /tmp/dbspfile
-- 可見完整 SPFILE 參數內容

案例二:控制檔多 AU 分佈提取

1. 確認控制檔 FILE_NUMBER

SHOW PARAMETER CONTROL_FILES;
-- +DATA01/gt11g/controlfile/current.256.810471879

2. 查詢 16 個 Extent 分佈

SELECT XNUM_KFFXP, PXN_KFFXP, DISK_KFFXP, AU_KFFXP
FROM X$KFFXP
WHERE GROUP_KFFXP=1 AND NUMBER_KFFXP=256
ORDER BY XNUM_KFFXP;
-- 交錯分佈於 Disk 0/1,AU 29-36,每 Extent 1 AU (16MB 總計)

3. kfed 驗證首 AU (AU 31, Disk 1, BLKN 0)

kfed read /dev/asm11g-g aun=31 blkn=0
-- kfffdb.xtntcnt=16, blkSize=16384, 確認 16 Extents

關鍵工具指令速查

工具用途關鍵參數
kfed read解析 ASM 磁碟元數據aun=AU號, blkn=Block號
dd原始磁碟資料提取if=裝置, skip=AU號, bs=1024k, count=AU數
X$KFFXPExtent 級映射 (所有冗余類型)GROUP_KFFXP, NUMBER_KFFXP, XNUM_KFFXP
X$KFDAT文件級 AU 直接映射 (External Only)FNUM_KFDAT, AUNUM_KFDAT

適用場景與風險提醒

  • ASM 元數據損壞、需 OS 層面備份關鍵文件
  • 跨平台遷移、無法正常 Mount ASM 時緊急提取
  • 風險:直接操作裝置檔案極高風險,僅限專家級 DBA 在備份無效時嘗試,操作前必須對目標磁碟做完整 dd 鏡像備份
核心邏輯:別名 → FILE_NUMBER → Extent 映射 (X$KFFXP) → 磁碟/ AU → kfed 驗證 → dd 提取。External Redundancy 可用 X$KFDAT 直達。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved