STREAMS筆記(3) REDO清理 & 異常處理

westzq1984發表於2013-06-05
-----------------------------
歸檔和REDO清理
-----------------------------
1.超過CHECKPOINT_RETENTION_TIME保留條件,可以刪除的歸檔
DBA_REGISTERED_ARCHIVED_LOG.PURGEABLE='YES’
DBA_LOGMNR_PURGED_LOG

2.絕對不能刪除的redo log,apply啟動時需要
>= DBA_CAPTURE.REQUIRED_CHECKPOINT_SCN 的歸檔

****************
PS:10gR2後,需要用如下存過判斷
Minimum Archived Log Necessary to Restart 10g and 11g Streams Capture Process [ID 290143.1]

----- Begin ckpt_scn_query_10GR2_above.sql -----

prompt ++ Minimum Archive Log Necessary to Restart Capture ++
prompt Note: This query is valid for databases where the capture processes exist for the same source database.
prompt

set serveroutput on
DECLARE
hScn number := 0;
lScn number := 0;
sScn number;
ascn number;
alog varchar2(1000);
begin
select min(start_scn), min(applied_scn) into sScn, ascn
from dba_capture;


DBMS_OUTPUT.ENABLE(2000);

for cr in (select distinct(a.ckpt_scn)
from system.logmnr_restart_ckpt$ a
where a.ckpt_scn <= ascn and a.valid = 1
and exists (select * from system.logmnr_log$ l
where a.ckpt_scn between l.first_change# and l.next_change#)
order by a.ckpt_scn desc)
loop
if (hScn = 0) then
hScn := cr.ckpt_scn;
else
lScn := cr.ckpt_scn;
exit;
end if;
end loop;

if lScn = 0 then
lScn := sScn;
end if;

dbms_output.put_line('Capture will restart from SCN ' || lScn ||' in the following file:');
for cr in (select name, first_time
from DBA_REGISTERED_ARCHIVED_LOG
where lScn between first_scn and next_scn order by thread#)
loop

dbms_output.put_line(cr.name||' ('||cr.first_time||')');

end loop;
end;
/

----- End ckpt_scn_query_10GR2_above.sql -----
****************

3.CHECKPOINT_RETENTION_TIME
預設:60天
查詢:DBA_CAPTURE.CHECKPOINT_RETENTION_TIME
修改:DBMS_CAPTURE_ADM.ALTER_CAPTURE

4.local capture process
源必須開啟歸檔
使用RMAN的backup archivelog all delete input,可以支援upstream需要的日誌保留,只刪除可以刪除的歸檔

5.real-time downstream capture process
源和下流捕獲端必須開啟歸檔

6.archived-log downstream capture process
源必須開啟歸檔
下流捕獲,傳遞到挖掘端的主庫日誌,只有通過指令碼刪除

-----------------------------
異常處理
-----------------------------
預設遇到錯誤,立刻中斷;通過修改Apply程式的DISABLE_ON_ERROR引數,可以遇錯誤繼續執行
一些常見的資料一致性問題導致的Apply程式錯誤,可以修改:ALLOW_DUPLICATE_ROWS,COMPARE_KEY_ONLY
錯誤的ORA-程式碼,在dba_apply中查詢
錯誤事務的資訊,在dba_apply_errors中查詢,使用print_transaction / print_error_id / print_errors 顯示報錯資料
重啟apply程式後,會自動跳過發生錯誤的事務。
使用dbms_apply_adm.delete_error / delete_all_errors 刪除錯誤的事務
使用dbms_apply_adm.execute_error / execute_all_errors 重新執行報錯的事務
錯誤事務不影響CHECKPOINT的推進,也不允許日誌清理
錯誤事務儲存在STREAMS$_APPLY_SPILL_MSGS_PART中,如何清理還需要觀察觀察
如果Apply/Propagation程式異常沒有啟動,那麼Capture將WAITING FOR INACTIVE DEQUEUERS,停止入隊。那麼logmnr已將停止,檢查點推進已將停止

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-763046/,如需轉載,請註明出處,否則將追究法律責任。

相關文章