プライマリテナントが利用可能な場合、プライマリテナントとそのうちの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である場合、プライマリ切り替えスタンバイが成功しました。
スタンバイテナントをプライマリテナントに切り替えます。
管理者ユーザーを使用して、スタンバイテナントまたはその所属クラスタの
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 コマンドを実行してもシステムはエラーを報告しません。
ログアーカイブに基づくフィジカル・スタンバイ・データベースのシナリオにおいて、スイッチオーバーの実行フローは次の図のとおりです。
スタンバイテナントでログアーカイブモードを有効化します。
ログアーカイブに基づくフィジカル・スタンバイ・データベースのシナリオでは、スイッチオーバー操作が成功すると、元のプライマリテナントは新しいプライマリテナント(元のスタンバイテナント)のアーカイブログを継続的に読み取って、新しいプライマリテナント(元のスタンバイテナント)上のすべての変更操作を同期する必要があるため、新しいプライマリテナント(元のスタンバイテナント)でログアーカイブモードを有効にする必要があります。同時に、スイッチオーバー実行後のログ連続性を確保するため、新しいプライマリテナント(元のスタンバイテナント)はスイッチオーバー操作を実行する前にログアーカイブを有効にする必要があります。
管理者ユーザーとして、スタンバイテナントまたはそのクラスタの
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)の値と等しい場合、元のプライマリテナントが継続的にログを同期していることを意味します。そうでない場合、元のプライマリテナントは継続的にログを同期していません。