2026年4月24日 星期五

移除 AFD 設定

AFD (ASM Filter Driver) 是 Oracle 12c 開始引入的新功能,不僅能保護 ASM Disk ,設定上也相對簡單方便,不過未來在 UEK8 (Oracle Linux 9、Kernel 6.12) 及所有 kernel > 5.15 的 Linux 作業系統上, AFD 已被列為不支援;此外,自 Oracle Database 26ai 起亦不再支援 AFD 。這意味著 AFD 將無法於未來環境中使用,若升級過程中未留意此變更,可能導致 AFD driver 無法正常啟動 :

CRS-2758: Resource 'ora.driver.afd' is in an unknown state.

CRS-2807: Resource 'ora.driver.afd' failed to start automatically.

在 RAC 環境中,若是 afd driver 無法啟動,那麼所有由 AFD Disk 組成的 Disk Group 便無法使用, GI 也會因為無法存取放在 Disk Group 裡面的 Voting 與 OCR 而無法啟動,因此當前建議先將 AFD 的設定移除, ASM Disk 回歸由 udev rule 進行設定。

必須所有的 Disk Group 都沒有使用 AFD Disk 的情況下才能夠移除 AFD 設定,若 Disk Group 只有一個 AFD Disk ,則必須新增 Disk 然後替換掉 AFD Disk :

add new disk 🡪 drop afd disk 🡪 unlabel afd disk 🡪 add unlabeled afd disk back

若 Disk Group 有兩顆以上的 AFD Disk ,在空間足夠的情況下可以逐個進行替換 :

drop afd disk 🡪 unlabel afd disk 🡪 add unlabeled afd disk back 🡪 drop afd disk 🡪 unlabel afd disk 🡪 add unlabeled afd disk back 🡪 …

如此循環直到替換掉所有 AFD Disk 。

舉例來說,目前的 DATA dg 只有一個 AFD Disk :


這時候就必須要新增一個 disk 來進行替換,首先編輯 /etc/udev/rules.d/99-oracle-asmdevices.rules :

KERNEL=="sd[b-c]", OWNER="oracle", GROUP="oinstall", MODE="0660"

reload udev rule 進行生效 :

# udevadm control --reload-rules && udevadm trigger

以上RAC 所有節點都要做。

Data dg 加入新的 disk :

SQL> alter diskgroup data add disk '/dev/sdc';

 等到 rebalance 結束後 drop AFD Disk :

SQL> alter diskgroup data drop disk data1;

進入 asmcmd 將 AFD Disk 進行 unlabel :

ASMCMD> afd_unlabel DATA1

將 unlabel 過後的 disk 重新加回 Data dg :

SQL> alter diskgroup data add disk '/dev/sdb';


最後確認已經沒有存在任何 AFD Disk 之後就可以移除 AFD 設定 :


移除 AFD 設定必須停下 RAC 所有節點的 crs ,不能 rolling 更改設定 :

所有節點都要操作 :

# cd /u01/app/oracle/19.21/grid/bin

# ./crsctl stop crs

# ./acfsload stop

# export ORACLE_BASE=/u01/app/oracle

# ./asmcmd afd_deconfigure

AFD-632: Existing AFD installation detected.

AFD-634: Removing previous AFD installation.

AFD-635: Previous AFD components successfully removed.

ASMCMD-9375: error occurred when executing

  /bin/rpm -q sles-release

package sles-release is not installed

Modifying resource dependencies - this may take some time.

# ./acfsload start

# ./crsctl start crs

結束後可以執行 afddriverstate 再次確認 AFD 是否有安裝 :

狀態為 false 表示已經移除 AFD 。



沒有留言:

張貼留言