本記事では、SQLステートメントを使用してテーブルを作成する方法について説明します。また、テーブル作成の前提条件、テーブルの概要、遵守すべき要件などを紹介し、いくつかの例も示します。
テーブルの概要
テーブルは、一連の二次元配列の集合であり、データオブジェクト間の関係を表現し、データを格納するために使用されます。データベーステーブルを適切に設計し、活用することで、データの信頼性、一貫性、およびクエリ性能を向上させ、データベース内のデータを効果的に管理・利用できます。
OceanBaseデータベースのテーブルに関する詳細情報については、テーブルの概要を参照してください。
前提条件
テーブルを作成する前に、以下の事項を確認してください:
OceanBaseクラスタをデプロイし、Oracleモードのテナントを作成していること。OceanBaseクラスタのデプロイに関する詳細は、デプロイの概要を参照してください。
OceanBaseデータベースのOracleテナントに接続されていること。データベースへの接続に関する詳細は、接続方法の概要を参照してください。
CREATE TABLE権限を保有していることを確認してください。現在のユーザー権限を確認するその他の操作については、ユーザー権限の確認を参照してください。この権限がない場合は、管理者に連絡し権限の付与を依頼してください。ユーザー権限に関する操作については、直接権限の付与を参照してください。
コマンドラインでテーブルを作成する
CREATE TABLE ステートメントを使用してテーブルを作成してください。
テーブル名の定義
テーブルを作成する際には、まずテーブル名を付ける必要があります。テーブル名を定義する際に従うべき要件は以下のとおりです:
OceanBaseデータベースのOracleモードでは、各テーブル名はスキーマ内で一意である必要があります。
テーブルに名前を付ける際には、実際の意味を持つ名前を使用し、
table1のような名前は使用しないでください。
例1: 注文情報に関するテーブルを作成します。
obclient [SYS]> CREATE TABLE ordr (c1 NUMBER, c2 VARCHAR2(50));
Query OK, 0 rows affected
列の定義
データベースにおいて、列(Column)はテーブル上の特定の属性の値を記録するためのフィールドであり、ユーザーが各属性に付けた名前が列名となります。列名に加え、列にはデータ型やデータ型の最大長(精度)などの情報も含まれます。
テーブルの列を定義する際に従うべき要件は以下のとおりです:
データ型の特性に基づき、列に格納されるデータに適切なデータ型を選択します。
OceanBaseデータベースのOracleモードでサポートされているデータ型と詳細については、データ型の概要を参照してください。
文字列データについては、可変長文字列データ型を使用し、最大長を指定することを推奨します。指定する最大長は、保存が必要な最大文字数よりも大きく設定し、最大長を超えた場合に文字が切り捨てられるのを防いでください。
主キー列の要件に基づき、テーブルに主キー列を定義する必要があるかどうかを確認します。
その他の制約の要件に基づき、列にその他の制約を追加する必要があるかどうかを確認します。
列に
NOT NULL制約がある場合、通常はその列にデフォルト値を設定することを推奨します。列の型が日付または時刻型の場合、デフォルト値をデータベースの現在時刻に設定できます。
主キー列の定義
主キー値ルール(Primary Key Value Rule)は、特定のキー(Key、キーとは1列または複数列の集合を指す)に定義されるルールであり、テーブル内の各行データが特定のキー値によって一意に決定されることを保証する役割を果たします。各データベーステーブルでは、最大1つのPRIMARY KEY制約を定義できます。この制約を構成する列(1列または複数列)の値は、1行データの一意の識別子として機能し、すなわち各行データはその主キー値によって名付けることができます。
主キーを持つテーブルを作成すると、システムは自動的に主キー列に対してグローバル一意のインデックスを作成し、主キーを通じて行を迅速に特定できるようにします。
特定の列を主キー列として指定するには、その列の定義後にPRIMARY KEYキーワードを追加します。複数列に主キー制約を定義する場合は、CREATE TABLEステートメント内のすべての列リストの後に主キー制約の定義を追加します。
主キー列を定義する際には、以下の要件に従う必要があります:
テーブルに主キーを定義することを推奨します。各データベーステーブルは、最大1つの主キー列の集合を持ちます。
OceanBaseデータベースでは、ユーザーによるテーブルの主キー定義は必須ではありませんが、主キーを使用することでテーブル内の各行データを一意に特定でき、重複するデータ行が存在しなくなります。適切なフィールドが主キーとして使用できない場合は、テーブルに数値列を追加して主キーとし、Oracleテナントのシーケンスを使用してその列に値を挿入することができます。シーケンスの詳細については、シーケンスの管理を参照してください。
また、作成時に主キー列を定義しなかった場合でも、OceanBaseデータベースは既存のテーブルに主キー列を追加することをサポートしています。
主キー列の集合の値は、テーブル全体で一意である必要があります。
主キー列の数は64列を超えてはならず、主キーデータの総長は16KBを超えてはなりません。
主キー列の値はNULLまたは空文字列にすることはできません。主キー列には値を入力する必要があります。
複数列に主キー制約を定義する場合、主キー制約の名前を明示的に指定することを推奨します。例えば、主キー制約の名前を「PK_xxx」とします。
主キー制約に関する詳細は、主キー制約を参照してください。
例2:複数列に主キー制約を定義します。
obclient [SYS]> CREATE TABLE ordr (c1 NUMBER, c2 VARCHAR2(50), CONSTRAINT PK_c1_c2 PRIMARY KEY(c1, c2));
Query OK, 0 rows affected
obclient [SYS]> desc ordr;
+-------+--------------+------+-----+---------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+-------+--------------+------+-----+---------+-------+
| C1 | NUMBER | NO | PRI | NULL | NULL |
| C2 | VARCHAR2(50) | NO | PRI | NULL | NULL |
+-------+--------------+------+-----+---------+-------+
2 rows in set
例2では、c1、c2列を主キー列として定義し、制約名をPK_c1_c2としています。c1、c2列の値はNULLを許容せず、かつ一意である必要があります。
主キー列を定義した後、主キー列の変更や主キーの削除が可能です。主キー制約に関するその他の操作については、列の制約タイプの定義を参照してください。
その他の列制約の定義
OceanBaseデータベースでは、PRIMARY KEY 制約に加えて、NOT NULL 制約、一意性(UNIQUE)制約、外部キー(FOREIGN KEY)制約、および CHECK 制約もサポートしています。制約を使用することで、テーブルのクエリを簡略化し、クエリのパフォーマンスを向上させるとともに、データが意味的に有効であることを保証できます。
各制約タイプと説明は以下のとおりです:
ノルルール(
NOT NULL):制約された列の値がNULLであることを許可しないことを示します。NOT NULL制約がある列については、その列にNULLではないデフォルト値が定義されている場合を除き、
INSERTステートメントでその列の値を指定する必要があります。一意性制約(
UNIQUE):制約された列の値に重複があることを許可しませんが、複数のNULL値は存在できます。外部キー制約(
FOREIGN KEY):制約された列の値が、別のテーブルの主キー列から取得されることを要求します。外部キー制約を作成する際、外部キー名を指定しない場合、システムは自動的に制約名を割り当てます。自動割り当てられる制約名は
テーブル名_OBFK_作成タイムスタンプの形式です。例:t1_OBFK_1627747200000000。CHECK制約:データベース内の特定の列の値が指定された条件に適合することを要求します。単一の列に対して1つ以上の
CHECK制約を定義し、その列に特定の値のみを許可することができます。また、テーブルレベルのCHECK制約を定義し、1つのCHECK制約を複数の列に適用することもできます。テーブル名を変更しても、CHECK制約名は変更されません。特定のテーブルを削除すると、そのテーブルに適用されていたCHECK制約も削除されます。CHECK制約を作成する際、制約名を指定しない場合、システムは自動的に制約名を割り当てます。自動割り当てられる制約名はテーブル名_OBCHECK_作成タイムスタンプの形式です。例:t1_OBCHECK_1629350823880271。
単一の列を制約するには、その列の定義に制約キーワードを追加します。複数の列を制約するには、CREATE TABLE ステートメント内のすべての列のリストの後に、制約全体の定義を追加します。
以下は、その他の列制約を定義する際に従うべき要件です:
NULL値が明確に存在しないフィールドには、
NOT NULL制約を追加することを推奨します。別のテーブルの値を参照する場合は、外部キー制約を使用してください。
組み合わせ主キーは外部キーとして使用できません。
列に重複値が発生するのを防ぐ必要がある場合は、一意性制約を使用してください。
NOT NULL制約以外の制約については、その名前を明示的に指定することを推奨します。例えば、一意性制約は「UNI_xxx」と命名し、外部キー制約は「FK_xxx」と命名します。
例3:テーブル tbl1 を作成し、列 col1 にノルルールを設定します。
obclient [SYS]> CREATE TABLE tbl1(col1 NUMBER NOT NULL,col2 VARCHAR2(50));
Query OK, 0 rows affected
obclient [SYS]> DESC tbl1;
+-------+--------------+------+-----+---------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+-------+--------------+------+-----+---------+-------+
| COL1 | NUMBER | NO | NULL | NULL | NULL |
| COL2 | VARCHAR2(50) | YES | NULL | NULL | NULL |
+-------+--------------+------+-----+---------+-------+
2 rows in set
例3では、後からデータを挿入する際、列 col1 に挿入する値は NULL にすることができません。
例4:テーブル tbl2 を作成し、列 col1 に一意性制約を設定します。
obclient [SYS]> CREATE TABLE tbl2(col1 NUMBER UNIQUE,col2 VARCHAR2(50));
Query OK, 0 rows affected
obclient [SYS]> DESC tbl2;
+-------+--------------+------+-----+---------+-------+
| FIELD | TYPE | NULL | KEY | DEFAULT | EXTRA |
+-------+--------------+------+-----+---------+-------+
| COL1 | NUMBER | YES | UNI | NULL | NULL |
| COL2 | VARCHAR2(50) | YES | NULL| NULL | NULL |
+-------+--------------+------+-----+---------+-------+
2 rows in set
例4では、列 col1 の値に重複があってはなりません。
例5:テーブル tbl3 の外部キー制約を作成します。
obclient [SYS]> CREATE TABLE test(c1 NUMBER, c2 NUMBER, CONSTRAINT PK_c1 PRIMARY KEY(c1));
Query OK, 0 rows affected
obclient [SYS]> CREATE TABLE tbl3(col1 NUMBER PRIMARY KEY,col2 NUMBER,CONSTRAINT FK_col2 FOREIGN KEY(col2) REFERENCES test(c1));
Query OK, 0 rows affected
obclient [SYS]> SELECT * FROM ALL_CONSTRAINTS\G
*************************** 1. row ***************************
OWNER: SYS
CONSTRAINT_NAME: FK_COL2
CONSTRAINT_TYPE: R
TABLE_NAME: TBL3
SEARCH_CONDITION: NULL
R_OWNER: SYS
R_CONSTRAINT_NAME: PK_C1
DELETE_RULE: NO ACTION
STATUS: ENABLED
DEFERRABLE: NOT DEFERRABLE
DEFERRED: IMMEDIATE
VALIDATED: VALIDATED
GENERATED: NULL
BAD: NULL
RELY: NULL
LAST_CHANGE: NULL
INDEX_OWNER: NULL
INDEX_NAME: NULL
INVALID: NULL
VIEW_RELATED: NULL
*************************** 2. row ***************************
OWNER: SYS
CONSTRAINT_NAME: PK_C1
CONSTRAINT_TYPE: P
TABLE_NAME: TEST
SEARCH_CONDITION: NULL
R_OWNER: NULL
R_CONSTRAINT_NAME: NULL
DELETE_RULE: NULL
STATUS: ENABLED
DEFERRABLE: NOT DEFERRABLE
DEFERRED: IMMEDIATE
VALIDATED: VALIDATED
GENERATED: NULL
BAD: NULL
RELY: NULL
LAST_CHANGE: NULL
INDEX_OWNER: SYS
INDEX_NAME: PK_C1
INVALID: NULL
VIEW_RELATED: NULL
*************************** 3. row ***************************
OWNER: SYS
CONSTRAINT_NAME: TBL3_OBPK_1666339106039791
CONSTRAINT_TYPE: P
TABLE_NAME: TBL3
SEARCH_CONDITION: NULL
R_OWNER: NULL
R_CONSTRAINT_NAME: NULL
DELETE_RULE: NULL
STATUS: ENABLED
DEFERRABLE: NOT DEFERRABLE
DEFERRED: IMMEDIATE
VALIDATED: VALIDATED
GENERATED: NULL
BAD: NULL
RELY: NULL
LAST_CHANGE: NULL
INDEX_OWNER: SYS
INDEX_NAME: TBL3_OBPK_1666339106039791
INVALID: NULL
VIEW_RELATED: NULL
3 rows in set
例5では、テーブル tbl3 の列 col2 が別のテーブル test の主キー列 c1 に関連付けられています。作成が成功すると、ALL_CONSTRAINTS、DBA_CONSTRAINTS、または USER_CONSTRAINTS ビューで確認できます。
例6:テーブル tbl4 を作成し、列 col1 の値が 10 より大きいことを設定します。
obclient [SYS]> CREATE TABLE tbl4(col1 NUMBER CHECK(col1>10),col2 VARCHAR2(50));
Query OK, 0 rows affected
obclient [SYS]> INSERT INTO tbl4 VALUES(2,'CN');
OBE-02290: check constraint violated
obclient [SYS]> INSERT INTO tbl4 VALUES(11,'CN');
Query OK, 1 row affected
例6では、列 col1 に CHECK 制約が追加されているため、後から列 col1 に 10 以上の値を挿入するとエラーが発生します。
その他の列制約を定義する詳細な操作については、列の制約タイプの定義を参照してください。
パーティション方式の選択
テーブル作成時には、テーブルのパーティション方式を明確に指定する必要があります。テーブルのデータ量が非常に多い場合は、パーティション化を推奨します。パーティションテーブルを作成する際には、テーブルに格納するデータに基づいて適切なパーティショニング方式を選択する必要があります。
OceanBaseデータベースのOracleモードでは、パーティショニング戦略に基づき、パーティションテーブルはRangeパーティション、Listパーティション、Hashパーティション、および組み合わせパーティションに分類されます。パーティション次元に基づくと、パーティションテーブルはパーティションとサブパーティションに分けられます。サブパーティションはパーティションのさらなる分割であるため、パーティションテーブルには1つのパーティションキーが、サブパーティションテーブルには2つのパーティションキーが存在し、2回の分割戦略も異なる場合があります。
パーティションに関する詳細は、パーティションの概要を参照してください。
Rangeパーティション
Rangeパーティションは最も一般的なパーティションタイプで、通常は日付と共に使用されます。Rangeパーティションを行う際、データベースはパーティションキーの値の範囲に基づいて行をパーティションにマッピングします。
Rangeパーティションを作成する際には、以下の要件に従う必要があります:
各パーティションには
VALUES LESS THAN(value)句があり、パーティションに含まれない上限値を指定します。パーティションキーの値がこの値以上の場合、次のパーティションにマッピングされます。最初のパーティションを除き、すべてのパーティションには暗黙の下限値があり、それは前のパーティションの上限値です。
Rangeパーティションでは、最後のパーティションに
MAXVALUEを定義できます。MAXVALUEは仮想的な無限大の値を表し、パーティションキーの他の任意の値よりも高い順位を持ちます。MAXVALUEは最後のパーティションの上限にのみ定義でき、この値に具体的な数値はなく、他のすべてのパーティションの上限よりも大きく、NULL値も含みます。最後のRangeパーティションにMAXVALUEが指定されている場合、新しいパーティションを追加することはできません。
例7:Rangeパーティションテーブルを作成します。
obclient [SYS]> CREATE TABLE tb1_r(col1 NUMBER,col2 NUMBER)
PARTITION BY RANGE(col1)
(PARTITION p0 VALUES LESS THAN(100),
PARTITION p1 VALUES LESS THAN(200),
PARTITION p2 VALUES LESS THAN(300)
);
Query OK, 0 rows affected
例7では、col1 をパーティションキーとして使用しています。パーティションテーブル tb1_r は、100、200、300 の数値範囲に基づいてパーティション化されます。p0、p1、p2 は指定されたパーティション名で、カスタマイズ可能です。同一テーブル内で各パーティション名が重複しないことが条件です。
Listパーティション
Listパーティションを行う際、システムは離散値のリストを各パーティションのパーティションキーとして使用します。パーティションキーは1列または複数列で構成されます。
Listパーティションを作成する際には、以下の要件に従う必要があります:
各パーティションには
VALUES (value_list)句があります。パーティション式は1列のみを参照でき、複数列(列ベクトル)は使用できません。
最後のListパーティションに
DEFAULTが指定されている場合、新しいパーティションを追加することはできません。
例8:Listパーティションテーブルを作成します。
obclient [SYS]> CREATE TABLE tbl2_l (col1 NUMBER,col2 DATE)
PARTITION BY LIST(col1)
(PARTITION p0 VALUES (100),
PARTITION p1 VALUES (200)
);
Query OK, 0 rows affected
例8では、col1 列をパーティションキーとして使用しています。テーブル tbl2_l は、100、200 の列値に基づいてパーティション化されます。
Hashパーティション
Hashパーティションを行う際、システムはユーザーが指定したパーティションキーのハッシュアルゴリズムに基づいて行をパーティションにマッピングします。Hashパーティションは、ノード間でデータを均等に分散する理想的な方法です。また、Hashパーティションは、特にパーティション化するデータが履歴データではない場合や明確なパーティションキーがない場合に、Rangeパーティションの使いやすい代替手段でもあります。
例9:Hashパーティションテーブルを作成します。
obclient [SYS]> CREATE TABLE tbl3_h(col1 NUMBER,col2 NUMBER)
PARTITION BY HASH(col1) PARTITIONS 2;
Query OK, 0 rows affected
例9では、col1 をパーティションキーとして使用し、テーブル tbl3_h を2つの区に分割しています。テーブル作成時にHashパーティションの名前を指定しなかったため、パーティション名はシステムが命名規則に基づいて自動生成します。すなわち、各パーティションはそれぞれ p0、p1、...、pn と命名されます。
組み合わせパーティション(サブパーティション)
組み合わせパーティションは通常、まず1つのパーティショニング戦略を使用し、その後サブパーティションで別の戦略を使用するもので、業務テーブルのデータ量が非常に多い場合に適しています。組み合わせパーティションを使用することで、複数のパーティショニング戦略の利点を活かすことができます。
Rangeパーティション、Listパーティション、Hashパーティションは、いずれも組み合わせパーティションテーブルのサブパーティション戦略として使用できます。OceanBaseデータベースでは、サブパーティションテーブルには、テンプレート型サブパーティションテーブルと非テンプレート型サブパーティションテーブルが含まれます。
以下の簡単な例を通じて、サブパーティションテーブルの作成方法を簡潔に紹介します。
例10:Range + Listパーティションのテンプレート型サブパーティションテーブルを作成します。
obclient [SYS]> CREATE TABLE tbl4_m_rl(col1 NUMBER,col2 VARCHAR2(50))
PARTITION BY RANGE(col1)
SUBPARTITION BY LIST(col2)
SUBPARTITION TEMPLATE
(SUBPARTITION mp0 VALUES('01'),
SUBPARTITION mp1 VALUES('02'),
SUBPARTITION mp2 VALUES('03')
)
(PARTITION p0 VALUES LESS THAN(100),
PARTITION p1 VALUES LESS THAN(200)
);
Query OK, 0 rows affected
例10では、SUBPARTITION TEMPLATE キーワードを使用してテンプレート型サブパーティションテーブルを作成します。テンプレート型サブパーティションテーブルでは、各パーティションの下のサブパーティションがテンプレート内のサブパーティション定義に従って作成されます。つまり、各パーティションの下のサブパーティションの定義はすべて同じです。この例では、まずRangeパーティション方式でパーティション化し、その後Listパーティション方式で2次パーティション化します。
また、テンプレート型サブパーティションを作成する際、サブパーティションの定義が完了した後、個々のパーティション名を別途指定する必要はありません。システムが命名規則に基づいて一括で行います。各サブパーティションの命名規則は ($part_name)s($subpart_name) です。例を以下に示します。
例11:List + Hashパーティションのテンプレート型サブパーティションテーブルを作成します。
obclient [SYS]> CREATE TABLE tbl5_m_lh(col1 INT,col2 VARCHAR2(50))
PARTITION BY LIST(col1)
SUBPARTITION BY HASH(col2) SUBPARTITIONS 5
(PARTITION p0 VALUES('01'),
PARTITION p1 VALUES('02')
);
Query OK, 0 rows affected
obclient [SYS]> SHOW CREATE TABLE tbl5_m_lh;
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TABLE | CREATE TABLE
|
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| TBL5_M_LH | CREATE TABLE "TBL5_M_LH" (
"COL1" NUMBER(*,0),
"COL2" VARCHAR2(50)
) COMPRESS FOR ARCHIVE REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0
partition by list(col1) subpartition by hash(col2) subpartition template (
subpartition P0,
subpartition P1,
subpartition P2,
subpartition P3,
subpartition P4)
(partition P0 values (1),
partition P1 values (2)) |
+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set
obclient [SYS]> SELECT table_name,partition_name,subpartition_name FROM USER_TAB_SUBPARTITIONS WHERE table_name = 'TBL5_M_LH';
+------------+----------------+-------------------+
| TABLE_NAME | PARTITION_NAME | SUBPARTITION_NAME |
+------------+----------------+-------------------+
| TBL5_M_LH | P0 | P0SP0 |
| TBL5_M_LH | P0 | P0SP1 |
| TBL5_M_LH | P0 | P0SP2 |
| TBL5_M_LH | P0 | P0SP3 |
| TBL5_M_LH | P0 | P0SP4 |
| TBL5_M_LH | P1 | P1SP0 |
| TBL5_M_LH | P1 | P1SP1 |
| TBL5_M_LH | P1 | P1SP2 |
| TBL5_M_LH | P1 | P1SP3 |
| TBL5_M_LH | P1 | P1SP4 |
+------------+----------------+-------------------+
10 rows in set
例11では、まずHashパーティションで2次パーティション化する際にパーティション名を指定していません。システムが命名規則に基づいて自動的にサブパーティション定義 p0、p1、p2、p3、p4 を生成します。その後、テンプレート型サブパーティションの命名規則に従い、パーティション p0 に対応するパーティション名は p0smp0、p0smp1、p0smp2、p0smp3、p0smp4 となります。
注意
Hashパーティションにおいて、パーティション数を指定する方法(例えば、SUBPARTITIONS 5)で2次パーティション化する場合、テンプレート型サブパーティションテーブルを作成する際に SUBPARTITION TEMPLATE キーワードを指定する必要はありません。
例12:List + Hashパーティションの非テンプレート型サブパーティションテーブルを作成します。
obclient [SYS]> CREATE TABLE tbl6_f_lh(col1 NUMBER,col2 VARCHAR2(50))
PARTITION BY LIST(col1)
SUBPARTITION BY HASH(col2)
(PARTITION p0 VALUES('01')
(SUBPARTITION sp0,
SUBPARTITION sp1
),
PARTITION p1 VALUES('02')
(SUBPARTITION sp2,
SUBPARTITION sp3,
SUBPARTITION sp4
)
);
Query OK, 0 rows affected
例12では、非テンプレート型サブパーティションテーブルを作成するために、SUBPARTITION TEMPLATE キーワードを追加する必要はありません。非テンプレート型サブパーティションテーブルでは、各パーティションの下のサブパーティションを自由に定義できます。つまり、各パーティションの下のサブパーティションの定義は同じでも異なっても構いません。この例では、まずListパーティション方式でパーティション化し、その後Hash方式で2次パーティション化します。
レプリケーションテーブルの作成
レプリケーションテーブルは、OceanBaseデータベースにおける特殊なテーブルです。このテーブルは、任意の「正常」なレプリカでデータの最新の変更を読み取ることができます。書き込み頻度が低く、読み取り頻度が高いシナリオにおいて、レプリケーションテーブルは優れた選択肢です。
レプリケーションテーブルの詳細については、管理者ガイドのテーブルの作成にあるレプリケーションテーブルの作成の章を参照してください。
注意
レプリケーションテーブルはユーザーテナントのみが作成でき、sysテナントでは作成できません。
レプリケーションテーブルを作成するSQL構文は以下のとおりです:
CREATE TABLE table_name column_definition DUPLICATE_SCOPE='none | cluster';
パラメータの説明:
table_name:テーブル名。column_definition:テーブルの列情報。例えば、列定義、主キー定義など。DUPLICATE_SCOPE:レプリケーションテーブルの属性を指定するために使用します。取り得る値は以下のとおりです:none:このテーブルが通常のテーブルであることを示します。cluster:このテーブルがレプリケーションテーブルであることを示します。Leaderはトランザクションを現在のテナントのすべてのFレプリカおよびRレプリカに複製する必要があります。
例13:以下のSQLステートメントを使用して、レプリケーションテーブルtest_tbl13を作成します。
CREATE TABLE test_tbl13 (col1 NUMBER,col2 NUMBER) DUPLICATE_SCOPE= 'cluster';
次のステップ
テーブルの作成が完了したら、テーブルの使用と管理を整備するために、以下のいくつかの後続操作を実行する必要がある場合があります:
テーブル作成後は、
INSERTステートメントを使用してデータを挿入できます。データ挿入の詳細については、データの挿入を参照してください。クエリのパフォーマンスを向上させる必要がある場合は、テーブルの列にインデックスを作成できます。インデックス作成の詳細については、インデックスの作成を参照してください。
関連ドキュメント
- テーブルのプロパティを表示する方法の詳細については、テーブルの定義を表示するを参照してください。
- テーブルの削除方法の詳細については、テーブルの削除を参照してください。
- テーブル構造の変更方法の詳細については、テーブルの変更を参照してください。
- パーティションテーブルの作成方法の詳細については、パーティションテーブルの作成を参照してください。