プライマリテナントが利用可能な場合、プライマリテナントとスタンバイテナントのいずれか1つとロールを交換することを許可し、データの損失を防ぎます。
以下では、物理スタンバイデータベースの2種類のデプロイメント方式に基づき、それぞれスイッチオーバーの操作手順を説明します。
使用上の制限
システムテナント(
sys)のテナントロールは切り替えられません。システムテナントのロールは常にPRIMARYです。スタンバイテナントをプライマリテナントに切り替える前に、スタンバイテナントのすべてのログストリームのレプリカがオンラインである必要があります。そうでない場合は、対応するレプリカが永続的にオフラインになるのを待つ必要があります。スタンバイテナントまたはそのクラスタの
sysテナントは、DBA_OB_LSビューまたはCDB_OB_LSビューを使用して、すべてのログストリームレプリカがオンラインかどうかを確認できます。ログストリームレプリカの詳細については、レプリカの紹介を参照してください。サービス名で作成されたセッション内では、Switchoverコマンドを実行することは許可されていません。サービスに関する操作および説明については、サービスの作成を参照してください。
ネットワークベースの物理スタンバイデータベース
ネットワークベースの物理スタンバイデータベースシナリオでは、スイッチオーバーは主に以下の3つの段階で構成されます:プライマリテナントをスタンバイテナントに切り替える --> スタンバイテナントをプライマリテナントに切り替える --> 元のプライマリテナントにログ復元ソースを設定します。
注意
スイッチオーバー操作を実行する際は、必ずプライマリテナントをスタンバイテナントに切り替えた後、スタンバイテナントをプライマリテナントに切り替える必要があります。スタンバイテナントを先にプライマリテナントに切り替えると、デュアルプライマリテナントの問題が発生し、ALTER SYSTEM SWITCHOVER TO PRIMARY コマンドの実行が失敗する可能性があります。
プライマリテナントをスタンバイテナントに切り替えます。
管理者ユーザーでプライマリテナント、またはそのクラスタの
sysテナントにログインします。SWITCHOVER TO STANDBY VERIFYコマンドを実行し、SWITCHOVERコマンドが正常に実行できるか検証します。プライマリテナントが存在するクラスタの
sysテナントでSWITCHOVER TO STANDBY VERIFYコマンドを実行ALTER SYSTEM SWITCHOVER TO STANDBY TENANT [=] tenant_name VERIFY;例:
obclient> ALTER SYSTEM SWITCHOVER TO STANDBY TENANT = mysql VERIFY;プライマリテナントで
SWITCHOVER TO STANDBY VERIFYコマンドを実行obclient> ALTER SYSTEM SWITCHOVER TO STANDBY VERIFY;コマンド実行後、
OKが返されれば検証に合格し、次の手順を実行できます。エラーが発生した場合は、表示されたメッセージに従い、ドキュメントSwitchoverまたはFailover関連の問題を参照して対処した後、このコマンドを再度実行してください。
検証に合格したら、プライマリテナントをスタンバイテナントに切り替えるコマンドを実行します。
プライマリテナントが存在するクラスタの
sysテナントでプライマリテナントをスタンバイテナントに切り替えALTER SYSTEM SWITCHOVER TO STANDBY TENANT = tenant_name;例:
obclient> ALTER SYSTEM SWITCHOVER TO STANDBY TENANT = mysql;プライマリテナントが自身をスタンバイテナントに切り替え
obclient> ALTER SYSTEM SWITCHOVER TO STANDBY;
DBA_OB_TENANTSビューをクエリし、プライマリテナントがスタンバイテナントに切り替わったか確認します。プライマリテナントが存在するクラスタの
sysテナントでビューをクエリobclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS;プライマリテナントでビューをクエリ
MySQLモード:
obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS;Oracleモード:
obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM SYS.DBA_OB_TENANTS;
クエリ結果の例:
+-------------+-------------+-------------+-------------------+ | TENANT_NAME | TENANT_TYPE | TENANT_ROLE | SWITCHOVER_STATUS | +-------------+-------------+-------------+-------------------+ | mysql | USER | STANDBY | NORMAL | +-------------+-------------+-------------+-------------------+ 1 row in setクエリ結果によると、
TENANT_ROLEがSTANDBY、SWITCHOVER_STATUSがNORMALであれば、プライマリテナントからスタンバイテナントへの切り替えは成功です。
スタンバイテナントをプライマリテナントに切り替えます。
管理者ユーザーでスタンバイテナント、またはそのクラスタの
sysテナントにログインします。スタンバイテナントをプライマリテナントに切り替えるコマンドを実行します。
スタンバイテナントが存在するクラスタの
sysテナントでスタンバイテナントをプライマリテナントに切り替えALTER SYSTEM SWITCHOVER TO PRIMARY TENANT = tenant_name;例:
obclient> ALTER SYSTEM SWITCHOVER TO PRIMARY TENANT = standby1;スタンバイテナントが自身をプライマリテナントに切り替え
obclient> ALTER SYSTEM SWITCHOVER TO PRIMARY;
DBA_OB_TENANTSビューをクエリし、スタンバイテナントがプライマリテナントに切り替わったか確認します。スタンバイテナントが存在するクラスタの
sysテナントでビューをクエリobclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS;スタンバイテナントでビューをクエリ
MySQLモード:
obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS;Oracleモード:
obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS FROM SYS.DBA_OB_TENANTS;
クエリ結果の例:
+-----------------+-------------+-------------+-------------------+ | TENANT_NAME | TENANT_TYPE | TENANT_ROLE | SWITCHOVER_STATUS | +-----------------+-------------+-------------+-------------------+ | standby1 | USER | PRIMARY | NORMAL | +-----------------+-------------+-------------+-------------------+ 1 row in setクエリ結果によると、元のスタンバイテナントの
TENANT_ROLEがPRIMARYに変わり、SWITCHOVER_STATUSがNORMALに変わっていれば、スタンバイテナントからプライマリテナントへの切り替えは成功です。
元のプライマリテナントにログ復元ソースを設定します。
ログ復元ソースの設定操作は、プライマリ/スタンバイ切り替え操作の前後どちらでも実行できます。
管理者ユーザーで元のプライマリテナント、またはそのクラスタの
sysテナントにログインします。以下のコマンドを実行して、ログ復元ソースを設定します。
元のプライマリテナントが存在するクラスタの
sysテナントで元のプライマリテナントのログ復元ソースを設定ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password' TENANT = tenant_name;元のプライマリテナントで自身のログ復元ソースを設定
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='SERVICE=$ip_list USER=$user_name@$tenant_name PASSWORD=$password';
主なパラメータの説明は以下の通りです:
$ip_list:新しいプライマリテナントが存在するレプリカのOBServerノードのIPアドレスとSQLポート番号。複数のOBServerノード情報がある場合は、すべてのOBServerノードの情報を入力する必要はありません。$user_name:新しいプライマリテナント上に作成され、システムビューにアクセスするために使用される専用ユーザー。$tenant_name:接続する新しいプライマリテナントのテナント名。$password:システムビューにアクセスするための専用ユーザーに対応するパスワード。
例:
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_user2@standby_tenant PASSWORD=******' TENANT = mysql;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_user2@standby_tenant PASSWORD=******';ログ復元ソースの設定の詳細な操作と説明については、ログ復元ソースの設定を参照してください。
設定が成功した後、
DBA_OB_TENANTSビューをクエリし、元のプライマリテナントがログの継続的な同期状態にあるか確認します。ログ復元ソースを設定すると、プライマリテナントがスタンバイテナントに切り替わった後、ログの継続的な同期が自動的に開始されるため、特別な処理は不要です。
DBA_OB_TENANTSビューをクエリすることで確認できます。元のプライマリテナントが存在するクラスタの
sysテナントでビューをクエリ# ユーザーテナントIDをクエリします。IDが偶数の場合はユーザーテナントです。 obclient> SELECT TENANT_ID, SYNC_SCN FROM oceanbase.DBA_OB_TENANTS; # ユーザーテナントIDを指定して情報をクエリします。 obclient> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS, SCN_TO_TIMESTAMP(SYNC_SCN), RECOVERY_UNTIL_SCN FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_ID = $user_tenant_id;元のプライマリテナントでビューをクエリ
MySQLモード:
obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS, SCN_TO_TIMESTAMP(SYNC_SCN), RECOVERY_UNTIL_SCN FROM oceanbase.DBA_OB_TENANTS;Oracleモード:
obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS, SCN_TO_TIMESTAMP(SYNC_SCN), RECOVERY_UNTIL_SCN FROM SYS.DBA_OB_TENANTS;
MySQLモードでのクエリ結果は以下の通りです:
+-------------+-------------+-------------+-------------------+----------------------------+---------------------+ | TENANT_NAME | TENANT_TYPE | TENANT_ROLE | SWITCHOVER_STATUS | SCN_TO_TIMESTAMP(SYNC_SCN) | RECOVERY_UNTIL_SCN | +-------------+-------------+-------------+-------------------+----------------------------+---------------------+ | mysql | USER | STANDBY | NORMAL | 2023-04-18 13:46:20.887793 | 4611686018427387903 | +-------------+-------------+-------------+-------------------+----------------------------+---------------------+ 1 row in setクエリ結果によると、
RECOVERY_UNTIL_SCN列の値がMAX SCN(4611686018427387903)の値と等しい場合、元のプライマリテナントはログの継続的な同期状態にあります。そうでない場合、元のプライマリテナントはログの継続的な同期状態にありません。
ログアーカイブを利用した物理スタンバイデータベース
ログアーカイブを利用した物理スタンバイデータベースのシナリオでは、スイッチオーバーは主に以下の3つの段階で構成されます:スタンバイテナントでログアーカイブモードを有効にする --> プライマリテナントをスタンバイテナントに切り替える --> スタンバイテナントをプライマリテナントに切り替える。
注意
スイッチオーバーを実行する際は、必ずプライマリテナントをスタンバイテナントに切り替えてから行う必要があります。そうでない場合、デュアルプライマリテナント状態が発生したり、スタンバイテナントがログ同期を完了できなかったりする可能性があります。また、ログアーカイブを利用した物理スタンバイデータベースのシナリオでは、スタンバイテナントは元のプライマリテナントの状態を認識できないため、先にスタンバイテナントをプライマリテナントに切り替えてしまうと、ALTER SYSTEM SWITCHOVER TO PRIMARY コマンドを実行してもシステムはエラーを返しません。
ログアーカイブを利用した物理スタンバイデータベースのシナリオにおける、スイッチオーバーの実行フローは以下の図のとおりです。

