説明
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の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