プライマリテナントが利用可能な場合、プライマリテナントとそのスタンバイテナントのいずれか1つとロールを交換し、データ損失を防ぎます。
以下では、物理スタンバイデータベースの2種類のデプロイメント方式に基づき、それぞれスイッチオーバーの操作手順を説明します。
使用上の制限
システムテナント(
sys)のテナントロールは切り替えられません。システムテナントのロールは常にPRIMARYです。スタンバイテナントをプライマリテナントに切り替える前に、スタンバイテナントのすべてのログストリームのレプリカがオンラインである必要があります。そうでない場合は、対応するレプリカが永続的にオフラインになるのを待つ必要があります。スタンバイテナントまたはスタンバイテナントが存在するクラスタの
sysテナントは、それぞれDBA_OB_LSビューまたはCDB_OB_LSビューを使用して、すべてのログストリームレプリカがオンラインかどうかを確認できます。ログストリームレプリカの詳細については、レプリカの紹介を参照してください。サービス名で作成されたセッションでは、Switchoverコマンドを実行することは許可されていません。サービスに関する操作および説明については、サービスの作成を参照してください。
ネットワークベースの物理スタンバイデータベース
ネットワークベースの物理スタンバイデータベースのシナリオでは、Switchoverは主に以下の3つの段階で構成されます:プライマリテナントをスタンバイテナントに切り替える --> 元のプライマリテナントにログ復元ソースを設定する --> スタンバイテナントをプライマリテナントに切り替える。
注意
Switchover操作を実行する際には、必ずプライマリテナントをスタンバイテナントに切り替えた後、スタンバイテナントをプライマリテナントに切り替える必要があります。スタンバイテナントを先にプライマリテナントに切り替えると、二重プライマリテナントの問題が発生し、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の場合、プライマリからスタンバイへの切り替えが成功したことを意味します。
元のプライマリテナントにログ復元ソースを設定します。
通常、ログ復元ソースの設定操作は、スタンバイからプライマリへの切り替え操作の前後どちらでも実行できます。ただし、Switchover後もテナントの保護モードを変更したくない場合は、プライマリ/スタンバイの両テナントにログ復元ソースを設定し、その復元ソースを相手方を指すようにしておく必要があります。
説明
V4.4.2バージョンでは、OceanBaseデータベースはV4.4.2 BP1バージョンから最大保護モードと最大利用可能モードをサポートしています。
管理者ユーザーで元のプライマリテナント、またはそのクラスタの
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)の値と等しい場合、元のプライマリテナントは引き続きログを同期している状態です。そうでない場合、元のプライマリテナントはログを同期していない状態です。
スタンバイテナントをプライマリテナントに切り替えます。
管理者ユーザーでスタンバイテナント、またはそのスタンバイテナントが存在するクラスタの
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になっていれば、スタンバイからプライマリへの切り替えは成功したことを意味します。
ログアーカイブを利用した物理スタンバイデータベース
ログアーカイブを利用した物理スタンバイデータベースのシナリオでは、スイッチオーバーは主に以下の3つの段階で構成されます:スタンバイテナントでログアーカイブモードを有効化する --> プライマリテナントをスタンバイテナントに切り替える --> スタンバイテナントをプライマリテナントに切り替える。
注意
スイッチオーバーを実行する際は、必ず最初にプライマリテナントをスタンバイテナントに切り替える必要があります。そうでない場合、デュアルプライマリテナント状態が発生したり、スタンバイテナントがログ同期を完了できなかったりする可能性があります。また、ログアーカイブを利用した物理スタンバイデータベースのシナリオでは、スタンバイテナントは元のプライマリテナントの状態を認識できません。そのため、先にスタンバイテナントをプライマリテナントに切り替えてしまうと、ALTER SYSTEM SWITCHOVER TO PRIMARY コマンドを実行してもシステムはエラーを返しません。
ログアーカイブを利用した物理スタンバイデータベースのシナリオにおける、スイッチオーバーの実行フローは以下の図のとおりです。
スタンバイテナントでログアーカイブモードを有効化します。
ログアーカイブを利用した物理スタンバイデータベースのシナリオでは、スイッチオーバー操作が正常に実行された後、元のプライマリテナントは、新しいプライマリテナント(元のスタンバイテナント)のアーカイブ済みログを継続的に読み取ることで、新しいプライマリテナント(元のスタンバイテナント)上のすべての変更操作を同期する必要があります。そのため、新しいプライマリテナント(元のスタンバイテナント)でログアーカイブモードを有効にする必要があります。同時に、スイッチオーバー実行後のログの連続性を保証するため、新しいプライマリテナント(元のスタンバイテナント)はスイッチオーバー操作を実行する前にログアーカイブを有効にしておく必要があります。
管理ユーザーでスタンバイテナント、またはそのクラスタの
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と表示されていることを確認する必要があります。そうでない場合、スタンバイからプライマリへの切り替え操作を実行した後、Switchover後の新しいプライマリテナントのデータが不完全になる可能性があります。
スタンバイテナントをプライマリテナントに切り替えます。
スタンバイテナントまたはそのクラスタの
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)の値と等しい場合、元のプライマリテナントが継続的にログを同期している状態であることを意味します。そうでない場合、元のプライマリテナントは継続的にログを同期していない状態です。