説明
CREATE STANDBY TENANT ステートメントは、フィジカル・スタンバイ・データベースのシナリオで空のスタンバイテナントを作成するために使用されます。この方法でスタンバイテナントが正常に作成されると、そのスタンバイテナントは自動的に継続同期状態に入ります。
一般的なユーザーテナントを作成する必要がある場合は、CREATE TENANT ステートメントを使用してください。
制限事項と注意点
プライマリテナントが新しく作成されたものであるか、またはプライマリテナントがテナント作成後の完全なログを保持していることを確認できる場合にのみ、このステートメントを使用してスタンバイテナントを作成できます。プライマリテナント上に完全なログが存在するかどうかを確認する詳細な手順については、スタンバイテナント作成前の準備を参照してください。
この方法でスタンバイテナントを作成する場合、プライマリテナント内の
GV$OB_LOG_STAT、GV$OB_UNITS、GV$OB_PARAMETERS、DBA_OB_ACCESS_POINT、DBA_OB_TENANTS、DBA_OB_LSなどのシステムビューにアクセスできる専用ユーザーが必要です。この専用ユーザーの詳細については、空のスタンバイテナントの作成を参照してください。作成対象のスタンバイテナントが属するクラスタの
sysテナントを使用して、空のスタンバイテナントを作成する必要があります。
権限要件
sys テナントの root ユーザー (root@sys) のみがテナントを作成でき、他のテナントではテナントの作成はサポートされていません。
構文
CREATE STANDBY TENANT [IF NOT EXISTS] tenant_name
{LOG_RESTORE_SOURCE [=] string_value} [tenant_option_list];
tenant_option_list:
tenant_option [, tenant_option...]
tenant_option:
LOCALITY [=] 'locality_description'
| PRIMARY_ZONE [=] primary_zone_name
| RESOURCE_POOL_LIST [=] (pool_name [, pool_name...])
| COMMENT [=] 'string'
パラメータの説明
| パラメータ | 説明 |
|---|---|
| tenant_name | スタンバイテナントのテナント名を指定します。最大63バイトで、大文字と小文字の英字、数字、アンダースコアのみを使用できます。また、テナント名はアルファベットまたはアンダースコアで始まる必要があり、OceanBaseデータベースのキーワードであってはなりません。 |
| IF NOT EXISTS | 作成するテナント名が既に存在し、IF NOT EXISTS が指定されていない場合、エラーが報告されます。 |
| LOG_RESTORE_SOURCE | ログ復元ソースの設定です。必須項目で、書式は 'SERVICE=ip_list USER=user_name@tenant_name PASSWORD=password' となります。その内容は以下の通りです:
|
| LOCALITY | スタンバイテナントのレプリカのゾーン間の分散状況を指定します。オプションです。例えば、F@z1,F@z2,F@z3 は z1、z2、z3 がフル機能レプリカであることを表します。スタンバイテナントとプライマリテナントは、同じLOCALITYを使用することを推奨します。 |
| PRIMARY_ZONE | テナントが属するプライマリゾーンを指定します。主に以下の値や形式がサポートされています:
テナント作成時にプライマリゾーンが指定されていない場合、デフォルト値は RANDOM となります。 |
| RESOURCE_POOL_LIST | スタンバイテナントが使用するリソースプールのリストを指定します。必須項目です。スタンバイテナントとプライマリテナントは、同じリソース仕様を使用することを推奨します。 複数のリソースプールがある場合、複数のリソースプールの UNIT_NUM の数が一致している必要があります。
注意同一テナントの複数のリソースプールにおいて、それぞれの |
| COMMENT | コメントを記述します。オプションです。 |
例
プライマリテナント名を mysql、プライマリテナントのビューにアクセスするための専用ユーザー test を作成したと仮定して、空のスタンバイテナント standby_tenant を作成する例を以下に示します。
rootユーザーで、作成予定のスタンバイテナントが存在するクラスタのsysテナントにログインします。1C5Gのユニットを作成します。
obclient [oceanbase]> CREATE RESOURCE UNIT 1C5G MAX_CPU 1, MEMORY_SIZE = '5G';リソースプール
pool_for_standbyを作成します。obclient [oceanbase]> CREATE RESOURCE POOL pool_for_standby UNIT = '1C5G', UNIT_NUM = 1, ZONE_LIST = ('zone1', 'zone2', 'zone3');LOG_RESTORE_SOURCEの設定情報を取得し、空のスタンバイテナントを作成します。obclient [oceanbase]> CREATE STANDBY TENANT IF NOT EXISTS standby_tenant LOG_RESTORE_SOURCE = 'SERVICE=11.xxx.xxx.xxx:17855;11.xxx.xxx.xxx:17857;11.xxx.xxx.xxx:17859 USER=test@mysql PASSWORD=******' RESOURCE_POOL_LIST=('pool_for_standby');ビュー
DBA_OB_TENANTSを使用してテナントの状態を確認します。フィールドTENANT_ROLEがSTANDBYで、STATUSがNORMALの場合、テナントの状態は正常であり、作成に成功しています。obclient [oceanbase]> 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-14 21:06:48.787550 | NORMAL | STANDBY | 2023-04-14 21:12:59.183293 | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ 1 row in set