ヘッダーをスキップ
Oracle TimesTen In-Memory Database SQLリファレンス・ガイド
リリース7.0
E05176-02
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

ALTER TABLE

ALTER TABLE文は、既存の表定義を変更します。

アクセス制御

TimesTenインスタンスでアクセス制御が有効な場合、この文にはDDL権限が必要です。

SQL構文

列の追加:

  ALTER TABLE [Owner.]TableName

  ADD [COLUMN] ColumnName ColumnDataType

    [DEFAULT DefaultVal] [[NOT] INLINE] [UNIQUE] [NULL]

または

  ALTER TABLE [Owner.]TableName

  ADD (ColumnName ColumnDataType

   [DEFAULT DefaultVal] [[NOT] INLINE] [UNIQUE] [NULL] [, ... ] )

列の削除:

  ALTER TABLE [Owner.]TableName

  DROP [COLUMN] ColumnName

または

   ALTER TABLE [Owner.]TableName DROP

  (ColumnName [, ... ] )

外部キーおよびON DELETE CASCADE(オプション)の追加:

  ALTER TABLE [Owner.]TableName

  ADD [CONSTRAINT ForeignKeyName] FOREIGN KEY

      (ColumnName [,...]) REFERENCES RefTableName

         [(ColumnName [,...])] [ON DELETE CASCADE]

外部キーの削除:

  ALTER TABLE [Owner.]TableName

  DROP CONSTRAINT ForeignKeyName

ハッシュ索引のサイズ変更:

  ALTER TABLE [Owner.]TableName

  SET PAGES = {RowPages | CURRENT}

主キーで使用する索引をハッシュ索引に変更:

  ALTER TABLE [Owner.]TableName

  USE HASH INDEX PAGES = {RowPages | CURRENT}

主キーで使用する索引をTツリー索引に変更

  ALTER TABLE [Owner.]TableName

  USE TREE INDEX

列のデフォルト値の変更:

  ALTER TABLE [Owner.]TableName

  MODIFY (ColumnName DEFAULT DefaultVal)

列の一意制約の追加または削除:

  ALTER TABLE Owner.]TableName

  {ADD | DROP} UNIQUE (ColumnName)

NULL値可能な列のデフォルト値をNULLに変更することによるデフォルト値の削除:

   ALTER TABLE [Owner.]TableName

   MODIFY (ColumnName DEFAULT NULL)

LRUエージングの追加:

   ALTER TABLE [Owner.]TableName

   ADD AGING LRU [ON | OFF]

時間ベースのエージングの追加:

  ALTER TABLE [Owner.]TableName

  ADD AGING USE ColumnName LIFETIME num1

      {MINUTE[S] |HOUR[S] |DAY[S]}

       [CYCLE num2 {MINUTE[S] | HOUR[S] | DAY[S] }]

      [ON | OFF]

エージング状態の変更:

  ALTER TABLE [Owner.]TableName

  SET AGING {ON | OFF}

エージングの削除:

  ALTER TABLE [Owner.]TableName

  DROP AGING

LIFETIMEの変更(時間ベースのエージングの場合):

  ALTER TABLE [Owner.]TableName

  SET AGING LIFETIME num1 {MINUTE[S] | HOUR[S] | DAY[S]}

CYCLEの変更(時間ベースのエージングの場合):

  ALTER TABLE [Owner.]TableName

  SET AGING CYCLE num2 {MINUTE[S] | HOUR[S] | DAY[S]}

パラメータ

ALTER TABLE文には、次のパラメータがあります。

[Owner.] TableName
変更する表を指定します。
UNIQUE
ColumnNameの各行の値が一意である必要があることを示します。
MODIFY
指定した列の属性を新しい値に変更します。
DEFAULT [DefaultVal | NULL]

列のデフォルト値(DefaultVal)を指定します。NULLを指定すると、列のデフォルト値が削除されます。デフォルト値にSYSDATEを指定した列を追加すると、既存の行の列の値のみが、列が追加された時点のシステム日付になります。デフォルト値がUSER関数の1つである場合、列の値はALTER TABLE文を実行したセッションのユーザーの値になります。

列のデフォルト値を変更しても、既存の行は変更されません。

