LogMinerによるOracle Databaseの同期マイグレーション
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データ同期移行の詳細であり、スクリプトハウスの他の関連記事に注意してください。
関連
-
Oracle Dbeaver ストアドプロシージャの構文説明
-
オラクル、新プロジェクトの実践のためのテーブルを作成
-
plsqlを使用してリモートOracleデータベースに接続する複数の方法
-
Oracleトレースファイルの詳細な使用方法
-
[解決済み】ORA-00932: 整合性のないデータ型: 予想される - CLOB を取得しました。
-
[解決済み] ORA-01109: データベースが開きません」エラーを解決するにはどうすればよいですか?
-
[解決済み] ORA-00917: カンマ欠落エラー [終了しました]。
-
[解決済み] ORA-30036: アンドゥ テーブルスペース 'UNDOTBS' でセグメントを 8 つ拡張できません。
-
[解決済み] オラクル ユーザーデータでConnect By Loop
-
[解決済み] 外部キーの追加エラー。ORA-02298: 検証できません - 親キーが見つかりませんでした
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
オラクルにおけるNEXTVALの事例を解説
-
sqlplusコマンドによるOracleデータベースへのさまざまなログイン方法
-
Oracle ADGプロセスを構築するDBCAコマンドライン
-
Oracleで読み取り専用アカウントを作成する詳細手順
-
[解決済み】ORA-30926:ソーステーブルの安定した行のセットを取得できません。
-
[解決済み] エラー発生 - ORA-01858: 数値が期待される場所に非数値の文字が見つかりました。
-
[解決済み] エラー ORA-01804 のテキストを取得しようとしているときにエラーが発生しました。
-
[解決済み] ORA-01461: LONG 値は、LONG 列への挿入にのみバインドできます-クエリー時に発生します。
-
[解決済み] エラー: ORA-01704: 文字列リテラルが長すぎる
-
[解決済み] BATCHEDのインデックスによるテーブルアクセスとROWIDのインデックスによるテーブルアクセスの違い