[zt]Logical standby同步故障的處理過程
故障描述:
早上到公司,應用人員說邏輯standby庫和生產庫資料不一致,簡訊報錯從昨天上午10點開始
分析過程:
1。先看兩邊的alert.log,生產庫一切正常,沒有發現通訊不暢以致不能歸檔到遠端歸檔路徑的問題
standby端的alert.log發現以下資訊:
LOGSTDBY event: ORA-16204: DDL successfully applied
LOGSTDBY stmt: -- Create sequence
create sequence seq_reject_user_list
minvalue 1
maxvalue 99999999999999999999999
start with 1
increment by 1
Tue Mar 29 10:56:07 2005
LOGSTDBY event: ORA-16204: DDL successfully applied
LOGSTDBY stmt: -- Modify the last number
alter sequence SEQ_REJECT_USER_LIST increment by 741 nocache
LOGSTDBY event: ORA-16204: DDL successfully applied
LOGSTDBY stmt: alter sequence SEQ_REJECT_USER_LIST increment by 1 nocache
LOGSTDBY event: ORA-16204: DDL successfully applied
LOGSTDBY stmt: alter sequence SEQ_REJECT_USER_LIST increment by 1 cache 20
Tue Mar 29 10:57:57 2005
LOGSTDBY event: ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
LOGSTDBY stmt: SMS_USER.REJECT_USER_LIST (Oper=INSERT)
Tue Mar 29 10:58:02 2005
LOGSTDBY event: ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
LOGSTDBY stmt: SMS_USER.REJECT_USER_LIST (Oper=INSERT)
LOGSTDBY event: ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
LOGSTDBY stmt: SMS_USER.REJECT_USER_LIST (Oper=INSERT)
...
...
...
LOGSTDBY event: ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
LOGSTDBY stmt: SMS_USER.REJECT_USER_LIST (Oper=INSERT)
Tue Mar 29 10:58:24 2005
Errors in file /u01/app/oracle/admin/sms/bdump/sms_p009_12133.trc:
ORA-07445: exception encountered: core dump [knasnfd()+126] [SIGSEGV] [Address not mapped to object] [0x0] [] []
經過詢問,應用人員說昨天確實對該表進行過操作,批次往表裡導資料,違反了唯一性約束條件。
2。然後檢視生產庫和邏輯standby端的sequence,發現沒有問題,說明所有的歸檔日誌都已經被邏輯standby端收到。
3。接著在生產端做了一個測試,建了一張表,插入了一行資料,進行一次日誌切換,到邏輯standby端檢視檢視,dba_logstdby_log,發現已經收到最新的歸檔日誌,但是並沒有找到我剛才新建的表。
4。初步確定日誌傳送和接收沒有問題,再進一步看看日誌apply的狀態,檢視檢視dba_logstdby_progress
SQL> alter session set nls_date_format='DD-MM-YY HH24:MI:SS';
Session altered.
SQL> select * from dba_logstdby_progress;
APPLIED_SCN APPLIED_TIME READ_SCN READ_TIME NEWEST_SCN NEWEST_TIME
----------- ----------------- ---------- ----------------- ---------- -----------------
3910598216 29-03-05 10:07:07 3910576561 29-03-05 07:54:19 3911585635 30-03-05 09:58:16
從結果我們可以看出,APPLIED_SCN和NEWEST_SCN不一致!!!,說明從昨天上午10:07:07開始,邏輯standby庫就停止了把日誌的轉化成SQL然後apply。
進一步確認,查詢檢視v$logstdby_status
SQL> select * from v$logstdby_stats;
no rows selected.
SQL apply操作已經意外停止
問題找到!!!!
查詢原因:
1。查了一下Oracle Data Guard Concepts and Administration中的page 412,What to Do IF SQL Apply Operation to a Logical Standby Database Stop,發現如果遇到了邏輯standby不支援的SQL語句和package,那麼SQL apply操作將會中止。
檢視檢視dba_logstdby_events的最後一條記錄(一般情況下,最後的一條記錄應該能反映出導致SQL apply停止的原因)
SQL> select * from dba_logstdby_events where rownum=1 order by event_time desc;
EVENT_TIME CURRENT_SCN COMMIT_SCN XIDUSN XIDSLT XIDSQN
----------------- ----------- ---------- ---------- ---------- ----------
EVENT STATUS_CODE
-------------------------------------------------------------------------------- -----------
STATUS
------------------------------------------------------------------------------------------------------------------------------------------------------
29-03-05 10:58:23 3910598215 3910598216 4 28 262321
SMS_USER.REJECT_USER_LIST (Oper=INSERT) 1
ORA-00001: unique constraint (SMS_USER.IDX_REJECT_USER) violated
和alert.log裡的錯誤吻合,OK,已經找到導致SQL apply操作停止的原因了
處理辦法:
1。重啟SQL apply程式:
SQL>alter database start logical standby apply;
2。檢視檢視v$logstdby,看各個程式的工作是否正常
3。又過了一會,執行語句
SQL>select * from dba_logstdby_events where rownum=1 order by event_time desc;
檢視apply的情況,發現過了好久SCN都沒有增加,難道程式又死掉了?
檢視os程式ora_lsp0_sms已經不在了,LSP程式又死掉,是不是由於日誌裡記錄了大量的上述錯誤操作資訊,當LSP執行錯誤操作到一定數目之後就掛掉?(原因還需要進一步弄清楚)
只好再次手動重啟LSP程式
SQL>alter database start logical standby apply;
OK,同步正常,查詢檢視dba_logstdby_progress,APPLIED_SCN和APPLIED_TIME逐漸增加
3個小時後,同步完畢!!
後記:
看了看Oracle Data Guard Concepts and Administration想查詢SQL apply失敗的原因,也沒有太詳細解釋,於是到metalink上搜了一把
看到logical standby由於遇到unique constraint的錯誤導致SQL apply中止,是Oracle 9204版本的一個BUG(bug# 3427176 ),我使用的是9205版本的,這個bug在9205版本中並沒有被修正,具體參照這個BULLETIN:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-610657/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle DG建立Logical Standby DatabaseOracleDatabase
- [20181113]Logical Standby建立2.txt
- 詳述一條SQL引發的高CPU故障處理過程SQL
- Oracle DG同步失敗故障處理(二)Oracle
- python中PCA的處理過程PythonPCA
- 4 Creating a Logical Standby Database 建立邏輯備庫Database
- 【故障處理】ORA-600:[13013],[5001]故障處理
- 線上MYSQL同步報錯故障處理方法總結MySql
- DOM在Ahooks中的處理過程Hook
- 微服務的故障處理微服務
- linux故障處理Linux
- 常見的wait等待事件及處理(zt)AI事件
- 故障分析 | Greenplum Segment 故障處理
- Flink流處理過程的部分原理分析
- 處理OGG-02198 Incompatible record (logical EOF) in trail fileAI
- 不停機處理oracle超過最大processes數故障Oracle
- 【原始碼】Redis命令處理過程原始碼Redis
- GPON網路故障如何處理?GPON網路故障處理流程
- GC析構物件和列表的處理過程GC物件
- 一次壞塊的處理過程(一)
- 一次壞塊的處理過程(二)
- 【Tomcat】Tomat 處理請求的過程(圖解)Tomcat圖解
- MySQL儲存過程的異常處理方法MySql儲存過程
- fastHttp服務端處理請求的過程ASTHTTP服務端
- Ceph pg unfound處理過程詳解
- 大資料的處理是怎樣的過程大資料
- MySQL show processlist故障處理MySql
- Oracle更新Opatch故障處理Oracle
- teams登入故障處理
- nacos2.3 密碼驗證的處理過程密碼
- Linux伺服器被入侵後的處理過程Linux伺服器
- npm install過程失敗的幾種處理方法NPM
- 記一次PMML檔案的處理過程
- nginx 處理客戶端請求的完整過程Nginx客戶端
- (四)SpringBoot啟動過程的分析-預處理ApplicationContextSpring BootAPPContext
- 大資料處理過程是怎樣大資料
- Linux 核心處理中斷全過程解析Linux
- 非同步的發展過程非同步
- hbase 故障的處理方案。 (轉載文章)