ColumnName
UNIQUE CONSTRAINTまたはデフォルト値が変更される列の名前です。新しい列に、既存の列または別の新しい列と同じ名前を指定することはできません。
ColumnDataType
追加する列のデータ型です。追加のパラメータが必要なデータ型もあります。指定できるデータ型の詳細は、「データ型」を参照してください。
INLINE |
NOT INLINE
デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。
CONSTRAINT
削除する外部キーを指定します。オプションで、追加された外部キーの名前をユーザーが指定するように指定します。
ForeignKeyName
追加または削除する外部キーの名前です。すべての外部キーは、ユーザーが名前を指定しなかった場合、デフォルトの名前が割り当てられます。ユーザーが指定した名前またはシステムの名前のいずれかをDROP FOREIGN KEYコマンドで指定できます。
FOREIGN KEY
外部キーを追加または削除するよう指定します。「FOREIGN KEY」を参照してください。
REFERENCES
外部キーが別の表を参照するように指定します。
RefTableName
外部キーが参照する表の名前です。
[ON DELETE
CASCADE]
ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。
USE HASH INDEX PAGES = {RowPages | CURRENT}
主キーにハッシュ索引を使用することを指定します。主キーですでにハッシュ索引を使用している場合、この句はSET PAGES句と同じです。
USE TREE INDEX
主キーにTツリー索引を使用することを指定します。主キーですでにTツリー索引を使用している場合、この句は無視されます。
SET PAGES
表の行ページに想定される数に基づいてハッシュ索引のサイズを変更します。各行ページのデータの行数は、最大256です。この数によって、ハッシュ索引に対して作成されるハッシュ・バケットの数が決まります。最小値は1です。推定した数が小さすぎると、パフォーマンスが悪化します。定数(RowPages)または現在の行ページの数を指定できます。ハッシュ索引とページの詳細は、「列定義」を参照してください。
RowPages
想定される行ページの数です。
CURRENT
現在使用されている行ページの数を使用します。
ADD AGING LRU [ON | OFF]
エージング・ポリシーが定義されていない既存の表に、LRUエージングを追加します。

LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態(ONまたはOFF)およびLRUエージング属性を定義します。

エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。

LRU属性はプロシージャttAgingLruConfigをコールして定義します。LRU属性はSQLレベルでは定義できません。

LRUエージングについては、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表のエージングの実装に関する説明を参照してください。

ADD AGING USE ColumnName...
[ON | OFF]
エージング・ポリシーが定義されていない既存の表に、時間ベースのエージングを追加します。

時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ONまたはOFF)およびLRUエージング属性を定義します。

エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。

時間ベースのエージング属性はSQLレベルで定義され、LIFETIME句およびCYCLE句で指定します。

時間ベース・エージングに使用する列の名前としてColumnNameを指定します。列は、NOT NULLのTIMESTAMP型として定義します。この列の値がSYSDATEから差し引かれ、指定した単位(分、時間、日数)を使用して切り捨てられた後、LIFETIME値との比較が行われます。その結果がLIFETIME値より大きい場合、行はエージングの対象となります。

タイムスタンプ列の値は、アプリケーションによって更新されます。タイムスタンプ列の値が不明な行がある場合、その行が除去されないようにするには、タイムスタンプ列に大きなデフォルト値を定義します(列はNULLではありません)。

時間ベースのエージングについては、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表のエージングの実装に関する説明を参照してください。

LIFETIME Num1 {MINUTE[S] |HOUR[S]| DAY[S]}
時間ベースのエージング・ポリシーを既存の表に追加する場合は、ADD AGING USE ColumnName句の後にLIFETIMEを指定します。LIFETIMEの設定を変更するには、SET AGING句の後にLIFETIME句を指定します。

LIFETIME句には、データがキャッシュに保持されることが保証される時間を指定します。

Num1には、行がキャッシュに保持される時間の長さを、分、時間または日数で表す正の整定数を指定します。LIFETIME値を超えた行はエージ・アウト(表から削除)されます。

時間の単位の概念がサポートされています。時間の単位にDAYSを指定した場合、タイムスタンプの日付が同じ日になっているすべての行が同時にエージ・アウトされます。また、HOURSを時間の単位に指定した場合は、タイムスタンプ値の時間が同じ行が、すべて同時にエージ・アウトされます。LIFETIMEの3 DAYSは、LIFETIMEの72 HOURS(3×24)やLIFETIMEの432 MINUTES(3×24×60)とは異なります。

CYCLE Num2 {MINUTE[S] | HOUR[S] |DAY[S] }

時間ベースのエージング・ポリシーを既存の表に追加する場合は、LIFETIME句の後にオプションでCYCLE句を指定します。

CYCLEは、時間ベースのエージング属性です。

