Oracle通過LogMiner實現(xiàn)數(shù)據(jù)同步遷移
寫在前面
最近在研究如何實現(xiàn)Oracle數(shù)據(jù)庫之間的數(shù)據(jù)同步,網(wǎng)上的資料確實比較少。最好用的Oracle數(shù)據(jù)庫同步工具是:GoldenGate ,而GoldenGate是要收費的。那么還有什么好的辦法來同步Oracle的數(shù)據(jù)嗎?沒錯,就是使用LogMiner來實現(xiàn)Oracle數(shù)據(jù)同步遷移。
實現(xiàn)過程
1.創(chuàng)建目錄
在服務(wù)器上創(chuàng)建/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR目錄來存儲數(shù)據(jù)庫的字典信息,如下所示。
mkdir -p /home/oracle/tools/oracle11g/oradata/orcl/LOGMNR
2.配置LogMiner
以oracle用戶身份登錄服務(wù)器,并以DBA身份登錄Oracle數(shù)據(jù)庫,如下所示。
sqlplus /nolog conn / as sysdba
接下來,創(chuàng)建字典文件夾配置,如下所示。
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只存在于文件當(dāng)中,所以scope是以文件方式"spfile"寫入,而不是both。
3.開啟日志追加模式
alter database add supplemental log data;
4.重啟數(shù)據(jù)庫
SHUTDOWN IMMEDIATE; STARTUP;
5.創(chuàng)建數(shù)據(jù)同步用戶
創(chuàng)建數(shù)據(jù)同步用戶,如果已經(jīng)有可以跳過,直接賦予權(quán)限。
create user SYNC identified by SYNC; #如果存在用戶,則不需要再次創(chuàng)建,直接授權(quán)即可 GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;
6.創(chuàng)建數(shù)據(jù)字典
切換到要同步數(shù)據(jù)的用戶,以DBA身份登錄,創(chuàng)建數(shù)據(jù)字典文件,如下所示。
conn SYNC/SYNC@orcl as sysdba; EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');
創(chuàng)建數(shù)據(jù)字典的命令也可以通過Java代碼來實現(xiàn),如果使用Java代碼實現(xiàn)的話,首先可以通過JDBC連接到Oracle數(shù)據(jù)庫,然后執(zhí)行如下命令。
BEGIN dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR'); END;
7.加入需要分析的日志文件
此步驟可以在Oracle命令行執(zhí)行,也可以使用Java代碼實現(xiàn)。
使用SQL語句實現(xiàn)如下所示。
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的為當(dāng)前正在使用的日志文件
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.查看分析結(jié)果
SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC';
注意:視圖v$logmnr_contents中的分析結(jié)果僅在我們運行過程'dbms_logmrn.start_logmnr'這個會話的生命期中存在,如果要查看新的日志,需要再重新加入分析日志文件、使用LogMiner分析。
11.常見問題
(1)如果出現(xiàn)“必須聲明標(biāo)識符 'SYS.DBMS_LOGMNR'”異常,則需要在創(chuàng)建用戶后,為用戶賦予EXECUTE_CATALOG_ROLE權(quán)限,如下所示。
GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;
(2)當(dāng)在查詢v$logmnr_logs時提示“表或視圖不存在”,是因為沒有查詢v$logmnr_logs的權(quán)限。此時在查詢語句中需要為seg_owner指定相應(yīng)的用戶,例如,我這里使用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實現(xiàn)數(shù)據(jù)同步遷移的詳細內(nèi)容,更多關(guān)于Oracle數(shù)據(jù)同步遷移的資料請關(guān)注腳本之家其它相關(guān)文章!
- oracle與gbase8s遷移數(shù)據(jù)類型對照以及舉例說明
- Oracle數(shù)據(jù)遷移MySQL的三種簡單方法
- 如何把Oracle?數(shù)據(jù)庫從?RAC?集群遷移到單機環(huán)境
- Oracle 10g DG 數(shù)據(jù)文件遷移的實現(xiàn)
- 如何將Oracle的一個大數(shù)據(jù)表快速遷移到 Sqlserver2008數(shù)據(jù)庫(圖文教程)
- oracle數(shù)據(jù)遷移到db2數(shù)據(jù)庫的實現(xiàn)方法(分享)
- oracle數(shù)據(jù)庫遷移到MySQL的方法總結(jié)
- 直接拷貝數(shù)據(jù)文件實現(xiàn)Oracle數(shù)據(jù)遷移
- Oracle數(shù)據(jù)庫遷移方案
- Oracle數(shù)據(jù)庫遷移所有文件到新掛載磁盤路徑
相關(guān)文章
Oracle跨庫訪問DBLINK使用以及實際應(yīng)用
這篇文章主要給大家介紹了關(guān)于Oracle跨庫訪問DBLINK使用以及實際應(yīng)用的相關(guān)資料,DBLink的作用是在局域網(wǎng)內(nèi),通過一臺服務(wù)器上面的數(shù)據(jù)庫訪問另外一臺服務(wù)器上面數(shù)據(jù)庫的功能,需要的朋友可以參考下2024-01-01
oracle wm_concat 列轉(zhuǎn)行 逗號分隔
oracle wm_concat函數(shù),用于列轉(zhuǎn)行,逗號分隔本文將詳細介紹此功能的應(yīng)用2012-11-11
Oracle SQL語句實現(xiàn)數(shù)字四舍五入取整
本文介紹Oracle中一些對數(shù)字的常用操作,包括向上向下去整、四舍五入、保留N位小數(shù)等操作,希望對大家有所幫助。2016-05-05
Oracle?ORA-00904:標(biāo)識符無效解決方法(太坑了!!)
最近執(zhí)行sql時oracle報錯ORA-00904:標(biāo)識符無效,所以這篇文章主要給大家介紹了關(guān)于Oracle?ORA-00904:標(biāo)識符無效解決方法的相關(guān)資料,需要的朋友可以參考下2022-10-10
oracle數(shù)據(jù)匹配merge into的實例詳解
這篇文章主要介紹了oracle數(shù)據(jù)匹配merge into的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10
Oracle數(shù)據(jù)庫時間格式轉(zhuǎn)換的常見示例
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫時間格式轉(zhuǎn)換的常見示例,在實際的工作中會經(jīng)常會用到to_char()、to_date()函數(shù)來對時間、日期進行處理,文中給出了詳細的代碼示例,需要的朋友可以參考下2024-02-02
Linux中Oracle啟動偵聽報錯TNS:permission denied的解決方法
這篇文章主要介紹了Linux中Oracle啟動偵聽時報錯TNS:permission denied的解決方法,文中給出了詳細的解決方法,相信對大家具有一定的參考價值,需要的朋友們下面來一起看看吧。2017-02-02

