バックアップ・リストア(ログあり)機能を使用してスタンバイテナントを作成する方法は汎用的な方法であり、データのバックアップおよびログアーカイブからスタンバイテナントを復元します。この方法では、プライマリテナントのデータバックアップおよびログアーカイブから復元することも、既存のスタンバイテナントのデータバックアップおよびログアーカイブから復元することも可能です。
ステップ1:プライマリテナントまたは他のスタンバイテナントでアーカイブモードを有効にし、データバックアップを実行する
新しいスタンバイテナントは、データバックアップとログアーカイブから復元する必要があるため、新しいスタンバイテナントを作成する前に、プライマリテナントまたはソース側のスタンバイテナントでアーカイブモードを有効にし、フルデータバックアップを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であれば、アーカイブは正常に動作しています。アーカイブ状態を確認する詳細な操作については、アーカイブ進捗状況の確認を参照してください。
プライマリテナントまたはソース側のスタンバイテナントでデータバックアップを開始し、フルバックアップを1回完了します。
アーカイブモードを有効にした後、プライマリテナントまたはソース側のスタンバイテナントは、データバックアップを1回実行する必要があります。
データバックアップのバックアップ宛先を設定します。
バックアップメディアとして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_JOBSビュー(システムテナントはCDB_OB_BACKUP_JOBSビュー)を使用してデータバックアップの進捗状況を確認する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テナントにログインします。以下のコマンドを実行して、スタンバイテナントに必要なUnit仕様を作成します。
例えば、CPU 1コア、メモリ5GBのUnit仕様
unit1を作成します。CREATE RESOURCE UNIT unit1 MAX_CPU 1, MEMORY_SIZE = '5G';Unit仕様の詳細な作成手順については、テナントの作成を参照してください。
スタンバイテナントに必要なリソースプールを作成します。
スタンバイテナント用のリソースプールを作成する際は、可能な限りソーステナントと同型を維持することを推奨します。つまり、スタンバイテナントのリソースプールにおける
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