このセクションでは、典型的なユースケースを通じて、スタンバイデータベースの遅延機能が日常業務でどのように活用されるかを紹介します。
シナリオ
ある企業は、ネットワークを介した物理スタンバイデータベース(1プライマリ・マルチスタンバイ構成)を導入しており、そのうちの1つのスタンバイデータベースに遅延時間(1時間、すなわち3600秒)を設定しています。データベースの日常的な運用保守中に、DBAがプライマリデータベースで誤って DELETE FROM important_table ステートメントを実行し、重要なテーブルのデータを削除してしまいました。現在、遅延しているスタンバイデータベースからデータを復元する必要があります。
手順
注意
以下の操作を実行する際は、まずスタンバイデータベースの同期終点を設定し(手順2)、その後でスタンバイデータベースの遅延を解除する(手順3)必要があります。そうでない場合、遅延を解除した後のスタンバイデータベースは全速力で追従し始め、誤操作のポイントを追い越してしまう可能性があります。また、設定を元に戻す際も、まずスタンバイデータベースの遅延設定を復元し(手順6)、その後で復元終点を解除する(手順7)必要があります。これにより、ログが瞬時に追い越すのを防ぎます。
誤操作の時点を特定します。
例えば、本記事では誤操作の時点を
2026-06-01 10:01:00とします。遅延しているスタンバイデータベースの同期終点を誤操作前の時点に設定します。これにより、遅延を解除した後、スタンバイデータベースが追従するログが誤操作のポイントを超えるのを防ぎます。
誤操作の時点
2026-06-01 10:01:00に基づき、遅延しているスタンバイデータベースの同期終点は2026-06-01 10:00:00に設定できます。スタンバイテナント(スタンバイデータベース)が存在するクラスタの
sysテナントが、当該スタンバイテナントに同期終点を設定します。obclient(root@sys)[(none)]> ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant UNTIL TIME = '2026-06-01 10:00:00';スタンバイテナント(スタンバイデータベース)が自身のテナントに同期終点を設定します。
obclient> ALTER SYSTEM RECOVER STANDBY UNTIL TIME = '2026-06-01 10:00:00';
スタンバイデータベースの遅延設定を解除し、指定された同期終点までのログ追従を即座に開始させます。
本記事では、現在のネットワークスタンバイデータベースのログ復元ソース情報を
SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=******とします。ログ復元ソース情報は、ビューCDB_OB_LOG_RESTORE_SOURCE(システムテナント)/DBA_OB_LOG_RESTORE_SOURCE(ユーザーテナント)をクエリすることで取得できます。スタンバイテナント(スタンバイデータベース)が存在するクラスタの
sysテナントが、当該スタンバイテナントの遅延時間を0秒に設定します。obclient(root@sys)[(none)]> ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=****** DELAY=0' TENANT = standby_tenant;スタンバイテナント(スタンバイデータベース)が自身のテナントの遅延時間を0秒に設定します。
obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=****** DELAY=0';
スタンバイデータベースの同期が完了し、ターゲット時刻に戻るのを待ちます。
待機中は、以下のステートメントで同期状態を確認できます。
SCN_TO_TIMESTAMP(readable_scn)の値が指定した同期終点2026-06-01 10:00:00と表示されるまで待機します。スタンバイテナント(スタンバイデータベース)が存在するクラスタの
sysテナントで、そのスタンバイテナントの同期状態を確認します。obclient(root@sys)[(none)]> SELECT tenant_name, readable_scn, SCN_TO_TIMESTAMP(readable_scn) FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'standby_tenant';スタンバイテナント(スタンバイデータベース)で、自身のテナントの同期状態を確認します。
obclient> SELECT tenant_name, readable_scn, SCN_TO_TIMESTAMP(readable_scn) FROM oceanbase.DBA_OB_TENANTS;obclient> SELECT tenant_name, readable_scn, SCN_TO_TIMESTAMP(readable_scn) FROM SYS.DBA_OB_TENANTS;
スタンバイデータベースからデータをエクスポートし、メインデータベースにインポートして復元します。
スタンバイデータベースの遅延設定を復元します。
スタンバイデータベースの遅延時間を1時間、つまり3600秒に再設定します。
スタンバイテナント(スタンバイデータベース)が存在するクラスタの
sysテナントで、そのスタンバイテナントの遅延時間を3600秒に設定します。obclient(root@sys)[(none)]> ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=****** DELAY=3600' TENANT = standby_tenant;スタンバイテナント(スタンバイデータベース)で、自身のテナントの遅延時間を3600秒に設定します。
obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE = 'SERVICE=11.xx.xx.22:17855;11.xx.xx.23:17857;11.xx.xx.24:17859 USER=rep_user@mysql PASSWORD=****** DELAY=3600';
スタンバイデータベースの継続的な同期を復元します。
スタンバイデータベースの復元終点を継続的な同期に再設定します。
スタンバイテナント(スタンバイデータベース)が存在するクラスタの
sysテナントで、そのスタンバイテナントの復元終点を継続的な同期に設定します。obclient(root@sys)[(none)]> ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant UNTIL UNLIMITED;スタンバイテナント(スタンバイデータベース)で、自身のテナントの復元終点を継続的な同期に設定します。
obclient> ALTER SYSTEM RECOVER STANDBY UNTIL UNLIMITED;