スタンバイテナントでログアーカイブモードを有効にします。
ログアーカイブを利用した物理スタンバイデータベースのシナリオでは、Switchover操作が成功した後、元のプライマリテナントは新しいプライマリテナント(元のスタンバイテナント)のアーカイブ済みログを継続的に読み取り、新しいプライマリテナント(元のスタンバイテナント)上のすべての変更操作を同期する必要があるため、新しいプライマリテナント(元のスタンバイテナント)でログアーカイブモードを有効にする必要があります。同時に、スイッチオーバー実行後のログの連続性を保証するため、新しいプライマリテナント(元のスタンバイテナント)はスイッチオーバー操作を実行する前にログアーカイブを有効にする必要があります。
管理ユーザーとして、スタンバイテナント、またはそのスタンバイテナントが属するクラスタの
sysテナントにログインします。スタンバイテナントのアーカイブ宛先を設定します。
注意
アーカイブ宛先を設定する際、異なるテナントでは異なるアーカイブパスを使用する必要があります。
アーカイブ宛先の設定では、主に
LOCATION、PIECE_SWITCH_INTERVAL、BINDING属性を設定します。スタンバイテナントが属するクラスタの
sysテナントがスタンバイテナントのアーカイブ宛先を設定する場合ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=archive_path [PIECE_SWITCH_INTERVAL=piece_switch_interval] [BINDING=archive_mode]' TENANT = tenant_name;スタンバイテナントが自身のテナントのアーカイブ宛先を設定する場合
ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=archive_path [PIECE_SWITCH_INTERVAL=piece_switch_interval] [BINDING=archive_mode]';
関連パラメータの説明は以下のとおりです:
LOCATION:アーカイブ宛先を指定するために使用されます。現在、OceanBaseデータベースでサポートされているアーカイブ宛先メディアはNFSとAlibaba Cloud OSSです。BINDING:アーカイブと業務の優先モードを設定するために使用されます。現在、OptionalモードとMandatoryモードをサポートしています。設定しない場合、デフォルトはOptionalモードです。Optionalモードは、ユーザー業務を優先することを意味します。このモードでは、アーカイブ(ログアーカイブ)の速度がログ生成の速度に追いつかない場合、ログがアーカイブされる前に回収され、ストリームが途絶える可能性があります。Mandatoryモードは、アーカイブを優先することを意味します。このモードでは、アーカイブがユーザーデータの書き込みに追いつかない場合、ユーザーが書き込みできなくなる可能性があります。
PIECE_SWITCH_INTERVAL属性は、Pieceの切り替え間隔を設定するために使用され、値の範囲は[1d, 7d]です。設定しない場合、デフォルトは1dです。
アーカイブメディアがNFSの場合、スタンバイテナントのアーカイブパスを
file:///data/1/standby2_archive2/に設定し、アーカイブモードをOptionalに設定した例を以下に示します:obclient> ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=file:///data/1/standby2_archive2/ BINDING=optional' TENANT = standby2;obclient> ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOCATION=file:///data/1/standby2_archive2/ BINDING=optional';スタンバイテナントでアーカイブモードを有効にします。
スタンバイテナントが属するクラスタの
sysテナントがスタンバイテナントでアーカイブモードを有効にする場合例:
obclient> ALTER SYSTEM ARCHIVELOG TENANT = standby2;ここで、
standby2はスタンバイテナント名を表します。操作時は実際の環境に準じてください。スタンバイテナントが自身のテナントでアーカイブモードを有効にする場合
obclient> ALTER SYSTEM ARCHIVELOG;
スタンバイテナントのアーカイブ状態が
DOINGであることを確認します。スタンバイテナントが属するクラスタの
sysテナントがビューをクエリします。obclient> SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM oceanbase.CDB_OB_ARCHIVELOG;スタンバイテナントがビューをクエリします。
MySQLモード:
obclient> SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM oceanbase.DBA_OB_ARCHIVELOG;Oracleモード:
obclient> SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM SYS.DBA_OB_ARCHIVELOG;MySQLモードのクエリ結果の例を以下に示します:
+---------+----------+---------+--------+---------------------+----------------------------+---------------------------------------+ | DEST_ID | ROUND_ID | DEST_NO | STATUS | CHECKPOINT_SCN | CHECKPOINT_SCN_DISPLAY | PATH -| +---------+----------+---------+--------+---------------------+----------------------------+---------------------------------------+ | 1001 | 1 | 0 | DOING | 1680265982125159110 | 2023-03-31 20:33:02.125159 | file:///data/1/standby2_archive2 -| +---------+----------+---------+--------+---------------------+----------------------------+---------------------------------------+ 1 row in set
クエリ結果によると、
STATUSの値がDOINGであれば、アーカイブは正常に動作していることを意味し、CHECKPOINT_SCNとCHECKPOINT_SCN_DISPLAYは現在のアーカイブ進捗情報です。アーカイブ状態の詳細な操作については、アーカイブ進捗の確認を参照してください。
プライマリテナントをスタンバイテナントに切り替えます。
プライマリテナント、またはプライマリテナントが属するクラスタの
sysテナントのテナント管理者がデータベースにログインします。SWITCHOVER TO STANDBY VERIFYコマンドを実行し、SWITCHOVERコマンドが正常に実行できるかどうかを検証します。プライマリテナントが属するクラスタの
sysテナントがSWITCHOVER TO STANDBY VERIFYコマンドを実行する場合ALTER SYSTEM SWITCHOVER TO STANDBY TENANT [=] tenant_name VERIFY;例:
obclient> ALTER SYSTEM SWITCHOVER TO STANDBY TENANT = mysql2 VERIFY;プライマリテナントが
SWITCHOVER TO STANDBY VERIFYコマンドを実行する場合obclient> ALTER SYSTEM SWITCHOVER TO STANDBY VERIFY;コマンド実行後、
OKが返された場合は、検証に合格し、次のステップを実行できます。エラーが発生した場合は、表示されたテキスト情報に従い、ドキュメントSwitchoverまたはFailover関連の問題を参照して処理した後、再度このコマンドを実行してください。
検証に合格したら、プライマリテナントをスタンバイテナントに切り替えるコマンドを実行します。
プライマリテナントが属するクラスタの
sysテナントがプライマリテナントをスタンバイテナントに切り替える場合ALTER SYSTEM SWITCHOVER TO STANDBY TENANT = tenant_name;例:
obclient> ALTER SYSTEM SWITCHOVER TO STANDBY TENANT = mysql2;プライマリテナントが自身のテナントをスタンバイテナントに切り替える場合
obclient> ALTER SYSTEM SWITCHOVER TO STANDBY;
DBA_OB_TENANTSビューをクエリし、プライマリテナントがスタンバイテナントに切り替わったかどうかを確認します。プライマリテナントが属するクラスタの
sysテナントがビューをクエリします。obclient> SELECT TENANT_ID, TENANT_NAME,TENANT_TYPE,TENANT_ROLE,SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='mysql2';プライマリテナントがビューをクエリします。
MySQLモード:
obclient> SELECT TENANT_ID, TENANT_NAME,TENANT_TYPE,TENANT_ROLE,SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='mysql2';Oracleモード:
obclient> SELECT TENANT_ID, TENANT_NAME,TENANT_TYPE,TENANT_ROLE,SWITCHOVER_STATUS FROM SYS.DBA_OB_TENANTS WHERE TENANT_NAME='mysql2';
クエリ結果の例を以下に示します:
+-----------+-------------+-------------+-------------+-------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | TENANT_ROLE | SWITCHOVER_STATUS | +-----------+-------------+-------------+-------------+-------------------+ | 1004 | mysql2 | USER | STANDBY | NORMAL | +-----------+-------------+-------------+-------------+-------------------+ 1 row in setクエリ結果によると、プライマリテナントの
TENANT_ROLEがSTANDBYに変わり、SWITCHOVER_STATUSがNORMALに変わっていれば、プライマリテナントからスタンバイテナントへの切り替えは成功したことを意味します。V$OB_ARCHIVE_DEST_STATUSビューのSYNCHRONIZEDフィールドをクエリし、プライマリテナントのアーカイブ完了を待ちます。ログアーカイブを利用した物理スタンバイデータベースのシナリオでは、スタンバイテナントがプライマリテナントに切り替わる前に、元のプライマリテナントのログアーカイブから完全なログを読み取る必要があります。ログアーカイブは非同期または同期モードであるため、元のプライマリテナントがスタンバイテナントに切り替わった後、元のプライマリテナント上のログアーカイブが完全であるかどうかを確認する必要があります。
MySQLモード
obclient> SELECT * FROM oceanbase.V$OB_ARCHIVE_DEST_STATUS WHERE TENANT_ID = 1004;Oracleモード
obclient> SELECT * FROM SYS.V$OB_ARCHIVE_DEST_STATUS WHERE TENANT_ID = 1004;
MySQLモードのクエリ結果の例を以下に示します:
+-----------+---------+--------------------------------+--------+---------------------+--------------+---------+ | TENANT_ID | DEST_ID | PATH | STATUS | CHECKPOINT_SCN | SYNCHRONIZED | COMMENT | +-----------+---------+--------------------------------+--------+---------------------+--------------+---------+ | 1004 | 1001 | file:///data/1/sh_archive | DOING | 1684638569520797277 | YES | | +-----------+---------+--------------------------------+--------+---------------------+--------------+---------+ 1 row in setクエリ結果によると、
SYNCHRONIZEDフィールドがYESを表示していれば、プライマリテナントのアーカイブは完了しています。注意
スタンバイテナントからプライマリテナントへの切り替えを実行する前に、
SYNCHRONIZEDフィールドがYESを表示していることを確認する必要があります。そうでない場合、スタンバイテナントからプライマリテナントへの切り替え操作を実行した後、スイッチオーバー後の新しいプライマリテナントのデータが不完全になる可能性があります。
スタンバイテナントをプライマリテナントに切り替えます。
スタンバイテナント、またはスタンバイテナントが属するクラスタの
sysテナントのテナント管理者がデータベースにログインします。スタンバイテナントからプライマリテナントへの切り替えコマンドを実行します。
注意
スタンバイテナントからプライマリテナントへの切り替えコマンドの実行開始前に、システムはスタンバイテナントが復元ソース側のすべてのログを同期したかどうかを確認します。したがって、スタンバイテナントからプライマリテナントへの切り替えコマンドの実行時間は、スタンバイテナントとプライマリテナントの同期進捗に依存します。
スタンバイテナントが属するクラスタの
sysテナントがスタンバイテナントをプライマリテナントに切り替える場合ALTER SYSTEM SWITCHOVER TO PRIMARY TENANT = tenant_name;例:
obclient> ALTER SYSTEM SWITCHOVER TO PRIMARY TENANT = standby2;スタンバイテナントが自身のテナントをプライマリテナントに切り替える場合
obclient> ALTER SYSTEM SWITCHOVER TO PRIMARY;
DBA_OB_TENANTSビューをクエリし、スタンバイテナントがプライマリテナントに切り替わったかどうかを確認します。スタンバイテナントが属するクラスタの
sysテナントがビューをクエリします。obclient> SELECT TENANT_ID, TENANT_NAME,TENANT_TYPE,TENANT_ROLE,SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='standby2';プライマリテナントがビューをクエリします。
MySQLモード:
obclient> SELECT TENANT_ID, TENANT_NAME,TENANT_TYPE,TENANT_ROLE,SWITCHOVER_STATUS FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='standby2'';Oracleモード:
obclient> SELECT TENANT_ID, TENANT_NAME,TENANT_TYPE,TENANT_ROLE,SWITCHOVER_STATUS FROM SYS.DBA_OB_TENANTS WHERE TENANT_NAME='standby2'';
クエリ結果の例を以下に示します:
+-----------+----------------------------+-------------+-------------+-------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | TENANT_ROLE | SWITCHOVER_STATUS | +-----------+----------------------------+-------------+-------------+-------------------+ | 1006 | standby2 | USER | PRIMARY | NORMAL | +-----------+----------------------------+-------------+-------------+-------------------+ 1 row in setクエリ結果によると、スタンバイテナントの
TENANT_ROLEがPRIMARYに変わり、SWITCHOVER_STATUSがNORMALになっていれば、スタンバイテナントからプライマリテナントへの切り替えは成功したことを意味します。
新しいスタンバイテナント(元のプライマリテナント)の復元ソースを設定し、新しいプライマリテナントのアーカイブログを受信します。
元のプライマリテナントが切り替え操作を実行する前にログ復元ソースを設定していない場合、そのログ同期ポイントは切り替え操作を実行した時点で停止します。そのため、元のプライマリテナントにログ復元ソースを設定し、そのログ復元ソースを新しいプライマリテナントに指定する必要があります。
ログ復元ソースの設定操作は、プライマリ/スタンバイ切り替え操作の前後のいずれのタイミングでも実行できます。
新しいスタンバイテナント(元のプライマリテナント)、または新しいスタンバイテナントが属するクラスタの
sysテナントのテナント管理者がデータベースにログインします。以下のコマンドを実行し、新しいスタンバイテナント(元のプライマリテナント)の復元ソースを設定します。
新しいスタンバイテナントが属するクラスタの
sysテナントが新しいスタンバイテナントの復元ソースを設定する場合ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=archive_path' TENANT = tenant_name;新しいスタンバイテナントが自身のテナントの復元ソースを設定する場合
ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=archive_path';
ここで、
LOCATION属性は新しいプライマリテナントのアーカイブ宛先を指定するために使用されます。例:
obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=file:///data/1/standby2/archive2' TENANT = mysql2; obclient> ALTER SYSTEM SET LOG_RESTORE_SOURCE ='LOCATION=file:///data/1/standby2/archive2';設定が成功した後、
DBA_OB_TENANTSビューをクエリし、元のプライマリテナントがログの同期を継続している状態かどうかを確認します。ログ復元ソースを設定した後、プライマリテナントがスタンバイテナントに切り替わると、ログの継続的な同期が自動的に開始されるため、特別な処理は不要です。
DBA_OB_TENANTSビューをクエリすることで確認できます。元のプライマリテナントが属するクラスタの
sysテナントがビューをクエリします。obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS, SCN_TO_TIMESTAMP(SYNC_SCN), RECOVERY_UNTIL_SCN FROM oceanbase.DBA_OB_TENANTS;元のプライマリテナントがビューをクエリします。
MySQLモード:
obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS, SCN_TO_TIMESTAMP(SYNC_SCN), RECOVERY_UNTIL_SCN FROM oceanbase.DBA_OB_TENANTS;Oracleモード:
obclient> SELECT TENANT_NAME, TENANT_TYPE, TENANT_ROLE, SWITCHOVER_STATUS, SCN_TO_TIMESTAMP(SYNC_SCN), RECOVERY_UNTIL_SCN FROM SYS.DBA_OB_TENANTS;
MySQLモードのクエリ結果は以下のとおりです:
+-------------+-------------+-------------+-------------------+----------------------------+---------------------+ | TENANT_NAME | TENANT_TYPE | TENANT_ROLE | SWITCHOVER_STATUS | SCN_TO_TIMESTAMP(SYNC_SCN) | RECOVERY_UNTIL_SCN | +-------------+-------------+-------------+-------------------+----------------------------+---------------------+ | mysql2 | USER | STANDBY | NORMAL | 2023-05-21 11:41:46.432851 | 4611686018427387903 | +-------------+-------------+-------------+-------------------+----------------------------+---------------------+クエリ結果によると、
RECOVERY_UNTIL_SCN列の値がMAX SCN(4611686018427387903)の値と等しい場合、元のプライマリテナントはログの同期を継続している状態にあることを意味します。それ以外の場合、元のプライマリテナントはログの同期を継続していない状態にあります。