必要な権限
表の所有者に必要な権限はありません。
別のユーザーの表の場合はALTER ANY TABLEが必要です。
ALTER TABLE...ADD FOREIGN KEYの場合、変更される表の所有者に、外部キー句で参照される表のREFERENCES権限が必要です。
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 [, ... ] )
主キー制約の追加:
ALTER TABLE [Owner.]TableName ADD CONSTRAINT ConstraintName PRIMARY KEY (ColumnName [,... ]) USE HASH INDEX PAGES = {RowPages | CURRENT}]
外部キーおよび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}
主キーで使用する索引を範囲索引に変更:
ALTER TABLE [Owner.]TableName USE RANGE 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 |
追加する列のデータ型です。追加のパラメータが必要なデータ型もあります。指定できるデータ型の詳細は、第1章「データ型」を参照してください。 |
INLINE| NOT INLINE |
デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。 |
ADD CONSTRAINT ConstraintName PRIMARY KEY ( ColumnName
|
表に主キー制約を追加します。主キーの列はNOT NULLとして定義する必要があります。
主キー制約を適用するために使用する索引の名前として 主キーに対してハッシュ索引を使用するには、USE HASH INDEX句を指定します。 ページ・カウント値を計算するために、 ハッシュ索引とページの詳細は、「列定義」を参照してください。 |
CONSTRAINT |
外部キーを削除することを指定します。オプションで、追加された外部キーの名前をユーザーが指定するように指定します。 |
ForeignKeyName |
追加または削除する外部キーの名前です。すべての外部キーは、ユーザーが名前を指定しなかった場合、デフォルトの名前が割り当てられます。ユーザーが指定した名前またはシステムの名前のいずれかをDROP FOREIGN KEY句で指定できます。 |
FOREIGN KEY |
外部キーを追加または削除することを指定します。「FOREIGN KEY 」を参照してください。 |
REFERENCES |
外部キーが別の表を参照することを指定します。 |
RefTableName |
外部キーが参照する表の名前です。 |
[ON DELETE
|
ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。 |
USE HASH INDEX PAGES = { RowPages | CURRENT} |
主キーにハッシュ索引を使用することを指定します。主キーですでにハッシュ索引を使用している場合、この句はSET PAGES句と同じです。 |
USE RANGE INDEX |
主キーに範囲索引を使用することを指定します。 主キーですでに範囲索引を使用している場合、この句は無視されます。 |
SET PAGES |
表の行ページに想定される数に基づいてハッシュ索引のサイズを変更します。各行ページのデータの行数は、最大256です。この数によって、ハッシュ索引に対して作成されるハッシュ・バケットの数が決まります。最小値は1です。推定した数が小さすぎると、パフォーマンスが悪化します。 定数(RowPages )または現在の行ページの数を指定できます。ハッシュ索引とページの詳細は、「列定義」を参照してください。 |
RowPages |
想定される行ページの数です。 |
CURRENT |
現在使用されている行ページの数を使用します。 |
ADD AGING LRU [ON | OFF] |
エージング・ポリシーが定義されていない既存の表に、LRUエージングを追加します。
LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態( エージング状態を LRU属性はプロシージャ LRUエージングについては、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表のエージングの実装に関する説明を参照してください。 |
ADD AGING USE ColumnName ... [ON| OFF] |
エージング・ポリシーが定義されていない既存の表に、時間ベースのエージングを追加します。
時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ONまたはOFF)および時間ベースのエージング属性を定義します。 エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。 時間ベースのエージング属性はSQLレベルで定義され、LIFETIME句およびCYCLE句で指定します。 時間ベース・エージングに使用する列の名前として エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列はNULLにはできません)。 TT_TIMESTAMPデータ型またはTT_DATEデータ型を使用してエージング列を定義できます。TT_DATEデータ型を選択する場合は、LIFETIME単位としてDAYSを指定する必要があります。 時間ベースのエージングについては、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表のエージングの実装に関する説明を参照してください。 |
LIFETIME Num1 {MINUTE[S] |HOUR[S]| DAY[S] |
時間ベースのエージング・ポリシーを既存の表に追加する場合は、ADD AGING USE ColumnName 句の後にLIFETIME句を指定します。LIFETIMEの設定を変更するには、SET AGING句の後にLIFETIME句を指定します。
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値を超えているかどうか、その結果エージ・アウト(削除)する必要があるかどうかを確認するために、システムで行をチェックする頻度を指定します。
CYCLE句を指定しない場合、デフォルト値は5分です。 エージング状態がOFFの場合、エージングは自動的に実行されず、CYCLE句は無視されます。 CYCLE設定を変更するには、SET AGING句の後にCYCLE句を指定します。 |
SET AGING {ON|OFF} |
エージング状態を変更します。エージング・ポリシーが事前に定義されている必要があります。ONにすると、自動エージングが有効になります。OFFにすると、自動エージングが無効になります。 外部のスケジューラでエージングを制御する場合は、エージングを無効にしてttAgingScheduleNow 組込みプロシージャを起動します。 |
DROP AGING |
表からエージング・ポリシーを削除します。一度定義すると、変更することはできません。エージングを削除してから再定義してください。 |
SET AGING LIFETIME Num1 {MINUTE[S] | HOUR[S] |
|
この句を使用して時間ベースのエージングのLIFETIMEを変更します。
エージング列をTT_DATEデータ型を使用して定義している場合は、LIFETIME単位としてDAYSを指定する必要があります。 |
SET AGING CYCLE Num2 {MINUTE[S] | HOUR[S] |DAY[S]} |
この句を使用して時間ベースのエージングのCYCLEを変更します。
|
説明
ALTER TABLE文を使用して一時表を変更することはできません。
ALTER TABLE文を使用して、TWOSAFE BY REQUESTトランザクションの一部であるレプリケートされた表を変更することはできません。 DDLCommitBehavior
=1の場合、この操作の結果はエラー8051になります。DDLCommitBehavior
=0の場合、ALTER TABLE操作の前にコミットが実行されるためこの操作は成功し、ALTER TABLE操作はTWOSAFE BY REQUESTトランザクションの一部ではない新しいトランザクションに含まれることになります。
ALTER TABLE ADD [COLUMN] ColumnName
文は、既存の表に1つ以上の新しい列を追加します。新しい列は、新しい1つのパーティション内のすべての既存の行の最後に追加されます。
マテリアライズド・ビューから参照されている列は削除できません。
追加される列の数に関係なく、1文につき1つのパーティションのみが表に追加されます。
新しい列をNOT NULLとして宣言することはできません。
新しい列に対してデフォルト値が指定されている場合を除き、追加されるすべての列の初期値はNULLです。
表の列の合計数は、255を超えることはできません。また、表のパーティションの合計数も、255を超えることはできません。2つのうちのいずれかがTimesTenによって使用されます。
主キー制約を通常の表またはディテール表やマテリアライズド・ビュー表に追加するには、ADD CONSTRAINT ... PRIMARY KEY句を使用します。すでに主キーを持つ表に対しては、この句を使用しないでください。
ADD CONSTRAINT... PRIMARY KEY句を使用して主キー制約を追加する際に、USE HASH INDEX句を指定しないと、主キー制約に対して範囲索引が使用されます。
表がレプリケートされる際に、レプリケーション・エージェントがアクティブである場合は、ADD CONSTRAINT ... PRIMARY KEY句を使用できません。最初にレプリケーション・エージェントを停止します。
グローバル一時表でADD CONSTRAINT ... PRIMARY KEY句を指定しないでください。
主キーを指定して定義されているキャッシュ・グループ表はCREATE CACHE GROUP文で定義する必要があるため、キャッシュ・グループ表ではADD CONSTRAINT ... PRIMARY KEY句を指定しないでください。
ALTER TABLE ADD文の結果として、問合せ時に新しい各パーティションに対して追加の読取りが発生します。このため、変更された表のパフォーマンスがわずかに悪化することがあります。 パフォーマンスを回復するには、表を削除して再作成するか、またはttMigrate create -c
-noRepUpgrade
コマンドを使用してから、ttRestore -r
-noRepUpgrade
コマンドを使用して表をリストアします。追加された列を削除しても、悪化したパフォーマンスは回復されず、パーティションの数も減りません。
ALTER TABLE DROP文は、既存の表から1つ以上の列を削除します。削除した列は、表の現在の行からすべて削除されます。それ以降のSQL文では、削除した列は使用できなくなります。 表の主キーに含まれている列は削除できません。 また、表の外部キーに含まれている列も、すべての外部キーを削除しないかぎり削除できません。索引付けされた列は、列の索引をすべて削除しないかぎり削除できません。ALTER TABLEを使用して表の列をすべて削除することはできません。かわりにDROP TABLEを使用します。
表から列が削除された場合、その表を参照するすべてのコマンドを再コンパイルする必要があります。削除された列が参照されると、再コンパイル時にエラーが発生することがあります。アプリケーションはそのコマンドを再度準備し、パラメータと結果列を再作成する必要があります。列が表に追加された場合、SELECT *文を含むコマンドは無効になります。これらのコマンドのみを再度準備する必要があります。その他のすべてのコマンドは、想定したとおりに動作します。
列を削除しても、列の領域は解放されません。
一意制約を追加すると、(領域の増加、および処理時間の増加という点で)オーバーヘッドが発生します。これは、一意制約を維持するための索引が作成されるためです。一意索引を維持するために使用している索引を、DROP INDEX文を使用して削除することはできません。
一意制約とそれに関連付けられている索引は、レプリケートされた表の一意索引として使用されている場合、削除できません。
アプリケーションで表の主キーに対して範囲問合せを実行する場合は、ALTER TABLE...USE RANGE INDEXを使用します。
アプリケーションで表の主キーに対して完全一致検索を実行する場合は、ALTER TABLE...USE HASH INDEXを使用します。
表に主キーがない場合、USE HASH INDEX句またはUSE RANGE INDEX句を指定すると、エラーが生成されます。
子表の外部キー制約でON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。
ON DELETE CASCADEトリガー・アクションを変更するには、外部キー制約を削除して再定義してください。
ON DELETE CASCADEは、マテリアライズド・ビューのディテール表でサポートされています。子表に対して定義されたマテリアライズド・ビューがある場合、親表からの削除によって子表でカスケード削除が行われます。つまり、親表での削除により、マテリアライズド・ビューも変更されます。
DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。
ON DELETE CASCADE: 親表から子表へのパスが異なる場合があるため、次のルールが適用されます。
親表から子表へのすべてのパスを、deleteパスかdo not deleteパスのいずれかに統一します。
deleteパスのすべての子表でON DELETE CASCADEを指定します。
このルールは、1つの親表から複数の子表へ、または複数の親表から1つの子表へのパスには適用されません。
ON DELETE CASCADE: 第2のルールも適用されます。
ある表にdeleteパスでアクセスする場合、その表のすべての子表にもdeleteパスでアクセスします。
レプリケーションを含むON DELETE CASCADE: 次の制限が適用されます。
ON DELETE CASCADEで指定された外部キーは、レプリケートされた表のマスターとサブスクライバの間で一致している必要があります。これは実行時に確認されます。エラーが発生すると、RECEIVERスレッドは処理を停止します。
カスケード削除のツリーに含まれる表をレプリケートする場合は、ツリーに含まれるすべての表をレプリケートする必要があります。この制限は、レプリケーション・スキームを作成したとき、またはレプリケーション表のいずれかにON DELETE CASCADE付きの外部キーを追加したときにチェックされます。エラーが検出されると、処理は中断します。外部キー制約を変更する前に、まずレプリケーション・スキームを削除することが必要になる場合があります。
レプリケートされた表で外部キーの追加や削除を行う前に、レプリケーション・エージェントを停止する必要があります。
ALTER TABLE ADD/DROP CONSTRAINT文には、次の制限があります。
外部キーが削除されると、TimesTenでは外部キーに関連付けられている索引も削除されます。通常のDROP INDEX文を使用して外部キーに関連付けられている索引を削除しようとすると、エラーになります。
外部キーは、キャッシュ・グループの表では追加または削除できません。
外部キーは、TimesTenのレプリケーションに含まれている表では追加または削除できません。レプリケートされている表またはレプリケートされた表でこの処理を実行しようとすると、エラーが返されます。
外部キーは、ビューまたは一時表では追加または削除できません。
表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。
エージング・ポリシーは、エージング状態を変更するように定義する必要があります。
LRUエージングでは、行がアクセスされているかまたは参照されているかどうかを、次のルールで判断します。
SELECT文の結果セットを構築するために使用された行
INSERT SELECT文の結果セットを構築するために使用された行
更新または削除対象の行
コマンドで参照される表に対してLRUエージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。
エージング状態がONかOFFかにかかわらずエージング処理をすぐにスケジュールするには、ttAgingScheduleNow
プロシージャをコールします。
時間ベースのエージング・ポリシーの場合、エージング列を追加または変更できません。これは、NOT NULL列を追加または変更できないためです。
エージングの制限:
時間ベースのエージングに使用されている列は削除できません。
外部キーによって関連付けられる表には、同じエージング・ポリシーを指定する必要があります。
LRUエージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。ON DELETE CASCADEの設定は無視されます。
時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。ON DELETE CASCADEは、設定の有無にかかわらず無視されます。
例
returnrate
列をparts
表に追加します。
ALTER TABLE parts ADD COLUMN returnrate DOUBLE;
numsssign
列とprevdept
列をcontractor
表に追加します。
ALTER TABLE contractor ADD ( numassign INTEGER, prevdept CHAR(30) );
employee
表のaddr1
列とaddr2
列を削除します。
ALTER TABLE employee DROP ( addr1, addr2 );
表books
のUNIQUEのtitle列を削除します。
ALTER TABLE books DROP UNIQUE (title);
デフォルト値5を使用してx1
列をt1
表に追加します。
ALTER TABLE t1 ADD (x1 INT DEFAULT 5);
列のデフォルト値x1
を2に変更します。
ALTER TABLE t1 MODIFY (x1 DEFAULT 2);
主キー制約c1
を追加するようにprimarykeytest
表を変更します。 ttIsql
INDEXES
コマンドを使用して、主キー制約c1
が作成され、範囲索引が使用されていることを表示します。
Command> CREATE TABLE primarykeytest (col1 TT_INTEGER NOT NULL); Command> ALTER TABLE primarykeytest ADD CONSTRAINT c1 > PRIMARY KEY (col1); Command> INDEXES primarykeytest; Indexes on table SAMPLEUSER.PRIMARYKEYTEST: C1: unique range index on columns: COL1 1 index found. 1 table found.
ハッシュ索引を使用して主キー制約c2
を追加するようにprikeyhash
表を変更します。 ttIsql
INDEXES
コマンドを使用して、主キー制約c2
が作成され、ハッシュ索引が使用されていることを表示します。
Command> CREATE TABLE prikeyhash (col1 NUMBER (3,2) NOT NULL); Command> ALTER TABLE prikeyhash ADD CONSTRAINT c2 > PRIMARY KEY (col1) USE HASH INDEX PAGES = 20; Command> INDEXES prikeyhash; Indexes on table SAMPLEUSER.PRIKEYHASH: C2: unique hash index on columns: COL1 1 index found. 1 table found.
すでに主キーを使用して定義されている表に主キー制約を追加してみます。次のエラーが表示されます。
Command> CREATE TABLE oneprikey (col1 VARCHAR2 (30) NOT NULL, > col2 TT_BIGINT NOT NULL, col3 CHAR (15) NOT NULL, > PRIMARY KEY (col1,col2)); Command> ALTER TABLE oneprikey ADD CONSTRAINT c2 > PRIMARY KEY (col1,col2); 2235: Table can have only one primary key The command failed.
NOT NULLとして定義されていない列に主キー制約を追加してみます。次のエラーが表示されます。
Command> CREATE TABLE prikeynull (col1 CHAR (30)); Command> ALTER TABLE prikeynull ADD CONSTRAINT c3 > PRIMARY KEY (col1); 2236: Nullable column can not be part of a primary key The command failed.
この例では、範囲索引およびハッシュ索引の使用方法を示しています。 col1
を主キーとしてpkey
表を作成します。デフォルトで範囲索引が作成されます。 次に、col1
の索引をハッシュ索引に変更するよう、この表をALTER文で変更します。 再度、索引を範囲索引に戻すよう、この表をALTER文で変更します。
Command> CREATE TABLE pkey (col1 TT_INTEGER PRIMARY KEY, col2 VARCHAR2 (20)); Command> INDEXES pkey; Indexes on table SAMPLEUSER.PKEY: PKEY: unique range 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.
範囲索引を使用するようにpkey
表を変更します。
Command> ALTER TABLE pkey USE RANGE INDEX; Command> INDEXES pkey; Indexes on table SAMPLEUSER.PKEY: PKEY: unique range index on columns: COL1 1 index found. 1 table found.
この例では、主キーを使用しないで列に範囲索引またはハッシュ索引を定義するように表を変更しようとしたときに、エラーが生成されます。
Command> CREATE TABLE illegalindex (Ccl1 CHAR (20)); Command> ALTER TABLE illegalindex USE RANGE 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.
これらの例では、エージングにおいて、時間の単位がどのように機能するかを示しています。この例では、存続期間は3 Daysです。
(SYSDATE - 列値) <= 3の場合、行はエージ・アウトされません。
(SYSDATE - 列値) >= 3の場合、行はエージ・アウトの対象となります。
(SYSDATE - 列値)= 3 Days, 22 Hoursの場合、存続期間がDaysで指定されているため、行はエージ・アウトされません。存続期間が72 Hoursと指定されていた場合は、行はエージ・アウトされます。
この例では、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 *)
この例では、時間ベースのエージングを追加して表を変更します。表には事前に設定されたエージング・ポリシーはありません。 agingcolumn
列はエージングに使用します。 LIFETIMEは2日です。 CYCLEは30分です。
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
この例では、エージング・ポリシーを一度作成すると、変更できないことを示しています。エージングを削除して、再定義する必要があります。
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.
表のエージングを削除し、LRUエージングを使用して再定義します。
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 *)
この例では、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');
表にエージング列を追加し、その列を時間ベースのエージングに使用するように変更してみます。エラーが生成されます。
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.
時間ベースのエージングを使用して定義された表のLIFETIME句を変更してみます。エージング列はTT_DATEデータ型を使用して定義されています。LIFETIME単位がDAYSで表されていないため、エラーが生成されます。
Command> CREATE TABLE aging1 (col1 TT_DATE NOT NULL) AGING USE col1 LIFETIME 2 DAYS; Command> ALTER TABLE aging1 SET AGING LIFETIME 2 HOURS; 2977: Only DAY lifetime unit is allowed with a TT_DATE column The command failed.
関連項目
『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表のエージングの実装に関する説明