使用oracle的logminer同步資料

zhuchenshu發表於2018-12-09

之前用github寫部落格但發現很受環境的約束,每次系統出問題都要重新搭一遍環境,現在轉向這種線上的部落格,感覺部落格就是一個記錄工具而已,還是找個方便的來吧。
至於為什麼使用logminer原因是,內外網之間存在隔離,為此採用這種方式。

使用的前提,開啟oracle的歸檔模式。這不是本文重點因此自行百度一下吧。

個人理解logminer就是一個oracle的日誌分析工具,通過這個工具你可以吧資料庫的所有的修改操作取出,做進一步的如資料回滾,資料同步等處理。

  • 第一步:為了分析日誌第一步要做的是,建立資料字典,為的是把日誌中的欄位翻譯成我們可讀的欄位。
execute dbms_logmnr_d.build(dictionary_filename=>`log.ora`,dictionary_location=>`/u01/dblog`,options=>dbms_logmnr_d.store_in_flat_file);
  • 第二步: 將要分析的日誌資料夾入到logminer中

1.取出分析日誌目錄
這裡我們根據scn來取日誌

select name from v$archived_log where NEXT_CHANGE# > 1739657397 and NEXT_CHANGE# <= 1740101347

2.將日誌加入到我們的logminer

加入的第一個使用new ,第二個使用addfile

exec dbms_logmnr.add_logfile(`/u01/bk/1_1086_958894249.dbf`,dbms_logmnr.new);
exec dbms_logmnr.add_logfile(`/u01/bk/1_1048_958894249.dbf`,dbms_logmnr.ADDFILE);
  • 第三步:開始分析

committed_data_only 只顯示已提交的
no_sql_delimiter 去除最後的分號
no_rowid_in_stmt 去除rowid

exec dbms_logmnr.start_logmnr(dictfilename=>`/u01/dblog/log.ora`, Options => dbms_logmnr.committed_data_only + dbms_logmnr.no_sql_delimiter + dbms_logmnr.no_rowid_in_stmt);
  • 第四步:查詢分析結果

分析結果都存在v$logmnr_contents表中,根據自己的實際需求查出所要的結果。

注意logminer日誌分析和v$logmnr_contents的結果查詢要在一次資料庫連線中,因為v$logmnr_contents中的資料之存在當前會話。

  • 第五步:關閉分析
exec dbms_logmnr.end_logmnr();

相關文章