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ビュー)をクエリすることで、アーカイブ状態を確認します。クエリのステートメントは以下のとおりです:システムテナント
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機能を使用してデータバックアップを1回実行し、アーカイブログを含む完全なデータセットを生成する必要があります。
データバックアップのバックアップ出力先を設定します。
プライマリテナントが単一マシンの場合、テナントレプリカが配置されているマシン(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_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 | 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テナントにログインします。以下のコマンドを実行して、スタンバイテナントに必要なUnit仕様を作成します。
新しいスタンバイテナントに必要なUnit仕様は、ソーステナントのUnit仕様と同じである必要はなく、より小さいUnit仕様を使用することも可能です。例えば、CPU 1コア、メモリ5GBのUnit仕様
unit1を作成します。例:CREATE RESOURCE UNIT unit1 MAX_CPU 1, MEMORY_SIZE = '5G';Unit仕様の詳細な作成手順については、テナントの作成を参照してください。
スタンバイテナントに必要なリソースプールを作成します。
例えば、リソースプール
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の場合、スタンバイテナントの復元は完了したことを意味します。
次のステップ
注意
物理バックアップ・リストア(ログあり)機能を使用して作成したスタンバイテナントとは異なり、この方法で復元されたスタンバイテナントはログ復元ソースが指定されていないため、ログの継続的な同期を直接開始することはできません。ログ復元ソースを設定してからでないと、ログの継続的な同期を開始できません。
この方法で作成したスタンバイテナントでは、以下の操作も必要です: