本記事では、SQLステートメントを使用してテーブルグループを作成する方法について説明します。また、テーブルグループの作成に必要な前提条件、テーブルグループの概要、制限事項および推奨事項などを紹介し、いくつかの例も示します。
はじめに
OceanBaseデータベースでは、テーブルグループは論理的な概念であり、テーブルの集合を表します。テーブルグループを定義することで、一連のテーブルの物理的な配置上の近接性を制御できます。
OceanBaseデータベースのテーブルグループの詳細については、テーブルグループについてを参照してください。
前提条件
テーブルグループを作成する前に、以下の事項を確認してください:
OceanBaseクラスタをデプロイし、Oracleモードのテナントを作成していること。OceanBaseクラスタのデプロイに関する詳細は、デプロイの概要を参照してください。
OceanBaseデータベースのOracleテナントに接続されていること。データベースへの接続に関する詳細は、接続方法の概要を参照してください。
テーブルグループ作成の制限
- OceanBaseデータベースでは、各テーブルグループ名は同一テナント内で一意である必要があります。
- テーブルグループ名は64文字を超えてはなりません。
- テーブルグループ名には大文字と小文字の英字、数字、アンダースコアのみを含めることができ、かつ、英字またはアンダースコアで始まる必要があります。
- テーブルグループ名にはOceanBaseデータベースのキーワードを使用することはできません。OceanBaseデータベースのOracleモードで予約されているキーワードの詳細については、予約語を参照してください。
テーブルグループ作成に関する推奨事項
- テーブルグループ名は簡潔で分かりやすく、後の管理とメンテナンスを容易にするために、その用途と内容を明確に反映した記述的なものにすることを推奨します。例えば、業務要件、機能モジュール、データタイプなどの要素に基づいて命名し、注文テーブルグループ、ユーザーテーブルグループ、製品テーブルグループをそれぞれ
order_tablegroup、user_tablegroup、product_tablegroupと命名することができます。 - テーブルグループを作成する前に、業務要件、データの関連性、クエリパターンなどの要素を考慮し、テーブルをグループ化する必要があるかどうかを判断するための適切な計画と設計を行うことを推奨します。
- クエリの効率とデータの可用性を向上させるため、テーブルの関連性とクエリ頻度に基づいて、関連するテーブルを同一のテーブルグループ内に配置することを推奨します。
- データのセキュリティと整合性を維持するため、テーブルグループの権限を適切に付与および管理し、権限を持つユーザーのみがテーブルグループを操作できるようにすることを推奨します。
コマンドラインを使用したテーブルグループの作成
CREATE TABLEGROUP ステートメントを使用してテーブルグループを作成します。
CREATE TABLEGROUP ステートメントの構文は以下のとおりです:
CREATE TABLEGROUP tablegroup_name [tablegroup_option];
パラメータ説明:
tablegroup_name:テーブルグループ名。tablegroup_option:テーブルグループのSHARDINGプロパティ。オプションです。SHARDINGプロパティを指定しない場合、デフォルトでADAPTIVEのテーブルグループが作成されます。テーブルグループのSHARDINGプロパティの取り得る値は以下のとおりです:NONE:テーブルグループに追加するテーブルに制限はありません。PARTITION:テーブルグループに追加するテーブルの対応するパーティション(パーティションタイプ、パーティション数、パーティションValueを含む)は、テーブルグループ内のすべてのテーブルのパーティション方式と一致している必要があります。ADAPTIVE:SHARDINGを指定しない場合のデフォルト値。テーブルグループに追加するテーブルの対応するパーティションとサブパーティション(パーティションタイプ、パーティション数、パーティションValueを含む)は、テーブルグループ内のすべてのテーブルのパーティションとサブパーティションの方式と一致している必要があります。
パーティションの詳細については、パーティションの概要を参照してください。
説明
テナント内のテーブルグループ情報は、ビューoceanbase.CDB_OB_TABLEGROUPSで確認できます。
例
例1:SHARDINGプロパティを指定しないテーブルグループを作成する
SHARDINGプロパティを指定せずに、test_tbl_tg1という名前のテーブルグループを作成します。CREATE TABLEGROUP test_tbl_tg1;以下のSQLステートメントを使用して、Hash + Rangeサブパーティションのパーティションテーブル
test_tbl1_hrを作成し、TABLEGROUPをtest_tbl_tg1に指定します。CREATE TABLE test_tbl1_hr(col1 NUMBER,col2 NUMBER) TABLEGROUP = test_tbl_tg1 PARTITION BY HASH(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION p0 VALUES LESS THAN(100), SUBPARTITION p1 VALUES LESS THAN(200), SUBPARTITION p2 VALUES LESS THAN(300) ) PARTITIONS 10;以下のSQLステートメントを使用して、非パーティションテーブル
test_tbl1を作成し、TABLEGROUPをtest_tbl_tg1に指定すると、エラーが表示されます。CREATE TABLE test_tbl1 (col NUMBER,col2 NUMBER) TABLEGROUP = test_tbl_tg1;実行結果は次のとおりです:
OBE-00600: internal error code, arguments: -4179, not all tables are non-partitioned or partitioned, add table to tablegroup not allowed以下のSQLステートメントを使用して、Hashパーティションのパーティションテーブル
test_tbl1_hを作成し、TABLEGROUPをtest_tbl_tg1に指定すると、エラーが表示されます。CREATE TABLE test_tbl1_h(col1 NUMBER,col2 NUMBER) TABLEGROUP = test_tbl_tg1 PARTITION BY HASH(col1) PARTITIONS 10;実行結果は次のとおりです:
OBE-00600: internal error code, arguments: -4179, part level is not equal, add table to tablegroup not allowed以下のSQLステートメントを使用して、テーブルグループ
test_tbl_tg1に含まれるテーブルを確認します。注意
OceanBaseデータベースのOracleモードでは、ビュー sys.DBA_OB_TABLEGROUP_TABLES を使用してテーブルグループをクエリする際、テーブルグループ名に含まれる英字は大文字である必要があります。
SELECT * FROM sys.DBA_OB_TABLEGROUP_TABLES WHERE tablegroup_name = 'TEST_TBL_TG1';実行結果は次のとおりです:
+-----------------+-------+--------------+----------+ | TABLEGROUP_NAME | OWNER | TABLE_NAME | SHARDING | +-----------------+-------+--------------+----------+ | TEST_TBL_TG1 | SYS | TEST_TBL1_HR | ADAPTIVE | +-----------------+-------+--------------+----------+ 1 row in set
例2:指定されたSHARDINGプロパティを持つテーブルグループを作成する
SHARDINGプロパティをNONEに指定したテーブルグループの作成
以下のSQLステートメントを使用して、
SHARDINGプロパティをNONEに指定したtest_tbl_tg2という名前のテーブルグループを作成します。CREATE TABLEGROUP test_tbl_tg2 SHARDING = 'NONE';以下のSQLステートメントを使用して、非パーティションテーブル
test_tbl2を作成し、TABLEGROUPをtest_tbl_tg2に指定します。CREATE TABLE test_tbl2 (col NUMBER) TABLEGROUP = test_tbl_tg2;以下のSQLステートメントを使用して、パーティションテーブル
test_tbl2_hを作成し、TABLEGROUPをtest_tbl_tg2に指定します。CREATE TABLE test_tbl2_h(col1 NUMBER,col2 VARCHAR(50)) TABLEGROUP = test_tbl_tg2 PARTITION BY HASH(col1) PARTITIONS 10;
SHARDINGプロパティをPARTITIONに指定したテーブルグループの作成
以下のSQLステートメントを使用して、
SHARDINGプロパティをPARTITIONに指定したtest_tbl_tg3という名前のテーブルグループを作成します。CREATE TABLEGROUP test_tbl_tg3 SHARDING = 'PARTITION';以下のSQLステートメントを使用して、Hashパーティションのパーティションテーブル
test_tbl3_hを作成し、TABLEGROUPをtest_tbl_tg3に指定します。CREATE TABLE test_tbl3_h(col1 NUMBER) TABLEGROUP = test_tbl_tg3 PARTITION BY HASH(col1) PARTITIONS 10;以下のSQLステートメントを使用して、非パーティションテーブル
test_tbl3を作成し、TABLEGROUPをtest_tbl_tg3に指定すると、エラーが表示されます。CREATE TABLE test_tbl3 (col NUMBER) TABLEGROUP = test_tbl_tg3;実行結果は次のとおりです:
OBE-00600: internal error code, arguments: -4179, not all tables are non-partitioned or partitioned, add table to tablegroup not allowed以下のSQLステートメントを使用して、Hash + Rangeパーティションのサブパーティションテーブル
test_tbl3_hrを作成し、TABLEGROUPをtest_tbl_tg3に指定します。CREATE TABLE test_tbl3_hr(col1 NUMBER,col2 NUMBER) TABLEGROUP = test_tbl_tg3 PARTITION BY HASH(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE (SUBPARTITION p0 VALUES LESS THAN(100), SUBPARTITION p1 VALUES LESS THAN(200), SUBPARTITION p2 VALUES LESS THAN(300) ) PARTITIONS 10;
次のステップ
テーブルグループを作成した後、条件に合致する既存のテーブルをテーブルグループに追加できます。具体的な操作については、テーブルのテーブルグループへの追加を参照してください。
関連ドキュメント
- テーブルグループの表示に関する詳細は、テーブルグループ情報の表示を参照してください。
- テーブルグループ内のテーブルの変更に関する詳細は、テーブルグループ内のテーブルの管理を参照してください。
- テーブルグループの削除に関する詳細は、テーブルグループの削除を参照してください。