公司要求使用LOGMNR去分析oracle的redo日志,來實作資料同步的功能。現在遇到以下問題,希望有大神助我。我是參考這個鏈接的 https://www.cnblogs.com/shishanyuan/p/3140440.html
為了測驗,我將三個redo日志(redo01.log,redo02.log,redo03.log)的大小都設定的很小,均為5M.
假設,我現在往庫中插入20w條資料。按照日志切換的概念,這20w的資料是可以保證這三個日志發生切換的,切換順序假如是從redo01.log切換到redo02.log日志,再從redo02.log切換到redo03.log日志時,下一次切換應該就是從redo03.log切換到redo01.log,這樣回圈切換的。
使用LOGMNR分析的陳述句如下:
a.首先添加三個日志檔案,待分析

b.更新資料字典(資料字典之前已創建完成)

c.執行分析(以SCN作為限制)

d.查詢分析結果(因為我是就SYNC這個用戶執行的插入20w條資料,所以我只查詢這個用戶的)

我又對分析結果進行了一次聚合

問題出現了,發現聚合后的結果沒有20w,只有13w多,也就是說丟失了近7w的資料?
猜想:應該是日志發生了回圈切換,從redo03.log切換到redo01.log的程序導致redo01.log的日志被覆寫了,所以,我分析的相當于是切換后,redo01.log被覆寫后的結果。

所以,我如果用上面的分析方式,是會存在資料被覆寫的問題的,那我應該如何知道日志何時切換,以及如果知道了日志切換的時間,如何根據SCN進行分析日志結果呢?
另,如果SCN不在日志范圍內,有時會拋出如下例外:
ORA-01291: 缺失日志檔案
ORA-06512: 在 "SYS.DBMS_LOGMNR", line 58
ORA-06512: 在 line 1
希望得到大神的幫助。
uj5u.com熱心網友回復:
要日志在你分析之前不被覆寫比較難,oracle本身就兩種情況下不會覆寫日志:1、redo保護的臟資料還未刷入資料檔案;2、開了歸檔模式后,某個online redo如果沒有被歸檔,也不能被覆寫。如果開了歸檔,分析歸檔的話就沒問題了。
同步資料還是用專業點的工具吧,比如ogg,或者在應用層面利用時間戳等方式來實作資料同步。
uj5u.com熱心網友回復:
v$log_history轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/19562.html
標籤:高級技術
下一篇:OGG配置問題,微信紅包答謝
