目錄
- 通過(guò)LogMiner實(shí)現(xiàn)Oracle數(shù)據(jù)同步遷移
- 一、實(shí)現(xiàn)過(guò)程
- 1.創(chuàng)建目錄
- 2.配置LogMiner
- 3.開(kāi)啟日志追加模式
- 4.重啟數(shù)據(jù)庫(kù)
- 5.創(chuàng)建數(shù)據(jù)同步用戶
- 6.創(chuàng)建數(shù)據(jù)字典
- 7.加入需要分析的日志文件
- 8.查看正在使用的日志文件
- 9.使用Lominer分析日志
- 10.查看分析結(jié)果
- 11.常見(jiàn)問(wèn)題
通過(guò)LogMiner實(shí)現(xiàn)Oracle數(shù)據(jù)同步遷移
為了實(shí)現(xiàn)Oracle數(shù)據(jù)庫(kù)之間的數(shù)據(jù)同步,網(wǎng)上的資料比較少的時(shí)候。最好用的Oracle數(shù)據(jù)庫(kù)同步工具是:GoldenGate ,而GoldenGate是要收費(fèi)的。那么還有什么好的辦法來(lái)同步Oracle的數(shù)據(jù)嗎?沒(méi)錯(cuò),就是使用LogMiner來(lái)實(shí)現(xiàn)Oracle數(shù)據(jù)同步遷移。
一、實(shí)現(xiàn)過(guò)程
1.創(chuàng)建目錄
在服務(wù)器上創(chuàng)建/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR目錄來(lái)存儲(chǔ)數(shù)據(jù)庫(kù)的字典信息,如下所示。
mkdir -p /home/oracle/tools/oracle11g/oradata/orcl/LOGMNR
2.配置LogMiner
以oracle用戶身份登錄服務(wù)器,并以DBA身份登錄Oracle數(shù)據(jù)庫(kù),如下所示。
sqlplus /nolog
conn / as sysdba
接下來(lái),創(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"寫(xiě)入,而不是both。
3.開(kāi)啟日志追加模式
alter database add supplemental log data;
只有開(kāi)啟后才能看到DML操作記錄,否則只能看見(jiàn)DML
4.重啟數(shù)據(jù)庫(kù)
SHUTDOWN IMMEDIATE;
STARTUP;
5.創(chuàng)建數(shù)據(jù)同步用戶
創(chuàng)建數(shù)據(jù)同步用戶,如果已經(jīng)有可以跳過(guò),直接賦予權(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ù)字典的命令也可以通過(guò)Java代碼來(lái)實(shí)現(xiàn),如果使用Java代碼實(shí)現(xiàn)的話,首先可以通過(guò)JDBC連接到Oracle數(shù)據(jù)庫(kù),然后執(zhí)行如下命令。
BEGIN
dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oracle/tools/oracle11g/oradata/orcl/LOGMNR');
END;
7.加入需要分析的日志文件
此步驟可以在Oracle命令行執(zhí)行,也可以使用Java代碼實(shí)現(xiàn)。
使用SQL語(yǔ)句實(shí)現(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代碼分析時(shí),使用的SQL語(yǔ)句如下所示。
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代碼分析時(shí),使用的SQL語(yǔ)句如下所示。
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é)果僅在我們運(yùn)行過(guò)程'dbms_logmrn.start_logmnr'這個(gè)會(huì)話的生命期中存在,如果要查看新的日志,需要再重新加入分析日志文件、使用LogMiner分析。
11.常見(jiàn)問(wèn)題
(1)如果出現(xiàn)“必須聲明標(biāo)識(shí)符 ‘SYS.DBMS_LOGMNR'”異常,則需要在創(chuàng)建用戶后,為用戶賦予EXECUTE_CATALOG_ROLE權(quán)限,如下所示。
GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;
(2)當(dāng)在查詢vlogmnrlogs
時(shí)提示“表或視圖不存在”,是因?yàn)闆](méi)有查詢vlogmnr_logs的權(quán)限。此時(shí)在查詢語(yǔ)句中需要為seg_owner指定相應(yīng)的用戶,例如,我這里使用SYNC用戶通過(guò)LogMiner進(jìn)行分析,則需要將seg_owner指定為SYNC用戶,如下所示。
SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC';
以上就是通過(guò)LogMiner實(shí)現(xiàn)Oracle數(shù)據(jù)同步遷移的詳細(xì)內(nèi)容,更多關(guān)于LogMiner實(shí)現(xiàn)Oracle數(shù)據(jù)同步遷移的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
您可能感興趣的文章:- Oracle通過(guò)LogMiner實(shí)現(xiàn)數(shù)據(jù)同步遷移
- Oracle 日志挖掘(LogMiner)使用詳解
- Oracle LogMiner的使用實(shí)例代碼
- 理解和使用Oracle 8i分析工具LogMiner