1. ホーム
  2. データベース
  3. 神託

LogMinerによるOracle Databaseの同期マイグレーション

2022-01-08 08:40:50

LogMinerによるOracleデータ移行の同期化

Oracleデータベース間のデータ同期を実現するために、オンラインで得られる情報は少なくなっています。Oracleデータベース同期化ツールで一番おすすめなのが GoldenGate 、そしてGoldenGateは有料である。では、Oracleのデータを同期させる良い方法はないのだろうか。はい、それはLogMinerを使用してOracleデータの同期移行を行うことです。

I. 導入プロセス

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はファイル内にしか存在しないので、スコープはファイル"spfile"と書き、両方は書かないようにします。

3. ログアペンドモードをオンにする

alter database add supplemental log data;  



DML操作ログはオンにした場合のみ見ることができ、そうでない場合はDML

4. データベースを再起動する

SHUTDOWN IMMEDIATE;  
STARTUP; 



5. データシンクユーザーを作成する

データシンクユーザーを作成し、すでに持っている場合はスキップして、直接権限を与えます。

create user SYNC identified by SYNC; #If the user exists, you don't need to create it again, just grant permission.
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#;



ステータスが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)クエリ中の場合 vlogmnrlogs Table or view does not exist"と表示された場合、vlogmnr_logsに問い合わせる権限がないためです。例えば、SYNCユーザーを使ってLogMinerで分析する場合、以下のようにseg_ownerをSYNCユーザーに指定する必要があります。

SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC'; 



上記はLogMinerによるOracleデータ同期移行の詳細であり、LogMiner Oracleデータ同期移行についての詳細は、スクリプトハウスの他の関連記事に注意してください!また、LogMinerのOracleデータ同期移行は、LogMinerのOracleデータ同期移行の詳細であり、スクリプトハウスの他の関連記事に注意してください。