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の場合、スタンバイテナントの復元は完了しています。
次のステップ
注意
物理バックアップ復元(ログあり)機能を使用して作成されたスタンバイテナントとは異なり、この方法で復元されたスタンバイテナントはログ復元ソースが指定されていないため、ログの継続的な同期を直接開始することはできません。ログ復元ソースを設定してからでないと、ログの継続的な同期を開始できません。
この方法で作成されたスタンバイテナントでは、以下の操作も必要です: