説明
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];
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
| COMMENT [=] 'string'
set_sys_var:
{SET | SET VARIABLES | VARIABLES} var_name {TO | =} var_value [,var_name {TO | =} var_value...]
パラメータ説明
パラメータ |
説明 |
|---|---|
| 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 | テナントが配置されるプライマリゾーンを指定します。主に以下の値をサポートします:
テナント作成時にプライマリゾーンを指定しなかった場合、デフォルト値は RANDOM です。 |
| RESOURCE_POOL_LIST | テナントに割り当てるリソースプールのリストを指定します。テナント作成時にはこのパラメータを指定する必要があります。 複数のリソースプールがある場合、各リソースプールの UNIT_NUM が一致している必要があります。
注意同一テナント内の複数のリソースプールにおいて、対応する |
| ENABLE_ARBITRATION_SERVICE | テナントでのアービトレーションサービスの有効化を指定します。指定しない場合、デフォルト値は False です。クラスタ内でアービトレーションサービスが有効なシナリオにおいて、テナント作成時にアービトレーションサービスを有効にしていない場合でも、テナント作成後に有効にできます。詳細な操作については、テナントでのアービトレーションサービスの有効化を参照してください。 |
| CHARACTER SET | CHARSET | テナントレベルの文字セットを指定します。文字セットの詳細については、文字セット(MySQLモード)および文字セット(Oracleモード)を参照してください。 |
| COLLATE | MySQL互換モードのテナントを作成する際、テナントレベルの照合順序を指定します。MySQLモードにおける照合順序の詳細については、照合順序(MySQLモード)を参照してください。
説明Oracle互換モードのテナントを作成する際は、テナントレベルの照合順序の設定はサポートされていません。設定しても構文エラーは発生しませんが、設定は反映されず、システムが文字セットに対応するデフォルトの照合順序に上書きします。 |
| set_sys_var | テナントレベルのシステム変数値を指定します。var_name の詳細については、以下の var_name を参照してください。 |
| COMMENT | コメントを入力します。オプションです。 |
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 の動作と一致します。read_only:テナントを読み取り専用モードまたは読み書きモードに設定します。設定しない場合、デフォルトは読み書きモードです。
例
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='%';