Oracle 修復由於主庫NOLOGGING引起的備庫ORA-01578和ORA-26040錯誤
DG資料同步是基於日誌流的,這也是為什麼在配置DG階段需要將主庫設定為FORCE LOGGING的原因。
但是,這也會帶來很多問題,例如,會導致DML型別的SQL執行效率變慢,尤其在大批量資料更新或匯入的時候顯得尤為明顯。
DBA在使用資料泵進行遷移時希望在最少停機時間內完成,這時候就可能會考慮到以最小日誌匯入的方式以加快匯入速度,
然後重新同步備庫。在這些場景中,DBA可能會使用NOLOGGING操作去節省大量資料插入的時間,
而這種操作所帶來的問題就是,如果該庫在有備庫的情況下,因為主庫的NOLOGGING插入操作不會生成Redo,
所以不會在備庫上傳輸和應用,這會導致備庫的資料出現問題,報ORA-01578和ORA-26040的錯誤。
模擬測試恢復:
prod為primary database
stddb為standby database
在一個具有主備關係的主庫上 將FORCE_LOGGING設定為NOLOGGING模式:
SYS@prod>alter database no force logging;
HR@prod>create table test as select * from employees;
進行自插入構造資料
HR@prod>insert /+APPEND/ into test select * from test;
HR@prod>commit;
HR@prod>insert /+APPEND/ into test select * from test;
HR@prod>commit;
HR@prod>insert /+APPEND/ into test select * from test;
HR@prod>commit;
HR@prod>insert /+APPEND/ into test select * from test;
HR@prod>commit;
在備庫執行查詢操作:
SYS@stddb>select count() from hr.test;
select count() from hr.test
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 4, block # 669)
ORA-01110: data file 4: ‘/u01/app/oracle/oradata/stddb/users01.dbf’
ORA-26040: Data block was loaded using the NOLOGGING option
解決辦法:
將包含缺少資料的資料檔案從主庫複製到物理備庫再重新命名資料檔案來解決問題。
主庫查詢:
SYS@prod>select name,unrecoverable_change# from v$datafile;
/u01/app/oracle/oradata/prod/users01.dbf 1151089
SYS@stddb>select name,unrecoverable_change# from v$datafile;
/u01/app/oracle/oradata/stddb/users01.dbf 0
比較主資料庫和備用資料庫的查詢結果:
在以上兩個查詢結果中,比較UNRECOVERABLE_CHANGE#列的值。
如果主庫中UNRECOVERABLE_CHANGE#列的值大於備庫中的同一列,那麼需要將這些資料檔案在備庫恢復。
將主庫對應的資料檔案拷貝至備庫:
SYS@prod>ALTER TABLESPACE USERS BEGIN BACKUP;
[oracle@service1 prod]$ cp users01.dbf /tmp/
SYS@prod> ALTER TABLESPACE USERS END BACKUP;
[oracle@service1 tmp]$ scp users01.dbf 192.168.1.104:/home/oracle/
SYS@prod>ALTER TABLESPACE USERS END BACKUP;
在備庫上,將舊的資料檔案RENAME至新的資料檔案:
由於主備資料檔名字相同,將從主庫傳輸過來的資料檔案改個名
[oracle@service2 ~]$ mv users01.dbf users02.dbf
[oracle@service2 ~]$ cp users02.dbf /u01/app/oracle/oradata/stddb/
SYS@stddb>alter database recover managed standby database cancel;
SYS@stddb>startup force mount;
SYS@stddb>alter system set standby_file_management=manual;
#在備庫執行RENAME操作時,需要此引數為MANUAL
SYS@stddb>alter database rename file ‘/u01/app/oracle/oradata/stddb/users01.dbf’ to ‘/u01/app/oracle/oradata/stddb/users02.dbf’;
SYS@stddb>alter system set standby_file_management=auto;
SYS@stddb>alter database open;
SYS@stddb>alter databsae recover managed standby database using current logfile disconnect from session;
SYS@stddb>select count(*) from hr.test;
COUNT(*)
1712
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69975956/viewspace-2695166/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 修復由於主庫NOLOGGING操作引起的備庫ORA-01578和ORA-26040錯誤
- Oracle資料庫由dataguard備庫引起的log file sync等待Oracle資料庫
- 備庫中ORA-00600錯誤的簡單修復
- ORA-1578 / ORA-26040 - NOLOGGING 操作引起的壞塊 - 錯誤解釋和解決方案
- 物理DG的FAL_CLIENT設定錯誤引起的主庫報錯client
- ORA-01578和ORA-26040--NOLOGGING操作引起的壞塊-錯誤解釋和解決方案
- 由JS註釋引起的JS錯誤JS
- dataguard主庫壞塊的修復
- 備庫查詢導致的ORA-01110錯誤及修復
- Oracle10G Dataguard 多個備庫 - 主庫和物理備庫的切換Oracle
- Oracle standby的ORA-01578 ORA-01110 ORA-26040 坑爹的NOLOGGINGOracle
- 檔名與庫名相似引起的錯誤——randomrandom
- Oracle主庫歸檔丟失,備庫日誌有gap,在不重建備庫的情況下,恢復備庫Oracle
- innodb 庫的備份注意點(由phpmyadmin引起的解決方案)PHP
- Golang 中由零值和 gob 庫的特性引起的 BUGGolang
- dataguard備庫出現GAP修復
- 用物理備庫的檔案來恢復主庫
- Oracle資料庫冷備和恢復Oracle資料庫
- 資料庫啟動時遇到ORA-01578錯誤資料庫
- 關於Oracle8i回退段引起的錯誤Oracle
- 【DATAGUARD】Oracle Dataguard nologging 塊修復Oracle
- oracle資料庫歸檔日誌空間滿引起的錯誤處理Oracle資料庫
- nologging對備庫的影響
- oracle資料庫備份和恢復的內容Oracle資料庫
- 基於tsm的oracle資料庫備份及恢復Oracle資料庫
- Oracle資料庫壞塊修復Oracle資料庫
- DG主庫發生表誤刪除後利用備庫進行恢復的方法實踐
- 【DATAGUARD】 基於同一個主機建立物理備庫和邏輯備庫(二)
- 【DATAGUARD】 基於同一個主機建立物理備庫和邏輯備庫(一)
- 【DATAGUARD】 基於同一個主機建立物理備庫和邏輯備庫 (三)
- oracle 之dataguard主庫系統崩潰之物理備庫切主庫Oracle
- mysql memory引擎引起的主從 1032 錯誤MySql
- Oracle Data Guard主庫備庫角色切換(Switchovers)Oracle
- Oracle備庫無法連線主庫的問題分析Oracle
- ORA-27069和OSD-4026錯誤引起資料庫CRASH資料庫
- Ubuntu 更新錯誤修復大全Ubuntu
- 如何修復 HTTP 505 錯誤?HTTP
- 如何掃描和修復 Linux 磁碟錯誤Linux