CYCLE句は、データが指定したLIFETIME値を超えているかどうか、その結果エージ・アウト(削除)する必要があるかどうかを確認するために、システムで行をチェックする頻度を指定します。

Num2には、正の整数を指定します。

CYCLE句を指定しない場合、デフォルト値は5分です。Num2に0を指定すると、エージングは継続され、エージング・スレッドがスリープ状態になることはありません。

エージング状態がOFFの場合、エージングは自動的に実行されず、CYCLE句は無視されます。

CYCLE設定を変更するには、SET AGING句の後にCYCLE句を指定します。

SET AGING [ON | OFF]
エージング状態を変更します。エージング・ポリシーが事前に定義されている必要があります。ONにすると、自動エージングが有効になります。OFFにすると、自動エージングが無効になります。外部のスケジューラでエージングを制御する場合は、エージングを無効にしてttAgingScheduleNowプロシージャを起動します。
DROP AGING
表からエージング・ポリシーを削除します。一度定義すると、変更することはできません。エージングを削除してから再定義してください。
SET AGING LIFETIME Num1 {MINUTE[S] | HOUR[S] |
DAY[S] }
時間ベースのエージングのLIFETIMEを変更するには、この句を使用します。

Num1 には、正の整数を指定します。

SET AGING CYCLE Num2 {MINUTE[S] | HOUR[S] |DAY[S]}

この句を使用して時間ベースのエージングのCYCLEを変更します。

Num2は、正の整数である必要があります。

説明

例5.16

ReturnRate列をParts表に追加します。

ALTER TABLE Parts ADD COLUMN ReturnRate DOUBLE;

例5.17

NumAssign列とPrevDept列をContractor表に追加します。

ALTER TABLE Contractor

ADD ( NumAssign INTEGER, PrevDept CHAR(30) );

例5.18

Employee表のAddr1列とAddr2列を削除します。

ALTER TABLE Employee DROP ( Addr1, Addr2 );

例5.19

表BooksのUNIQUEのTitle列を削除します。

ALTER TABLE Books DROP UNIQUE (Title);

例5.20

デフォルト値5を使用してx1列をT1表に追加します。

ALTER TABLE T1 ADD (x1 INT DEFAULT 5);

例5.21

列のデフォルト値x1を2に変更します。

ALTER TABLE T1 MODIFY (x1 DEFAULT 2);

例5.22

この例では、Tツリー索引およびハッシュ索引の使用方法を示しています。Col1を主キーとしてPkey表を作成します。デフォルトでTツリー索引が作成されます。次に、この表をALTER文で変更し、Col1の索引をハッシュ索引に変更します。再度この表をALTER文で変更し、索引をTツリー索引に戻します。

Command> CREATE TABLE Pkey (Col1 TT_INTEGER PRIMARY KEY,
         Col2 VARCHAR2 (20));

Command> INDEXES Pkey;

Indexes on table SAMPLEUSER.PKEY:

  PKEY: unique T-tree index on columns:

    COL1

 1 index found.

1 table found.

ハッシュ索引を使用するようにPKey表を変更します。

Command> ALTER TABLE Pkey USE HASH INDEX PAGES = CURRENT;

Command> INDEXES PKEY;

Indexes on table SAMPLEUSER.PKEY:

  PKEY: unique hash index on columns:

    COL1

  1 index found.

1 table found.

Tツリー索引を使用するようにPKey表を変更します。

Command> ALTER TABLE PKEY USE TREE INDEX;

Command> INDEXES PKEY;

Indexes on table SAMPLEUSER.PKEY:

  PKEY: unique T-tree index on columns:

    COL1

  1 index found.

1 table found.

例5.23

この例では、主キーを使用しないで、列にTツリー索引またはハッシュ索引を定義するように表を変更しようとしたときにエラーが生成されます。

Command> CREATE TABLE IllegalIndex (Col1 CHAR (20));

Command> ALTER TABLE IllegalIndex USE TREE INDEX;

2810: The table has no primary key so cannot change its index type

The command failed.

Command> ALTER TABLE IllegalIndex USE HASH INDEX PAGES = CURRENT;

2810: The table has no primary key so cannot change its index type

The command failed.

例5.24

これらの例では、エージングにおいて、時間の単位がどのように機能するかを示しています。この例では、存続期間は3Daysです。

例5.25

この例では、LRUエージングを追加して表を変更します。表には事前に設定されたエージング・ポリシーはありません。エージング状態は、デフォルトでONになっています。

