2025年1月23日 星期四

sqlplus / as sysdba 連線緩慢之案例

Oracle 版本: 19.21 

OS 版本: AIX 7.2


問題描述:

使用 sqlplus / as sysdba 連線時,等很久才連線進去 :


問題分析:

使用 truss 指令對 sqlplus 進行 trace :

[oracle@db19c ~]$ truss -aefdo /tmp/truss.trc sqlplus / as sysdba


從 truss.trc 發現連線過程中,讀取 message file 花了很久的時間 :


這個現象有可能為 Bug 32550751 - MGA Related Operations on AIX Might Cause Performance Issues ,不過此 Bug 在 19.12 之後就已經修復,目前 DB 版本為 19.21 ,應該是不符合 Bug 定義。


另一種可能為 netsvc.conf 的 hosts 設定有誤,檢查 netsvc.conf 檔案權限以及 hosts 內容 :


發現 hosts 的設定為 local, bind , 在 AIX 平台上 bind 的設定會依據下列順序來解析 :

1. 於 /etc/hosts 尋找 IPv6 位址

2. 於 DNS 尋找 IPv6 位址

3. 於 /etc/hosts 尋找 IPv4 位址

4. 於 DNS 尋找 IPv4 位址


在沒有設定 IPv6 的情況下,到了第三順位才會解析到 IPv4 ,也因此造成了 sqlplus / as sysdba 連線緩慢的情況,如果將 bind 修改為 bind4 ,那麼它就只會尋找 IPv4 位址。


解決方法:

將 netsvc.conf 裡面 hosts 中的 bind 改為 bind4 :

hosts = local, bind4


改完後重新測試 sqlplus / as sysdba ,連線速度恢復正常。



2024年12月6日 星期五

srvctl start database 產生 ORA-01078 錯誤案例

Oracle 版本: 19.19 , RAC

OS 版本: Linux 7.7


問題描述:

使用 srvctl 開啟資料庫時產生 ORA-01078 錯誤 :


看起來是因為沒有參數檔造成啟動失敗,但是檢查設定的確參數檔是存在且設定沒有錯 :


設定 initorcl19c1.ora 內容為 spfile= +DATA/ORCL/PARAMETERFILE/spfile.276.1162830161 ,嘗試使用 sqlplus 啟動資料庫,出現無法存取 spfile 的錯誤 :


問題分析:

存取 ASM 產生 TNS 錯誤有可能與 oracle 執行檔的權限錯誤有關,檢查 $ORACLE_HOME/bin 與 $GI_HOME/bin 底下 oracle 執行檔的權限,發現 $GI_HOME/bin/oracle 的權限錯誤 :


oracle 執行檔的權限必須為 6751 , $ORACLE_HOME/bin/oracle 的權限是對的,不過 $GI_HOME/bin/oracle 的權限是錯的。


解決方法:

更正 $GI_HOME/bin/oracle 的權限為 6751 之後即可正常啟動資料庫 :


最後補充一下,如果使用不同使用者以及多個 group 安裝 GI 與 DB ,必須注意 $ORACLE_HOME/bin/oracle 與 asm disk 的 group 必須為 GI 設定的 Oracle ASM Administrator (OSASM) group ,這個設定在安裝後於 $GI_HOME/rdbms/lib/config.c (Linux 系統) 可以查詢的到 :


這三個 Group 必須相同 :


照標準安裝的話, OSASM 一般設定為 asmadmin ,不論是否使用 asmadmin,我們在安裝 GI 、 DB 的時候都必須要注意這個設定。



2024年11月24日 星期日

AFD 造成 CPU 升高之案例

Oracle 版本: 19.23.0.0 (RAC)

OS 版本: Linux 8.6


問題描述:

在 GI / DB 更新 Patch 至 19.23 版本之後,產生 CPU 使用率升高的現象,使用 top 指令觀察發現為 systemd-udevd 這個 process 造成的 :


問題分析:

這個現象只有在使用 ASM Filter Driver (AFD) 的時候會發生,在 GI 19.11 的版本開始, AFD 使用了一個新的 Disk 保護機制稱作 Soft-Fliting ,它將 Disk 權限設置為 read-only 來避免非 oracle 的 process 來更改 ASM Disk ,當受信任的 oracle process 要來寫入時才允許 Disk 具有 Write 權限,這個行為在 Linux Kernel Red Hat (8.4) 、 SuSE (SLES15/sp3) 以及 5.15/UEK 之下認為是不適當的,在這些 Kernel 版本下會尋求另外的作法,因此導致 udev rule 不斷的 reload ,所以在 top 上會看到許多 systemd-udevd process 造成 CPU 使用率升高。


解決方法:

停用 AFD Soft-Fliting 功能,重啟 GI (Reload AFD Driver) 後生效。

# export ORACLE_BASE=/u01/app/grid

# /u01/app/19.23.0/grid/bin/asmcmd afd_filter -d

# /u01/app/19.23.0/grid/bin/crsctl stop crs

# /u01/app/19.23.0/grid/bin/crsctl start crs