本記事では、SQLステートメントを使用してテーブルグループを作成する方法について説明します。また、テーブルグループを作成するための前提条件、テーブルグループの概要、制限事項、推奨事項などを紹介し、いくつかの例を示します。
概要
OceanBaseデータベースにおいて、テーブルグループとは、Tableの集合を表す論理的な概念です。テーブルグループを定義することにより、そのグループに属するテーブル群の物理ストレージ上での近接関係を制御できます。
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;
次の操作
テーブルグループの作成後、条件に合致する既存のテーブルをテーブルグループに追加できます。具体的な操作手順については、テーブルをテーブルグループに追加するを参照してください。
関連ドキュメント
- テーブルグループの詳細については、テーブルグループ情報の確認を参照してください。
- テーブルグループ内のテーブルの変更の詳細については、テーブルグループ内のテーブルの管理を参照してください。
- テーブルグループの削除の詳細については、テーブルグループの削除を参照してください。