プライマリテナントが利用不可能な場合、スタンバイテナントをプライマリテナントに切り替えてサービスを継続できます。
制限事項
フェイルオーバーを実行する際、スタンバイテナントのすべてのログストリームのレプリカがオンラインである必要があります。そうでない場合は、対応するレプリカが永続的にオフラインになるまで待機する必要があります。
スタンバイテナントまたはスタンバイテナントが属するクラスタの
sysテナントは、それぞれDBA_OB_LSビューまたはCDB_OB_LSビューを使用して、すべてのログストリームレプリカがオンラインかどうかを確認できます。ログストリームレプリカの詳細については、レプリカの紹介を参照してください。フェイルオーバーを実行する際、対応するプライマリテナントの状態はチェックされません。そのため、プライマリテナント障害によるディザスタリカバリニーズに加えて、特定の時点での独立したプライマリテナントのスナップショットを作成し、その後の業務検証に利用するニーズシナリオでもフェイルオーバー操作を使用できます。
サービス名で作成されたセッション内でフェイルオーバーコマンドを実行することは許可されていません。サービスに関する操作および説明については、サービスの作成を参照してください。
注意
フェイルオーバーを実行する際、フェイルオーバーコマンドを実行するテナントにサービス名が存在する場合、システムは自動的にそのテナントのサービス名を削除します。
背景
フェイルオーバー操作はログファイルのみを変更し、データファイルには変更を加えません。
OceanBaseデータベースでは各テナントに複数のログストリームが存在し、フェイルオーバー操作は実行完了後にデータの一貫性が保たれている状態である必要があるため、システムはすべてのログストリームの同期ポイントの中からSCNが最小値のものをフェイルオーバーの実行ポイントとして選択します。フェイルオーバー操作を実行すると、テナント内のすべてのログストリームがこのポイントまで統一的にロールバックされます。
操作手順
管理者ユーザーでスタンバイテナント、またはスタンバイテナントが属するクラスタの
sysテナントにログインします。ACTIVATE STANDBY VERIFYコマンドを実行し、ACTIVATE STANDBYコマンドが正常に実行されるかどうかを検証します。スタンバイが属するクラスタの
sysテナントでACTIVATE STANDBY VERIFYコマンドを実行しますALTER SYSTEM ACTIVATE STANDBY TENANT [=] tenant_name VERIFY;例:
ALTER SYSTEM ACTIVATE STANDBY TENANT = mysql VERIFY;スタンバイテナントで
ACTIVATE STANDBY VERIFYコマンドを実行しますALTER SYSTEM ACTIVATE STANDBY VERIFY;コマンド実行後、
OKが返された場合は検証に合格したことを意味し、次のステップに進むことができます。エラーが発生した場合は、表示されたメッセージに従ってドキュメントSwitchoverまたはFailover関連の問題を参照して処理を行い、その後このコマンドを再度実行してください。
検証に合格したら、
ACTIVATE STANDBYコマンドを実行して、スタンバイテナントをプライマリテナントに切り替えます。スタンバイテナントが属するクラスタの
sysテナントでスタンバイテナントをプライマリテナントに切り替えますALTER SYSTEM ACTIVATE STANDBY TENANT = tenant_name;スタンバイテナントで自身をプライマリテナントに切り替えます
ALTER SYSTEM ACTIVATE STANDBY;
DBA_OB_TENANTSビューを照会し、スタンバイテナントがプライマリテナントに切り替わったかどうかを確認します。スタンバイテナントが属するクラスタの
sysテナントでビューを照会しますobclient [oceanbase]> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS;スタンバイテナントでビューを照会します
MySQLモード:
obclient [oceanbase]> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS;Oracleモード:
obclient [SYS]> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM SYS.DBA_OB_TENANTS;
照会結果の例は以下のとおりです:
+-----------------+-------------+-------------+-------------------+ | TENANT_NAME | TENANT_TYPE | TENANT_ROLE | SWITCHOVER_STATUS | +-----------------+-------------+-------------+-------------------+ | standby_tenant | USER | PRIMARY | NORMAL | +-----------------+-------------+-------------+-------------------+ 1 row in set照会結果によると、スタンバイテナントの
TENANT_ROLEがPRIMARYに変更され、SWITCHOVER_STATUSがNORMALになっている場合、スタンバイテナントからのプライマリテナントへの切り替えに成功したことを意味します。
フェイルオーバー後の注意事項
テナントがフェイルオーバーコマンドを実行してプライマリテナントに切り替わる際、そのテナントにサービス名が設定されている場合、システムは自動的にそのサービス名を削除します。ただし、元のプライマリテナントのサービス名は削除されません。
例えば、サービス名「service1」の下にプライマリテナント「tenantA」とそれに対応するスタンバイテナント「tenantB」がある場合、テナント「tenantB」でフェイルオーバーコマンドを実行してプライマリテナントに切り替えると、元のプライマリ/スタンバイ関係から外れるため、テナント「tenantB」のサービス名「service1」はシステムによって削除されますが、テナント「tenantA」のサービス名「service1」は保持されます。
フェイルオーバー操作では、すべてのログストリームで同期されたデータが一貫性ポイントまで復元されるため、そのポイント以前のすべてのログストリームのデータが完全であることが保証されます。そのため、フェイルオーバー操作を実行した後は:
元のプライマリテナントがスタンバイに降格した後、新しいプライマリテナントとして接続することはサポートされません。
サードパーティ製のスタンバイテナントについては、同期されたログによって異なります。同期されたログが一貫性ポイントを超えている場合、新しいプライマリテナントとして接続することはサポートされません。管理上の観点から、サードパーティ製のスタンバイテナントを新しいプライマリテナントとして接続することは推奨されません。