ALTER TABLE AgingDemo3

     ADD AGING LRU;

Command> DESCRIBE AgingDemo3;

Table USER.AGINGDEMO3:

  Columns:

   *AGINGID                         NUMBER NOT NULL

    NAME                            VARCHAR2 (20) INLINE

  Aging lru on

1 table found.

(primary key columns are indicated with *)

例5.26

この例では、時間ベースのエージングを追加して表を変更します。表には事前に設定されたエージング・ポリシーはありません。AgingColumnはtimestamp列、LIFETIMEは2 Days、CYCLEは30 Minutesです。

ALTER TABLE AgingDemo4

       ADD AGING USE AgingColumn LIFETIME 2 DAYS CYCLE 30

         MINUTES;

Command> DESCRIBE AgingDemo4;

Table USER.AGINGDEMO4:

  Columns:

   *AGINGID                         NUMBER NOT NULL

    NAME                            VARCHAR2 (20) INLINE

    AGINGCOLUMN                     TIMESTAMP (6) NOT NULL

  Aging use AGINGCOLUMN lifetime 2 days cycle 30 minutes on

例5.27

この例では、エージング・ポリシーを一度作成すると、変更できないことを示しています。エージングを削除して、再定義する必要があります。

CREATE TABLE AgingDemo5

       (AgingId NUMBER NOT NULL PRIMARY KEY

       ,Name VARCHAR2 (20)

       ,AgingColumn TIMESTAMP NOT NULL

       )

       AGING USE AgingColumn LIFETIME 3 DAYS OFF;

ALTER TABLE AgingDemo5

      ADD AGING LRU;

2980: Cannot add aging policy to a table with an existing aging policy. Have to drop the old aging first

The command failed.

DROP aging on the table and redefine with LRU aging.

ALTER TABLE AgingDemo5

      DROP AGING;

ALTER TABLE AgingDemo5

       ADD AGING LRU;

Command> DESCRIBE AgingDemo5;

Table USER.AGINGDEMO5:

  Columns:

   *AGINGID                         NUMBER NOT NULL

    NAME                            VARCHAR2 (20) INLINE

    AGINGCOLUMN                     TIMESTAMP (6) NOT NULL

  Aging lru on

1 table found.

(primary key columns are indicated with *)

例5.28

この例では、ALTER文で表のエージング状態をOFFに設定します。表には時間ベースのエージング・ポリシーが定義されています。エージング状態をOFFに設定すると、エージングは自動的には行われません。これは、外部のスケジューラを使用してエージング処理を制御する必要がある場合に有効です。エージング状態をOFFに設定し、ttAgingScheduleNowプロシージャをコールしてエージング処理を開始します。

Command> DESCRIBE AgingDemo4;

Table USER.AGINGDEMO4:

  Columns:

   *AGINGID                         NUMBER NOT NULL

    NAME                            VARCHAR2 (20) INLINE

    AGINGCOLUMN                     TIMESTAMP (6) NOT NULL

  Aging use AGINGCOLUMN lifetime 2 days cycle 30 minutes on

ALTER TABLE AgingDemo4

       SET AGING OFF;

DESCRIBE AgingDemo4を実行すると、エージング・ポリシーが定義されてエージング状態がOFFに設定されることに注意してください。

Command> DESCRIBE AGINGDEMO4;

Table USER.AGINGDEMO4:

  Columns:

   *AGINGID                         NUMBER NOT NULL

    NAME                            VARCHAR2 (20) INLINE

    AGINGCOLUMN                     TIMESTAMP (6) NOT NULL

  Aging use AGINGCOLUMN lifetime 2 days cycle 30 minutes off

1 table found.

(primary key columns are indicated with *)

ttAgingScheduleNowをコールして、外部スケジューラでエージングを起動します。

Command> call ttAgingScheduleNow ('AgingDemo4');

例5.29

表にタイムスタンプ列を追加し、その列を時間ベースのエージングに使用するように変更してみます。エラーが生成されます。

Command> describe x;

Table USER1.X:

  Columns:

   *ID                              TT_INTEGER NOT NULL

1 table found.

(primary key columns are indicated with *)

Command> ALTER TABLE x ADD COLUMN t TIMESTAMP;

Command> ALTER TABLE x ADD AGING USE t LIFETIME 2 DAYS;

2993: Aging column cannot be nullable

The command failed.

関連項目

CREATE TABLE
DROP TABLE
『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表のエージングの実装に関する説明