2024年9月30日 星期一

ssh 造成 ORA-27515 錯誤案例

Oracle 版本: 12.2.0.1

OS 版本: Linux 7.6


問題描述:

執行程式報錯,於資料庫的 alert log 顯示 ORA-27515 錯誤 :

ORA-00603: ORACLE server session terminated by fatal error

ORA-27515: inadequate memlock limit or driver settings

opiodr aborting process unknown ospid (125480) as a result of ORA-603


由錯誤訊息顯示 memlock 的設定不足,檢查 ulimit -a 的 max locked memory 只有 64 :


但是 /etc/security/limits.conf 的設定是對的 :


limits.conf 的設定並沒有生效。


但是使用 root 登入後再 su - oracle , limits.conf 的設定是有生效的 :


問題分析:

這個現象只有在使用 oracle 直接登入時才會發生 limits.conf 沒有生效,需要調整 ssh 設定。


解決方法:

於 /etc/pam.d/sshd 新增 pam_limits.so 設定如下 :

session required pam_limits.so


並確認 /etc/ssh/sshd_config 裡面的UsePrivilegeSeparation 設定為 NO

UsePrivilegeSeparation no


重啟 ssh 之後,重新使用 oracle 登入即可 。

[root@db19c ~]# systemctl restart sshd




2024年9月16日 星期一

Nologging 造成 corruption 案例

Oracle 版本: 12.2.0.1

OS 版本: Linux 6.7


問題描述:

Standby DB 出現 file corruption 錯誤:

ORA-01578: ORACLE data block corrupted (file # 5, block # 135)

ORA-01110: data file 5: '/opt/app/oradata/ORA12st/users021.dbf'

ORA-26040: Data block was loaded using the NOLOGGING option


問題分析:

由錯誤訊息顯示, data file 5 因為來源端的 nologging 操作造成 corruption ,使得這個檔案無法進行同步。這個問題常常是因為 Primary DB 沒有設定 force logging 並且有 nologging 的操作所導致:


解決方法:

在 Oracle 12.2 的版本之前要解決這個錯誤只能重新 restore datafile ,從 12.2 的版本開始可以直接 recover nonlogged block ,於 standby 查詢 nonlogged block :

SQL> select file#,block#,blocks,object#,reason from v$nonlogged_block;


停止 MRP 後使用 RMAN 來 recover nonlogged block :

SQL> alter database recover managed standby database cancel;

SQL> exit;

[oracle@db12c rman]$ rman target /

RMAN> recover database nonlogged block;



recover 成功後查詢 v$nonlogged_block 已無資料 :


重新啟動 MRP 恢復同步即可 :