Oracle ADG TroubleShooting – FAL 配置
現有ADG環境架構
主庫: 一套雙節點RAC:
?節點一:REAL_IP:10.3.xx.1
?節點二:REAL_IP: 10.3.xx.2
備庫: 單節點主機:10.0.xx.11
背景:
近期釘釘時常報警(報警代碼詳見<<Oracle ADG(二) Python 監控源碼>>),ADG 傳輸和應用歸檔日志均發生較大延遲,造成生產數據和備庫數據不同步,影響ADG備庫上的實時性業務較高的業務穩定運行。

問題排查:
報警內容分析:
? 通過報警內容可知,主要的報警原因為: MRP0 進程狀態異常(WAIT_FOR_GAP), 傳輸日志有延遲,應用日志有延遲。 通過WAIT_FOR_GAP 的狀態可知部分歸檔日志在傳輸的過程中失敗了。 進一步排查備庫Trace 日志,確定丟失的日志屬于主庫的那個節點,進一步分析。
備庫Trace日志排查:
?
? 發現是thread 2 sequence 558445 - 558445 這個日志傳輸失敗了,同時備庫日志顯示FAL[client] 進程通過ADG定義的FAL servers 參數重新去主庫拉去歸檔,但仍未拉取到thread 2 sequence 558445 - 558445 日志片段。 若配置正確將不會有FAL[client]: ALL defined FAL Servers have been attempted 的報錯,遂此處考慮備庫配置是否不完整。
? 通過以上判斷,進一步去查看備庫FAL Server 的配置,發現fal_server 處只配置了一個TNSNAME 為ORCLADG的配置,具體配置如下:

cat $ORACLE_HOME/network/admin/tnsnames.ora ORCLADG = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.3.xx.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) )
? 發現此處FAL_SERVER只配置了節點一的的REAL_IP,遂出現節點二日志傳輸失敗后FAL 進程無法重新拉取的報錯, 遂更改ORCLADG TNSNAME 的配置,增加節點二的REAL_IP:
ORCLADG = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.3.xx.1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.3.xx.2)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) ) ) $tnsping orcladg Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.3.xx.1)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.3.xx.2)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl))) OK (0 msec)
? 到此備庫配置的問題修改完畢, 配置正確的時候,日志傳輸失敗后FAL重新拉去的日志如下:
Thu Sep 22 22:19:19 2022 Media Recovery Waiting for thread 2 sequence 558445 Fetching gap sequence in thread 2, gap sequence 558445 - 558445
TIPS:
? 通過查閱資料,類似的主庫是RAC節點,一般在備庫的TNSNAME 里面配置的IP都是RAC集群的scan_ip, 而不是RAC節點的真實IP。
傳輸日志失敗的節點問題排查:
? 備庫的FAL_SERVER配置問題解決后只是保證了日志傳輸失敗的時候備庫能正確的去重新拉去主庫的日志,仍需排查為什么主庫的歸檔日志為什么沒有正確的傳輸到備庫上。
? 檢查日志傳輸節點失敗的TRACE日志,如下:
ARC0: Archive log rejected (thread 2 sequence 558852) at host 'orclold'
FAL[server, ARC0]: FAL archive failed, see trace file.
ARCH: FAL archive failed. Archiver continuing
ORACLE Instance hostname - Archival Error. Archiver continuing.
? 通過TRACE 文件日志可知是 ARC0 進程在傳輸日志時失敗,然后去trace 目錄下查看ARC0 進程的trace 文件,最后發現的報錯是:
# 查看trace 文件的命令:
ls -lt *arc0*.trc
# 具體的報錯
kcrrwkx: unknown error:16401
Error 16401 creating standby archive log file at host 'orclold'
? 本次案例是在傳輸日志的時候被備庫給拒絕了。當時備庫的壓力較大。
最后總結:
? ORALCE ADG 在日志傳輸失敗后會通過FAL 進程重新去拉取主庫的日志,只要FAL進程的配置正確且數據不延遲,此報錯可以忽略。




