入出力障害などで差分ログファイルが破壊された場合や、DBミラーリングシステム連携において複写元連携サーバが故障した場合は、レプリケーション業務は継続できなくなりますが、データベース運用は継続します。
このように差分ログの取得を開始した状態で、差分ログの収集スケジュールを処理できない状態になった場合、データベースの更新によりトランザクションログテーブルが膨張します。このままデータベースの運用を継続すると、データベースのテーブル空間を圧迫しデータベースの運用が継続できなくなる可能性があるため、レプリケーション環境の復旧が必要になります。
しかし、故障したハードウェアの交換まで時間がかかるなど早期の復旧が望めず、かつ複写元データベースの運用継続が優先される場合、差分ログの取得を停止することを検討してください。
通常差分ログの取得を停止させるためにはレプリケーションシステムを復旧させる必要がありますが、データベースの操作により差分ログの取得を停止してレプリケーションシステムを離脱させることも可能です。
緊急時に差分ログ取得を停止する手順
差分ログ取得をデータベースの操作で停止させる手順は以下のとおりです。psqlコマンドを使用して、レプリケーションオブジェクトスキーマを定義したデータベースに対して操作を行ってください。
DBミラーリングシステムに対して操作を行う場合は、プライマリサーバに対して操作を実施してください。スタンバイサーバに対してはデータベース多重化の機能により同期されるため操作は不要です。
レプリケーションの対象としていたテーブルに対する操作を行っているアプリケーションをすべて停止します。
抽出定義を実施したテーブルを特定します。
select schemaname,relname from pg_stat_all_tables where relid IN (select tgrelid from pg_trigger where tgname = 'linkexpress_replication_option_log_acquisition_trigger' );
抽出定義を実施したテーブルが存在する場合、以下のように表示されます。
schemaname | relname ------------+--------- scm | tbl (1 行)
2.で特定したテーブルに対し、差分ログ取得を行うトリガーを無効にします。ここでは、二つのトリガーを無効にする必要があります。
-- INSERT/UPDATE/DELETEに対する差分ログ取得を行うトリガーを無効化 ALTER TABLE scm.tbl DISABLE TRIGGER linkexpress_replication_option_log_acquisition_trigger; -- TRUNCATEに対する差分ログ取得を行うトリガーを無効化 ALTER TABLE scm.tbl DISABLE TRIGGER linkexpress_replication_option_truncate_trigger;
差分ログ取得を行うトリガーが無効になったことを確認します。
INSERT/UPDATE/DELETEに対する操作を行うトリガーの状態を確認します。
-- INSERT/UPDATE/DELETEに対する差分ログ取得を行うトリガーを確認 select schemaname,relname from pg_stat_all_tables where relid IN (select tgrelid from pg_trigger where tgname = 'linkexpress_replication_option_log_acquisition_trigger' AND tgenabled <> 'D');
差分ログ取得を行うトリガーが無効になっていれば、操作を行ったテーブルは表示されなくなります。
schemaname | relname ------------+--------- (0 行)
TRUNCATEに対する操作を行うトリガーを確認します。
-- TRUNCATEに対する差分ログ取得を行うトリガーを確認 select schemaname,relname from pg_stat_all_tables where relid IN (select tgrelid from pg_trigger where tgname = 'linkexpress_replication_option_truncate_trigger' AND tgenabled <> 'D');
TRUNCATEに対する差分ログ取得を行うトリガーが無効になっていれば、操作を行ったテーブルは、表示されなくなります。
schemaname | relname ------------+--------- (0 行)
抽出定義を実施したテーブルに対し、2から4の手順を繰り返します。
レプリケーションの対象としていたテーブルに対する操作を行っているアプリケーションを再開します。
なお、レプリケーションのコマンドを使用せずにデータベースに対する操作で差分ログの取得を停止した場合、lxrepprtの表示では、取得中の表示がされる場合があります。
緊急時の停止手順を実施した後、停止操作を行う前の状態にレプリケーションシステムを復旧できた場合のリカバリ手順
以下の操作を実施して、レプリケーション業務を再開してください。
すべての抽出定義に対して、lxrepdisコマンドを使用して差分ログの取得を終了します。データベースの操作により差分ログの取得を停止した場合でも必ず実施してください。
すべての抽出定義に対して、差分ログの追出しを行います。
すべての抽出定義に対して、差分ログの破棄を行います。
全複写業務または初期複写業務を実行後、レプリケーション業務を再開します。
緊急時の停止手順を実施した後、ログファイルの再作成が発生する場合のリカバリ手順
“1.2.5.1.1 トランザクションログテーブルの再作成”を参照してリカバリを実施してください。