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 standby的ORA-01578 ORA-01110 ORA-26040 坑爹的NOLOGGINGOracle
- ORA-01578和ORA-26040--NOLOGGING操作引起的壞塊-錯誤解釋和解決方案
- Oracle資料庫由dataguard備庫引起的log file sync等待Oracle資料庫
- 【DATAGUARD】Oracle Dataguard nologging 塊修復Oracle
- Oracle資料庫冷備和恢復Oracle資料庫
- innodb 庫的備份注意點(由phpmyadmin引起的解決方案)PHP
- 挽救DG中主庫的nologging操作的塊
- Golang 中由零值和 gob 庫的特性引起的 BUGGolang
- Oracle ADG 備庫新增備庫Oracle
- ORA-01653錯誤是Oracle資料庫中常見的錯誤Oracle資料庫
- ORACLE DG從庫 Rman備份恢復Oracle
- 一次rman恢復引起的nologging問題模擬
- 在DG備庫備份資料庫並恢復到一個主機上,報錯RMAN-06820資料庫
- 如何掃描和修復 Linux 磁碟錯誤Linux
- Polardb資料庫掛庫後,如何恢復主備關係資料庫
- dedecms資料庫檔案出錯的修復方法資料庫
- 伺服器Oracle資料庫損壞修復伺服器Oracle資料庫
- 如何修復 HTTP 505 錯誤?HTTP
- 如何修復HTTP 301錯誤?HTTP
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- ORACLE登入出現“ORA-12560:TNS:協議介面卡錯誤”錯誤修復Oracle協議
- 記錄一個由於倉庫層錯誤導致軟刪除失效的問題
- PostgreSql資料庫的備份和恢復SQL資料庫
- win10系統lsp錯誤怎樣修復_win10修復lsp錯誤的步驟Win10
- Vue packages version conflicts 錯誤修復VuePackage
- 如何修復HTTP 302錯誤呢?HTTP
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 【資料庫資料恢復】oracle資料庫誤truncate table怎麼恢復資料?資料庫資料恢復Oracle
- 資料庫資料恢復—附加資料庫錯誤823的SQL Server資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- Jtti:如何修復Oracle資料庫執行過程的問題JttiOracle資料庫
- Interbase資料庫修復資料庫
- Firebird資料庫修復資料庫
- MySQL 5.7 主庫崩潰切備庫MySql
- 一個由於侵入框架引起的故障框架