您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么用Oracle修復(fù)ORA-01578和ORA-26040錯誤”,在日常操作中,相信很多人在怎么用Oracle修復(fù)ORA-01578和ORA-26040錯誤問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Oracle修復(fù)ORA-01578和ORA-26040錯誤”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
DG數(shù)據(jù)同步是基于日志流的,這也是為什么在配置DG階段需要將主庫設(shè)置為FORCE LOGGING的原因。
但是,這也會帶來很多問題,例如,會導(dǎo)致DML類型的SQL執(zhí)行效率變慢,尤其在大批量數(shù)據(jù)更新或?qū)氲臅r候顯得尤為明顯。
DBA在使用數(shù)據(jù)泵進行遷移時希望在最少停機時間內(nèi)完成,這時候就可能會考慮到以最小日志導(dǎo)入的方式以加快導(dǎo)入速度,
然后重新同步備庫。在這些場景中,DBA可能會使用NOLOGGING操作去節(jié)省大量數(shù)據(jù)插入的時間,
而這種操作所帶來的問題就是,如果該庫在有備庫的情況下,因為主庫的NOLOGGING插入操作不會生成Redo,
所以不會在備庫上傳輸和應(yīng)用,這會導(dǎo)致備庫的數(shù)據(jù)出現(xiàn)問題,報ORA-01578和ORA-26040的錯誤。
模擬測試恢復(fù):
prod為primary database
stddb為standby database
在一個具有主備關(guān)系的主庫上將FORCE_LOGGING設(shè)置為NOLOGGING模式:
SYS@prod>alter database no force logging;
HR@prod>create table test as select * from employees;
進行自插入構(gòu)造數(shù)據(jù)
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;
在備庫執(zhí)行查詢操作:
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
解決辦法:
將包含缺少數(shù)據(jù)的數(shù)據(jù)文件從主庫復(fù)制到物理備庫再重命名數(shù)據(jù)文件來解決問題。
主庫查詢:
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
比較主數(shù)據(jù)庫和備用數(shù)據(jù)庫的查詢結(jié)果:
在以上兩個查詢結(jié)果中,比較UNRECOVERABLE_CHANGE#列的值。
如果主庫中UNRECOVERABLE_CHANGE#列的值大于備庫中的同一列,那么需要將這些數(shù)據(jù)文件在備庫恢復(fù)。
將主庫對應(yīng)的數(shù)據(jù)文件拷貝至備庫:
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;
在備庫上,將舊的數(shù)據(jù)文件RENAME至新的數(shù)據(jù)文件:
由于主備數(shù)據(jù)文件名字相同,將從主庫傳輸過來的數(shù)據(jù)文件改個名
[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;
#在備庫執(zhí)行RENAME操作時,需要此參數(shù)為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
到此,關(guān)于“怎么用Oracle修復(fù)ORA-01578和ORA-26040錯誤”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。