首頁  >  文章  >  資料庫  >  實例詳解透過LogMiner實現Oracle資料同步遷移

實例詳解透過LogMiner實現Oracle資料同步遷移

WBOY
WBOY轉載
2022-03-29 11:57:292044瀏覽

這篇文章為大家帶來了關於Oracle的相關知識,其中主要介紹了關於透過LogMiner實現Oracle資料同步遷移的相關問題,以下就來介紹一下怎麼實現oracle的資料同步,希望對大家有幫助。

實例詳解透過LogMiner實現Oracle資料同步遷移

推薦教學:《Oracle教學

寫在前面

##最近在研究如何實現Oracle資料庫之間的資料同步,網路上的資料確實比較少。最好用的Oracle資料庫同步工具是:

GoldenGate ,而GoldenGate是要收費的。那麼還有什麼好的辦法可以同步Oracle的資料嗎?沒錯,就是使用LogMiner來實現Oracle資料同步遷移。

實作過程

1.建立目錄

#在伺服器上建立/home/oracle/tools/oracle11g/oradata/orcl/ LOGMNR目錄來儲存資料庫的字典訊息,如下所示。

mkdir -p /home/oracle/tools/oracle11g/oradata/orcl/LOGMNR

2.設定LogMiner

以oracle使用者身分登入伺服器,並以DBA身分登入Oracle資料庫,如下所示。

sqlplus /nolog
conn  / as sysdba
接下來,建立字典資料夾配置,如下所示。

CREATE DIRECTORY utlfile AS '/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR';alter system set utl_file_dir='/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR' scope=spfile;

注意:由於utl_file_dir只存在於檔案當中,所以scope是以檔案方式"spfile"寫入,而不是both。

3.開啟日誌追加模式
alter database add supplemental log data;

只有開啟後才能看到DML操作記錄,否則只能看見DML

4.重啟資料庫
SHUTDOWN IMMEDIATE;  STARTUP;

5.建立資料同步用戶

建立資料同步用戶,如果已經有可以跳過,直接賦予權限。

create user SYNC identified by SYNC;  #如果存在用户,则不需要再次创建,直接授权即可GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;

6.建立資料字典

切換到要同步資料的用戶,以DBA身分登錄,建立資料字典文件,如下所示。

conn SYNC/SYNC@orcl as sysdba;  EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');
建立資料字典的命令也可以透過Java程式碼來實現,如果使用Java程式碼實現的話,首先可以透過JDBC連接到Oracle資料庫,然後執行以下命令。

BEGIN
dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');  END;

7.加入需要分析的日誌檔案

此步驟可以在Oracle命令列執行,也可以使用Java程式碼實作。

使用SQL語句實作如下所示。

EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO01.LOG',options=>dbms_logmnr.NEW);  EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO02.LOG',options=>dbms_logmnr.ADDFILE);  EXECUTE dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO03.LOG',options=>dbms_logmnr.ADDFILE);
使用Java程式碼分析時,所使用的SQL語句如下所示。

BEGIN  
dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO01.LOG',options=>dbms_logmnr.NEW);  dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO02.LOG',options=>dbms_logmnr.ADDFILE);  dbms_logmnr.add_logfile(logfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/REDO03.LOG',options=>dbms_logmnr.ADDFILE);  END;

8.查看正在使用的日誌檔案
SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;

status為CURRENT的為目前正在使用的日誌檔案

9.使用Lominer分析日誌
EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora');

使用Java程式碼分析時,使用的SQL語句如下所示。

BEGIN
dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR/dictionary.ora'); END;

10.查看分析結果
SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC';

注意:視圖v$logmnr_contents中的分析結果僅在我們運行過程'dbms_logmrn.start_logmnr'這個會話的生命期中存在,如果要查看新的日誌,需要再重新加入分析日誌檔案、使用LogMiner分析。

11.常見問題

(1)如果出現「必須宣告識別碼'SYS.DBMS_LOGMNR'」異常,則需要在建立使用者後,為使用者賦予EXECUTE_CATALOG_ROLE權限,如下所示。

GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;
(2)此時在查詢語句中需要為seg_owner指定對應的用戶,例如,我在這裡使用SYNC用戶透過LogMiner進行分析,則需要將seg_owner指定為SYNC用戶,如下所示。

SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC';
推薦教學:《

Oracle影片教學

以上是實例詳解透過LogMiner實現Oracle資料同步遷移的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除