説明
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テナントにログインします。1コア5GBのUnitを作成します。
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