説明
CREATE TENANT ステートメントは、ユーザーテナントを作成するために使用されます。OceanBaseデータベースはユーザーテナントのみをサポートしており、システムテナントはクラスタ作成時にシステムが自動的に作成します。MetaテナントはOceanBaseデータベース内部で自己管理されるテナントであり、ユーザーテナントが作成されるたびに対応するMetaテナントも作成され、そのライフサイクルはユーザーテナントと同期します。
CREATE TENANT ステートメントで作成されるテナントは、デフォルトでテナントロールが PRIMARY に設定されます。
制限事項と注意点
OceanBaseデータベースは、MySQL互換モードとOracle互換モードの2種類のテナントをサポートしています。テナントを作成する際には、適切なテナントタイプを指定する必要があります。テナント作成後、テナントタイプの変更はできません。
テナント作成時には、テナントにリソースプールを割り当てる必要があります。そのため、事前にリソース計画を立て、リソースプールを作成しておく必要があります。リソースプールの作成に関する操作については、テナントの作成を参照してください。
クローンテナントの使用制限の詳細については、クローンテナントを参照してください。
権限要件
テナントを作成できるのは、sys テナントの root ユーザー(root@sys)のみです。他のテナントではテナントの作成がサポートされていません。
構文
テナントを作成する構文は以下のとおりです:
CREATE TENANT { {[IF NOT EXISTS] tenant_name [tenant_option_list] [set_sys_var]} | {clone_tenant_clause} };
tenant_option_list:
tenant_option [, tenant_option...]
tenant_option:
LOCALITY [=] 'locality_description'
| PRIMARY_ZONE [=] primary_zone_name
| RESOURCE_POOL_LIST [=] (pool_name [, pool_name...])
| ENABLE_ARBITRATION_SERVICE [=] {True | False}
| {CHARACTER SET | CHARSET} [=] charset_name
| COLLATE [=] collation_name
| {READ ONLY | READ WRITE}
| COMMENT [=] 'string'
set_sys_var:
{SET | SET VARIABLES | VARIABLES} var_name {TO | =} var_value [,var_name {TO | =} var_value...]
clone_tenant_clause:
new_tenant_name FROM source_tenant_name WITH
RESOURCE_POOL [=] resource_pool_name,
UNIT [=] unit_config
パラメータの説明
| パラメータ | 説明 |
|---|---|
| tenant_name | テナント名を指定します。最大63バイトで、大文字と小文字の英字、数字、アンダースコアのみを使用できます。また、テナント名は英字またはアンダースコアで始まる必要があり、OceanBaseデータベースのキーワードであってはなりません。 |
| IF NOT EXISTS | 作成するテナント名が既に存在し、IF NOT EXISTS が指定されていない場合、エラーが報告されます。 |
| LOCALITY | レプリカのゾーン間の分散状況を説明します。現行バージョンでサポートされているレプリカタイプは以下のとおりです:
例: LOCALITY = 'F@z1,F@z2,F@z3'、LOCALITY = 'F@z1,R@z2,C@z3'、LOCALITY = 'F@z1,R@z2,COLUMNSTORE@z3' |
| PRIMARY_ZONE | テナントが属するPrimary Zoneを指定します。主に以下の値をサポートします:
テナント作成時にPrimary Zoneが指定されていない場合、デフォルト値は RANDOMです。 |
| RESOURCE_POOL_LIST | テナントに割り当てるリソースプールのリストを指定します。テナント作成時にこのパラメータを指定する必要があります。 複数のリソースプールがある場合、複数のリソースプールの UNIT_NUMの数が一致している必要があります。
注意同一テナント内の複数のリソースプールに対応する |
| ENABLE_ARBITRATION_SERVICE | テナントでアービトレーションサービスを有効にするかどうかを指定します。指定されていない場合、デフォルト値はFalseです。クラスタ内にアービトレーションサービスがあるシナリオでは、テナント作成時にアービトレーションサービスが有効にされていない場合でも、テナント作成後にアービトレーションサービスを有効にできます。詳細な操作については、テナントでアービトレーションサービスを有効にするを参照してください。 |
| CHARACTER SET | CHARSET | テナントレベルの文字セットを指定します。文字セットの詳細については、文字セット(MySQLモード)および文字セット(Oracleモード)を参照してください。 |
| COLLATE | MySQL互換モードのテナントを作成する場合、テナントレベルの照合順序を指定します。MySQLモードの照合順序の詳細については、照合順序(MySQLモード)を参照してください。
説明Oracle互換モードのテナントを作成する場合、テナントレベルの照合順序を指定することはできません。照合順序を指定しても文法エラーは発生しませんが、指定した値は無視され、文字セットに対応するシステムのデフォルト照合順序が使用されます。 |
| READ ONLY | READ WRITE | テナントのプロパティを読み取り専用または読み書き可能に指定します。指定されていない場合、デフォルトは読み書き可能です。 |
| set_sys_var | テナントレベルのシステム変数値を指定します。var_nameの詳細については、以下のvar_nameを参照してください。 |
| COMMENT | コメントを入力します。オプションです。 |
| clone_tenant_clause | テナントクローン句。 |
| new_tenant_name | 新しいクローンテナントの名前。 |
| source_tenant_name | ソーステナント名、つまりクローン対象のテナント名。 |
| resource_pool_name | リソースプールの名前を表します。テナントをクローンすると、ソーステナントのリソース分布に基づいて、新しいテナント用に自動的にリソースプールが作成されます。 |
| unit_config | 新しいクローンテナントのリソースプールのユニット仕様。 |
var_name
var_name の一般的な値は以下のとおりです:
ob_compatibility_mode:テナントの互換モードを指定します(MySQLまたはOracleモードを選択可能)。この値は作成時にのみ指定できます。ob_compatibility_modeを指定しない場合、デフォルトの互換モードはMySQLとなります。ob_tcp_invited_nodes:テナントへの接続アローリストを指定します。つまり、どのクライアントIPアドレスがそのテナントに接続できるかを許可します。例では、%はすべてのクライアントからのログインを許可することを意味します。ob_tcp_invited_nodesの値を指定しない場合、デフォルトではテナントへの接続はローカルIPアドレスからのみ許可されます。lower_case_table_names:大文字と小文字を区別するかどうかを制御します。この値はCREATE TENANTステートメントを使用してテナントを作成する際にのみ指定でき、MySQLモードでのみ有効です。テナント作成後はSQLステートメントで変更できません。ob_compatibility_control:MySQL互換動作における競合が発生した場合の動作を制御します。現在の値はMYSQL5.7とMYSQL8.0であり、それぞれMySQL 5.7とMySQL 8.0の動作を維持するかどうかを示します。MySQLモードのテナントを作成する際には、この変数を指定する必要があり、作成時にのみ指定可能です。テナント作成後の変更は許可されません。明示的にob_compatibility_controlを指定しない場合、デフォルトではMySQL 5.7との互換動作を維持します。
例
test_tenantという名前のMySQL互換モードのテナントを作成します。プライマリゾーンはzone1;zone2,zone3、リソースプールはpool1、文字セットはutf8mb4で、すべてのクライアントIPアドレスからデータベースへの接続を許可します。obclient [oceanbase]> CREATE TENANT IF NOT EXISTS test_tenant PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1'), CHARSET='utf8mb4' SET ob_tcp_invited_nodes TO '%';tenant_cという名前のMySQL互換モードのテナントを作成します。ローカリティはF@zone1,F@zone2,C@zone3、プライマリゾーンはzone1;zone2,zone3、リソースプールはpool1で、すべてのクライアントIPアドレスからデータベースへの接続を許可します。注意
カラムストアレプリカを含むテナントを作成した後、カラムストアレプリカにアクセスするには、追加でODPをデプロイし、一連の設定を行って接続をカラムストアレプリカにルーティングする必要があります。カラムストアレプリカの詳細な使用方法については、カラムストアレプリカを参照してください。
obclient [oceanbase]> CREATE TENANT tenant_c LOCALITY = 'F@zone1,F@zone2,C@zone3', primary_zone='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes = '%';tenant1という名前のOracle互換モードのテナントを作成します。プライマリゾーンはzone1、リソースプールはpool1で、すべてのクライアントIPアドレスからデータベースへの接続を許可します。obclient [oceanbase]> CREATE TENANT tenant1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('pool1') SET ob_compatibility_mode='oracle', ob_tcp_invited_nodes='%';新しいクローンテナントの名前を
clone_mysql001、スタンバイテナントをmysql001とします。ここで、新しいテナントのリソースプール名をclone_mysql001_resource_pool、リソースユニットをunit001と指定します。注意
テナントクローン機能はログアーカイブに依存しており、ソーステナントでログアーカイブを有効にして初めてそのテナントのクローンを実行できます。また、テナントクローンステートメントの実行中は、ソーステナントのログアーカイブを無効にすることはできません。ログアーカイブの詳細については、ログアーカイブの概要を参照してください。
CREATE TENANT clone_mysql001 FROM mysql001 WITH RESOURCE_POOL = clone_mysql001_resource_pool, UNIT = unit001;システムテナントでテナントクローンステートメントを実行すると、対応するクローンタスクが生成されます。DBA_OB_CLONE_PROGRESSおよびDBA_OB_CLONE_HISTORYビューを使用して、クローンタスクの実行状態を確認できます。
例:
obclient [(none)]> SELECT * FROM oceanbase.DBA_OB_CLONE_HISTORY WHERE CLONE_TENANT_NAME = 'clone_mysql001'\G実行結果は次のとおりです:
*************************** 1. row *************************** CLONE_JOB_ID: 1706248530701634201 TRACE_ID: YB42AC1E87C9-00060F1AD6DF0264-0-0 SOURCE_TENANT_ID: 1002 SOURCE_TENANT_NAME: mysql001 CLONE_TENANT_ID: 1012 CLONE_TENANT_NAME: clone_mysql001 TENANT_SNAPSHOT_ID: 1706248530759745885 TENANT_SNAPSHOT_NAME: _inner_snapshot$1706248530759740679 RESOURCE_POOL_ID: 1006 RESOURCE_POOL_NAME: clone_mysql001_resource_pool UNIT_CONFIG_NAME: unit001 RESTORE_SCN: 1706248531829799503 STATUS: CLONE_SYS_SUCCESS CLONE_JOB_TYPE: FORK CLONE_START_TIME: 2024-01-26 13:55:30.705699 CLONE_FINISHED_TIME: 2024-01-26 13:56:00.141434 RET_CODE: 0 ERROR_MESSAGE: NULL 1 row in set
ビューのフィールドの詳細については、DBA_OB_CLONE_PROGRESSおよびDBA_OB_CLONE_HISTORYを参照してください。