この記事では、Oracle に関する関連知識を提供します。主に、LogMiner を使用した Oracle データ同期の移行に関連する問題を紹介します。ここでは、Oracle データ同期を実現する方法について説明します。ヘルプ。
推奨チュートリアル: 「Oracle チュートリアル 」
最近、 Oracle データベース間のデータ同期を実現するために、インターネット上に存在する情報は実際には比較的少ないです。最適な Oracle データベース同期ツールは GoldenGate で、GoldenGate は有料です。 Oracle データを同期する良い方法はあるのでしょうか?そうです、LogMiner は Oracle データの同期移行を実現するために使用されます。
サーバー上に /home/oracle/tools/oracle11g/oradata/orcl/ を作成します。次に示すように、データベースの辞書情報を保存する LOGMNR ディレクトリ。
mkdir -p /home/oracle/tools/oracle11g/oradata/orcl/LOGMNR
次に示すように、サーバーに oracle ユーザーとしてログインし、Oracle データベースに DBA としてログインします。
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」で書き込まれます。両方ではありません。
alter database add supplemental log data;
これをオンにした後でのみ、DML 操作レコードを表示できます。それ以外の場合は、DML のみを表示できます。
SHUTDOWN IMMEDIATE; STARTUP;
データ同期ユーザーを作成します。すでに 1 つある場合は、それをスキップして直接アクセス許可を付与できます。
create user SYNC identified by SYNC; #如果存在用户,则不需要再次创建,直接授权即可GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;
データを同期するユーザーに切り替え、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;
この手順は、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;
SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
ステータス CURRENT のログ ファイルは現在使用中です
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;
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 を使用して分析する必要があります。
(1) 「識別子 'SYS.DBMS_LOGMNR' を宣言する必要があります」例外が発生した場合は、ユーザーに、以下に示すように EXECUTE_CATALOG_ROLE 権限を付与します。
GRANT CONNECT,RESOURCE,DBA,EXECUTE_CATALOG_ROLE TO SYNC;
(2) このとき、クエリ文の seg_owner に対応するユーザーを指定する必要があります。たとえば、SYNC ユーザーを使用して LogMiner で分析する場合、SYNC として seg_owner を指定する必要があります。以下に示すように、ユーザー。
SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE seg_name='EMP' AND seg_owner='SYNC';
推奨チュートリアル: 「Oracle ビデオ チュートリアル 」
以上がLogMiner を使用した Oracle データ同期移行の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。