BACKUP DATABASE PLUS ARCHIVELOG機能を使用してスタンバイテナントを作成する実装方法は、プライマリテナントのすべてのデータとアーカイブログをローカルまたは共有ストレージ上にアーカイブログを含む完全なデータセットとして生成し、そのデータセットを作成予定のスタンバイテナントが存在するクラスタがアクセス可能なメディアにアップロードします。最後に、このデータセットを使用してスタンバイテナントを復元します。
ステップ1:メインテナントでアーカイブモードを有効にし、データバックアップを実行する
管理者ユーザーとしてメインテナント、またはメインテナントが属するクラスタの
sysテナントにログインします。メインテナントでアーカイブモードを有効にします。
アーカイブ宛先を設定します。
メインテナントが単一マシンの場合、テナントレプリカが存在するマシン(observerプロセスが存在するマシン)上のアクセス可能なパスをアーカイブ宛先として設定できます。その他の場合は、共有ストレージ(例えば、NFSまたはAlibaba Cloud OSS)をアーカイブ宛先として使用する必要があります。
アーカイブメディアとしてNFSを使用し、アーカイブ宛先のパスを
/data/1/sh_archive/とした場合の例を以下に示します:メインテナントが属するクラスタの
sysテナントでメインテナントのアーカイブ宛先を設定しますALTER SYSTEM SET LOG_ARCHIVE_DEST = 'LOCATION=file:///data/1/sh_archive' TENANT = mysql;ここで、
mysqlは指定されたメインテナント名です。メインテナントで自身のアーカイブ宛先を設定します
ALTER SYSTEM SET LOG_ARCHIVE_DEST = 'LOCATION=file:///data/1/sh_archive';
アーカイブ宛先の設定手順の詳細については、ログアーカイブの準備を参照してください。
アーカイブモードを有効にします。
注意
データバックアップ期間中にログがすべてアーカイブされるようにするためには、まずテナントのアーカイブモードを有効にしてからデータバックアップを実行する必要があります。
メインテナントが属するクラスタの
sysテナントでメインテナントのアーカイブモードを有効にしますALTER SYSTEM ARCHIVELOG TENANT = mysql;ここで、
mysqlは指定されたメインテナント名です。メインテナントで自身のアーカイブモードを有効にします
ALTER SYSTEM ARCHIVELOG;
アーカイブモードの有効化手順の詳細については、アーカイブモードの有効化を参照してください。
アーカイブ状態が
DOINGであるかどうか確認します。メインテナントは
DBA_OB_ARCHIVELOGビュー(システムテナントはCDB_OB_ARCHIVELOGビュー)を照会してアーカイブ状態を確認します。SQL文は以下のとおりです:システムテナント
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 | 1680867152120380679 | 2023-04-07 19:32:32.120380 | file:///data/1/xianlin_archive | +---------+----------+---------+--------+---------------------+----------------------------+--------------------------------+ 1 row in set照会結果に基づき、
STATUSの値がDOINGであれば、アーカイブは正常に動作しています。アーカイブ状態の詳細な確認方法については、アーカイブ進捗状況の確認を参照してください。
メインテナントはBACKUP DATABASE PLUS ARCHIVELOG機能を使用してデータバックアップを実行します。
アーカイブモードを有効にした後、メインテナントはBACKUP DATABASE PLUS ARCHIVELOG機能を使用してデータバックアップを実行し、アーカイブログを含む完全なデータセットを生成する必要があります。
データバックアップのバックアップ宛先を設定します。
メインテナントが単一マシンの場合、テナントレプリカが存在するマシン(observerプロセスが存在するマシン)上のアクセス可能なパスをバックアップ宛先として設定できます。ただし、バックアップ宛先とアーカイブ宛先のパスは同一であってはなりません。その他の場合は、共有ストレージ(例えば、NFSまたはAlibaba Cloud OSS)をバックアップ宛先として使用する必要があります。
バックアップメディアとしてNFSを使用し、バックアップ宛先のパスを
/data/1/sh_databackupとした場合の例を以下に示します:メインテナントが属するクラスタの
sysテナントでメインテナントのバックアップ宛先を設定しますALTER SYSTEM SET DATA_BACKUP_DEST = 'file:///data/1/sh_databackup' TENANT = mysql;ここで、
mysqlは指定されたメインテナント名です。メインテナントで自身のバックアップ宛先を設定します
ALTER SYSTEM SET DATA_BACKUP_DEST = 'file:///data/1/sh_databackup';
バックアップ宛先の設定手順の詳細については、バックアップ前の準備を参照してください。
データバックアップを実行します。
メインテナントが属するクラスタの
sysテナントでメインテナントのデータバックアップを実行しますALTER SYSTEM BACKUP TENANT = mysql PLUS ARCHIVELOG;ここで、
mysqlは指定されたメインテナント名です。メインテナントでデータバックアップを実行します
ALTER SYSTEM BACKUP DATABASE PLUS ARCHIVELOG;
データバックアップの状態を確認します。
メインテナントは
DBA_OB_BACKUP_JOBビュー(システムテナントはCDB_OB_BACKUP_JOBビュー)を照会してデータバックアップの進捗状況を確認します。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 | ON | FULL | USER_TENANT | NONE | | 2023-04-07 19:52:35.361398 | 2023-04-07 19:58:57.223196 | COMPLETED | 0 | | | file:///data/1/sh_databackup | +--------+-------------+---------------+---------------------+------------------+--------------------+-----------------+-------------+-------------+-----------------+--------+----------------------------+----------------------------+-----------+--------+---------+-------------+-------------------------------+ 1 row in set照会結果に基づき、
STATUSの値がCOMPLETEDである場合、データバックアップは完了しています。PLUS_ARCHIVELOG列がONと表示されている場合、BACKUP DATABASE PLUS ARCHIVELOG機能を使用して実行されたデータバックアップであり、このバックアップディレクトリにはデータベースの実行に必要なアーカイブログが含まれています。これら2つを組み合わせることで、アーカイブログを含む完全なデータセットが構成されます。
(オプション)ステップ2:メインテナントのアーカイブモードを無効にする
BACKUP DATABASE PLUS ARCHIVELOG機能を使用してデータバックアップを実行した後、ログの継続的なアーカイブが不要になった場合は、メインテナントのアーカイブモードを無効にできます。
管理者ユーザーとしてメインテナント、またはメインテナントが属するクラスタの
sysテナントにログインします。以下のコマンドを実行して、メインテナントのアーカイブモードを無効にします。
メインテナントが属するクラスタの
sysテナントからメインテナントのアーカイブモードを無効にするALTER SYSTEM NOARCHIVELOG TENANT = mysql;ここで、
mysqlは指定されたメインテナント名です。メインテナントが自身のアーカイブモードを無効にする
ALTER SYSTEM NOARCHIVELOG;
ステップ3:データバックアップを取得し、スタンバイテナントがアクセス可能な場所に配置する
設定されたバックアップ宛先からメインテナントのデータバックアップを取得します。
例えば、本記事の例では、メインテナントのデータバックアップの保存パスは
/data/1/sh_databackupです。取得したデータバックアップを、作成予定のスタンバイテナントがアクセス可能な場所に配置します。
例えば、メインテナントが単一マシンの場合、データバックアップをパッケージ化して、スタンバイテナントのレプリカが存在するマシン(observerプロセスが実行されているマシン)上のアクセス可能なパスにコピーするだけです。その他のシナリオでは、スタンバイテナントがアクセス可能な共有ストレージ(例えば、NFSやAlibaba Cloud OSSなど)に配置することもできます。
ステップ4:アーカイブログを含む完全なデータセットを使用してスタンバイテナントを復元する
rootユーザーで、作成予定のスタンバイテナントが存在するクラスタのsysテナントにログインします。以下のコマンドを実行して、スタンバイテナントに必要なユニット仕様を作成します。
新しいスタンバイテナントを作成するために必要なユニット仕様は、ソーステナントのユニット仕様と同一である必要はありません。より小さなユニット仕様を使用することも可能です。例えば、CPUが1コアでメモリが5GBのユニット仕様
unit1を作成します。例えば、CREATE RESOURCE UNIT unit1 MAX_CPU 1, MEMORY_SIZE = '5G';ユニット仕様の詳細な作成手順については、テナントの作成を参照してください。
スタンバイテナントに必要なリソースプールを作成します。
例えば、リソースプール
pool_for_standbyを作成します。CREATE RESOURCE POOL pool_for_standby UNIT = 'unit1', UNIT_NUM = 1, ZONE_LIST = ('zone1','zone2','zone3');リソースプールの詳細な作成手順については、テナントの作成を参照してください。
プライマリテナントのアーカイブログを含む完全なデータセットからスタンバイテナントを復元します。
取得したデータバックアップがスタンバイテナントからアクセス可能なパス
file:///data/1/sh_databackupに配置されていると仮定した場合、SQL文は次のとおりです:ALTER SYSTEM RESTORE standby_tenant FROM 'file:///data/1/sh_databackup' WITH 'pool_list=pool_for_standby';復元が完了したかどうかを確認します。
復元中は、
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-07 20:43:39.883628 | NORMAL | STANDBY | 2023-04-07 20:05:16.617492 | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ 1 row in setクエリ結果に基づき、
TENANT_ROLEの値がSTANDBYの場合、スタンバイテナントの復元が完了したことを示します。
次のステップ
注意
物理バックアップ復旧(ログあり)機能を使用して作成されたスタンバイテナントとは異なり、この方法で復旧されたスタンバイテナントはログ復旧ソースが指定されていないため、ログの継続的な同期を直接有効にすることはできません。ログの継続的な同期を有効にするには、ログ復旧ソースを設定する必要があります。
この方法で作成されたスタンバイテナントでは、以下の操作も必要です: