バックアップ復旧(ログ付き)機能を使用してスタンバイテナントを作成する方法は汎用的な手法であり、データバックアップおよびログアーカイブからスタンバイテナントを復元します。この方法では、プライマリテナントのデータバックアップやログアーカイブから復元することも、既存のスタンバイテナントのデータバックアップやログアーカイブから復元することも可能です。
ステップ1:メインテナントまたは他のスタンバイテナントでアーカイブモードを有効にし、データバックアップを実行する
新しいスタンバイテナントはデータバックアップとログアーカイブから復元する必要があるため、新しいスタンバイテナントを作成する前に、メインテナントまたはソース側のスタンバイテナントでアーカイブモードを有効にし、フルデータバックアップを実行する必要があります。
説明
アーカイブ宛先の設定、アーカイブモードの有効化、バックアップ宛先の設定、データバックアップの実行などの操作は、システムテナント(sysテナント)またはユーザーテナントで実行できます。システムテナントで実行する場合は、対応するコマンドの末尾に tenant = 'tenant_name' を追加する必要があります。本記事では、ユーザーテナントでの操作を例に操作ガイドを提供します。
メインテナントまたはソース側のスタンバイテナントでアーカイブモードを有効にし、アーカイブ状態が常に
DOINGであることを確認します。アーカイブ宛先を設定します。
アーカイブメディアとしてNFSを使用し、アーカイブ宛先パスを
/data/1/sh_archive/とする場合、ユーザーテナントでアーカイブ宛先を設定するSQL文の例は以下のとおりです:ALTER SYSTEM SET LOG_ARCHIVE_DEST = 'LOCATION=file:///data/1/sh_archive';アーカイブ宛先を設定する詳細な操作については、ログアーカイブの準備を参照してください。
メインテナントまたはソース側のスタンバイテナントのアーカイブモードを有効にします。
注意
データバックアップ中のログをすべてアーカイブするためには、まずテナントのアーカイブモードを有効にした後にデータバックアップを実行する必要があります。
ユーザーテナントでアーカイブモードを有効にするSQL文は以下のとおりです:
ALTER SYSTEM ARCHIVELOG;アーカイブモードを有効にする詳細な操作については、アーカイブモードの有効化を参照してください。
アーカイブ状態が
DOINGであるかどうかを確認します。ユーザーテナントでアーカイブ状態を照会する文は以下のとおりです。システムテナントの場合は、
CDB_OB_ARCHIVELOGビューを照会する必要があります。システムテナント
SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM oceanbase.CDB_OB_ARCHIVELOG;MySQLテナント
SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM oceanbase.DBA_OB_ARCHIVELOG;Oracleテナント
SELECT DEST_ID, ROUND_ID, DEST_NO, STATUS, CHECKPOINT_SCN, CHECKPOINT_SCN_DISPLAY, PATH FROM SYS.DBA_OB_ARCHIVELOG;
照会結果の例は以下のとおりです:
+---------+----------+---------+--------+---------------------+----------------------------+--------------------------------+ | 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/sh_archive | +---------+----------+---------+--------+---------------------+----------------------------+--------------------------------+ 1 row in set照会結果によると、
STATUSの値がDOINGの場合、アーカイブは正常に動作しています。アーカイブ状態を確認する詳細な操作については、アーカイブ進捗状況の確認を参照してください。
メインテナントまたはソース側のスタンバイテナントでデータバックアップを有効にし、フルバックアップを完了します。
アーカイブモードを有効にした後、メインテナントまたはソース側のスタンバイテナントはデータバックアップを実行する必要があります。
データバックアップのバックアップ宛先を設定します。
バックアップメディアとしてNFSを使用し、バックアップ宛先パスを
/data/1/sh_databackupとする場合、ユーザーテナントでバックアップ宛先を設定するSQL文の例は以下のとおりです:ALTER SYSTEM SET DATA_BACKUP_DEST = 'file:///data/1/sh_databackup';バックアップ宛先を設定する詳細な操作については、バックアップ前の準備を参照してください。
データバックアップを実行します。
ユーザーテナントでデータバックアップを実行するSQL文は以下のとおりです:
ALTER SYSTEM BACKUP DATABASE;テナントのフルデータバックアップを開始する詳細な操作については、データバックアップの開始を参照してください。
データバックアップの状態を確認します。
ユーザーテナントでは、
DBA_OB_BACKUP_JOB_HISTORYビュー(システムテナントではCDB_OB_BACKUP_JOB_HISTORYビューを照会)を使用してデータバックアップの進捗状況を照会するSQL文は以下のとおりです:システムテナント
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS;MySQLテナント
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOBS;Oracleテナント
SELECT * FROM SYS.DBA_OB_BACKUP_JOBS;
バックアップが実行中の場合、このビューにバックアップジョブの進捗情報が表示されます。データバックアップの進捗状況を確認する詳細な操作については、データバックアップの進捗状況の確認を参照してください。
バックアップが完了した場合は、
DBA_OB_BACKUP_JOB_HISTORYビュー(システムテナントではCDB_OB_BACKUP_JOB_HISTORYビューを照会)を使用して、データバックアップ履歴をさらに照会できます。システムテナント
SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY;MySQLテナント
SELECT * FROM oceanbase.DBA_OB_BACKUP_JOB_HISTORY;Oracleテナント
SELECT * FROM SYS.DBA_OB_BACKUP_JOB_HISTORY;
データバックアップ履歴の照会結果は以下のとおりです:
+--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+--------+----------------------------+----------------------------+-----------+--------+---------+-------------+-------------------------------+ | JOB_ID | INCARNATION | BACKUP_SET_ID | INITIATOR_TENANT_ID | INITIATOR_JOB_ID | EXECUTOR_TENANT_ID | PLUS_ARCHIVELOG | BACKUP_TYPE | JOB_LEVEL | ENCRYPTION_MODE | PASSWD | START_TIMESTAMP | END_TIMESTAMP | STATUS | RESULT | COMMENT | DESCRIPTION | PATH | +--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+--------+----------------------------+----------------------------+-----------+--------+---------+-------------+-------------------------------+ | 1 | 1 | 1 | 1004 | 0 | 1004 | OFF | FULL | USER_TENANT | NONE | | 2023-03-31 20:48:32.342315 | 2023-03-31 20:49:39.908559 | COMPLETED | 0 | | | file:///data/1/sh_databackup | +--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+--------+----------------------------+----------------------------+-----------+--------+---------+-------------+-------------------------------+ 1 row in set照会結果によると、
STATUSの値がCOMPLETEDの場合、データバックアップが完了したことを示します。
ステップ2:スタンバイテナントの復元
rootユーザーで、作成するスタンバイテナントが存在するクラスタのsysテナントにログインします。以下のコマンドを実行して、スタンバイテナントに必要なユニット仕様を作成します。
例えば、CPUが1コアでメモリが5GBのユニット仕様
unit1を作成します。CREATE RESOURCE UNIT unit1 MAX_CPU 1, MEMORY_SIZE = '5G';ユニット仕様の詳細な作成手順については、テナントの作成を参照してください。
スタンバイテナントに必要なリソースプールを作成します。
スタンバイテナント用のリソースプールを作成する際は、ソーステナントとの同型性をできるだけ保つことを推奨します。つまり、スタンバイテナントのリソースプールにおける
unit_numの数をソーステナントと同じにすることを推奨します。例えば、リソースプール
pool_for_standbyを作成します。CREATE RESOURCE POOL pool_for_standby UNIT = 'unit1', UNIT_NUM = 1, ZONE_LIST = ('zone1','zone2','zone3');リソースプールの詳細な作成手順については、テナントの作成を参照してください。
RESTOREコマンドを実行し、テナントのデータバックアップおよびログアーカイブ機能を使用して、スタンバイテナントを復元します。ステートメントは次のとおりです:
ALTER SYSTEM RESTORE standby_tenant_name FROM uri UNTIL TIME ='timestamp' WITH 'restore_option' [WITH KEY FROM 'backup_key_path' ENCRYPTED BY 'password'] [DESCRIPTION description];関連パラメータの説明は以下のとおりです:
standby_tenant_name:復元対象のスタンバイテナントの名前を指定します。uri:プライマリテナントまたはソース側のスタンバイテナントのデータバックアップパスとアーカイブパスをそれぞれ指定する必要があります。UNTIL TIME= timestamp:指定された復元終了時点まで復元します。timestampは=で結合して指定する必要があります。timestampはYYYY-MM-DD HH24:MI:SS.FF形式のみをサポートし、ナノ秒単位で正確です。timestampの選択方法の詳細については、物理復元関連パラメータの紹介を参照してください。restore_optionではpool_list、locality、primary_zoneを指定できます。そのうちpool_listは必須項目で、他はオプションです。異なるパラメータ間は&で区切ります。localityとprimary_zoneを指定する際は、ソーステナントとの同型性をできるだけ保つことを推奨します。同型でない場合、テナントの復元後にプライマリテナントとしてアクティブ化されるとロードバランシング操作が発生し、パフォーマンスに影響を与える可能性があります。restore_optionの各パラメータの詳細については、物理復元関連パラメータの紹介を参照してください。WITH KEY FROM 'backup_key_path' ENCRYPTED BY 'password':暗号化されたテナントの秘密鍵バックアップ情報を指定します。ソーステナントに透過的暗号化が設定されている場合にのみ、復元時に秘密鍵バックアップ関連情報を指定する必要があります。backup_key_path:秘密鍵のバックアップパスです。password:秘密鍵をバックアップする際に設定した暗号化パスワードです。
ログアーカイブパス
file:///data/1/sh_archiveとデータバックアップパスfile:///data/1/sh_databackupからスタンバイテナントstandby_tenantを復元する例は次のとおりです:ALTER SYSTEM RESTORE standby_tenant FROM 'file:///data/1/sh_databackup,file:///data/1/sh_archive' UNTIL TIME='2023-05-26 15:04:23.825558' WITH 'pool_list=pool_for_standby';RESTOREコマンドの詳細については、物理復元関連パラメータの紹介を参照してください。復元が完了したかどうかを確認します。
復元中は、
DBA_OB_TENANTSビューを使用して復元が完了したかどうかを確認できます。SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';クエリ結果は次のとおりです
+----------------+-------------+----------------------------+--------+-------------+----------------------------+ | TENANT_NAME | TENANT_TYPE | CREATE_TIME | STATUS | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ | standby_tenant | USER | 2023-04-02 20:42:38.800518 | NORMAL | STANDBY | 2023-04-02 20:42:30.736135 | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ 1 row in setクエリ結果に基づき、
TENANT_ROLEの値がSTANDBYの場合、スタンバイテナントの復元が完了したことを示します。復元進捗状況の詳細については、復元進捗状況の確認を参照してください。
ステップ3:ログの継続的同期を有効にする
デフォルトの RESTORE コマンドを使用して作成された新しいスタンバイテナントは、プライマリテナントまたはソース側のスタンバイテナントのアーカイブログを連続的に同期しません。そのため、手動で RECOVER コマンドを実行して新しいスタンバイテナントの復旧ポイントを再設定し、ログの継続的同期モードを有効にする必要があります。
管理者ユーザーとして新しいスタンバイテナント、または新しいスタンバイテナントが属するクラスタの
sysテナントにログインします。実際の使用シナリオに応じて、
RECOVERコマンドを実行して新しいスタンバイテナントの復旧ポイントを変更します。新しいスタンバイテナントが属するクラスタの
sysテナントが新しいスタンバイテナントのログの継続的同期を有効にする場合ALTER SYSTEM RECOVER STANDBY TENANT = tenant_name UNTIL UNLIMITED;ここで、
UNLIMITEDは無限大を表します。例:
ALTER SYSTEM RECOVER STANDBY TENANT = standby_tenant UNTIL UNLIMITED;新しいスタンバイテナントが自身のログの継続的同期を有効にする場合
ALTER SYSTEM RECOVER STANDBY UNTIL UNLIMITED;
再度
DBA_OB_TENANTSビューを照会し、SYNC_SCNフィールドを確認して新しいスタンバイテナントの同期ポイントを確認します。ここで、
SCN_TO_TIMESTAMP(SYNC_SCN)列は新しいスタンバイテナントの現在の同期進捗状況を表示します。新しいスタンバイテナントが属するクラスタの
sysテナントがビューを照会する場合SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';新しいスタンバイテナントがビューを照会する場合
MySQLテナント
SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';クエリ結果は次のとおりです:
+----------------+-------------+----------------------------+--------+-------------+----------------------------+ | TENANT_NAME | TENANT_TYPE | CREATE_TIME | STATUS | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ | standby_tenant | USER | 2023-04-02 20:42:38.800518 | NORMAL | STANDBY | 2023-04-02 21:06:50.810688 | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ 1 row in setOracleテナント
SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM SYS.DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant';クエリ結果は次のとおりです:
+------------------+-------------+------------------------------+--------+-------------+---------------------------------+ | TENANT_NAME | TENANT_TYPE | CREATE_TIME | STATUS | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +------------------+-------------+------------------------------+--------+-------------+---------------------------------+ | standby_tenant | USER | 23-MAY-23 02.37.58.647507 PM | NORMAL | STANDBY | 26-MAY-23 01.34.46.896905660 PM | +------------------+-------------+------------------------------+--------+-------------+---------------------------------+ 1 row in set