ヘッダーをスキップ
Oracle® TimesTen In-Memory Database SQLリファレンス
11gリリース(11.2.2)
B66446-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 SQL文

この章では、TimesTenで使用可能なSQL文について説明します。

通常、SQL文とはデータ操作言語(DML)文またはデータ定義言語(DDL)文のいずれかです。

DML文はデータベース・オブジェクトを変更します。DML文の例として、INSERTUPDATEおよびDELETEがあげられます。

DDL文はデータベース・スキーマを変更します。DDL文の例として、CREATE TABLEおよびDROP TABLEがあげられます。

SQL文内のコメント

文内のキーワード、パラメータまたは句読点の間に、コメントを表示できます。次の2通りの方法で、文内にコメントを含めることができます。

  • スラッシュとアスタリスク(/*)を使用してコメントを開始します。この後にコメントのテキストを続けます。テキストは複数行にまたがってもかまいません。アスタリスクとスラッシュ(*/)を使用してコメントを終了します。開始文字と終了文字は、空白や改行によってテキストから切り離す必要はありません。

  • ハイフン2個(--)を使用してコメントを開始します。この後にコメントのテキストを続けます。テキストは1行しか使用できません。コメントの最後に改行を使用します。

文レベルのオプティマイザ・ヒント

文レベルのオプティマイザ・ヒントは、TimesTen問合せオプティマイザに命令を渡すSQL文のコメントです。問合せに対して最適な実行計画を選択するとき、オプティマイザではこれらのヒントが考慮されます。

内容は次のとおりです。

文レベルとトランザクション・レベルのオプティマイザ・ヒントの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のオプティマイザ・ヒントを使用した実行計画の変更に関する項も参照してください。

SQL構文

SQL文には、文レベルのオプティマイザ・ヒントが1つ以上あるコメントを1つ付けることができます。文レベルのオプティマイザ・ヒントをサポートするSQL文は、DELETEINSERTMERGESELECTUPDATEINSERT...SELECT、およびCREATE TABLE...AS SELECTです。ヒントはDELETEINSERTMERGESELECT、またはUPDATEキーワードの後に記述します。(DELETEINSERTMERGESELECT、またはUPDATEキーワードは、SQL VERBとも呼びます。)表6-1「SQL文への文レベル・ヒントの配置」にSQL文へのヒントの正しい配置を示します。

文レベルのオプティマイザ・ヒントはコメント構文に埋め込みます。TimesTenでは、1行のコメントおよび複数行のコメント内のヒントがサポートされます。ヒントのあるコメントが複数行の場合は、コメント構文/*+...*/を使用します。ヒントのあるコメントが1行の場合は、コメント構文--+を使用します。

構文

SQL VERB {/*+ [CommentText] hint [{hint|CommentText} [...]] */ |
          --+ [CommentText] hint [{hint|CommentText} [...]] }
hint::= FlagHint | JoinOrderHint | IndexHint
FlagHint::= FlagName (0|1)
JoinOrderHint::= TT_JoinOrder (CorrelationName CorrelationName [...])
IndexHint::= TT_Index (CorrelationName,IndexName,{0|1} [;...])
FlagName::= TT_BranchAndBound|TT_DynamicLoadEnable|TT_DynamicLoadErrorMode|
            TT_FirstRow|TT_ForceCompile|TT_GenPlan|TT_GlobalLocalJoin|
            TT_GlobalProcessing|TT_HashGb|TT_HashScan|TT_IndexedOr|TT_MergeJoin|
            TT_NestedLoop|TT_NoRemRowIdOpt|TT_Range|TT_Rowid|TT_RowLock|
            TT_ShowJoinOrder|TT_TblLock|TT_TblScan|TT_TmpHash|TT_TmpRange|
            TT_TmpTable|TT_UseBoyerMooreStringSearch

パラメータ

パラメータ 説明
SQL VERB SQL VERBDELETEINSERTMERGESELECTUPDATEキーワードのいずれかを指します。文レベルのオプティマイザ・ヒントをコメント構文に埋め込みます。コメント構文に文レベルのオプティマイザ・ヒントがある場合は、コメント構文はSQL VERBの後に記述する必要があります。
/*+ hint */ 1つ以上のヒントがコメント構文に埋め込まれています。コメント構文は1行または複数行になります。プラス記号(+)は、文レベルのオプティマイザ・ヒントの開始を意味します。

アスタリスク(*)とプラス記号(+)の間にスペースは入れません。

--+ hint 1つ以上のヒントがコメント構文に埋め込まれています。コメント構文は1行のみになります。プラス記号(+)は、文レベルのオプティマイザ・ヒントの開始を意味します。

ダッシュ(-)とプラス記号(+)の間にスペースは入れません。

hint 文レベルのオプティマイザ・ヒント。SQL文では、1つのコメント文字列として、1行以上の文レベルのオプティマイザ・ヒントがサポートされます。1つのSQL文に対して1つ以上のヒントが含まれるコメントを1つ指定できます。コメントはDELETEINSERTMERGESELECT、またはUPDATEキーワードの後に記述する必要があります。

コメント内に複数のヒントを指定する場合は、ヒント間にスペースを入れないようにします。

文レベルのオプティマイザ・ヒントは、1つのSQL文を範囲とし、問合せごとにセマンティクスを持ちます。

文レベルのオプティマイザ・ヒントの名前と型は、トランザクション・レベルのオプティマイザ・ヒントにマップされます。トランザクション・レベルのオプティマイザ・ヒントは、組込みプロシージャttOptSetFlagttOptSetOrder、またはttOptUseIndexにより呼び出されます。

トランザクション・レベルのヒントは、そのトランザクションを範囲とし、トランザクション・セマンティクスを持ちます。自動コミットは0に設定する必要があります。トランザクション・レベルのオプティマイザ・ヒントは、トランザクションの間有効です。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の「ttOptSetFlag」、「ttOptSetOrder」、または「ttOptUseIndex」を参照してください。

CommentText コメント文字列内のテキスト。文レベルのオプティマイザ・ヒントとコメント・テキストの両方を1つのコメント内で使用できます。ヒントとコメント・テキスト間にスペースを入れるようにしてください。
FlagHint FlagHintは、TimesTen問合せオプティマイザの実行計画への影響を有効または無効にする文レベルのオプティマイザ・フラグを指します。これらのフラグは、組込みプロシージャttOptSetFlagで使用されるフラグにマップされます。

文レベルのオプティマイザ・ヒント・フラグは文のみで有効で、トランザクション・レベルのオプティマイザ・ヒント・フラグはトランザクション中に有効です。

FlagName ( 0|1) FlagNameは、文レベルのオプティマイザ・ヒント・フラグの名前を指します。

フラグの値は0か1を指定します。1を指定するとフラグが有効になります。0を指定するとフラグが無効になります。値はカッコで囲みます。

たとえば、ttIsqlで文レベルのネストされたループ・フラグを設定するには、次のように実行します。

Command> SELECT /*+ TT_NestedLoop (1)
       > */ ...

ttIsqlでトランザクション・レベルのネストされたループ・フラグを設定するには、次のように実行します。

Command> AUTOCOMMIT OFF;
Command> CALL 
       > ttOptSetFlag('NestedLoop',1);
TT_BranchAndBound 組込みプロシージャttOptSetFlagBranchAndBoundフラグにマップされたフラグ。
TT_DynamicLoadEnable 組込みプロシージャttOptSetFlagDynamicLoadEnableフラグにマップされたフラグ。
TT_DynamicLoadErrorMode 組込みプロシージャttOptSetFlagDynamicLoadErrorModeフラグにマップされたフラグ。
TT_FirstRow 組込みプロシージャttOptSetFlagFirstRowフラグにマップされたフラグ。
TT_ForceCompile 組込みプロシージャttOptSetFlagForceCompileフラグにマップされたフラグ。
TT_GenPlan 組込みプロシージャttOptSetFlagGenPlanフラグにマップされたフラグ。
TT_GlobalLocalJoin 組込みプロシージャttOptSetFlagGlobalLocalJoinフラグにマップされたフラグ。
TT_GlobalProcessing 組込みプロシージャttOptSetFlagGlobalProcessingフラグにマップされたフラグ。
TT_HashGb 組込みプロシージャttOptSetFlagHashGbフラグにマップされたフラグ。
TT_HashScan 組込みプロシージャttOptSetFlagHashフラグにマップされたフラグ。
TT_IndexedOr 組込みプロシージャttOptSetFlagIndexedOrフラグにマップされたフラグ。
TT_MergeJoin 組込みプロシージャttOptSetFlagMergeJoinフラグにマップされたフラグ。
TT_NestedLoop 組込みプロシージャttOptSetFlagNestedLoopフラグにマップされたフラグ。
TT_NoRemRowIdOpt 組込みプロシージャttOptSetFlagNoRemRowIdOptフラグにマップされたフラグ。
TT_Range 組込みプロシージャttOptSetFlagRangeフラグにマップされたフラグ。
TT_Rowid 組込みプロシージャttOptSetFlagRowidフラグにマップされたフラグ。
TT_RowLock 組込みプロシージャttOptSetFlagRowlockフラグにマップされたフラグ。
TT_ShowJoinOrder 組込みプロシージャttOptSetFlagShowJoinOrderフラグにマップされたフラグ。
TT_TblLock 組込みプロシージャttOptSetFlagTblLockフラグにマップされたフラグ。
TT_TblScan 組込みプロシージャttOptSetFlagScanフラグにマップされたフラグ。
TT_TmpHash 組込みプロシージャttOptSetFlagTmpHashフラグにマップされたフラグ。
TT_TmpRange 組込みプロシージャttOptSetFlagTmpRangeフラグにマップされたフラグ。
TT_TmpTable 組込みプロシージャttOptSetFlagTmpTableフラグにマップされたフラグ。
TT_UseBoyerMooreStringSearch 組込みプロシージャttOptSetFlagUseBoyerMooreStringSearchフラグにマップされたフラグ。
JoinOrderHint::= TT_JoinOrder ( CorrelationName CorrelationName [...] ) JoinOrderHintは、文レベルのオプティマイザ・ヒントTT_JoinOrderの構文を指します。TT_JoinOrderヒントの指示により、オプティマイザは指定の順序で表を結合します。この結合順序は文でのみ有効です。

TT_JoinOrderおよび複数の相関名を指定します。相関名はカッコで囲みます。

CorrelationNameは、SQL文の問合せまたは副問合せで指定した表の別名を指します。このヒントを使用する際は、表の実際の名前ではなく相関名を使用してください。

たとえば、employees表とdepartments表を結合し、employees表の相関名にempsdepartments表の相関名にdeptsを指定した後、ttIsqlTT_JoinOrderヒントを指定するには、次のように実行します。

Command> SELECT /*+ TT_JoinOrder
       > (EMPS DEPTS)*/...

TT_JoinOrderヒントに構文エラーがある場合、TimesTenではそのヒントは無視されます。TT_JoinOrderヒントに閉じカッコがない場合、残りのコメント文字列は無視されます。つまり、TT_JoinOrderヒントの後に追加の文レベルのオプティマイザ・ヒントを指定し、TT_JoinOrderヒントに閉じカッコがない場合、追加の文レベルのオプティマイザ・ヒントは無視されます。

組込みプロシージャttOptSetOrderを実行すると、トランザクション中の結合順序を指定できます。文レベルのオプティマイザ・ヒントTT_JoinOrderは、その文のみに有効です。

ttOptSetOrderの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptSetOrderに関する説明を参照してください。

IndexHint::= TT_INDEX (CorrelationName IndexName {0|1} [;...] ) IndexHintは、文レベルのオプティマイザ・ヒントTT_INDEXの構文を指します。オプティマイザに表の索引を使用するかを指示するには、TT_INDEXヒントを使用します。索引ヒントは文のみで有効です。

CorrelationNameは、SQL文の問合せまたは副問合せで指定した表の別名を指します。表の実際の名前ではなく、相関名を使用してください。

IndexNameは、オプティマイザが表で考慮する索引を指します。

オプティマイザで索引を考慮しないようにするには、0を指定します。オプティマイザで索引を考慮するようにするには、1を指定します。

たとえば、employees表の問合せにemp_name_ix索引を使用するようにオプティマイザに指示し、employees表に相関名eを指定した後、ttIsqlTT_INDEXヒントを指定するには、次のように実行します。

Command> SELECT /*+ TT_INDEX
       > (E,EMP_NAME_IX,1) */ ...

TT_INDEXヒントに複数のCorrelationName, IndexName, {0|1}を指定するには、セミコロン(;)を使用します。CorrelationNameIndexNameの各パラメータに、0または1を指定する必要があります。

TT_Indexヒントに構文エラーがある場合、TimesTenではそのヒントは無視されます。TT_Indexヒントに閉じカッコがない場合、残りのコメント文字列は無視されます。つまり、TT_Indexヒントの後に追加の文レベルのオプティマイザ・ヒントを指定し、TT_Indexヒントに閉じカッコがない場合、追加の文レベルのオプティマイザ・ヒントは無視されます。

組込みプロシージャttOptUseIndexを実行し、トランザクション中の索引ヒントを指定できます。文レベルのオプティマイザ・ヒントTT_INDEXは、その文のみに有効です。

ttOptUseIndexの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptUseIndexに関する説明を参照してください。



注意:

前の表で説明しているフラグの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptSetFlagに関する項を参照してください。

説明

  • コメント構文に文レベルのオプティマイザ・ヒントを埋め込みます。/*またはでコメントを開始します。コメント構文を開始した後、プラス記号(+)を追加します。プラス記号(+)により、TimesTenではコメントがヒントのリストとして解釈されます。プラス記号(+)はコメント・デリミタの直後に記述する必要があります。(/*または--の直後)。コメント・デリミタとプラス記号(+)の間にはスペースを入れません。

    次の例では、アスタリスク(*)とプラス記号(+)の間にスペースがあるため、ヒントは無視されます。

    Command> SELECT /* + TT_TblScan (1) This hint is ignored because there is a
           > space between the star (*) and the plus (+) sign. */ ...
    
  • hintは、TimesTenでサポートされる文レベルのオプティマイザ・ヒントの1つです。プラス記号(+)とヒントの間にスペースを入れることができます。コメントに複数のヒントがある場合は、1つ以上のスペースでヒントを区切ります。たとえば、1行で2つのヒントを指定するには、次のように実行します。

    Command> SELECT --+ TT_MergeJoin (0) TT_NestedLoop (1) 
           > ...
    
  • コメント内のヒントにコメント・テキストを組み入れることができます。たとえば、次のように実行します。

    Command> SELECT /*+ TT_HashScan (1) This demonstrates a hint followed by a
           > comment string. */ ...
    
  • TimesTenでは、次の場合にコメントが無視され、エラーは戻されません。

    • ヒントがDELETEINSERTMERGESELECT、またはUPDATEキーワードの後に記述されていない場合。

    • ヒントにスペルミスや構文エラーがある場合。同じコメント内に複数のヒントがあり、構文的に正しいヒントと構文的に正しくないヒントがある場合、TimesTenでは、不正なヒントは無視され、正しいヒントが採用されます。

    • TT_JoinOrderヒントかTT_Indexヒントのいずれかを使用し、閉じカッコがないと、残りのヒント文字列は無視されます。

  • 互いに競合するヒントがある場合、コメントの右端のヒントが使用されます。たとえば、コメント文字列が/*+TT_TblScan (0)...TT_TblScan (1) */の場合は、右端のTT_TblScan(1)が使用されます。

  • 文レベルのオプティマイザ・ヒントは、競合するトランザクション・レベルのオプティマイザ・ヒントをオーバーライドします。つまり、文レベルのオプティマイザ・ヒントと競合するトランザクション・レベルのオプティマイザ・ヒントを指定すると、文レベルのオプティマイザ・ヒントは、競合するトランザクション・レベルのオプティマイザ・ヒントをオーバーライドします。たとえば、ttOptSetFlagを呼び出し、範囲フラグを有効にし、SQL問合せを発行して文レベルのオプティマイザ・フラグTT_Rangeを無効にすると、この問合せの範囲フラグが無効になります。問合せを実行した後、問合せ実行前にトランザクションに配置された元の範囲フラグ設定は、トランザクション実行中は有効のままです。詳細は、例6-1「SELECT問合せでの文レベルのオプティマイザ・ヒントの使用」を参照してください。

  • 副問合せでは文レベルのオプティマイザ・ヒントを使用しないでください。

  • TimesTen問合せオプティマイザは、パススルー文の文レベルのオプティマイザ・ヒントを認識しません。TimesTenでは、パススルー文のSQLテキストはOracle Databaseに渡され、Oracle DatabaseのSQL規則に従って処理されます。

文レベルのオプティマイザ・ヒントをサポートするSQL文

文レベルのオプティマイザ・ヒントは、DELETEINSERTMERGESELECT、およびUPDATEで指定できます。また、CREATE TABLE...AS SELECT文およびINSERT... SELECT文でも文レベルのオプティマイザ・ヒントを指定できます。ヒントはコメント構文内に指定し、コメント構文はSQL VERBの直後に記述します。(たとえば、DELETE /*+ ヒント */...のようにします。)表6-1に文レベルのヒントの正しい配置を示します。

表6-1 SQL文への文レベルのヒントの配置

SQL文 ヒントの配置

CREATE TABLE... AS SELECT

CREATE TABLE...AS SELECT [ヒント]...

CREATE TABLE...AS SELECT文ではトランザクション・レベルのヒントを使用しないでください。

DELETE

DELETE [hint] ...

INSERT

INSERT [hint] ...

INSERT...SELECT

INSERT...SELECT [hint]...

MERGE

MERGE [hint]...

SELECT

SELECT [hint]...

副問合せではヒントを指定しないでください。

SELECT...{UNION|MINUS| INTERSECT} SELECT...

SELECT [ヒント] {UNION|MINUS|INTERSECT} SELECT...

UPDATE

UPDATE [hint]...


ヒントの理解

ヒントを使用することで、問合せの実行計画の選択決定においてTimesTen問合せオプティマイザに作用することができます。

トランザクション・レベルのオプティマイザ・ヒントを表示するには、組込みプロシージャttOptSetFlagを実行します。組込みプロシージャttOptGetFlagの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptGetFlagに関する説明を参照してください。

文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違いの概要を表6-2「文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違い」に示します。TimesTenオプティマイザはコストベースのオプティマイザであり、統計と索引を使用して問合せ計画を生成するため、ヒントを使用する前に、統計の更新の必要性を確認してください。問合せオプティマイザの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTen問合せオプティマイザに関する説明を参照してください。

表6-2 文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違い

文レベルのオプティマイザ・ヒント トランザクション・レベルのオプティマイザ・ヒント

SQL文のコメント構文内のSQL VERBの後に指定します。

組込みプロシージャttOptSetFlagttOptSetOrderttOptUseIndexをコールすることで指定します。

ヒントはSQL文を範囲とします。文レベルでオプティマイザに指示する場合に使用します。

ヒントはトランザクションを範囲とします。トランザクション・レベルでオプティマイザに指示する場合に使用します。

自動コミットは無効になります。これはヒントがSQL文を範囲とするためです。文の実行後は、それ以降の文および問合せではそのヒントは無効になります。

自動コミットは有効です。自動コミットをオフに設定します。文が自身のトランザクションで実行されるため、自動コミットをオフにしないと、ヒントが有効になりません。自動コミットをオフに設定すると、ヒントがトランザクションで有効になります(コミットまたはロールバックを発行するまで)。

オプティマイザは文に対してのみヒントを使用します。

オプティマイザはトランザクションのすべての文にヒントを使用します。

ヒントはCREATE TABLE...AS SELECT文でサポートされます。

ヒントはCREATE TABLE...AS SELECT文でサポートされません。この文はDDL文であり、TimesTenではDDL文が暗黙的にコミットされるためです。

トランザクション・レベルのオプティマイザ・ヒントが指定されたトランザクションで文レベルのオプティマイザ・ヒントを指定すると、そのヒントは、SQL文のトランザクション・レベルのヒントをオーバーライドします。SQL文の実行後は、元のトランザクション・レベルのオプティマイザ・ヒントは、トランザクション中は有効のままです。

ヒントは、トランザクションの間有効です。SQL文で文レベルのオプティマイザ・ヒントを指定すると、文レベルのオプティマイザ・ヒントはその文に対して有効となり、オプティマイザはその文にトランザクション・レベルのヒントを使用しません。トランザクション実行後は、元のトランザクション・レベルのオプティマイザ・ヒントは、トランザクション中は有効のままです。

特定の文に対してオプティマイザを有効にするには、文レベルのオプティマイザ・ヒントを使用します。ヒントは、オプティマイザに指示する文ごとに指定する必要があります。文に対して複数の変更が生じる場合があります。

トランザクションのすべての文に対してオプティマイザを適用するには、トランザクション・レベルのオプティマイザ・ヒントを使用します。ヒントを文ごとに指定する必要はありません。ヒントはトランザクション中は有効なため、トランザクションのすべての文に表示されます。


次の例は、文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの使用方法を説明しています。TimesTenオプティマイザは、コストベースのオプティマイザであり、文の最適な実行計画を判断して生成します。実行計画は、参照する表にある索引の他に、列および表の利用可能な統計に基づきます。統計の再計算や索引の変更時は、TimesTenオプティマイザは、再計算された統計および索引変更に基づいて実行計画を変更する場合があります。実行計画は多様なため、これらの例はあくまで実例です。次の例があります。

例6-1 SELECT問合せでの文レベルのオプティマイザ・ヒントの使用

問合せの実行計画を表示します。次に、文レベルのオプティマイザ・ヒントを使用して、オプティマイザに別の実行計画を選択するように指示します。次の問合せを考慮します。

Command> SELECT r.region_name, c.country_name
       > FROM regions r, countries c
       > WHERE r.region_id = c.region_id
       > ORDER BY c.region_id;

ttIsql EXPLAINコマンドを使用してオプティマイザが生成した計画を表示します。注意:

  • オプティマイザは、それぞれのスキャンに表レベル・ロッキングを使用して2つの範囲スキャンを実行します。

  • オプティマイザは、MergeJoin処理を使用して2つの表を結合します。

Command> EXPLAIN SELECT r.region_name, c.country_name
FROM regions r, countries c
WHERE r.region_id = c.region_id
ORDER BY c.region_id;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               2
  OPERATION:           TblLkRangeScan
  TBLNAME:             COUNTRIES
  IXNAME:              COUNTR_REG_FK
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>
 
 
  STEP:                2
  LEVEL:               2
  OPERATION:           TblLkRangeScan
  TBLNAME:             REGIONS
  IXNAME:              REGIONS
  INDEXED CONDITION:   R.REGION_ID >= C.REGION_ID
  NOT INDEXED:         <NULL>
 
  STEP:                3
  LEVEL:               1
  OPERATION:           MergeJoin
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   C.REGION_ID = R.REGION_ID
  NOT INDEXED:         <NULL>

ここで文レベルのオプティマイザ・ヒントを使用して、低レベル・ロッキングを使用したスキャンの実行、およびNestedLoop処理を使用した表の結合をオプティマイザに指示します。自動コミットをオンに設定すると、文レベルのオプティマイザ・ヒントがSQL文を範囲としているために自動コミット設定が無効になることが分かります。

Command> autocommit on;
Command> EXPLAIN SELECT /*+ TT_RowLock (1), TT_TblLock (0), TT_MergeJoin (0),
       > TT_NestedLoop (1) */
       > r.region_name, c.country_name
       > FROM regions r, countries c
       > WHERE r.region_id = c.region_id
       > ORDER BY c.region_id;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               3
  OPERATION:           RowLkRangeScan
  TBLNAME:             REGIONS
  IXNAME:              REGIONS
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>
 
  STEP:                2
  LEVEL:               3
  OPERATION:           RowLkRangeScan
  TBLNAME:             COUNTRIES
  IXNAME:              COUNTR_REG_FK
  INDEXED CONDITION:   C.REGION_ID = R.REGION_ID
  NOT INDEXED:         <NULL>
 
  STEP:                3
  LEVEL:               2
  OPERATION:           NestedLoop
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>
 
  STEP:                4
  LEVEL:               1
  OPERATION:           OrderBy
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

文レベルのオプティマイザ・ヒントなしで問合せを再度準備します。文レベルのオプティマイザ・ヒントがSQL文を範囲とするため、元の実行計画に戻ります。

Command> EXPLAIN SELECT r.region_name, c.country_name
FROM regions r, countries c
WHERE r.region_id = c.region_id
ORDER BY c.region_id;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               2
  OPERATION:           TblLkRangeScan
  TBLNAME:             COUNTRIES
  IXNAME:              COUNTR_REG_FK
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>
 
  STEP:                2
  LEVEL:               2
  OPERATION:           TblLkRangeScan
  TBLNAME:             REGIONS
  IXNAME:              REGIONS
  INDEXED CONDITION:   R.REGION_ID >= C.REGION_ID
  NOT INDEXED:         <NULL>
 
  STEP:                3
  LEVEL:               1
  OPERATION:           MergeJoin
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   C.REGION_ID = R.REGION_ID
  NOT INDEXED:         <NULL>

例6-2 ヒントの有効化および無効化

この例は、類似の関数を実行するヒントを有効または無効にするかを明確にオプティマイザに指示することの重要性を示しています。たとえば、ハッシュ・ヒントおよび範囲ヒントにより、表のハッシュ・アクセス・パスまたは範囲アクセス・パスのいずれかを使用するようにオプティマイザに指示する場合です。特定のアクセス・パスをオプティマイザが確実に選択できるよう、1つのヒントを有効にしてその他すべての関連ヒントを無効にします。

表を作成し、表の1列目にハッシュ索引、2列目に範囲索引を作成します。

Command> CREATE TABLE test (col1 NUMBER, col2 NUMBER);
Command> CREATE HASH INDEX h_index ON test (col1);
Command> CREATE INDEX hr_index ON test (col2);

自動コミットをオフにし、組み込みプロシージャttOptGetFlagを実行して、トランザクションの現在のトランザクション・レベルのオプティマイザ・ヒントを表示します。1に設定すると、フラグは無効です。

Command> autocommit off;
Command> CALL ttOptGetFlag ('Hash');
< Hash, 1 >
1 row found.
Command> CALL ttOptGetFlag ('Scan');
< Scan, 1 >
1 row found.

ttIsq EXPLAINコマンドを使用して、WHERE句と動的パラメータを使用したSELECT問合せの計画を確認します。オプティマイザはハッシュ・スキャンを使用します。

Command> EXPLAIN SELECT * FROM test WHERE col1 = ? and col2 = ?;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkHashScan
  TBLNAME:             TEST
  IXNAME:              H_INDEX
  INDEXED CONDITION:   TEST.COL1 = _QMARK_1
  NOT INDEXED:         TEST.COL2 = _QMARK_2

文レベルのオプティマイザ・ヒントTT_Rangeを使用して、オプティマイザに範囲スキャンの使用を指示します。オプティマイザにハッシュ・スキャンの無効化を指示していないため、オプティマイザはTT_Rangeヒントを無視し、ハッシュ・スキャンを使用します。文を変更し、オプティマイザにハッシュ・スキャンを使用せずに範囲スキャンを使用するように指示します。そのためには、文レベルのオプティマイザ・ヒントTT_Rangeを有効にし、文レベルのオプティマイザ・ヒントTT_HashScanを無効にします。オプティマイザはTT_Rangeヒントを無視しなくなります。

Command> EXPLAIN SELECT --+ TT_Range (1) Single line comment to set TT_Range
       > * FROM TEST WHERE col1 = ? and col2 = ?;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkHashScan
  TBLNAME:             TEST
  IXNAME:              H_INDEX
  INDEXED CONDITION:   TEST.COL1 = _QMARK_1
  NOT INDEXED:         TEST.COL2 = _QMARK_2

Command> EXPLAIN SELECT /*+ TT_Range (1) TT_HashScan (0)
       > Multiple line comment to enable TT_Range and disable TT_HashScan */
       > * FROM TEST WHERE col1 = ? and col2 = ?;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkRangeScan
  TBLNAME:             TEST
  IXNAME:              HR_INDEX
  INDEXED CONDITION:   TEST.COL2 = _QMARK_2
  NOT INDEXED:         TEST.COL1 = _QMARK_1

文レベルのオプティマイザ・ヒントを使用せず、コミットやロールバックを発行せずに、問合せを再度準備します。オプティマイザは、問合せの実行前に有効なトランザクション・レベルのオプティマイザ・ヒントを使用します。文レベルのオプティマイザ・ヒントがSQL文を範囲とするため、オプティマイザはトランザクション・レベルのオプティマイザ・ヒントを使用します。

Command> EXPLAIN SELECT * FROM TEST WHERE col1 = ? and col2 = ?;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkHashScan
  TBLNAME:             TEST
  IXNAME:              H_INDEX
  INDEXED CONDITION:   TEST.COL1 = _QMARK_1
  NOT INDEXED:         TEST.COL2 = _QMARK_2

例6-3 TT_JoinOrderを使用した結合順序の指定

文レベルのオプティマイザ・ヒントTT_JoinOrderを使用して、オプティマイザに特定の結合順序の使用を指示します。まずトランザクション・レベルのオプティマイザ・ヒントを使用して、トランザクションでの特定の結合順序の使用をオプティマイザに指示します。次に文レベルのオプティマイザ・ヒントを使用して、文のみで結合順序の変更をオプティマイザに指示します。

Command> CALL ttOptSetOrder ('e d j');
Command> EXPLAIN SELECT *
FROM employees e, departments d, job_history j
WHERE e.department_id = d.department_id
AND e.hire_date = j.start_date;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               3
  OPERATION:           TblLkRangeScan
  TBLNAME:             EMPLOYEES
  IXNAME:              EMP_DEPT_FK
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>
 
  STEP:                2
  LEVEL:               3
  OPERATION:           TblLkRangeScan
  TBLNAME:             DEPARTMENTS
  IXNAME:              DEPARTMENTS
  INDEXED CONDITION:   D.DEPARTMENT_ID >= E.DEPARTMENT_ID
  NOT INDEXED:         <NULL>
 
  STEP:                3
  LEVEL:               2
  OPERATION:           MergeJoin
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   E.DEPARTMENT_ID = D.DEPARTMENT_ID
  NOT INDEXED:         <NULL>
 
  STEP:                4
  LEVEL:               2
  OPERATION:           TblLkRangeScan
  TBLNAME:             JOB_HISTORY
  IXNAME:              JOB_HISTORY
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         E.HIRE_DATE = J.START_DATE
 
  STEP:                5
  LEVEL:               1
  OPERATION:           NestedLoop
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

トランザクション・レベルの結合順序オプティマイザ・ヒントを、そのSQL文に対してのみオーバーライドするようオプティマイザに指示するには、文レベルのオプティマイザ・ヒントTT_JoinOrderを使用します。

Command> EXPLAIN SELECT --+ TT_JoinOrder (e j d)
       > *
       > FROM employees e, departments d, job_history j
       > WHERE e.department_id = d.department_id
       > AND e.hire_date = j.start_date;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               3
  OPERATION:           TblLkRangeScan
  TBLNAME:             EMPLOYEES
  IXNAME:              EMP_DEPT_FK
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>
 
  STEP:                2
  LEVEL:               3
  OPERATION:           TblLkRangeScan
  TBLNAME:             JOB_HISTORY
  IXNAME:              JOB_HISTORY
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         E.HIRE_DATE = J.START_DATE
 
  STEP:                3
  LEVEL:               2
  OPERATION:           NestedLoop
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>
 
  STEP:                4
  LEVEL:               2
  OPERATION:           TblLkRangeScan
  TBLNAME:             DEPARTMENTS
  IXNAME:              DEPARTMENTS
  INDEXED CONDITION:   D.DEPARTMENT_ID >= E.DEPARTMENT_ID
  NOT INDEXED:         <NULL>
 
  STEP:                5
  LEVEL:               1
  OPERATION:           MergeJoin
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   E.DEPARTMENT_ID = D.DEPARTMENT_ID
  NOT INDEXED:         <NULL>

問合せを再度準備し、トランザクションで有効だった結合順序が有効のままであるかを確認します。

Command> EXPLAIN SELECT *
       > FROM employees e, departments d, job_history j
       > WHERE e.department_id = d.department_id
       > AND e.hire_date = j.start_date;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               3
  OPERATION:           TblLkRangeScan
  TBLNAME:             EMPLOYEES
  IXNAME:              EMP_DEPT_FK
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>
 
  STEP:                2
  LEVEL:               3
  OPERATION:           TblLkRangeScan
  TBLNAME:             DEPARTMENTS
  IXNAME:              DEPARTMENTS
  INDEXED CONDITION:   D.DEPARTMENT_ID >= E.DEPARTMENT_ID
  NOT INDEXED:         <NULL>
 
  STEP:                3
  LEVEL:               2
  OPERATION:           MergeJoin
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   E.DEPARTMENT_ID = D.DEPARTMENT_ID
  NOT INDEXED:         <NULL>
 
  STEP:                4
  LEVEL:               2
  OPERATION:           TblLkRangeScan
  TBLNAME:             JOB_HISTORY
  IXNAME:              JOB_HISTORY
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         E.HIRE_DATE = J.START_DATE
 
  STEP:                5
  LEVEL:               1
  OPERATION:           NestedLoop
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

例6-4 文レベルのオプティマイザ・ヒントTT_INDEXの使用

emp_name_ix索引を使用するemployees表で問合せを実行します。次に、文レベルのオプティマイザ・ヒントTT_INDEXを使用して、この索引を使用しないことをオプティマイザに指示します。まずttIsqlコマンドindexesを実行し、employees表の索引を表示します。

Command> indexes employees;
 
Indexes on table TESTUSER.EMPLOYEES:
  EMPLOYEES: unique range index on columns:
    EMPLOYEE_ID
    (referenced by foreign key index JHIST_EMP_FK on table TESTUSER.JOB_HISTORY)
  TTUNIQUE_0: unique range index on columns:
    EMAIL
  EMP_DEPT_FK: non-unique range index on columns:
    DEPARTMENT_ID
    (foreign key index references table TESTUSER.DEPARTMENTS(DEPARTMENT_ID))
  EMP_JOB_FK: non-unique range index on columns:
    JOB_ID
    (foreign key index references table TESTUSER.JOBS(JOB_ID))
  EMP_NAME_IX: non-unique range index on columns:
    LAST_NAME
    FIRST_NAME
  5 indexes found.
 
5 indexes found on 1 table.

ttIsqlコマンドEXPLAINを使用して、last_name列でWHERE句を使用するemployees表でのSELECT問合せの実行計画を表示します。

Command> EXPLAIN SELECT e.first_name
       > FROM employees e
       > WHERE e.last_name BETWEEN 'A' AND 'B';
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkRangeScan
  TBLNAME:             EMPLOYEES
  IXNAME:              EMP_NAME_IX
  INDEXED CONDITION:   E.LAST_NAME >= 'A' AND E.LAST_NAME <= 'B'
  NOT INDEXED:         <NULL>

文レベルのオプティマイザ・ヒントTT_INDEXを使用して、索引emp_name_ixを使用しないことをオプティマイザに指示します。

Command> EXPLAIN SELECT --+ TT_INDEX (E,EMP_NAME_IX,0)
       > e.first_name
       > FROM employees e
       > WHERE e.last_name BETWEEN 'A' AND 'B';
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               1
  OPERATION:           TblLkRangeScan
  TBLNAME:             EMPLOYEES
  IXNAME:              EMPLOYEES
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         E.LAST_NAME <= 'B' AND E.LAST_NAME >= 'A'

ALTER ACTIVE STANDBY PAIR

アクティブ・スタンバイ・ペアは、次の方法で変更できます。

  • サブスクライバ・データベースを追加または削除します。

  • ストア属性を変更します。

    サブスクライバには、PORTおよびTIMEOUT属性のみを設定できます。

  • 表、順序またはキャッシュ・グループをレプリケーション・スキームに含めます。

  • 表、順序またはキャッシュ・グループをレプリケーション・スキームから除外します。

『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアのその他の変更に関する説明を参照してください。

必要な権限

ADMIN

SQL構文

ALTER ACTIVE STANDBY PAIR { 
      SubscriberOperation | 
      StoreOperation | InclusionOperation |
      NetworkOperation } [...]

SubscriberOperationの構文は、次のとおりです。

{ADD | DROP } SUBSCRIBER FullStoreName

StoreOperationの構文は、次のとおりです。

ALTER STORE FullStoreName SET StoreAttribute

InclusionOperationの構文は、次のとおりです。

    [{ INCLUDE | EXCLUDE }{TABLE [[Owner.]TableName [,...]]|
         CACHE GROUP [[Owner.]CacheGroupName [,...]]|
         SEQUENCE [[Owner.]SequenceName [,...]]} [,...]]

NetworkOperationの構文は、次のとおりです。

ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
      { { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost }
          PRIORITY Priority } [...] 
DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
      { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost } [...] 

パラメータ

パラメータ 説明
ADD SUBSCRIBER FullStoreName サブスクライバ・データベースを指定します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
DROP SUBSCRIBER FullStoreName 指定したサブスクライバ・データベースに更新が送信されないように指定します。この処理は、レプリケーション・スキームの持つサブスクライバが1つのみの場合に失敗します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
ALTER STORE FullStoreName SET StoreAttribute データベースの属性への変更を指定します。サブスクライバには、PORTおよびTIMEOUT属性のみを設定できます。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

StoreAttribute句の詳細は、「CREATE ACTIVE STANDBY PAIR」を参照してください。

FullStoreName 次のいずれかとして指定されたデータベースです。
  • SELF

  • データベース・ファイル名の接頭辞

たとえば、データベースのパスがdirectory/subdirectory/data.ds0の場合、使用するデータベース名はdataになります。

この名前は、DSNの記述のDataStore属性で指定されるデータベース・ファイル名で、オプションでホストIDを次の書式で指定できます。

DataStoreName [ON Host]

Hostは、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のネットワークの構成に関する項で説明されているように、IPアドレスか、または1つ以上のIPアドレスに割り当てられたリテラル・ホスト名です。ホスト名に特殊文字が含まれている場合は、二重引用符で囲む必要があります。たとえば、"MyHost-500"のようになります。

{INCLUDE|EXCLUDE}

{[TABLE [Owner.]TableName[,...]|

CACHE GROUP

[[Owner.]CacheGroupName]|[,...]

SEQUENCE [[Owner.]SequenceName [,...]}

[,...]

指定された表、順序またはキャッシュ・グループをレプリケーションに含めるか、またはレプリケーションから除外します。

INCLUDEを指定すると、表、順序またはキャッシュ・グループがレプリケーションに追加されます。INCLUDE句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。

EXCLUDEを指定すると、表、順序またはキャッシュ・グループがレプリケーションから除外されます。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName NetworkOperationをレプリケーション・スキームに追加します。各サブスクライバ・ストアへのすべてのアウトバウンド接続に対してマスター・ストアが使用するネットワーク・インタフェースを制御できます。ADD ROUTE句のコンテキストでは、各マスター・データベースは他のマスター・データベースのサブスクライバであり、各読取り専用サブスクライバは両方のマスター・データベースのサブスクライバです。

複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName レプリケーション・スキームからNetworkOperationを削除します。

複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost MasterHostおよびSubscriberHostは、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。

句は複数回指定できます。ADDおよびDROP ROUTE MASTERの両方に対して有効です。

PRIORITY Priority 1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。

NetworkOperation句の構文で必須です。MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost句の後ろに記述します。


説明

  • アクティブ・スタンバイ・ペアを変更する前に、レプリケーション・エージェントを停止する必要があります。例外は、「ALTER SESSION」で説明されているように、DDL_REPLICATION_LEVELおよびDDL_REPLICATION_ACTION属性の値に基づいて自動的にレプリケートされて含まれるオブジェクトおよび文の場合です。

  • アクティブ・データベースのアクティブ・スタンバイ・ペア・レプリケーション・スキームのみを変更できます。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアのその他の変更に関する説明を参照してください。

  • TimesTenでOracle Clusterwareを使用する場合は、ALTER ACTIVE STANDBY PAIRは使用できません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のコマンドおよびSQL文の制限に関する説明を参照してください。

    かわりに、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のスキーマの変更に関する説明で説明されているタスクを実行します。

  • ADD SUBSCRIBER FullStoreNameは、サブスクライバをレプリケーション・スキームに追加する場合に使用します。

  • DROP SUBSCRIBER FullStoreNameは、サブスクライバをレプリケーション・スキームから削除する場合に使用します。

  • INCLUDEまたはEXCLUDE句は、指定された表、順序またはキャッシュ・グループをレプリケーション・スキームに含めるか、またはレプリケーション・スキームから除外する場合に使用します。INCLUDEまたはEXCLUDE句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。ALTER ACTIVE STANDBY文は、「ALTER SESSION」で説明されているように、DDL_REPLICATION_LEVELおよびDDL_REPLICATION_ACTION属性の値に基づいて自動的にレプリケートされて含まれるオブジェクトおよび文には必要ありません。ただし、DDL_REPLICATION_LEVELが2以上で、DDL_REPLICATION_ACTION="EXCLUDE"の場合は、INCLUDE句を使用して、レプリケートされたオブジェクトをレプリケーション・スキームに含めます。

  • DDL_REPLICATION_LEVELが2以上の場合は、INCLUDE句はアクティブ・データベースの空の表でのみ使用できます。スタンバイおよびサブスクライバの対応する表の内容は、表がレプリケーション・スキームに追加される前に切り捨てられます。

サブスクライバをレプリケーション・スキームに追加します。

ALTER ACTIVE STANDBY PAIR
    ADD SUBSCRIBER rep4;

2つのサブスクライバをレプリケーション・スキームから削除します。

ALTER ACTIVE STANDBY PAIR
    DROP SUBCRIBER rep3
    DROP SUBSCRIBER rep4;

rep3およびrep4データベースのストア属性を変更します。

ALTER ACTIVE STANDBY PAIR
    ALTER STORE rep3 SET PORT 23000 TIMEOUT 180
    ALTER STORE rep4 SET PORT 23500 TIMEOUT 180;

1つの表、1つの順序および2つのキャッシュ・グループをレプリケーション・スキームに追加します。

ALTER ACTIVE STANDBY PAIR
    INCLUDE TABLE my.newtab
    INCLUDE SEQUENCE my.newseq
    INCLUDE CACHE GROUP my.newcg1, my.newcg2;

NetworkOperation句をアクティブ・スタンバイ・ペアに追加します。

ALTER ACTIVE STANDBY PAIR
ADD ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2" PRIORITY 1;

ALTER CACHE GROUP

ALTER CACHE GROUP文を使用して、AUTOREFRESHの状態、時間隔およびモードを変更できます。

Oracle Database表の更新は、AUTOREFRESHを使用してTimesTenキャッシュ・グループに伝播させることができます。AUTOREFRESHは、キャッシュ・グループがユーザー管理キャッシュ・グループであるか、またはAUTOREFRESH句でREADONLYとして定義されている場合に有効にできます。

ALTER CACHE GROUPを使用して設定した任意の値または状態は永続的です。それらの設定はデータベースに保存されるため、デーモンやキャッシュ・エージェントを再起動した場合にも引き続き使用されます。

キャッシュ・グループの種類については、「ユーザー管理キャッシュ・グループおよびシステム管理キャッシュ・グループ」を参照してください。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合はALTER ANY CACHE GROUPが必要です。

SQL構文

この文は、キャッシュ・グループのAUTOREFRESHモードを変更し、これによって、自動リフレッシュ操作中に更新される行が決まります。

ALTER CACHE GROUP [Owner.]GroupName
        SET AUTOREFRESH MODE
        {INCREMENTAL | FULL}

この文は、キャッシュ・グループのAUTOREFRESHの時間隔を変更します。

ALTER CACHE GROUP [Owner.]GroupName 
        SET AUTOREFRESH INTERVAL IntervalValue 
        {MINUTE[S] | SECOND[S] | MILLISECOND[S] }

この文は、AUTOREFRESHの状態を変更します。

ALTER CACHE GROUP [Owner.]GroupName 
        SET AUTOREFRESH STATE
        {ON | OFF | PAUSED}

パラメータ

パラメータ 説明
[Owner.]GroupName 新しいキャッシュ・グループに割り当てられる名前。
AUTOREFRESH Oracle Database表への変更を自動的にTimesTenに伝播するように指定します。詳細は、「キャッシュ・グループのAUTOREFRESH」を参照してください。
MODE 自動リフレッシュ時に更新されるキャッシュ内の行を指定します。INCREMENTAL句が指定された場合、TimesTenは前回の伝播以降にOracle Databaseに加えられた変更のみをリフレッシュします。FULL句が指定された場合、またはFULL句もINCREMENTAL句も指定されなかった場合、TimesTenは自動リフレッシュのたびにキャッシュ内のすべての行を更新します。デフォルトのモードはINCREMENTALです。
INTERVAL

IntervalValue

AUTOREFRESHを実行する頻度を分、秒またはミリ秒単位の整数値で指定します。デフォルト値は10分です。指定した時間隔でAUTOREFRESHを完了できない場合は、実行時に警告が生成され、現在の処理が終了するまで次回のAUTOREFRESHを待機します。待機キューが10に達すると、サポート・ログに通知メッセージが生成されます。
STATE AUTOREFRESHをオン、オフまたは一時停止のいずれかに変更します。デフォルトでは、AUTOREFRESH STATEONです。
ON 指定した時間隔でAUTOREFRESHが実行されるようにスケジュールします。
OFF スケジュールされたAUTOREFRESHを取り消し、TimesTenではINCREMENTALリフレッシュに必要な情報が保持されません。このため、後でAUTOREFRESHを再度オンに設定した場合、最初のリフレッシュはFULLです。
PAUSED スケジュールされたAUTOREFRESHを取り消しますが、TimesTenではINCREMENTALリフレッシュに必要な情報が保持されます。このため、後でAUTOREFRESHを再度オンに設定した場合、完全リフレッシュは不要です。

説明

  • リフレッシュは、ALTER CACHE GROUP...SET AUTOREFRESH STATEを実行した直後には実行されません。この文では、AUTOREFRESHの状態を変更するだけです。ALTER CACHE GROUP文を含むトランザクションをコミットすると、AUTOREFRESHのスケジュールのためにキャッシュ・エージェントにはすぐに通知されますが、コミットはリフレッシュの完了を待たずに実行されます。自動リフレッシュ操作のスケジューリングはトランザクションの一部ですが、リフレッシュ自体はトランザクションの一部ではありません。

  • ALTER CACHE GROUP... SET AUTOREFRESH STATE OFF文を実行し、現在実行中の自動リフレッシュ操作がある場合、次のような結果になります。

    • LockWaitの時間隔が0の場合、ALTER文はロックのタイムアウト・エラーで失敗します。

    • LockWaitの時間隔が0以外の場合、現在の自動リフレッシュ・トランザクションはロールバックされ、ALTER文の処理が続行されます。これは、同じ自動リフレッシュ間隔を持つすべてのキャッシュ・グループに影響します。

  • AUTOREFRESHが設定されたキャッシュ・グループとAUTOREFRESHが設定されていないキャッシュ・グループの間では、レプリケートできません。

  • ALTER CACHE GROUP文がレプリケートされているトランザクションの一部である場合、およびレプリケーション・スキームにRETURN TWOSAFE属性が指定されている場合、トランザクションは失敗する可能性があります。

  • ALTER CACHE GROUP文はシリアライズ可能分離レベルでは実行できません。実行しようとするとエラー・メッセージが返されます。

関連項目


CREATE CACHE GROUP

ALTER FUNCTION

ALTER FUNCTION文は、スタンドアロンのストアド・ファンクションを再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーおよびパフォーマンス・オーバーヘッドが発生しなくなります。

パッケージに含まれるファンクションを再コンパイルするには、ALTER PACKAGE文を使用してパッケージを再コンパイルします。

必要な権限

PL/SQLファンクションの所有者に必要な権限はありません。

別のユーザーのファンクションの場合はALTER ANY PROCEDUREが必要です。

SQL構文

ALTER FUNCTION [Owner.]FunctionName COMPILE
      [CompilerParametersClause [...]] 
      [REUSE SETTINGS] 

パラメータ

パラメータ 説明
[Owner.]FunctionName 再コンパイルするファンクションの名前。
COMPILE ファンクションの再コンパイルを発生させる必須キーワード。ファンクションを正常にコンパイルできなかった場合は、ttIsqlコマンドのSHOW ERRORSを使用してコンパイラのエラー・メッセージを表示します。
CompilerParametersClause このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVELPLSCOPE_SETTINGSおよびNLS_LENGTH_SEMANTICSがあります。

文の中で各パラメータを1回指定できます。

この句のパラメータを省略してREUSE SETTINGSを指定した場合、前回のコンパイルでパラメータに値を指定していると、この(前回の)値がTimesTenによって使用されます。パラメータを省略し、かつ、REUSE SETTINGSを指定しないか、または前回のコンパイルでパラメータに値を指定しなかった場合、TimesTenによってセッション環境からパラメータの値が取得されます。

REUSE SETTINGS このオプション句を使用して、TimesTenがコンパイラのスイッチ設定を削除および再取得しないようにします。REUSE SETTINGSを指定すると、TimesTenによって既存の設定が保持され、値を指定していないパラメータのコンパイルに使用されます。

説明

  • ALTER FUNCTION文は、既存ファンクションの宣言または定義を変更しません。ファンクションを再宣言または再定義するには、CREATE FUNCTION文を使用します。

  • ファンクションが依存しているオブジェクトが無効な場合、TimesTenは最初にこれらのオブジェクトを再コンパイルします。

  • また、TimesTenは、再コンパイルされたファンクションをコールするファンクションや、再コンパイルされたファンクションをコールするファンクションが定義されているパッケージの本体など、ファンクションに依存しているオブジェクトをすべて無効にします。

  • TimesTenによってファンクションが正常に再コンパイルされると、そのファンクションは有効になります。ファンクションの再コンパイルでコンパイル・エラーになった場合、TimesTenによってエラーが返され、ファンクションは無効のままになります。ttIsqlコマンドのSHOW ERRORSを使用して、コンパイル・エラーを表示します。

  • 再コンパイル中に、TimesTenはすべての永続コンパイラ設定を削除し、セッションからこれらの設定を再取得して、コンパイルの最後に格納します。この処理を回避するには、REUSE SETTINGS句を指定します。

関連項目


CREATE FUNCTION

ALTER PACKAGE

ALTER PACKAGE文は、パッケージ仕様部、パッケージ本体またはその両方を明示的に再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーが発生しなくなります。

この文では、同時にすべてのパッケージ・オブジェクトを再コンパイルします。ALTER PROCEDURE文またはALTER FUNCTION文を使用して、パッケージに含まれるプロシージャまたはファンクションを個別に再コンパイルすることはできません。

必要な権限

パッケージの所有者に必要な権限はありません。

別のユーザーのパッケージの場合はALTER ANY PROCEDUREが必要です。

SQL構文

ALTER PACKAGE [Owner.]PackageName COMPILE
      [PACKAGE|SPECIFICATION|BODY]
      [CompilerParametersClause [...]] 
      [REUSE SETTINGS] 

パラメータ

パラメータ 説明
[Owner.]PackageName 再コンパイルするパッケージの名前。
COMPILE パッケージ仕様部、パッケージ本体またはその両方の再コンパイルを強制するために使用される必須の句。
[PACKAGE|SPECIFICATION|BODY] パッケージ仕様部と本体の両方を再コンパイルするには、PACKAGEを指定します。パッケージ仕様部を再コンパイルするには、SPECIFICATIONを指定します。パッケージ本体を再コンパイルするには、BODYを指定します。

PACKAGEがデフォルトです。

CompilerParametersClause このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVELPLSCOPE_SETTINGSおよびNLS_LENGTH_SEMANTICSがあります。

文の中で各パラメータを1回指定できます。

この句のパラメータを省略してREUSE SETTINGSを指定した場合、前回のコンパイルでパラメータに値を指定していると、この(前回の)値がTimesTenによって使用されます。パラメータを省略し、かつ、REUSE SETTINGSを指定しないか、または前回のコンパイルでパラメータに値を指定しなかった場合、TimesTenによってセッション環境からパラメータの値が取得されます。

REUSE SETTINGS このオプション句を使用して、TimesTenがコンパイラのスイッチ設定を削除および再取得しないようにします。REUSE SETTINGSを指定すると、TimesTenによって既存の設定が保持され、値を指定していないパラメータのコンパイルに使用されます。

説明

  • パッケージ仕様部を再コンパイルすると、TimesTenは、パッケージ内のプロシージャまたはファンクションをコールするプロシージャなど、仕様部に依存しているローカル・オブジェクトを無効にします。パッケージの本体もまた仕様部に依存しています。この後、先にこれらの依存オブジェクトのいずれかを明示的に再コンパイルしないで参照すると、このオブジェクトはTimesTenによって実行時に暗黙的に再コンパイルされます。

  • パッケージ本体を再コンパイルした場合、パッケージ仕様部に依存しているオブジェクトは無効になりません。本体が依存しているオブジェクトが無効な場合、TimesTenは最初にこれらのオブジェクトを再コンパイルします。TimesTenによって本体が正常に再コンパイルされると、その本体は有効になります。

  • パッケージを再コンパイルすると、仕様部と本体の両方が明示的に再コンパイルされます。コンパイル・エラーが発生しなかった場合、仕様部および本体は有効になります。コンパイル・エラーが発生した場合、TimesTenによってエラーが返され、パッケージは無効のままになります。

関連項目


CREATE PACKAGE

ALTER PROCEDURE

ALTER PROCEDURE文は、スタンドアロンのストアド・プロシージャを再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーおよびパフォーマンス・オーバーヘッドが発生しなくなります。

パッケージに含まれるプロシージャを再コンパイルするには、ALTER PACKAGE文を使用してパッケージを再コンパイルします。

必要な権限

プロシージャの所有者に必要な権限はありません。

別のユーザーのプロシージャの場合はALTER ANY PROCEDUREが必要です。

SQL構文

ALTER PROCEDURE [Owner.]ProcedureName COMPILE
      [CompilerParametersClause [...]] 
      [REUSE SETTINGS] 

パラメータ

パラメータ 説明
[Owner.]ProcedureName 再コンパイルするプロシージャの名前。
COMPILE プロシージャの再コンパイルを発生させる必須キーワード。プロシージャを正常にコンパイルできなかった場合は、ttIsqlコマンドのSHOW ERRORSを使用してコンパイラのエラー・メッセージを表示します。
CompilerParametersClause このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVELPLSCOPE_SETTINGSおよびNLS_LENGTH_SEMANTICSがあります。

文の中で各パラメータを1回指定できます。

この句のパラメータを省略してREUSE SETTINGSを指定した場合、前回のコンパイルでパラメータに値を指定していると、この(前回の)値がTimesTenによって使用されます。パラメータを省略し、かつ、REUSE SETTINGSを指定しないか、または前回のコンパイルでパラメータに値を指定しなかった場合、TimesTenによってセッション環境からパラメータの値が取得されます。

REUSE SETTINGS このオプション句を使用して、TimesTenがコンパイラのスイッチ設定を削除および再取得しないようにします。REUSE SETTINGSを指定すると、TimesTenによって既存の設定が保持され、値を指定していないパラメータのコンパイルに使用されます。

説明

  • ALTER PROCEDURE文は、既存プロシージャの宣言または定義を変更しません。プロシージャを再宣言または再定義するには、CREATE PROCEDURE文を使用します。

  • プロシージャが依存しているオブジェクトが無効な場合、TimesTenは最初にこれらのオブジェクトを再コンパイルします。

  • また、TimesTenは、再コンパイルされたプロシージャをコールするプロシージャや、再コンパイルされたプロシージャをコールするプロシージャが定義されているパッケージの本体など、プロシージャに依存しているオブジェクトをすべて無効にします。

  • TimesTenによってプロシージャが正常に再コンパイルされると、そのプロシージャは有効になります。プロシージャの再コンパイルでコンパイル・エラーになった場合、TimesTenによってエラーが返され、プロシージャは無効のままになります。ttIsqlコマンドのSHOW ERRORSを使用して、コンパイル・エラーを表示します。

  • 再コンパイル中に、TimesTenはすべての永続コンパイラ設定を削除し、セッションからこれらの設定を再取得して、コンパイルの最後に格納します。この処理を回避するには、REUSE SETTINGS句を指定します。

システム・ビューUSER_PLSQL_OBJECT_SETTINGSに問合せを発行して、プロシージャquery_empPLSQL_OPTIMIZE_LEVELおよびPLSCOPE_SETTINGSを確認します。PLSQL_OPTIMIZE_LEVELを3に変更することで、query_empを変更します。結果を確認します。

Command> SELECT PLSQL_OPTIMIZE_LEVEL, PLSCOPE_SETTINGS
       > FROM user_plsql_object_settings WHERE  name = 'QUERY_EMP';
< 2, IDENTIFIERS:NONE >
1 row found.

Command> ALTER PROCEDURE query_emp COMPILE PLSQL_OPTIMIZE_LEVEL = 3;
 
Procedure altered.
 
Command> SELECT PLSQL_OPTIMIZE_LEVEL, PLSCOPE_SETTINGS
       > FROM user_plsql_object_settings WHERE  name = 'QUERY_EMP';
< 3, IDENTIFIERS:NONE >
1 row found.

関連項目


CREATE PROCEDURE

ALTER REPLICATION

ALTER REPLICATION文では、レプリケーション要素の追加、変更、削除を行い、クラシック・レプリケーション・スキームに関連するデータベースのレプリケーション属性を変更します。

ほとんどのALTER REPLICATION処理は、レプリケーション・エージェントが停止している場合(ttAdmin -repStop)にのみサポートされます。ただし、レプリケーション・エージェントの実行中にサブスクライバ・データベースをレプリケーション・スキームに動的に追加することは可能です。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のクラシック・レプリケーション・スキームの変更に関する項を参照してください。

必要な権限

ADMIN

SQL構文

ALTER REPLICATION文の構文は、次のとおりです。

ALTER REPLICATION [Owner.]ReplicationSchemeName
     ElementOperation [...] | StoreOperation |
     NetworkOperation [...]

ElementOperationを1回以上指定します。

ADD ELEMENT ElementName
   { DATASTORE | 
     { TABLE [Owner.]TableName [CheckConflicts] } | 
       SEQUENCE [Owner.]SequenceName }
   { MASTER | PROPAGATOR } FullStoreName
   { SUBSCRIBER FullStoreName [,... ] [ReturnServiceAttribute] } [ ... ] }
   { INCLUDE | EXCLUDE }
   { TABLE [[Owner.]TableName[,...]] | 
     CACHE GROUP [[Owner.]CacheGroupName[,...]] | 
     SEQUENCE [[Owner.]SequenceName[,...]] } [,...]

ALTER ELEMENT { ElementName | * IN FullStoreName ]
    ADD SUBSCRIBER FullStoreName [,...] [ReturnServiceAttribute] |
        ALTER SUBSCRIBER FullStoreName [,...]   |
            SET [ReturnServiceAttribute]   |
        DROP SUBSCRIBER FullStoreName [,... ]

ALTER ELEMENT * IN FullStoreName
    SET { MASTER | PROPAGATOR } FullStoreName

ALTER ELEMENT ElementName
    {SET NAME NewElementName | SET CheckConflicts}

ALTER ELEMENT ElementName 
    { INCLUDE | EXCLUDE } { TABLE [Owner.]TableName |
          CACHE GROUP [Owner.]CacheGroupName | 
          SEQUENCE [Owner.]SequenceName }[,...] 

DROP ELEMENT { ElementName | * IN FullStoreName }

CheckConflictsは、TABLE要素をレプリケートした場合にのみ設定できます。構文の詳細は、「CHECK CONFLICTS」を参照してください。

ReturnServiceAttributeの構文は、次のとおりです。

{ RETURN RECEIPT [BY REQUEST] | NO RETURN }

StoreOperation句:

ADD STORE FullStoreName [StoreAttribute [... ]]
ALTER STORE FullStoreName SET StoreAttribute [... ]

StoreAttributeの構文は、次のとおりです。

DISABLE RETURN {SUBSCRIBER | ALL} NumFailures
RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED
DURABLE COMMIT {ON | OFF}
RESUME RETURN Milliseconds 
LOCAL COMMIT ACTION {NO ACTION | COMMIT}
RETURN WAIT TIME Seconds
COMPRESS TRAFFIC {ON | OFF} 
PORT PortNumber 
TIMEOUT Seconds 
FAILTHRESHOLD Value
CONFLICT REPORTING SUSPEND AT Value 
CONFLICT REPORTING RESUME AT Value 
TABLE DEFINITION CHECKING {EXACT|RELAXED}

NetworkOperationを1回以上指定します。

ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
  { { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost }
      PRIORITY Priority } [...] 

DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
  { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost } [...] 

パラメータ

パラメータ 説明
[Owner.]ReplicationSchemeName クラシック・レプリケーション・スキームに割り当てる名前です。
ADD ELEMENT ElementName 新しい要素を既存のクラシック・レプリケーション・スキームに追加します。ElementNameは、30文字以下の識別子です。DATASTORE要素を使用する場合、ElementNameの最初の20文字を、他のDATASTORE要素名に対して一意にする必要があります。

要素がDATASTOREの場合、すべての表とキャッシュ・グループがデータベースに含まれます。データベースの一部にSEQUENCE要素が含まれる場合、その要素のRETURNサービスはこの文では変更されません。

ADD ELEMENT ElementName DATASTORE

{INCLUDE | EXCLUDE}

{TABLE [[Owner.]TableName [,...]]|

CACHE GROUP [[Owner.]CacheGroupName [,...]]|

SEQUENCE [[Owner.]SequenceName[,...]]} [,...]

新しいDATASTORE要素を既存のクラシック・レプリケーション・スキームに追加します。ElementNameは、30文字以下の識別子です。DATASTORE要素を使用する場合、ElementNameの最初の20文字を、他のDATASTORE要素名に対して一意にする必要があります。

INCLUDEは、指定された表とキャッシュ・グループのみをデータベースに含めます。INCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

EXCLUDEは、指定された表、キャッシュ・グループおよび順序を除外して、すべての表とキャッシュ・グループをデータベースに含めます。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

要素が順序の場合、RETURN属性は適用されず、競合チェックはサポートされず、循環する順序はエラーを返します。

ADD SUBSCRIBER FullStoreName 追加のサブスクライバ・データベースを指定します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
ALTER ELEMENT * IN FullStoreName

SET { MASTER | PROPAGATOR } FullStoreName

FullStoreNameMASTERまたはPROPAGATORであるすべての要素を変更します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

この構文を一連の要素名に使用すると、次の操作を実行できます。

  • サブスクライバの追加、変更、削除。

  • 要素セットのMASTERまたはPROPAGATORのステータスの設定。

変更されるデータベースの一部にSEQUENCE要素が含まれる場合、その要素のRETURNサービスはこの文では変更されません。

ALTER ELEMENT ElementName サブスクライバが追加または削除される要素の名前です。
ALTER ELEMENT

ElementName1

SET NAME ElementName2

ElementName1ElementName2の名前に変更します。TABLE型の要素の名前のみを変更できます。
ALTER ELEMENT ElementName

{INCLUDE|EXCLUDE}

{TABLE [Owner.]TableName |

CACHE GROUP [Owner.]CacheGroupName | SEQUENCE [Owner.]SequenceName} [,...]

ElementNameは、変更する要素の名前です。

INCLUDEは、指定された表とキャッシュ・グループをデータベースに追加します。INCLUDE句は、オブジェクト型(表またはキャッシュ・グループ)ごとに1つ使用します。

EXCLUDEは、指定された表とキャッシュ・グループをデータベースから削除します。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

要素が順序の場合、RETURN属性は適用されず、競合チェックはサポートされず、循環する順序はエラーを返します。

ALTER SUBSCRIBER FullStoreName

SET RETURN RECEIPT

[BY REQUEST]|NO RETURN

RETURN RECEIPTサービスを有効化、無効化または変更するように、サブスクライバ・データベースを変更します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
CheckConflicts データベース間でTABLE要素を双方向にレプリケートするための同時書込みで、レプリケーションの競合をチェックします。DATASTORE型の要素をレプリケートする場合は、競合をチェックできません。「CHECK CONFLICTS」を参照してください。
COMPRESS TRAFFIC {ON | OFF} レプリケートされた通信量を圧縮して、ネットワークの帯域幅の量を削減します。ONは、STOREで定義されたデータベースに対してレプリケートされた通信量をすべて圧縮するように指定します。OFF(デフォルト)は、通信量を圧縮しないように指定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケートされた通信量の圧縮に関する説明を参照してください。
CONFLICT REPORTING SUSPEND AT Value 競合解消のレポートを一時停止します。

Valueは、負でない整数です。デフォルトは0(一時停止なし)です。競合のレポートは、競合の割合がValueを超えると一時的に停止されます。Valueを0に設定すると、競合のレポートの一時停止が無効になります。

この句は、表レベルのレプリケーションで有効です。

CONFLICT REPORTING RESUME AT Value 競合解消のレポートを再開します。

Valueは、負でない整数です。競合のレポートは、競合の割合がValueを下回ると再開されます。デフォルトは1です。

この句は、表レベルのレプリケーションで有効です。

DISABLE RETURN {SUBSCRIBER | ALL} NumFailures NumFailuresで指定されているタイムアウト回数を経過した後、RETURNサービスのブロッキングを無効にするようにRETURNサービス障害ポリシーを設定します。SUBSCRIBERを選択すると、レプリケートされた更新を、指定されているタイムアウト期間内に確認できなかったサブスクライバのみにこのポリシーが適用されます。ALLを選択すると、いずれかのサブスクライバから応答がなかった場合、すべてのサブスクライバにこのポリシーが適用されます。この障害ポリシーは、RETURN RECEIPTまたはRETURN TWOSAFEサービスのいずれかで指定できます。

DISABLE RETURNが指定され、RESUME RETURNが指定されていない場合、データベースのレプリケーション・エージェントが再起動されるまでRETURNサービスはオフのままです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

DURABLE COMMIT {ON | OFF} DurableCommits一般接続属性設定を上書きします。DURABLE COMMIT ONは、レプリケーション・エージェントが実行中か停止しているかに関係なく、永続コミットを有効にします。
DROP ELEMENT * IN FullStoreName FullStoreNameMASTERであるすべての要素のレプリケーションの記述を削除します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
DROP ELEMENT ElementName ElementNameのレプリケーションの記述を削除します。
DROP SUBSCRIBER FullStoreName 指定したサブスクライバ・データベースに更新が送信されないように指定します。この処理は、クラシック・レプリケーション・スキームの持つサブスクライバが1つのみの場合に失敗します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
FAILTHRESHOLD Value サブスクライバ・データベースのために累積できるログ・ファイルの数。この値を超えると、サブスクライバはFailedの状態に設定されます。

0を指定すると、この上限は設定されません。これがデフォルトです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のトランザクション・ログ障害しきい値の設定に関する説明を参照してください。

FullStoreName 次のいずれかとして指定されたデータベースです。
  • SELF

  • データベース・ファイル名の接頭辞

たとえば、データベースのパスがdirectory/subdirectory/data.ds0の場合、データベース名はdataになります。

この名前は、DSNの記述のDataStore属性で指定されるデータベース・ファイル名で、オプションでホストIDを次の書式で指定できます。

DataStoreName [ON Host]

Hostは、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のネットワークの構成に関する項で説明されているように、IPアドレスか、または1つ以上のIPアドレスに割り当てられたリテラル・ホスト名です。ホスト名に特殊文字が含まれている場合は、二重引用符で囲む必要があります。たとえば、"MyHost-500"のようになります。

LOCAL COMMIT ACTION {NO ACTION | COMMIT} タイムアウト・イベントのRETURN TWOSAFEトランザクションで実行されるデフォルトのアクションを指定します。

NO ACTION: タイムアウト時、コミット関数はアプリケーションに戻り、トランザクションをコミット・コールに入ったときと同じ状態のままにしますが、レプリケートされた表をアプリケーションが更新できない場合を除きます。アプリケーションはコミットのみを再発行できます。トランザクションはロールバックできません。これがデフォルトです。

COMMIT: タイムアウト時、コミット関数はCOMMITを実行して、トランザクションをローカルに終了しようとします。同じトランザクション上でこれ以上の処理を行うことはできません。

この設定は、localActionパラメータを指定してttRepSyncSetプロシージャをコールすることで、特定のトランザクションに対して無効にすることができます。

MASTER FullStoreName アプリケーションで特定の要素が更新されるデータベース。更新はMASTERデータベースによってSUBSCRIBERデータベースに送信されます。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
NO RETURN RETURNサービスを使用しないように指定します。これがデフォルトです。

RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

PORT PortNumber このデータベースのレプリケーション・エージェントが接続をリスニングするTCP/IPポート番号です。指定しない場合は、レプリケーション・エージェントによってポート番号が自動的に割り当てられます。

相互にレプリケートするすべてのTimesTenデータベースで、同じポート番号を使用する必要があります。

PROPAGATOR FullStoreName レプリケートされた更新を受け取って他のデータベースに渡すデータベース。
RESUME RETURN Milliseconds DISABLE RETURNによってRETURNサービスのブロッキングが無効になった場合、この属性によって、RETURNサービスのブロッキングを再度有効にするタイミングに関するポリシーを設定します。RETURNサービスのブロッキングは、障害が発生したサブスクライバが、Millisecondsで指定された時間よりも短い間隔でレプリケートされた更新を確認するとすぐに再度有効になります。

DISABLE RETURNが指定され、RESUME RETURNが指定されていない場合、データベースのレプリケーション・エージェントが再起動されるまでRETURNサービスはオフのままです。

RETURN RECEIPT [BY REQUEST] RETURN RECEIPTサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションを受信するまでブロックされます。

RETURN RECEIPTにより、すべてのトランザクションにサービスが適用されます。RETURN RECEIPT BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED レプリケーションが無効になっている場合のRETURNサービスのオンまたはオフを設定します。

OFFは、レプリケーション無効時にRETURNサービスを無効する設定であり、RETURN RECEIPTサービスのデフォルトです。ONは、レプリケーション無効時にもRETURNサービスを有効のままにできる設定であり、RETURN TWOSAFEサービスのデフォルトです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

RETURN TWOSAFE[BY REQUEST] RETURN TWOSAFEサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションをコミットするまでブロックされます。

RETURN TWOSAFEにより、すべてのトランザクションにサービスが適用されます。RETURN TWOSAFE BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN WAIT TIME Seconds RETURNサービスの応答を待機する秒数を指定します。デフォルト値は10秒です。値が0(ゼロ)の場合は、タイムアウトがないことを意味します。ttRepSyncSetプロシージャにreturnWaitパラメータを設定してアプリケーションからコールすることによって、このタイムアウト設定を上書きできます。
SET {MASTER | PROPAGATOR} FullStoreName 任意のデータベースを任意の要素のMASTERまたはPROPAGATORに設定します。FullStoreNameは、データベースのファイルの基本名である必要があります。
SUBSCRIBER FullStoreName MASTERデータベースから更新を受け取るデータベース。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
TABLE DEFINITION CHECKING {EXACT|RELAXED} サブスクライバで実行される表定義チェックの種類を指定します。
  • EXACT: マスターおよびサブスクライバで表が一致している必要があります。

  • RELAXED: 表には同じキー定義、列の数および列のデータ型が必要です。

デフォルトはRELAXEDです。

注意: TABLE DEFINITION CHECKING EXACTを使用している場合、データベースを移行するにはttMigrate -exactUpgradeを使用します。TABLE DEFINITION CHECKING RELAXEDを使用している場合、データベースを移行するにはttMigrate -relaxedUpgradeを使用します。

TIMEOUT Seconds レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大時間(秒)。デフォルトは120秒です。

注意: リモート・レプリケーション・エージェントからの応答の遅延の原因となる大規模なトランザクションの場合、エージェントは、トランザクションのサイズに基づいて、必要に応じてタイムアウトを次第に大きい値にスケーリングします。大規模なトランザクションに対してTIMEOUTを60秒以下に設定した場合、このスケーリングは行われず、エージェントは応答の待機をタイムアウトします。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のリモート・レプリケーション・エージェントからの応答のタイムアウトの待機の設定に関する項も参照してください。

ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName NetworkOperationをレプリケーション・スキームに追加します。各サブスクライバ・ストアへのすべてのアウトバウンド接続に対してマスター・ストアが使用するネットワーク・インタフェースを制御できます。

複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName クラシック・レプリケーション・スキームからNetworkOperationを削除します。

複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost MasterHostおよびSubscriberHostは、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。

句は複数回指定できます。ADDおよびDROP ROUTE MASTERの両方に対して有効です。

PRIORITY Priority 1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。

NetworkOperation句の構文で必須です。MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost句の後ろに記述します。


説明

  • ALTER ELEMENT DROP SUBSCRIBERは、特定のレプリケーション要素のサブスクライバを削除します。

  • レプリケーション要素の名前が、別のデータベースにすでに定義されているレプリケーション要素の名前と競合する場合は、ALTER ELEMENT SET NAMEを使用してレプリケーション要素の名前を変更できます。SET NAMEでは、* IN FullStoreNameは使用できません。FullStoreNameは、データベースのファイルの基本名である必要があります。たとえば、データベースのファイル名がdata.ds0の場合、ファイルの基本名はdataになります。

  • ALTER ELEMENT SET MASTERを使用して、レプリケーション要素のマスター・データベースを変更できます。MASTER操作には、* IN FullStoreNameオプションを使用する必要があります。つまり、マスター・データベースは、そのレプリケーション要素すべての所有権を送信して、マスター・ロールを完全に放棄する必要があります。通常、このオプションは、(共通の)MASTERの障害の後に、SUBSCRIBERデータベースで要求されるALTER REPLICATION文で使用します。

  • マスター要素の所有権をサブスクライバに送信するには、次の手順を実行します。

    1. レプリケートされた各表に対してALTER REPLICATION DROP ELEMENTを実行し、レプリケートされた要素を手動で削除します。

    2. 新しく指定したMASTER/SUBSCRIBERロールを付けてALTER REPLICATION ADD ELEMENTを使用して、各表をレプリケーション・スキームに追加します。

  • ALTER REPLICATION ALTER ELEMENT SET MASTERでは、以前のマスターは自動的にはサブスクライバとしてスキームに保持されません。保持する必要がある場合は、ALTER REPLICATION ALTER ELEMENT ADD SUBSCRIBER文を実行します。


    注意:

    ALTER ELEMENT DROP MASTERという文はありません。各レプリケーション要素のMASTERデータベースは1つのみである必要があり、現在指定されているMASTERはレプリケーション・スキームから削除できません。

  • NetworkOperation句を使用する前に、レプリケーション・エージェントを停止してください。

  • 次のレプリケーション・スキームはALTER REPLICATION文で変更できません。

    • アクティブ・スタンバイ・ペア。かわりに、ALTER ACTIVE STANDBY PAIRを使用します。

    • クラスタウェア管理のアクティブ・スタンバイ・ペア。かわりに、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のスキーマの変更に関する説明で説明されているタスクを実行します。

この例では、データベースwest上で更新してデータベースeastにレプリケートする追加の表westleadsのクラシック・レプリケーション・スキームを設定します。

ALTER REPLICATION r1
   ADD ELEMENT e3 TABLE westleads
     MASTER west ON "westcoast"
     SUBSCRIBER east ON "eastcoast";

この例では、表westleadsにサブスクライバ(backup)を追加します。

ALTER REPLICATION r1
   ALTER ELEMENT e3
     ADD SUBSCRIBER backup ON "backupserver";

この例では、表westleadsの要素名をe3からnewelementnameに変更します。

ALTER REPLICATION r1
   ALTER ELEMENT e3
     SET NAME newelementname;

この例では、現在のマスターwestのすべての要素について、newwestをマスターに指定します。

ALTER REPLICATION r1
   ALTER ELEMENT * IN west
     SET MASTER newwest;

この要素は、eastのポート番号を変更します。

ALTER REPLICATION r1
   ALTER STORE east ON "eastcoast" SET PORT 22251;

この例では、my.tab1表をmy.rep1レプリケーション・スキームのds1データベース要素に追加します。

ALTER REPLICATION my.rep1
  ALTER ELEMENT ds1 DATASTORE
     INCLUDE TABLE my.tab1;

この例では、my.cg1キャッシュ・グループをmy.rep1レプリケーション・スキームのds1データベースに追加します。

ALTER REPLICATION my.rep1
  ALTER ELEMENT ds1 DATASTORE
     INCLUDE CACHE GROUP my.cg1;

この例では、ds1データベースをmy.rep1レプリケーション・スキームに追加します。データベースには、my.tab2表、my.cg2キャッシュ・グループおよびmy.cg3キャッシュ・グループが含まれています。

ALTER REPLICATION my.rep1
  ADD ELEMENT ds1 DATASTORE
     MASTER rep2
     SUBSCRIBER rep1, rep3
     INCLUDE TABLE my.tab2
     INCLUDE CACHE GROUP my.cg2, my.cg3;

この例では、ds2データベースをレプリケーション・スキームに追加しますが、my.tab1表、my.cg0キャッシュ・グループおよびmy.cg1キャッシュ・グループが除外されます。

ALTER REPLICATION my.rep1
  ADD ELEMENT ds2 DATASTORE
     MASTER rep2
     SUBSCRIBER rep1
     EXCLUDE TABLE my.tab1
     EXCLUDE CACHE GROUP my.cg0, my.cg1;

NetworkOperation句を追加します。

ALTER REPLICATION r
ADD ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2"
    PRIORITY 1
MASTERIP "3.3.3.3" PRIORITY 2 SUBSCRIBERIP "4.4.4.4" PRIORITY 2;

NetworkOperation句を削除します。

ALTER REPLICATION r
DROP ROUTE MASTER repl ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" SUBSCRIBERIP "2.2.2.2"
MASTERIP "3.3.3.3" SUBSCRIBERIP "4.4.4.4";

関連項目


「ALTER ACTIVE STANDBY PAIR」
「CREATE ACTIVE STANDBY PAIR」
「CREATE REPLICATION」
「DROP ACTIVE STANDBY PAIR」
「DROP REPLICATION」

表をデータベースから削除するには、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のクラシック・レプリケーション・スキーム内のレプリケートされた表の変更に関する項を参照してください。

ALTER SESSION

ALTER SESSION文は、セッション・パラメータを動的に変更します。これは、現在のセッションの同等の接続属性の設定を上書きします(適用可能な場合)。

必要な権限

なし

SQL構文

ALTER SESSION SET
  {DDL_REPLICATION_ACTION={'INCLUDE'|'EXCLUDE'} | 
   DDL_REPLICATION_LEVEL={1|2|3} |
   NLS_SORT = {BINARY| SortName} |
   NLS_LENGTH_SEMANTICS = {BYTE|CHAR} |
   NLS_NCHAR_CONV_EXCP = {TRUE|FALSE} |
   ISOLATION_LEVEL = {SERIALIZABLE | READ COMMITTED} |
   PLSQL_TIMEOUT = n |
   PLSQL_OPTIMIZE_LEVEL = {0|1|2|3}|
   PLSCOPE_SETTINGS = {'IDENTIFIERS:ALL'|'IDENTIFIERS:NONE'} |
   PLSQL_CONN_MEM_LIMIT = n |
   PLSQL_CCFLAGS = 'name1:value1, name2:value2,..., nameN:valueN' |
   REPLICATION_TRACK = TrackNumber |
   COMMIT_BUFFER_SIZE_MAX = n
   } 

パラメータ

パラメータ 説明
DDL_REPLICATION_ACTION={'INCLUDE'|'EXCLUDE'} 表または順序のいずれかの作成時に表または順序をアクティブ・スタンバイ・ペアに含めるには、DDL_REPLICATION_ACTIONINCLUDEに設定します。表または順序のいずれかの作成時に表または順序をアクティブ・スタンバイ・ペアに含めない場合は、DDL_REPLICATION_ACTIONEXCLUDEに設定します。デフォルトはINCLUDEです。

EXCLUDEに設定した場合:

  • 表をレプリケーション・スキームに追加するには、後でALTER ACTIVE STANDBY PAIR ... INCLUDE TABLEをアクティブ・データベースで実行する必要があります。この文を実行すると表の内容は切り捨てられるため、すべての表がすべてのアクティブ・スタンバイ・データベースおよびサブスクライバで空である必要があります。

  • 順序をレプリケーション・スキームに追加するには、後でALTER ACTIVE STANDBY PAIR ... INCLUDE SEQUENCEをアクティブ・データベースで実行する必要があります。

この属性が有効なのは、DDL_REPLICATION_LEVELが2以上の場合のみです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

注意: 同等の接続属性はDDLReplicationActionです。

DDL_REPLICATION_LEVEL={1|2|3} DDLがアクティブ・スタンバイ・ペアのすべてのデータベースにわたってレプリケートされるかどうかを指定します。値は次のいずれかです。
  • 1: デフォルト。ALTER TABLEを使用して、アクティブ・データベースのレプリケートされる表に対して列を追加または削除します。変更は、スタンバイ・データベースの表にレプリケートされます。

  • 2: アクティブ・データベースからスタンバイ・データベースへの、表、シノニムまたは索引の作成または削除のレプリケーションをサポートします。これには、グローバル一時表の作成または削除は含まれますが、CREATE TABLE AS SELECTは含まれません。この文は、空の表に索引が作成された場合にのみレプリケートされます。

  • 3: レベル2でサポートされているすべてのDDLのレプリケーション、ビューと順序(マテリアライズド・ビューは含まれません)の作成または削除のレプリケーションをサポートし、ttCacheUidPwdSet組込みプロシージャをコールすると、キャッシュ管理ユーザーIDおよびパスワードの設定を変更します。

    注意: キャッシュ・グループを定義した後に、キャッシュ管理ユーザーIDを変更することはできませんが、キャッシュ管理パスワードは変更できます。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

注意: 同等の接続属性はDDLReplicationLevelです。

NLS_SORT={BINARY| SortName} 言語の比較に使用する照合の順序を示します。

大/小文字を区別しないソートの場合またはアクセントを区別しないソートの場合は、BINARYまたはSortName値に_CIまたは_AIを追加します。

NLS_SORTを指定しない場合、デフォルトはBINARYです。

SortNameでサポートされる値の完全なリストは、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の言語ソートに関する説明を参照してください。

大/小文字を区別しないソートまたはアクセントを区別しないソートの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の大/小文字を区別しない言語ソートまたはアクセントを区別しない言語ソートに関する説明を参照してください。

NLS_LENGTH_SEMANTICS ={BYTE|CHAR} 長さセマンティクス構成のデフォルトを設定します。BYTEはバイト長セマンティクスを示します。CHARは文字長セマンティクスを示します。デフォルトはBYTEです。

長さセマンティクスの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の長さセマンティクスおよびデータ記憶域に関する説明を参照してください。

NLS_NCHAR_CONV_EXCP = {TRUE|FALSE} NCHAR/NVARCHAR2データとCHAR/VARCHAR2データ間でキャラクタ・タイプの暗黙的または明示的な変換中にデータの損失があった場合に、エラーを報告するかどうかを指定します。TRUEを指定するとエラーが報告されます。FALSEを指定するとエラーは報告されません。デフォルトは、FALSEです。
ISOLATION_LEVEL = {SERIALIZABLE|READ COMMITTED} 分離レベルを設定します。変更は次のトランザクションから有効になります。

分離レベルの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のトランザクションの分離レベルに関する項を参照してください。

注意: 同等の接続属性はIsolationです。

PLSQL_TIMEOUT= n PL/SQLプロシージャが自動的に終了されるまでの実行時間を制御します。nは時間(秒)を表します。0(時間制限なし)または正の整数を指定します。デフォルトは30です。

この値を変更すると、新しい値は、現在実行しているPL/SQLプログラム・ユニットおよび同じ接続でこの後実行される他のすべてのプログラム・ユニットに影響します。

データベースでPL/SQLが無効になっているときにこの属性を指定した場合、TimesTenによってエラーがスローされます。

PLSQL_OPTIMIZE_LEVEL = {0|1|2|3} PL/SQLライブラリ・ユニットのコンパイルに使用する最適化レベルを指定します。設定値が高いほど、コンパイラでPL/SQLライブラリ・ユニットを最適化するのに多くの処理が必要になります。可能な値は0、1、2または3です。デフォルトは2です。

データベースでPL/SQLが無効になっているときにこの属性を指定した場合、TimesTenによってエラーが返されます。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_OPTIMIZE_LEVELに関する説明を参照してください。

PLSCOPE_SETTINGS = '{IDENTIFIERS:ALL |IDENTIFIERS:NONE}' PL/SQLコンパイラで相互参照情報を生成するかどうかを制御します。相互参照情報を生成するには、IDENTIFIERS:ALLを指定します。デフォルトはIDENTIFIERS:NONEです。

データベースでPL/SQLが無効になっているときにこの属性を指定した場合、TimesTenによってエラーが返されます。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSCOPE_SETTINGSに関する説明を参照してください。

PLSQL_CONN_MEM_LIMIT = n この接続でPL/SQLが使用できるプロセス・ヒープ・メモリーの最大量を指定します。nは整数(MB単位)です。デフォルトは100です。

データベースでPL/SQLが無効になっているときにこの属性を指定した場合、TimesTenによってエラーが返されます。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_CONN_MEM_LIMITに関する説明を参照してください。

PLSQL_CCFLAGS = 'name1:value1, name2:value2, ..., nameN:valueN' PL/SQLユニットの条件付きコンパイルを制御する問合せディレクティブを指定し、確認する条件に応じて、PL/SQLプログラムの機能をカスタマイズできます。たとえば、デバッグ機能をアクティブ化するには、次のようにします。
PLSQL_CCFLAGS = 'DEBUG:TRUE'
REPLICATION_TRACK = TrackNumber 追跡ベース・パラレル・レプリケーションを管理している場合は、レプリケーション追跡に接続を割り当てることができます。接続によって発行されたすべてのトランザクションは、追跡が変更されないかぎり、この追跡に割り当てられます。

指定された番号が、存在しないレプリケーション・トラックXに対してである場合、トランザクションはXReplicationParallelismで割った余りとして計算されたトラック番号に割り当てられます。

先行する操作がすべて読取り操作だった場合を除き、トランザクションの途中でトラックを変更することはできません。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の自動パラレル・レプリケーション環境内のレプリケーション・トラックの指定に関する項を参照してください。

同等の接続属性はReplicationTrackです。

COMMIT_BUFFER_SIZE_MAX= n 接続の実行中に、コミット・バッファの最大サイズを変更します。nは整数で表現され、コミット・バッファの最大サイズ(MB)を示します。

変更は次のトランザクションから有効になります。

ttConfiguration組込みプロシージャをコールして、現在構成されているコミット・バッファの最大サイズを確認します。0を指定すると、デフォルト・サイズでバッファが設定されます。デフォルト・サイズは128KBです。

コミット・バッファおよびトランザクションの再利用操作の詳細は、『Oracle TimesTen In-Memory Databaseオペレーションガイド』のトランザクションの再利用操作に関する説明、および『Oracle TimesTen In-Memory Databaseリファレンス』のCommitBufferSizeMaxに関する説明を参照してください。

注意: 同等の接続属性はCommitBufferSizeMaxです。


説明

  • ALTER SESSION文は、そのセッションで次に実行されるコマンドから作用します。新しいセッション・パラメータはただちに有効になります。

  • 文字比較を含む演算では、言語を区別する照合順番がサポートされています。大/小文字を区別しないソートは、DISTINCT値の解釈に影響することがあります。

  • CHARNCHAR間の暗黙的および明示的な変換がサポートされています。

  • TIMESTEN8キャラクタ・セットを使用している場合は、CHARNCHAR間の変換ができません。

  • サポートされているキャラクタ・セットで、SQL文字列関数を使用できます。たとえば、UPPERおよびLOWER関数では、ASCII以外のCHARおよびVARCHAR2文字とNCHARおよびNVARCHAR2文字がサポートされています。

  • 選択したキャラクタ・セットによっては、CHARおよびVARCHAR2列のデータに対するメモリー消費に影響する可能性があります。

  • レプリケーション・スキームに含まれるすべてのデータベースのキャラクタ・セットが一致している必要があります。

  • 既存の表をアクティブ・スタンバイ・ペアに追加するには、DDL_REPLICATION_LEVELを2以上に設定し、DDL_REPLICATION_ACTIONINCLUDEに設定します。または、DDL_REPLICATION_ACTIONEXCLUDEに設定されている場合は、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE文を使用できます。この場合、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE文を実行すると表の内容は切り捨てられるため、この文を実行する前に、表は空であり、すべてのデータベースに存在している必要があります。

  • 既存の順序またはビューをアクティブ・スタンバイ・ペアに追加するには、DDL_REPLICATION_LEVELを3に設定します。順序をレプリケーション・スキームに含めるには、DDL_REPLICATION_ACTIONINCLUDEに設定する必要があります。これは、マテリアライズド・ビューには適用されません。

  • オブジェクトは、受信側データベースがそのレベルのレプリケーションをサポートするTimesTenリリースであり、アクティブ・スタンバイ・ペアのレプリケーション・スキーム用に構成されている場合にのみレプリケートされます。たとえば、11.2.2.7.0より前のデータベース・リリースへの順序のレプリケーション(DDL_REPLICATION_LEVEL=3が必要)は、サポートされません。受信側データベースは、DDL_REPLICATION_LEVEL=2でサポートされているオブジェクトのレプリケーション用に、リリース11.2.1.8.0以上である必要があります。

ALTER SESSION文を使用してCOMMIT_BUFFER_SIZE_MAXを500MBに設定します。まず、ttConfigurationをコールして現在の接続設定を表示します。ALTER SESSION文を使用して、COMMIT_BUFFER_SIZE_MAXを500に変更します。ttConfigurationをコールして、新しい設定を表示します。

Command>  CALL ttConfiguration ('CommitBufferSizeMax');
< CommitBufferSizeMax, 0 >
1 row found.
Command> ALTER SESSION SET COMMIT_BUFFER_SIZE_MAX = 500;
 
Session altered.
 
Command> CALL ttConfiguration ('CommitBufferSizeMax');
< CommitBufferSizeMax, 500 >
1 row found.

ALTER SESSION文を使用して、PLSQL_TIMEOUTを60秒に変更します。2つ目のALTER SESSION文を使用して、PLSQL_OPTIMIZE_LEVELを3に変更します。次に、ttConfigurationをコールして新しい値を表示します。

Command> ALTER SESSION SET PLSQL_TIMEOUT = 60;
Session altered.Command> ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL = 3;
Session altered.

Command> CALL TTCONFIGURATION ();
< CkptFrequency, 600 >
< CkptLogVolume, 0 >
< CkptRate, 0 >
...
< PLSQL_OPTIMIZE_LEVEL, 3 >
< PLSQL_TIMEOUT, 60 >
...
47 rows found.

この例では、PLSQL_TIMEOUTを20秒に設定します。無限にループするプログラムを実行してみます。20秒で実行が終了し、エラーが戻されます。

Command> ALTER SESSION SET PLSQL_TIMEOUT = 20;

Command> DECLARE v_timeout NUMBER;
       > BEGIN
       >   LOOP
       >     v_timeout :=0;
       >     EXIT WHEN v_timeout < 0;
       >   END LOOP;
       > END;
       > /
 8509: PL/SQL execution terminated; PLSQL_TIMEOUT exceeded

ttConfigurationをコールして、現在のPLSCOPE_SETTINGSの値を表示します。ALTER SESSION文を使用して、PLSCOPE_SETTINGSの値をIDENTIFIERS:ALLに変更します。ダミーのプロシージャpを作成します。システム・ビューSYS.USER_PLSQL_OBJECT_SETTINGSに問合せを発行して、プロシージャpに新しい設定が適用されていることを確認します。

Command> CALL TTCONFIGURATION ();
< CkptFrequency, 600 >
< CkptLogVolume, 0 >
< CkptRate, 0 >
...
< PLSCOPE_SETTINGS, IDENTIFIERS:NONE >
...
47 rows found.

Command> ALTER SESSION SET PLSCOPE_SETTINGS = 'IDENTIFIERS:ALL';
Session altered.
 
Command> CREATE OR REPLACE PROCEDURE p IS
       > BEGIN
       >  NULL;
       > END;
       > /
Procedure created.
 
Command> SELECT PLSCOPE_SETTINGS FROM SYS.USER_PLSQL_OBJECT_SETTINGS WHERE
       > NAME = 'p';
< IDENTIFIERS:ALL >
1 row found.

次の例では、ALTER SESSION文を使用してNLS_SORT設定をBINARYからBINARY_CIに変更し、さらにBINARY_AIに変更しています。データベースおよび接続のキャラクタ・セットはWE8ISO8859P1です。

Command> connect "dsn=cs;ConnectionCharacterSet=WE8ISO8859P1";
Connection successful: DSN=cs;UID=user;DataStore=/datastore/user/cs;
DatabaseCharacterSet=WE8ISO8859P1;
ConnectionCharacterSet=WE8ISO8859P1;PermSize=32;TypeMode=0;
(Default setting AutoCommit=1)
Command>#Create the Table
Command> CREATE TABLE collatingdemo (letter VARCHAR2 (10));
Command>#Insert values
Command> INSERT INTO collatingdemo VALUES ('a');
1 row inserted.
Command> INSERT INTO collatingdemo VALUES ('A');
1 row inserted.
Command> INSERT INTO collatingdemo VALUES ('Y');
1 row inserted.
Command> INSERT INTO collatingdemo VALUES ('ä');
1 row inserted.
Command>#SELECT
Command> SELECT * FROM collatingdemo;
< a >
< A >
< Y >
< ä >
4 rows found.
Command>#SELECT with ORDER BY
Command> SELECT * FROM collatingdemo ORDER BY letter;
< A >
< Y >
< a >
< ä >
4 rows found.
Command>#set NLS_SORT to BINARY_CI and SELECT
Command> ALTER SESSION SET NLS_SORT = BINARY_CI;
Command> SELECT * FROM collatingdemo ORDER BY letter;
< a >
< A >
< Y >
< Ä >
< ä >
4 rows found.
Command>#Set NLS_SORT to BINARY_AI and SELECT
Command> ALTER SESSION SET NLS_SORT = BINARY_AI;
Command> SELECT * FROM collatingdemo ORDER BY letter;
< ä >
< a >
< A >
< Y >
4 rows found.

次の例では、ユーザー定義のパラレル・レプリケーションを有効にし(アクティブ・スタンバイ・ペアではサポートされません)、ALTER SESSION文を使用して、現在の接続でのレプリケーションのトラック番号を5に変更します。レプリケーション・スキームのパラレル・レプリケーションを有効にするには、ReplicationApplyOrderingを1に設定します。次に、REPLICATION_TRACKは常にReplicationParallelism以下の番号に設定します。たとえば、ReplicationParallelism接続属性を、REPLICATION_TRACKに設定された値である5よりも大きい6に設定できます。

Command> ALTER SESSION SET REPLICATION_TRACK = 5;
Session altered.

次の例では、変更スタンバイ・レプリケーション・ペアのアクティブ・データベースでDDL_REPLICATON_LEVEL2に設定し、DDLReplicationAction'INCLUDE'に設定して、列、表、シノニムおよび索引の追加および削除のレプリケーションを有効にします。

Command > ALTER SESSION SET DDL_REPLICATION_LEVEL=2;
Session altered.

Command > ALTER SESSION SET DDL_REPLICATION_ACTION='INCLUDE';
Session altered.

注意:

DDL_REPLICATION_LEVELおよびDDL_REPLICATION_ACTIONの同等の接続属性は、それぞれDDLReplicationLevelおよびDDLReplicationActionです。

ALTER TABLE

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

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合はALTER ANY TABLEが必要です。

ALTER TABLE...ADD FOREIGN KEYの場合、変更される表の所有者に、外部キー句で参照される表のREFERENCES権限が必要です。

SQL構文

1つの列の追加:

ALTER TABLE [Owner.]TableName 
  ADD [COLUMN] ColumnName ColumnDataType
    [DEFAULT DefaultVal] [[NOT] INLINE] [UNIQUE] [NULL]
  [COMPRESS (CompressColumns [,...])]

複数の列の追加:

ALTER TABLE [Owner.]TableName 
 ADD (ColumnName ColumnDataType 
      [DEFAULT DefaultVal] [[NOT] INLINE] [UNIQUE] [NULL] [,... ] )
  [COMPRESS (CompressColumns [,...])]

NOT NULL列の追加(注意: DEFAULT句が必要):

ALTER TABLE [Owner.]TableName
  ADD [COLUMN] ColumnName ColumnDataType
    NOT NULL [ENABLE] DEFAULT DefaultVal [[NOT] INLINE] [UNIQUE]
  [COMPRESS (CompressColumns [,...])]

複数のNOT NULL列の追加(注意: DEFAULT句が必要):

ALTER TABLE [Owner.]TableName
  ADD (ColumnName ColumnDataType
       NOT NULL [ENABLE] DEFAULT DefaultVal [[NOT] INLINE] [UNIQUE] [,...])
  [COMPRESS (CompressColumns [,...])]

CompressColumnsの構文は次のとおりです。

{ColumnDefinition | (ColumnDefinition [,...])} BY DICTIONARY 
   [MAXVALUES = CompressMax]

列の削除:

ALTER TABLE [Owner.]TableName 
  DROP {[COLUMN] ColumnName | (ColumnName [,... ] )}

注意:

圧縮列グループの列を削除する場合は、圧縮列グループのすべての列を指定する必要があります。

範囲索引を使用した主キー制約の追加:

ALTER TABLE [Owner.]TableName ADD CONSTRAINT ConstraintName
  PRIMARY KEY (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を使用して主キー制約を削除することはできません。制約を削除するには、表を削除してから再作成する必要があります。

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

ALTER TABLE [Owner.]TableName
SET PAGES = RowPages | CURRENT

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

ALTER TABLE [Owner.]TableName
USE HASH INDEX PAGES = RowPages | CURRENT

主キーで使用する索引をUSE RANGE INDEX句で範囲索引に変更するには、次のように実行します。

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
    {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S]}
     [CYCLE num2 {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S] }]
    [ON | OFF]

エージング状態の変更:

ALTER TABLE [Owner.]TableName
SET AGING {ON | OFF}

エージングの削除:

ALTER TABLE [Owner.]TableName
DROP AGING

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

ALTER TABLE [Owner.]TableName
SET AGING LIFETIME num1 {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S]}

サイクルの変更(時間ベースのエージングの場合):

ALTER TABLE [Owner.]TableName
SET AGING CYCLE num2 {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S]}

パラメータ

パラメータ 説明
[Owner.] TableName 変更する表を指定します。
UNIQUE ColumnNameの各行の値が一意である必要があることを示します。
MODIFY 指定した列の属性を新しい値に変更します。
DEFAULT [DefaultVal |NULL] 列のデフォルト値(DefaultVal)を指定します。NULLを指定すると、列のデフォルト値が削除されます。デフォルト値にSYSDATEを指定した列を追加すると、既存の行の列の値のみが、列が追加された時点のシステム日付になります。デフォルト値がUSER関数の1つである場合、列の値はALTER TABLE文を実行したセッションのユーザーの値になります。現在、ROWIDデータ型のデフォルト値を割り当てることはできません。

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

注意: レプリケーション・スキームの一部である表にNOT NULL列を追加するには、DDL_REPLICATON_LEVELが3以上である必要があります。

ColumnName ALTER TABLE文に含める列の名前。新しい列に、既存の列または別の新しい列と同じ名前を指定することはできません。NOT NULL列を追加する場合は、DEFAULT句を含める必要があります。
ColumnDataType 追加する列のデータ型です。追加のパラメータが必要なデータ型もあります。指定できるデータ型の詳細は、第1章「データ型」を参照してください。
NOT NULL [ENABLE] 列を追加する場合に、NOT NULLを指定できます。NOT NULLを指定する場合は、DEFAULT句を含める必要があります。任意で、NOT NULL句の後にENABLEを指定できます。NOT NULL制約は常に有効なため、ENABLEの指定は必須ではありません。
INLINE|NOT INLINE デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。
COMPRESS (CompressColumns [,...]) 圧縮が有効な表について圧縮列グループを定義します。表の1つ以上の列を含めることができます。

圧縮グループで複数列を定義する場合は、列をINLINEとして指定する必要があります。アウトライン列は、それが圧縮グループ内の唯一の列である場合のみ、圧縮グループに指定できます。

各圧縮列グループは、最大16列に制限されます。

圧縮列の詳細は、「表のインメモリー列圧縮」を参照してください。

BY DICTIONARY 各圧縮列グループの圧縮ディクショナリを定義します。
MAXVALUES = CompressMax CompressMaxは、表の個別値の合計数であり、圧縮列グループ・ポインタ列のサイズを1、2または4バイトに設定し、ディクショナリ表のエントリの最大数のサイズを設定します。

ディクショナリ表の場合、NULLは1つの一意の値としてカウントされます。

CompressMaxは、1から232-1までの整数です。

MAXVALUES句を省略した場合の最大サイズのデフォルトは232-1であり、ポインタ列に4バイトが使用されます。値が232-1よりも大きい場合は、エラーがスローされます。

圧縮ディクショナリの最大サイズ指定の詳細は、「表のインメモリー列圧縮」を参照してください。

ADD CONSTRAINT ConstraintName PRIMARY KEY (ColumnName

[,... ] ) [USE HASH INDEX PAGES = RowPages | CURRENT]

表に主キー制約を追加します。主キーの列はNOT NULLとして定義する必要があります。

主キー制約を適用するために使用する索引の名前としてConstraintNameを指定します。主キーに対して使用するNOT NULL列の名前としてColumnNameを指定します。

主キーに対してハッシュ索引を使用するには、USE HASH INDEX句を指定します。指定しない場合、主キー制約には範囲索引が使用されます。

CURRENTを指定すると、表内の現在の行数を使用してページ・カウント値が計算されます。RowPagesを指定する場合は、ページ数が使用されます。RowPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

RowPagesの値は、0を含まない正の定数である必要があります。

TimesTenでは、表に行がない場合は、PAGES=CURRENTを指定しないことをお薦めします。

推定した数が小さすぎると、パフォーマンスが悪化します。ハッシュ索引作成の詳細は、「列の定義」を参照してください。

注意: ADD CONSTRAINTを使用して指定された主キー制約を追加する前に、ALTER TABLEを使用して主キー制約を削除できないことに注意してください。制約を削除するには、表を削除してから再作成する必要があります。

CONSTRAINT 外部キーを削除することを指定します。オプションで、追加された外部キーの名前をユーザーが指定するように指定します。
ForeignKeyName 追加または削除する外部キーの名前です。すべての外部キーは、ユーザーが名前を指定しなかった場合、デフォルトの名前が割り当てられます。ユーザーが指定した名前またはシステムの名前のいずれかをDROP FOREIGN KEY句で指定できます。
FOREIGN KEY 外部キーを追加することを指定します。「CREATE TABLE」の下のFOREIGN KEYを参照してください。(これは、外部キーを削除する構文の一部ではありません。)
REFERENCES 外部キーが別の表を参照することを指定します。
RefTableName 外部キーが参照する表の名前です。
[ON DELETE CASCADE] ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。
USE HASH INDEX
PAGES = RowPages | CURRENT
主キーで使用する索引をハッシュ索引に変更します。主キーですでにハッシュ索引を使用している場合、この句はSET PAGES句と同じです。
USE RANGE INDEX 主キーで使用する索引を範囲索引に変更します。主キーですでに範囲索引を使用している場合、この句は無視されます。
SET PAGES = RowPages | CURRENT 表の想定ページ数に基づいてハッシュ索引のサイズを変更します。CURRENTを指定すると、表内の現在の行数を使用してページ・カウント値が計算されます。RowPagesを指定する場合は、ページ数が使用されます。RowPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

RowPagesの値は、0を含まない正の定数である必要があります。

TimesTenでは、表に行がない場合は、PAGES=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)および時間ベースのエージング属性を定義します。

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

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

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

エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列はNULLにはできません)。

TT_TIMESTAMPデータ型またはTT_DATEデータ型を使用してエージング列を定義できます。TT_DATEデータ型を選択する場合は、LIFETIME単位としてDAYSを指定する必要があります。

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

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

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

Num1には、行がキャッシュに保持される時間の長さを、秒、分、時間または日数で表す正の整定数を指定します。LIFETIME値を超えた行はエージ・アウト(表から削除)されます。エージング列をTT_DATEデータ型を使用して定義する場合は、LIFETIME単位としてDAYSを指定する必要があります。

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

CYCLE Num2 {SECOND[S]| MINUTE[S]| HOUR[S]|DAY[S]} 時間ベースのエージング・ポリシーを既存の表に追加する場合は、LIFETIME句の後にオプションでCYCLE句を指定します。

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

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

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

CYCLE句を指定しない場合、デフォルト値は5分です。Num2に0を指定した場合、エージング・スレッドは1秒ごとに起動します。

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

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

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

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

エージング列をTT_DATEデータ型を使用して定義した場合は、LIFETIME単位としてDAYSを指定する必要があります。

SET AGING CYCLE Num2 {SECOND[S]| MINUTE[S]| HOUR[S]|DAY[S]} この句を使用して時間ベースのエージングのサイクルを変更します。

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


ALTER TABLEを使用する場合のパーティションの理解

表を作成すると、初期パーティションが作成されます。表にALTERを実行して列を追加すると、セカンダリ・パーティションが作成されます。各ALTER TABLE文に対して、1つのセカンダリ・パーティションが作成されます。セカンダリ・パーティション内の列については、その列に主キー制約を作成したり、その列を時間ベースのエージングに使用することはできません。

ttMigrate -r -relaxedUpgradeを使用すると、複数のパーティションをまとめることができます。これは、初期パーティションと1つ以上のセカンダリ・パーティションが、初期パーティションと呼ばれる単一のパーティションにまとめられることを意味します。複数のパーティションをまとめると、表にALTERを実行して列に主キー制約を追加したり、その列を時間ベースのエージングに使用することができます。これは、列がセカンダリ・パーティションにはなく、現在は初期パーティションに存在するためです。

データベースがレプリケーションに関係し、複数のパーティションをまとめる必要がある場合は、(CREATE REPLICATION文の) StoreAttribute TABLE DEFINITION CHECKING RELAXEDを使用する必要があります。マスターとサブスクライバの両方で、あるいはマスターまたはサブスクライバで-duplicateを使用して、ttMigrate -r -relaxedUpgradeを実行します。

ttSchemaを使用して、列のパーティション番号を表示します。ttSchemaによって、セカンダリ・パーティション番号1はパーティション1として、セカンダリ・パーティション番号2はパーティション2として、以降同様に表示されます。

例として、2つの列を持つ表MyTabを作成します。この表にALTERを使用して、Col3およびCol4の2つの列を、NOT NULL DEFAULT句を指定して追加します。

Command> CREATE TABLE MyTab (Col1 NUMBER, Col2 VARCHAR2 (30));
Command> ALTER TABLE MyTab ADD (Col3 NUMBER NOT NULL DEFAULT 10, Col4 TIMESTAMP
         NOT NULL DEFAULT TIMESTAMP '2012-09-03 12:00:00');

ttSchemaを使用して、Col3およびCol4がセカンダリ・パーティション1に含まれていることを確認します。

ttschema -DSN sampledb_1122
-- Database is in Oracle type mode
create table TESTUSER.MYTAB (
        COL1 NUMBER,
        COL2 VARCHAR2(30 BYTE) INLINE,
        COL3 NUMBER NOT NULL DEFAULT 10,
        COL4 TIMESTAMP(6) NOT NULL DEFAULT TIMESTAMP '2012-09-03 12:00:00');
-- column COL3 partition 1
-- column COL4 partition 1

Col3に主キー制約を、Col4に時間ベースのエージングを追加してみます。初期パーティションに含まれていない列には、主キー制約も、時間ベースのエージングも追加できないため、エラーが表示されます。

Command> ALTER TABLE MyTab ADD CONSTRAINT PriKey PRIMARY KEY (Col3);
 2419: All columns in a primary key constraint must be in the initial partition;
column COL3 was added by ALTER TABLE
The command failed.

Command> ALTER TABLE MyTab ADD AGING USE Col4 LIFETIME 3 DAYS;
 3023: Aging column must be in the initial partition; column COL4 was added by
ALTER TABLE
The command failed.

ttMigrateを、-relaxedUpgradeオプションとともに使用して、パーティションをまとめます。その後ttSchemaを使用して、パーティションがまとめられて、セカンダリ・パーティション1には列がないことを確認します。

ttMigrate -c dsn=sampledb_1122 test.migrate
 
Saving user PUBLIC
User successfully saved.
 
Saving table TESTUSER.MYTAB
  Saving rows...
  0/0 rows saved.
Table successfully saved.

ttDestroy sampledb_1122

ttMigrate -r -relaxedUpgrade
 dsn=sampledb_1122 test.migrate
 
Restoring table TESTUSER.MYTAB
  Restoring rows...
  0/0 rows restored.
Table successfully restored.

ttSchema DSN=sampledb_1122
-- Database is in Oracle type mode
create table TESTUSER.MYTAB (
        COL1 NUMBER,
        COL2 VARCHAR2(30 BYTE) INLINE,
        COL3 NUMBER NOT NULL DEFAULT 10,
        COL4 TIMESTAMP(6) NOT NULL DEFAULT TIMESTAMP '2012-09-03 12:00:00');

この段階で、Col3に主キー制約を、Col4に時間ベースのエージングを追加します。ttMigrateの結果としてCol3およびCol4は初期パーティションに含まれているため、成功します。ttSchemaを使用して結果を確認します。

Command> ALTER TABLE MyTab ADD CONSTRAINT PriKey PRIMARY KEY (Col3);
Command> ALTER TABLE MyTab ADD AGING USE Col4 LIFETIME 3 DAYS;

ttschema sampledb_1122
-- Database is in Oracle type mode
create table TESTUSER.MYTAB (
        COL1 NUMBER,
        COL2 VARCHAR2(30 BYTE) INLINE,
        COL3 NUMBER NOT NULL DEFAULT 10,
        COL4 TIMESTAMP(6) NOT NULL DEFAULT TIMESTAMP '2012-09-03 12:00:00')
    AGING USE COL4 LIFETIME 3 days CYCLE 5 minutes ON;
 
    alter table TESTUSER.MYTAB add constraint PRIKEY primary key (COL3);

説明

  • ALTER TABLE文を使用して一時表を変更することはできません。

  • ALTER TABLE ADD [COLUMN] ColumnName文は、既存の表に1つ以上の新しい列を追加します。新しい列は、新しい1つのパーティション内のすべての既存の行の最後に追加されます。ALTER TABLE ADDまたはDROP COLUMN文を使用して、レプリケートされた表に対して列を追加または削除できます。

    ALTER TABLEを使用して、TWOSAFE BY REQUESTトランザクションの一部であるレプリケートされた表を変更しないでください。DDLCommitBehavior=1の場合にこの処理を実行すると、TimesTenによりエラーがスローされます。DDLCommitBehavior=0の状態でこの処理を実行すると、ALTER TABLE処理はTWOSAFE BY REQUESTトランザクションの一部になりません。これはALTER TABLE処理が暗黙的コミットを実行せず、自身のトランザクションで実行されるためです。ALTER TABLE文は成功しますが、トランザクションはTWOSAFE BY REQUESTトランザクションの一部となりません。

  • マテリアライズド・ビューから参照されている列は削除できません。

  • 列の追加、列の削除、およびキャッシュ・グループ表の制約の追加にALTER TABLE文は使用できません。

  • 追加される列の数に関係なく、1文につき1つのパーティションのみが表に追加されます。

  • 表にALTERを実行して、デフォルト値を持つNOT NULL列を追加します。DEFAULT句は必須です。次の制限があります。

    • この列を主キー列として使用することはできません。具体的には、文ALTER TABLE ADD ConstraintName PRIMARY KEY (ColumnName [,...])に、この列を指定することはできません。

    • この列を時間ベースのエージングに使用することはできません。具体的には、文ALTER TABLE ADD AGING USE ColumnNameに、この列を指定することはできません。


      注意:

      レプリケーション・スキームの一部である表にNOT NULL列を追加するには、DDL_REPLICATON_LEVELが3以上である必要があります。

  • 新しい列に対してデフォルト値が指定されている場合を除き、追加されるすべての列の初期値はNULLです。

  • 表の列の合計数は1000以下です。また、表のパーティションの合計数は1000以下であり、そのうちの1つは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 -relaxedUpgradeコマンドを使用してから、ttRestore -r -relaxedUpgradeコマンドを使用して表をリストアします。追加された列を削除しても、悪化したパフォーマンスは回復されず、パーティションの数も減りません。

  • ALTER TABLE DROP文を使用して既存の表から1つ以上の列を削除すると、削除された列は、表の現在のすべての行から削除されます。それ以降のSQL文では、削除した列は使用できなくなります。表の主キーに含まれている列は削除できません。また、表の外部キーに含まれている列も、すべての外部キーを削除しないかぎり削除できません。索引付けされた列は、列の索引をすべて削除しないかぎり削除できません。ALTER TABLEを使用して表の列をすべて削除することはできません。かわりにDROP TABLEを使用します。

  • 表から列が削除された場合、その表を参照するすべてのコマンドを再コンパイルする必要があります。削除された列が参照されると、再コンパイル時にエラーが発生することがあります。アプリケーションはそのコマンドを再度準備し、パラメータと結果列を再作成する必要があります。列が表に追加された場合、SELECT *文を含むコマンドは無効になります。これらのコマンドのみを再度準備する必要があります。その他のすべてのコマンドは、想定したとおりに動作します。

  • 列を削除しても、列の領域は解放されません。

  • UNIQUE制約を追加すると、(領域の増加および処理時間の増加という点で)オーバーヘッドが発生します。これは、UNIQUE制約を維持するための索引が作成されるためです。UNIQUE制約を維持するために使用している索引を、DROP INDEX文を使用して削除することはできません。

  • UNIQUE制約とそれに関連付けられている索引は、レプリケートされた表の一意索引として使用されている場合、削除できません。

  • アプリケーションで表の主キーに対して範囲問合せを実行する場合は、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文を使用して外部キーに関連付けられている索引を削除しようとすると、エラーになります。

    • 外部キーは、キャッシュ・グループの表では追加または削除できません。

    • 外部キーは、ビューまたは一時表では追加または削除できません。

    • ALTER TABLEを使用して主キー制約を削除することはできません。制約を削除するには、表を削除してから再作成する必要があります。

  • 表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。

  • エージング・ポリシーは、エージング状態を変更するように定義する必要があります。

  • LRUエージングでは、行がアクセスされているかまたは参照されているかどうかを、次のルールで判断します。

    • SELECT文の結果セットを構築するために使用された行。

    • INSERT ... SELECT文の結果セットを構築するために使用された行。

    • 更新または削除対象の行。

  • コマンドで参照される表に対してLRUエージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。

  • エージング状態がONOFFかにかかわらずエージング処理をすぐにスケジュールするには、ttAgingScheduleNowプロシージャをコールします。

  • 時間ベースのエージング・ポリシーの場合、エージング列を追加または変更できません。これは、NOT NULL列を追加または変更できないためです。

  • エージングの制限:

    • 時間ベースのエージングに使用されている列は削除できません。

    • 外部キーによって関連付けられている表には、同じエージング・ポリシーを設定する必要があります。

    • LRUエージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。ON DELETE CASCADEの設定は無視されます。

    • 時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。ON DELETE CASCADEは、設定の有無にかかわらず無視されます。

  • 表のインメモリー列圧縮の制限:

    • 表の作成時に表の圧縮が有効化された場合は、ALTER TABLE文でのみ圧縮列グループを追加できます。非圧縮列は、圧縮が有効な表を含め、任意の表に追加できます。OPTIMIZED FOR READが指定されている場合は、作成中に表の圧縮が有効になります。表への圧縮列グループの追加の詳細は、「表のインメモリー列圧縮」を参照してください。

    • 圧縮列グループの列は変更できません。

    • ALTER TABLEコマンドを使用して圧縮列グループ内のすべての列を削除でき、圧縮列グループ内の列を削除するときは、圧縮列グループ内のすべての列を削除に対して指定する必要があります。

    • 既存の非圧縮列を変更して圧縮するためにALTER TABLEは使用できません。次に例を示します。

      Command> create table mytab (a varchar2 (30), b int, c int) compress ((a,b)
      by dictionary) optimized for read;
      Command> alter table mytab add (d int) compress (c by dictionary);
      2246: Cannot change compression clause for already defined column C 
      The command failed.
      

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 );

booksUNIQUEの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 index found on 1 table.

ハッシュ索引を使用して主キー制約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 cannot 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 index found on 1 table.

ハッシュ索引を使用するように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.

USE RANGE INDEX句で、範囲索引を使用するように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 - ColumnValue) <= 3の場合、行はエージ・アウトされません。

  • (SYSDATE - ColumnValue) > 3の場合、行はエージ・アウトの対象となります。

  • (SYSDATE - ColumnValue) = 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.

employees表を変更して、州のフルネームを含む新しい圧縮列stateを追加します。employees表には、job_idおよびmanager_idで構成された圧縮列グループがすでにあることに注意してください。

Command> ALTER TABLE employees 
 ADD COLUMN state VARCHAR2(20) 
 COMPRESS (state BY DICTIONARY);

Command> DESCRIBE employees; 
Table MYSCHEMA.EMPLOYEES:
  Columns:
   *EMPLOYEE_ID                     NUMBER (6) NOT NULL
    FIRST_NAME                      VARCHAR2 (20) INLINE
    LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
    EMAIL                           VARCHAR2 (25) INLINE NOT NULL
    PHONE_NUMBER                    VARCHAR2 (20) INLINE
    HIRE_DATE                       DATE NOT NULL
    JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
    SALARY                          NUMBER (8,2)
    COMMISSION_PCT                  NUMBER (2,2)
    MANAGER_ID                      NUMBER (6)
    DEPARTMENT_ID                   NUMBER (4)
    STATE                           VARCHAR2 (20) INLINE
  COMPRESS ( ( JOB_ID, MANAGER_ID ) BY DICTIONARY,
             STATE BY DICTIONARY ) OPTIMIZED FOR READ
 
1 table found.
(primary key columns are indicated with *)

次の例では、圧縮列stateemployees表から削除します。

Command> ALTER TABLE employees
 DROP state;
Command> DESCRIBE employees; 
Table MYSCHEMA.EMPLOYEES:
  Columns:
   *EMPLOYEE_ID                     NUMBER (6) NOT NULL
    FIRST_NAME                      VARCHAR2 (20) INLINE
    LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
    EMAIL                           VARCHAR2 (25) INLINE NOT NULL
    PHONE_NUMBER                    VARCHAR2 (20) INLINE
    HIRE_DATE                       DATE NOT NULL
    JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
    SALARY                          NUMBER (8,2)
    COMMISSION_PCT                  NUMBER (2,2)
    MANAGER_ID                      NUMBER (6)
    DEPARTMENT_ID                   NUMBER (4)
 COMPRESS ( ( JOB_ID, MANAGER_ID ) BY DICTIONARY ) OPTIMIZED FOR READ
 
1 table found.
(primary key columns are indicated with *)

関連項目


「CREATE TABLE」
「DROP TABLE」

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

ALTER USER

ALTER USER文を使用すると、ユーザーはユーザー自身のパスワードを変更できます。ADMIN権限を持つユーザーは別のユーザーのパスワードを変更できます。

また、ユーザーはこの文を使用して、別のユーザーを内部ユーザーから外部ユーザーに、または外部ユーザーから内部ユーザーに変更できます。

必要な権限

ユーザー自身のパスワードの変更に必要な権限はありません。

別のユーザーのパスワードの変更にはADMIN権限が必要です。

ユーザーを内部ユーザーから外部ユーザーに、および外部ユーザーから内部ユーザーに変更するにはADMIN権限が必要です。

SQL構文

ALTER USER user IDENTIFIED BY {password | "password"}
ALTER USER user IDENTIFIED EXTERNALLY

パラメータ

パラメータ 説明
user パスワードが変更されるユーザーの名前。
IDENTIFIED 内部ユーザーのパスワードまたはユーザーが外部であることを指定するための識別句。
BY password |"password" TimesTenデータベースに対する内部ユーザーを識別するパスワードを指定します。
EXTERNALLY TimesTenデータベースに対するオペレーティング・システムのuserを識別します。データベースを外部ユーザーとして操作するには、オペレーティング・システムまたはネットワークで認証されているユーザー名と一致するTimesTen外部ユーザー名がプロセスに必要です。ユーザーはログイン時にオペレーティング・システムによって認証されているため、TimesTenではパスワードは必要ありません。

説明

  • データベース・ユーザーには、内部ユーザーまたは外部ユーザーを指定できます。

    • 内部ユーザーは、TimesTenデータベース用に定義されるユーザーです。

    • 外部ユーザーは、オペレーティング・システムなどの外部権限によって定義されています。外部ユーザーにTimesTenパスワードを割り当てることはできません。

  • userとして接続している内部ユーザーは、この文を実行して自分のTimesTenパスワードを変更します。

  • パスワードは大文字と小文字が区別されます。

  • クライアント/サーバー接続を介してユーザーを変更することはできません。ユーザーを変更する場合は、直接接続を使用する必要があります。

  • レプリケーションが構成されている場合、この文はレプリケートされます。

内部ユーザーterryのパスワードを現在の設定から"12345"に変更するには、次の文を使用します。

ALTER USER terry IDENTIFIED BY "12345";
User altered.

ユーザーterryを外部ユーザーに変更するには、次の文を使用します。

ALTER USER terry IDENTIFIED EXTERNALLY;
User altered.

ユーザーterryを内部ユーザーに戻してパスワードを指定するには、次の文を使用します。

ALTER USER terry IDENTIFIED BY "secret";
User altered.

CALL

CALL文を使用して、TimesTen組込みプロシージャを起動したり、スタンドアロンまたはSQLのパッケージに含まれるPL/SQLプロシージャまたはファンクションを実行します。

必要な権限

各TimesTen組込みプロシージャの起動に必要な権限は、『Oracle TimesTen In-Memory Databaseリファレンス』の組込みプロシージャに関する説明にある各プロシージャの説明に記載されています。

CALL文を使用して、スタンドアロンまたはパッケージに含まれる独自のPL/SQLプロシージャまたはファンクションをコールする所有者には、必要な権限はありません。その他のすべてのユーザーには、プロシージャまたはファンクション、またはこれらが定義されているパッケージに対するEXECUTE権限が必要です。

SQL構文

TimesTen組込みプロシージャをコールする場合:

CALL [TimesTenBuiltIn [( arguments )] 

スタンドアロンまたはパッケージに含まれるPL/SQLプロシージャまたはファンクションをコールする場合、名前でコールするか、式の結果としてコールできます。

PL/SQLプロシージャをコールする場合:

CALL [Owner.][Package.]ProcedureName [( arguments )] 

パラメータを返すPL/SQLファンクションをコールする場合は、次のいずれかが適切です。

CALL [Owner.][Package.]FunctionName [( arguments )] INTO :return_param

注意:

ユーザー独自のPL/SQLプロシージャまたはファンクションは、同じ名前のTimesTen組込みプロシージャよりも優先されます。

パラメータ

パラメータ 説明
TimesTenBuiltIn TimesTen組込みプロシージャの名前。TimesTen組込みプロシージャの完全なリストは、『Oracle TimesTen In-Memory Databaseリファレンス』の組込みプロシージャに関する説明を参照してください。
[Owner.]ProcedureName PL/SQLプロシージャの名前。オプションで、プロシージャの所有者を指定できます。
[Owner.]FunctionName PL/SQLファンクションの名前。オプションで、ファンクションの所有者を指定できます。
arguments PL/SQLプロシージャまたはファンクションの0個以上の引数を指定します。
INTO ルーチンがファンクションである場合は、INTO句が必要です。
return_param ファンクションの戻り値を格納するホスト変数を指定します。

説明

TimesTenでCALL文を使用してPL/SQLプロシージャまたはファンクションを実行する方法の詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のPL/SQLプロシージャおよびファンクションを実行する方法に関する説明、『Oracle TimesTen In-Memory Database C開発者ガイド』のCALLを使用したプロシージャおよびファンクションの実行に関する説明または『Oracle TimesTen In-Memory Database Java開発者ガイド』のCALLを使用したプロシージャおよびファンクションの実行に関する説明を参照してください。

次に、mytestファンクションの定義を示します。

create or replace function mytest return number is
begin
  return 1;
end;
/

次に示すように、CALL文でmytestファンクションを実行します。

Command> variable n number;
Command> call mytest() into :n;
Command> print n;
N                    : 1

次の例では、入力として従業員IDが指定された従業員の給与を戻すファンクションを作成し、ファンクションをコールして、戻された結果を表示します。

Command> CREATE OR REPLACE FUNCTION get_sal
       >   (p_id employees.employee_id%TYPE) RETURN NUMBER IS
       >    v_sal employees.salary%TYPE := 0;
       > BEGIN
       >   SELECT salary INTO v_sal FROM employees
       >     WHERE employee_id = p_id;
       >   RETURN v_sal;
       > END get_sal;
       > /
 
Function created.
 
Command> variable n number;
Command> call get_sal(100) into :n;
Command> print n;
N                    : 24000

COMMIT

COMMIT文は、現在のトランザクションを終了し、そのトランザクション内で実行されたすべての変更を永続的な変更とします。

必要な権限

なし

SQL構文

COMMIT [WORK]

パラメータ

COMMIT文では次のオプションのキーワードを使用できます。

パラメータ 説明
[WORK] SQL標準に準拠するためにサポートされているオプションの句。COMMITCOMMIT WORKは同等です。

説明

  • トランザクションのコミット前:

    • トランザクション中に行った変更はすべて表示できますが、他のユーザーがそれらの変更を表示することはできません。トランザクションをコミットすると、コミット後に実行される他のユーザーの文に変更が表示されるようになります。

    • ROLLBACK文を使用して、トランザクション中に行った変更をロールバック(UNDO)できます。

  • この文によって、トランザクションのロックが解除されます。

  • パススルーの場合も、Oracle Databaseトランザクションはコミットされます。

  • コミットによってすべてのオープン・カーソルがクローズされます。

HRスキーマのregions表に行を挿入し、トランザクションをコミットします。最初にautocommitを0(ゼロ)に設定します。

Command> SET AUTOCOMMIT 0;
Command> INSERT INTO regions VALUES (5,'Australia');
1 row inserted.
Command> COMMIT;
Command> SELECT * FROM regions;
< 1, Europe >
< 2, Americas >
< 3, Asia >
< 4, Middle East and Africa >
< 5, Australia >
5 rows found.

関連項目

ROLLBACK

CREATE ACTIVE STANDBY PAIR

この文は、アクティブ・スタンバイ・ペアを作成します。アクティブ・マスター・データベースとスタンバイ・マスター・データベースが含まれており、1つ以上の読取り専用サブスクライバが含まれる場合もあります。アクティブ・マスター・データベースはスタンバイ・マスター・データベースへ更新をレプリケートし、スタンバイ・マスター・データベースはサブスクライバへ更新を伝播します。

必要な権限

ADMIN

SQL構文

CREATE ACTIVE STANDBY PAIR
  FullStoreName, FullStoreName [ReturnServiceAttribute]
    [SUBSCRIBER FullStoreName [,...]]
    [STORE FullStoreName [StoreAttribute [...]]]
    [NetworkOperation [...] ]
    [{ INCLUDE | EXCLUDE }{TABLE [[Owner.]TableName [,...]]|
         CACHE GROUP [[Owner.]CacheGroupName [,...]]|
         SEQUENCE [[Owner.]SequenceName [,...]]} [,...]]

ReturnServiceAttributeの構文は、次のとおりです。

{ RETURN RECEIPT [BY REQUEST] |
  RETURN TWOSAFE [BY REQUEST] |
  NO RETURN }

StoreAttributeの構文は、次のとおりです。

  DISABLE RETURN {SUBSCRIBER | ALL} NumFailures 
  RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED 
  DURABLE COMMIT {ON | OFF}
  RESUME RETURN Milliseconds 
  LOCAL COMMIT ACTION {NO ACTION | COMMIT} 
  RETURN WAIT TIME Seconds 
  COMPRESS TRAFFIC {ON | OFF}
  PORT PortNumber 
  TIMEOUT Seconds 
  FAILTHRESHOLD Value 
  TABLE DEFINITION CHECKING {RELAXED|EXACT}

NetworkOperationの構文は、次のとおりです。

ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
  { { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost }
      PRIORITY Priority } [...]

パラメータ

パラメータ 説明
FullStoreName 次のいずれかとして指定されたデータベースです。
  • SELF

  • データベース・ファイル名の接頭辞

たとえば、データベースのパスがdirectory/subdirectory/data.ds0の場合、使用するデータベース名はdataになります。

この名前は、DSNの記述のDataStore属性で指定されるデータベース・ファイル名で、オプションでホストIDを次の書式で指定できます。

DataStoreName [ON Host]

Hostは、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のネットワークの構成に関する項で説明されているように、IPアドレスか、または1つ以上のIPアドレスに割り当てられたリテラル・ホスト名です。ホスト名に特殊文字が含まれている場合は、二重引用符で囲む必要があります。たとえば、"MyHost-500"のようになります。

RETURN RECEIPT [BY REQUEST] RETURN RECEIPTサービスを有効にし、これによって、アクティブ・マスター・データベースに対してトランザクションをコミットするアプリケーションは、スタンバイ・マスター・データベースがトランザクションを受信するまでブロックされます。

RETURN RECEIPTを指定すると、すべてのトランザクションにサービスが適用されます。RETURN RECEIPT BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN TWOSAFE[BY REQUEST] RETURN TWOSAFEサービスを有効にし、これによって、アクティブ・マスター・データベースに対してトランザクションをコミットするアプリケーションは、スタンバイ・マスター・データベースでトランザクションがコミットされるまでブロックされます。

RETURN TWOSAFEを指定すると、すべてのトランザクションにサービスが適用されます。RETURN TWOSAFE BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。

RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

DISABLE RETURN
{SUBSCRIBER | ALL}
NumFailures
NumFailuresで指定されているタイムアウト回数を経過した後、RETURNサービスのブロッキングを無効にするようにRETURNサービス障害ポリシーを設定します。

SUBSCRIBERを指定することは、ALLを指定することと同じです。両方の設定でスタンバイ・マスター・データベースが参照されます。

この障害ポリシーは、RETURN RECEIPTまたはRETURN TWOSAFEサービスのいずれかで指定できます。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED レプリケーションが無効になっている場合のRETURNサービスのオンまたはオフを設定します。

OFFは、レプリケーション無効時にRETURNサービスを無効する設定であり、RETURN RECEIPTサービスのデフォルトです。ONは、レプリケーション無効時にもRETURNサービスを有効のままにできる設定であり、RETURN TWOSAFEサービスのデフォルトです。

『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のRETURNサービスの失敗/リカバリ・ポリシーの策定に関する説明を参照してください。

RESUME RETURN Milliseconds DISABLE RETURNによってRETURNサービスのブロッキングが無効になった場合、この属性で、RETURNサービスを再度有効にするタイミングに関するポリシーを設定します。
NO RETURN RETURNサービスを使用しないように指定します。これがデフォルトです。

RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN WAIT TIME Seconds RETURNサービスの応答を待機する秒数を指定します。値が0(ゼロ)の場合は、待機しないことを意味します。デフォルト値は10秒です。

このタイムアウト設定は、アプリケーションからttRepSyncSet組込みプロシージャのreturnWaitパラメータを使用して上書きできます。

SUBSCRIBER FullStoreName [,...]] マスター・データベースから更新を受け取るデータベース。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
STORE FullStoreName [StoreAttribute [...]] 指定されたデータベースの属性を定義します。属性には、PORTTIMEOUTおよびFAILTHRESHOLDがあります。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
TABLE DEFINITION CHECKING {EXACT|RELAXED} StoreAttribute句。

サブスクライバで実行される表定義チェックの種類を指定します。

  • EXACT: マスターおよびサブスクライバで表が一致している必要があります。

  • RELAXED: 表には同じキー定義、列の数および列のデータ型が必要です。

デフォルトはRELAXEDです。

注意: TABLE DEFINITION CHECKING EXACTを使用している場合、データベースを移行するにはttMigrate -exactUpgradeを使用します。TABLE DEFINITION CHECKING RELAXEDを使用している場合、データベースを移行するにはttMigrate -relaxedUpgradeを使用します。

{INCLUDE | EXCLUDE}

{TABLE [[Owner.]TableName[,...]]|

CACHE GROUP

[[Owner.]CacheGroupName

[,...]]|

SEQUENCE

[[Owner.]SequenceName

[,...]]}

[,...]

デフォルトでは、アクティブ・スタンバイ・ペアはデータベース全体をレプリケートします。

INCLUDEを指定すると、指定された表、順序またはキャッシュ・グループのみがレプリケーションに含まれます。INCLUDE句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。

EXCLUDEを指定すると、表、順序またはキャッシュ・グループがレプリケーション・スキームから除外されます。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

COMPRESS TRAFFIC {ON | OFF} レプリケートされた通信量を圧縮して、ネットワークの帯域幅の量を削減します。ONは、STOREで定義されたデータベースに対してレプリケートされた通信量をすべて圧縮するように指定します。OFF(デフォルト)は、通信量を圧縮しないように指定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケートされた通信量の圧縮に関する説明を参照してください。
DURABLE COMMIT {ON | OFF} DurableCommits一般接続属性設定を上書きします。DURABLE COMMIT ONは、レプリケーション・エージェントが実行中か停止しているかに関係なく、永続コミットを有効にします。また、ttRepStateSave組込みプロシージャでスタンバイ・データベースがfailedとしてマークされている場合も、永続コミットが有効になります。
FAILTHRESHOLD Value サブスクライバ・データベースのために累積できるログ・ファイルの数。この値を超えると、サブスクライバはFailedの状態に設定されます。0を指定すると、この上限は設定されません。これがデフォルトです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のトランザクション・ログ障害しきい値の設定に関する説明を参照してください。

LOCAL COMMIT ACTION {NO ACTION | COMMIT} タイムアウト・イベントのRETURN TWOSAFEトランザクションで実行されるデフォルトのアクションを指定します。

注意: この属性は、RETURN TWOSAFEまたはRETURN TWOSAFE BY REQUEST属性がSUBSCRIBER句で設定されている場合にのみ有効です。

NO ACTION: タイムアウト時、コミット関数はアプリケーションに戻り、トランザクションをコミット・コールに入ったときと同じ状態のままにしますが、レプリケートされた表をアプリケーションが更新できない場合を除きます。アプリケーションはコミットのみを再発行できます。トランザクションはロールバックできません。これがデフォルトです。

COMMIT: タイムアウト時、コミット関数はCOMMITを実行して、トランザクションをローカルに終了しようとします。同じトランザクション上でこれ以上の処理を行うことはできません。

この設定は、localActionパラメータを指定してttRepSyncSetプロシージャをコールすることで、特定のトランザクションに対して無効にすることができます。

MASTER FullStoreName アプリケーションで特定の要素が更新されるデータベース。更新はMASTERデータベースによってSUBSCRIBERデータベースに送信されます。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。
PORT PortNumber データベースのレプリケーション・エージェントが接続をリスニングするTCP/IPポート番号です。指定しない場合は、レプリケーション・エージェントによってポート番号が自動的に割り当てられます。

アクティブ・スタンバイ・ペアでは、スタンバイ・マスター・データベースは、アクティブ・マスター・データベースからの更新をリスニングします。読取り専用サブスクライバは、スタンバイ・マスター・データベースからの更新をリスニングします。

ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName NetworkOperation句を示します。指定されている場合、各サブスクライバ・ストアへのすべてのアウトバウンド接続にマスター・ストアが使用するネットワーク・インタフェースを制御できます。ROUTE句のコンテキストでは、次のルートを定義できます。
  • フェイルオーバーが発生したときのアクティブ・データベースからスタンバイ・データベースおよびスタンバイ・データベースからアクティブ・データベースへのルート

  • 読取り専用サブスクライバからアクティブおよびスタンバイ・データベースへのルート

アクティブ・スタンバイ・ペアを使用する場合、読取り専用サブスクライバがないアクティブ・スタンバイ・ペアに対してROUTEを少なくとも2回指定する必要があります。次に、アクティブ・スタンバイ・ペアの各読取り専用サブスクライバに対してROUTEを2回多く指定する必要があります。

FullStoreNameには、ON "host"を指定する必要があります。

MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost MasterHostおよびSubscriberHostは、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。

句は複数回指定できます。

PRIORITY Priority 1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。

NetworkOperation句の構文で必須です。MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost句の後ろに記述します。

TIMEOUT Seconds レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大時間(秒)。デフォルトは120秒です。

アクティブ・スタンバイ・ペアでは、アクティブ・マスター・データベースは、スタンバイ・マスター・データベースにメッセージを送信します。スタンバイ・マスター・データベースは、読取り専用サブスクライバにメッセージを送信します。

注意: リモート・レプリケーション・エージェントからの応答の遅延の原因となる大規模なトランザクションの場合、エージェントは、トランザクションのサイズに基づいて、タイムアウトをスケーリングします。TIMEOUTを60秒以下に設定した場合、このスケーリングは無効になります。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のリモート・レプリケーション・エージェントからの応答のタイムアウトの待機の設定に関する項も参照してください。


説明

  • アクティブ・スタンバイ・ペアを作成した後、データベースの1つをアクティブ・データベースにします。そのためには、ttRepStateSet ('ACTIVE')をコールします。次に、ttRepAdminを使用して、アクティブ・データベースをセカンダリ・データベースに複製します。処理が完了すると、セカンダリ・データベースがスタンバイ・データベースになります。詳細は、『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のキャッシュ・グループのないアクティブ・スタンバイ・ペアの設定に関する説明を参照してください。

  • SUBSCRIBER句には、1つ以上の読取り専用サブスクライバ・データベースを指定します。最大127のサブスクライバ・データベースを指定できます。

  • アクティブ・マスター・データベースとスタンバイ・マスター・データベースの間のレプリケーションは、RETURN TWOSAFERETURN RECEIPTまたは非同期のいずれかに設定できます。RETURN TWOSAFEに設定すると、トランザクションは失われません。

  • 指定された表、順序およびキャッシュ・グループをレプリケーションから除外する場合、または指定された表、順序およびキャッシュ・グループのみを含めて他は除外する場合は、INCLUDEおよびEXCLUDE句を使用します。

  • アクティブ・スタンバイ・ペアにRETURN TWOSAFE属性があり、キャッシュ・グループをレプリケートしている場合、次のような状態のときにトランザクションが失敗する可能性があります。

    • レプリケートされるトランザクションにALTER TABLE文またはALTER CACHE GROUP文が含まれている。

    • トランザクションに、レプリケートされた表、レプリケートされたキャッシュ・グループまたはASYNCHRONOUS WRITETHROUGHキャッシュ・グループに対するINSERTUPDATEまたはDELETE文が含まれている。

  • アクティブ・スタンバイ・ペアを使用して読取り専用キャッシュ・グループおよびASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループをレプリケートできます。アクティブ・スタンバイ・ペアを使用してSYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループまたはユーザー管理キャッシュ・グループをレプリケートすることはできません。

  • TimesTenでOracle Clusterwareを使用する場合は、CREATE ACTIVE STANDBY PAIR文は実行できません。

この例では、マスター・データベースがrep1およびrep2であるアクティブ・スタンバイ・ペアを作成します。サブスクライバrep3が1つあります。レプリケーションのタイプはRETURN RECEIPTです。また、この文では、PORTおよびTIMEOUT属性をマスター・データベースに対して設定します。

CREATE ACTIVE STANDBY PAIR rep1, rep2 RETURN RECEIPT
  SUBSCRIBER rep3
  STORE rep1 PORT 21000 TIMEOUT 30
  STORE rep2 PORT 22000 TIMEOUT 30;

NetworkOperation句を指定してネットワーク・インタフェースを制御します。

CREATE ACTIVE STANDBY PAIR rep1,rep2
ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2" PRIORITY 1;
ROUTE MASTER rep2 ON "machine2" SUBSCRIBER rep1 ON "machine1"
MASTERIP "2.2.2.2" PRIORITY 1 SUBSCRIBERIP "1.1.1.1" PRIORITY 1;

CREATE CACHE GROUP

CREATE CACHE GROUP文は、次の処理を実行します。

  • キャッシュ・グループで定義される表を作成します。

  • キャッシュ・グループに関連付けられたすべての新しい情報を、適切なシステム表にロードします。

キャッシュ・グループとは、Oracle Databaseの表からデータをキャッシュする表のセットのことで、外部キーを介して関連付けられます。ルート表は1つで、この表は他の表を参照しません。キャッシュ・グループに含まれる他のすべてのキャッシュ表は、キャッシュ・グループ内の表を1つのみ参照します。つまり、外部キーのリレーションシップによってツリーが形成されます。

キャッシュ表は、次の条件を満たす行の集合です。

  • Oracle Database表の垂直パーティションの行のサブセットで構成されている。

  • Oracle Database表と同じ名前でTimesTen表に格納されている。

データベースに2つ以上のキャッシュ・グループがある場合、キャッシュ・グループは別々のOracle Database(およびTimesTen)表に対応している必要があります。

キャッシュ・グループ・インスタンスは、ルート表の1つの行と、ルート表の行に直接的または間接的に関連付けられている子表のすべての行を参照します。

ユーザー管理キャッシュ・グループおよびシステム管理キャッシュ・グループ

キャッシュ・グループは、システム管理またはユーザー管理のいずれかになります。

システム管理キャッシュ・グループは、TimesTenによって完全に管理され、プロパティは固定されています。システム管理キャッシュ・グループには、次のタイプがあります。

  • 読取り専用キャッシュ・グループはOracle Databaseで更新され、Oracle Databaseからキャッシュに更新が伝播されます。

  • ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループはキャッシュで更新され、Oracle Databaseに更新が伝播されます。トランザクションはOracle Databaseでのコミットを待機せずに、キャッシュ上で続行します。

  • SYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループはキャッシュで更新され、Oracle Databaseに更新が伝播されます。トランザクションは、Oracle Databaseでコミットが発生したことを通知した後、キャッシュ上でコミットされます。

ローディングやアンローディングなど、システム管理のキャッシュ・グループはTimesTenによって管理されるため、これらのキャッシュ・グループの定義では、次のような特定の文や句は使用できません。

  • AWTおよびSWTキャッシュ・グループ定義でのWHERE

  • キャッシュ表定義でのREADONLYPROPAGATEおよびNOT PROPAGATE

  • AWTおよびSWTキャッシュ・グループ定義でのAUTOREFRESH

FLUSH CACHE GROUPおよびREFRESH CACHE GROUP操作は、AWTおよびSWTキャッシュ・グループでは使用できません。

AWTキャッシュ・グループを作成する前に、レプリケーション・エージェントを停止する必要があります。

ユーザー管理キャッシュ・グループは、アプリケーションまたはユーザーによって管理される必要があります。ユーザー管理キャッシュ・グループのPROPAGATEは、同期型です。表レベルのREADONLYキーワードは、ユーザー管理キャッシュ・グループでのみ使用できます。

さらに、TimesTenおよびOracle Databaseの両方ですべてのWHERE句を解析できる必要があります。

明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループ

キャッシュ・グループは、明示的または動的にロードできます。

明示的にロードされるキャッシュ・グループでは、LOAD CACHE GROUPまたはREFRESH CACHE GROUP文を使用してOracle Database表からTimesTenキャッシュ表に手動で新しいキャッシュ・インスタンスをロードするか、または自動リフレッシュ操作を使用して自動でロードします。

動的キャッシュ・グループでは、LOAD CACHE GROUPを使用してTimesTenキャッシュ表に手動で新しいキャッシュ・インスタンスをロードするか、または動的ロード操作を使用して要求時にロードできます。動的ロード操作では、いずれかのキャッシュ表でSELECTUPDATEDELETE、またはINSERT文が発行され、データがキャッシュ表に存在しないもののキャッシュされたOracle Database表には存在すると、キャッシュされたOracle Database表からTimesTenキャッシュ表にデータが自動的にロードされます。動的キャッシュ・グループでの手動リフレッシュ操作または自動リフレッシュ操作では、既存のキャッシュ・インスタンスの更新または削除はできますが、新しいキャッシュ・インスタンスのロードはできません。

どのキャッシュ・グループ・タイプ(読取り専用、ASYNCHRONOUS WRITETHROUGH、SYNCHRONOUS WRITETHROUGH、ユーザー管理)でも、明示的にロードされるキャッシュ・グループとして定義できます。

AUTOREFRESHキャッシュ・グループ属性とPROPAGATEキャッシュ表属性の両方を持つユーザー管理キャッシュ・グループを除いて、どのキャッシュ・グループ・タイプでも動的キャッシュ・グループとして定義できます。

LRUエージングがデフォルトで定義されているため、動的キャッシュ・グループのデータはエージ・アウトされます。ttAgingLRUConfig組込みプロシージャを使用して、LRUエージングの領域使用しきい値を上書きします。また、動的キャッシュ・グループに時間ベースのエージングを定義して、LRUエージングを上書きすることもできます。

明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループに関する項を参照してください。動的ロード操作の詳細は、このドキュメントのキャッシュ・インスタンスの動的ロードに関する項を参照してください。

ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループ

ローカル・キャッシュ・グループまたはグローバル・キャッシュ・グループを作成できます。

ローカル・キャッシュ・グループでは、キャッシュ表のデータは、TimesTenデータベースが同じキャッシュ・グリッドのメンバーであってもTimesTenデータベース間で共有されません。そのため、データベースに重複したデータまたは同じデータが含まれる可能性があります。いずれのキャッシュ・グループ・タイプも、ローカル・キャッシュ・グループとして定義できます。ローカル・キャッシュ・グループは、動的または明示的にロードできます。

グローバル・キャッシュ・グループでは、キャッシュ表のデータはキャッシュ・グリッド内のTimesTenデータベース間で共有されます。異なるグリッド・メンバーによる同じデータへの更新は、グリッドによって調整されます。AWTキャッシュ・グループのみ、グローバル・キャッシュ・グループとして定義できます。

ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループの定義に関する項を参照してください。また、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のグリッド・メンバー間でのデータ共有の例に関する項を参照してください。

必要な権限

CREATE CACHE GROUPまたはCREATE ANY CACHE GROUPおよびCREATE TABLE(キャッシュ・グループ内のすべての表が現在のユーザーによって所有されている場合)またはCREATE ANY TABLE(キャッシュ・グループ内の1つ以上の表が現在のユーザーによって所有されていない場合)。

SQL構文

キャッシュ・グループのタイプごとに、次のようなCREATE CACHE GROUP文があります。

グローバル・キャッシュ・グループを作成するCREATE CACHE GROUP文は、次のとおりです。

CREATE READONLY CACHE GROUP

読取り専用キャッシュ・グループは、次の構文で作成します。

CREATE [DYNAMIC] READONLY CACHE GROUP [Owner.]GroupName
 [AUTOREFRESH
  [MODE {INCREMENTAL | FULL}]
  [INTERVAL IntervalValue {MINUTE[S] | SECOND[S] | MILLISECOND[S] }]
  [STATE {ON|OFF|PAUSED}]
 ]
 FROM
  {[Owner.]TableName (
    {ColumnDefinition[,...]}
    [,PRIMARY KEY(ColumnName[,...])]
    [,FOREIGN KEY(ColumnName [,...])
            REFERENCES RefTableName (ColumnName [,...])
                    [ON DELETE CASCADE]
 [UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
 [AGING USE ColumnName
        LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] | DAY[S]}
        [CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
 [ON|OFF]
 ]
 [WHERE ExternalSearchCondition]
} [,...];

CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP

ASYNCHRONOUS WRITETHROUGHのキャッシュ・グループは、次の構文で作成します。

CREATE [DYNAMIC] [ASYNCHRONOUS] WRITETHROUGH CACHE GROUP   [Owner.]GroupName
  FROM
   {[Owner.]TableName (
     {ColumnDefinition[,...]}
    [,PRIMARY KEY(ColumnName[,...])]
     [FOREIGN KEY(ColumnName [,...])
          REFERENCES RefTableName (ColumnName [,...])]
                         [ ON DELETE CASCADE ]
 UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
 [AGING {LRU|
     USE ColumnName
          LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}
         [CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
     }[ON|OFF]
 ]
} [,...];

CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP

SYNCHRONOUS WRITETHROUGHのキャッシュ・グループは、次の構文で作成します。

CREATE [DYNAMIC] SYNCHRONOUS WRITETHROUGH
CACHE GROUP [Owner.]GroupName
 FROM 
   {[Owner.]TableName (
     {ColumnDefinition[,...]}
    [,PRIMARY KEY(ColumnName[,...])]
     [FOREIGN KEY(ColumnName [,...])
            REFERENCES RefTableName (ColumnName [,...])}]
                             [ ON DELETE CASCADE ]
 [UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
 [AGING {LRU|
     USE ColumnName
         LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}
         [CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
     }[ON|OFF]
 ]
} [,...];

CREATE USERMANAGED CACHE GROUP

ユーザー管理キャッシュ・グループは、次の構文で作成します。

CREATE [DYNAMIC][USERMANAGED] CACHE GROUP [Owner.]GroupName
 [AUTOREFRESH
   [MODE {INCREMENTAL | FULL}]
   [INTERVAL IntervalValue {MINUTE[S] | SECOND[S] | MILLISECOND[S] }]
   [STATE {ON|OFF|PAUSED}]
 ]
  FROM 
   {[Owner.]TableName (
    {ColumnDefinition[,...]}
    [,PRIMARY KEY(ColumnName[,...])]
    [FOREIGN KEY(ColumnName[,...])
          REFERENCES RefTableName (ColumnName [,...])]
                  [ON DELETE CASCADE]
    [, {READONLY | PROPAGATE | NOT PROPAGATE}]
 [UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
 [AGING {LRU|
         USE ColumnName
             LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}
             [CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
        }[ON|OFF]
 ]
 [WHERE ExternalSearchCondition]
} [,...];

CREATE WRITETHROUGH GLOBAL CACHE GROUP

次の構文は、グローバル・キャッシュ・グループを作成して、データをキャッシュ・グリッドにキャッシュする方法を示しています。キャッシュ・グループに対してOracle Databaseからの動的なロードを有効にするには、DYNAMIC属性を指定します。

CREATE [DYNAMIC] [ASYNCHRONOUS] WRITETHROUGH GLOBAL CACHE GROUP  [Owner.]GroupName
  FROM
   {[Owner.]TableName (
     {ColumnDefinition[,...]}
    [,PRIMARY KEY(ColumnName[,...])]
     [FOREIGN KEY(ColumnName [,...])
          REFERENCES RefTableName (ColumnName [,...])]
                         [ ON DELETE CASCADE ]
 UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
 [AGING {LRU|
     USE ColumnName
          LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}
         [CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
     }[ON|OFF]
 ]
} [,...];

パラメータ

キャッシュ・グループ定義のFROMキーワードより前のパラメータは次のとおりです。

パラメータ 説明
[Owner.]GroupName 新しいキャッシュ・グループに割り当てられる所有者および名前です。
[DYNAMIC] 指定すると、動的キャッシュ・グループが作成されます。
AUTOREFRESH AUTOREFRESHパラメータは、Oracle Databaseからキャッシュ・グループに自動的に変更を伝播します。詳細は、「キャッシュ・グループのAUTOREFRESH」を参照してください。
MODE [INCREMENTAL | FULL] 自動リフレッシュ時に更新されるキャッシュ内の行を指定します。INCREMENTAL句が指定された場合、TimesTenは前回の伝播以降にOracle Databaseに加えられた変更のみをリフレッシュします。FULL句が指定された場合、TimesTenは自動リフレッシュのたびにキャッシュ内のすべての行を更新します。デフォルトの自動リフレッシュ・モードはINCREMENTALです。
INTERVAL IntervalValue 自動リフレッシュを行う時間隔を分、秒またはミリ秒の単位で指定します。IntervalValueには、AUTOREFRESHを実行する頻度をMINUTESSECONDSまたはMILLISECONDSの単位の整数値で指定します。IntervalValueのデフォルト値は5分です。指定した時間隔でAUTOREFRESHを完了できない場合は、実行時に警告が生成され、現在の処理が終了するまで次回のAUTOREFRESHを待機します。待機キューが10に達すると、サポート・ログに通知メッセージが生成されます。
STATE [ON | OFF | PAUSED] キャッシュ・グループの作成時に自動リフレッシュをONOFFまたはPAUSEDのいずれにするかを設定します。この設定は、ALTER CACHE GROUP文を使用して後で変更できます。デフォルトでは、AUTOREFRESHの状態はPAUSEDです。
FROM キャッシュ・グループに1つ以上の表定義を指定します。

FROMキーワード以降のすべての記述は、キャッシュ・グループがキャッシュするOracle Database表の定義で構成されています。各表定義の構文は、CREATE TABLE文と同様です。ただし、キャッシュ・グループ表には、主キー制約が必要です。

表定義には次のパラメータがあります。

パラメータ 説明
[Owner.]TableName 新しい表に割り当てる所有者および名前です。所有者名を指定しない場合は、新しい表の所有者名としてログイン名が使用されます。
ColumnDefinition 表の個々の列の名前、データ型およびNULL値可能かどうかを指定します。各表には、列が少なくとも1つ必要です。詳細は、「列定義」を参照してください。
PRIMARY KEY (ColumnName[,...]) 表に主キーを指定します。キャッシュ・グループには、主キー制約が必要です。ColumnNameは、作成される表の主キー列の名前です。主キーには最大16列を指定できます。1つの指定内でUNIQUEとともに指定することはできません。
FOREIGN KEY (ColumnName[,...]) 表に外部キーを指定します。ColumnNameは、作成される表の外部キー列の名前です。「FOREIGN KEY」を参照してください。
REFERENCES RefTableName (ColumnName[,...]) 外部キーを関連付ける表を指定します。RefTableNameは参照される表の名前で、ColumnNameはその表の参照される列の名前です。
[ON DELETE CASCADE] ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。
READONLY キャッシュされた表に対する変更の禁止を指定します。
PROPAGATE|NOT PROPAGATE キャッシュされた表への変更が、コミット時に自動的に対応するOracle Database表に伝播されるかどうかを指定します。
UNIQUE HASH ON (HashColumnName) この表にハッシュ索引を作成することを指定します。HashColumnNameには、この表のハッシュ・キーに含める列を指定します。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。
PAGES = PrimaryPages 表の想定ページ数に基づいてハッシュ索引のサイズを設定します。PrimaryPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、PrimaryPagesに1000を指定します(256000/256=1000)。

PrimaryPagesの値は、0を含まない正の定数である必要があります。

PrimaryPagesの推定値が小さすぎると、パフォーマンスが悪化します。

ハッシュ索引の詳細は、「CREATE TABLE」を参照してください。

WHERE ExternalSearchCondition Oracle Databaseでキャッシュ・グループに対して評価されるWHERE句。このWHERE句は、キャッシュ・グループに対するすべてのLOADREFRESH処理に追加されます。他の表を直接参照することはできません。TimesTenとOracle Databaseの両方で解析されます。『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のWHERE句の使用に関するに関する項を参照してください。
AGING LRU [ON | OFF] 指定する場合、ルート表にLRUエージング・ポリシーを定義します。LRUエージング・ポリシーはキャッシュ・グループのすべての表に適用します。LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態(ONまたはOFF)およびLRUエージング属性を定義します。

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

動的キャッシュ・グループでは、LRUエージングはデフォルトでONに設定されます。かわりに時間ベースのエージングを指定できます。明示的にロードされるグローバル・キャッシュ・グループでは、エージングはデフォルトで無効です。

キャッシュ・グループが動的でないかぎり、自動リフレッシュ属性が指定されたキャッシュ・グループにはLRUエージングを指定できません。

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

LRUエージングの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのエージングの実装に関する項を参照してください。

AGING USE ColumnName...[ON|OFF] 指定する場合、ルート表に時間ベースのエージング・ポリシーを定義します。時間ベースのエージング・ポリシーはキャッシュ・グループのすべての表に適用します。時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ONまたはOFF)および時間ベースのエージング属性を定義します。

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

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

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

エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列はNULLにはできません)。

明示的にロードされるグローバル・キャッシュ・グループでは、エージングはデフォルトで無効です。

時間ベースのエージングの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのエージングの実装に関する項を参照してください。

LIFETIME Num1 {SECOND[S]|MINUTE[S]|HOUR[S]DAY[S]} LIFETIMEは時間ベースのエージング属性で、必須の句です。

AGING USE ColumnName句の後にLIFETIME句を指定します。

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

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

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

[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S]|DAY[S]}] CYCLEは時間ベースのエージング属性で、オプションです。LIFETIME句の後にCYCLE句を指定します。

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

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

CYCLE句を指定しない場合、デフォルト値は5分です。Num2に0を指定した場合、エージング・スレッドは1秒ごとに起動します。

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


説明

  • 2つのキャッシュ・グループで所有者名とグループ名を同じにすることはできません。所有者名を指定しない場合、ログイン名が新しいキャッシュ・グループの所有者名になります。

  • グローバル・キャッシュ・グループの場合、キャッシュ・グループ名、キャッシュ表またはキャッシュ・グループ表の列に特殊文字を指定しないでください。ネーミング規則の詳細は、「基本名」を参照してください。

  • WHERE句に動的パラメータを指定することはできません。

  • Oracle Databaseの一時表はキャッシュできません。

  • 各表は、Oracle Databaseの表と対応している必要があります。

  • Oracle Databaseでは、親子関係を定義して、子表の外部キー列にNULL値を挿入できます。子表の該当行は、NULL親を参照していることになります。この状態で、キャッシュ・グループを作成して、Oracle Database表の親子関係をキャッシュできます。ただし、Oracle Database表からキャッシュ・グループにデータをロードする場合は、外部キー列にNULL値を持つ行はロードされません。TimesTenでは、キャッシュする表で、外部キーがNULL親を表す親子関係が定義された場合は、キャッシュ・グループを作成しないことをお薦めします。

  • 小文字のデリミタ付き識別子を使用してキャッシュ表に名前を付けることはできません。TimesTenの表の名前は大文字と小文字が区別されず、大文字として格納されます。キャッシュ表の名前はOracle Database表の名前と同じである必要があります。TimesTenの大文字の表名は、大文字と小文字が混在するOracle Databaseの表の名前と一致しません。解決方法として、Oracle Databaseの表のシノニムを作成し、そのシノニムをキャッシュ・グループの表名として使用します。この解決方法は、読取り専用キャッシュ・グループまたはAUTOREFRESHパラメータが設定されたキャッシュ・グループには適用できません。

  • キャッシュ表の各列の名前およびデータ型は、Oracle Databaseの表の各列と一致する必要があります。『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のOracle DatabaseとTimesTenデータ型間のマッピングに関する項を参照してください。また、WHERE句内で列名を参照する場合は、各列名を所有者と表名で完全に修飾する必要があります。

  • WHERE句は、キャッシュ・グループ表のみ直接参照できます。キャッシュ・グループ外の表は、副問合せでのみ参照できます。

  • 一般的には、CREATE CACHE GROUPLOAD CACHE GROUPUNLOAD CACHE GROUPREFRESH CACHE GROUPまたはFLUSH CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。

  • デフォルトでは、キャッシュ・グループ表で主キーを使用するために範囲索引が作成されます。主キーに対してハッシュ索引を指定するには、UNIQUE HASH句を使用してください。

    • アプリケーションでキャッシュ・グループ表の主キーに対して範囲問合せを実行する場合は、UNIQUE HASH句を省略して、そのキャッシュ・グループ表に対して範囲索引を選択してください。

    • ただし、主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、UNIQUE HASH句を指定します。UNIQUE HASH句の詳細は、「CREATE TABLE」を参照してください。

    • 表の主キーで使用する索引を変更するには、ALTER TABLEを使用します。

  • PROPAGATE属性が指定されたキャッシュ・グループ表と、SWTキャッシュ・グループおよびAWTキャッシュ・グループの表の場合、ON DELETE CASCADEで指定する外部キーは、Oracle Database表のON DELETE CASCADEで指定されている外部キーの適切なサブセットであることが必要です。

  • CREATE CACHE GROUP文はシリアライズ可能分離レベルでは実行できません。実行しようとするとエラー・メッセージが返されます。

キャッシュ・グループのAUTOREFRESH

AUTOREFRESHパラメータは、Oracle DatabaseからTimesTenキャッシュ・グループに自動的に変更を伝播します。明示的にロードされるキャッシュ・グループの場合、削除、更新および挿入がOracle Databaseからキャッシュ・グループに自動的に伝播されます。動的キャッシュ・グループの場合、削除と更新のみが伝播されます。指定されたOracle Database表への挿入は動的キャッシュ・グループには伝播されません。これらは、アプリケーションで参照されたときに、動的にTimesTen Cacheにロードされます。また、アプリケーションで明示的にロードすることもできます。

キャッシュ・グループで自動リフレッシュを使用するには、キャッシュ・グループを作成する際にAUTOREFRESHを指定する必要があります。MODESTATEおよびINTERVAL AUTOREFRESHの設定は、ALTER CACHE GROUPコマンドを使用することによって、キャッシュ・グループが作成された後で変更できます。キャッシュ・グループをAUTOREFRESHまたはPROPAGATEに指定した後は、これらの属性を変更することはできません。

TimesTenでは、FULLまたはINCREMENTAL AUTOREFRESHがサポートされています。FULLモードでは、キャッシュ全体が定期的にアンロードされてから再ロードされます。INCREMENTALモードでは、Oracle Databaseにトリガーがインストールされて変更の追跡が行われ、特定のOracle表で変更された行のみが定期的に更新されます。自動リフレッシュの状態がPAUSEDになっている場合を除き、最初の増分リフレッシュは常に完全リフレッシュになります。デフォルトのモードはINCREMENTALです。

FULL AUTOREFRESHは、Oracle Database表でほとんどの行が変更されている場合に効果的です。変更が少ない場合は、INCREMENTAL AUTOREFRESHがより有効です。

TimesTenは、AUTOREFRESHを指定した文を含むトランザクションがコミットされたときに、自動リフレッシュ操作をスケジュールします。自動リフレッシュをスケジュールする文は、次のとおりです。

自動リフレッシュの頻度は、指定した時間隔によって決まります。

AUTOREFRESHSTATEには、ONOFFまたはPAUSEDが指定できます。デフォルトでは、自動リフレッシュの状態はPAUSEDです。

NOT PROPAGATE属性とAUTOREFRESH属性を同時に使用することはできません。

キャッシュ・グループでのエージング

  • 時間ベースのエージングでは、スライド期間を指定できます。『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のスライド期間の構成に関する項を参照してください。

  • 表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。

  • エージング・ポリシーは、エージング状態を変更するように定義する必要があります。

  • 1つのシステムでLRUエージングと時間ベースのエージングの両方を組み合せて使用できます。LRUエージングのみを使用する場合、エージング・スレッドはデータベース全体に指定されたサイクルに基づいて起動します。一方、時間ベースのエージングのみを使用する場合、エージング・スレッドは最適な頻度に基づいて起動します。この頻度は、すべての表のCYCLE句に指定された値によって決定されます。LRUエージングと時間ベースのエージングの両方を使用する場合は、両方のタイプを組み合せて考慮した上でスレッドが起動します。

  • エージング状態がONOFFかにかかわらずエージング処理をすぐにスケジュールするには、ttAgingScheduleNowプロシージャをコールします。

  • LRUエージングでは、行がアクセスされているかまたは参照されているかどうかを、次のルールで判断します。

    • SELECT文の結果セットを構築するために使用された行。

    • INSERT...SELECT文の結果セットを構築するために使用された行。

    • 更新または削除対象の行。

  • コマンドで参照される表に対してLRUエージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。

  • LRUエージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。ON DELETE CASCADEの設定は無視されます。

  • 時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。ON DELETE CASCADEは、設定の有無にかかわらず無視されます。

  • ルート表にLRUエージング・ポリシーまたは時間ベースのエージング・ポリシーを指定します。ポリシーはキャッシュ・グループのすべての表に適用します。

  • 時間ベースのエージング・ポリシーの場合、エージング列を追加または変更できません。これは、NOT NULL列を追加または変更できないためです。

  • キャッシュ・グループのエージングを定義する場合の制限:

    • 動的キャッシュ・グループでないかぎり、LRUエージングは自動リフレッシュ属性が設定されたキャッシュ・グループではサポートされません。

    • 明示的にロードされるグローバル・キャッシュ・グループでは、エージングはデフォルトで無効です。

    • キャッシュ・エージェントがアクティブの間は、読取り専用キャッシュ・グループまたはAUTOREFRESH属性を持つキャッシュ・グループに対するエージング・ポリシーの追加、変更または削除はできません。まず、キャッシュ・エージェントを停止してください。

    • 時間ベースのエージングに使用されている列は削除できません。

キャッシュ・グリッド

キャッシュ・グリッド内のデータをキャッシュするには、ASYNCHRONOUS WRITETHROUGHグローバル・キャッシュ・グループを作成する必要があります。このキャッシュ・グループを作成する前に、TimesTenデータベースをキャッシュ・グリッドと関連付けておく必要があります。キャッシュ・グリッドの作成と使用およびグローバル・キャッシュ・グループの作成と使用の詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グリッドの構成に関する項およびグローバル・キャッシュ・グループに関する項を参照してください。

読取り専用キャッシュ・グループを作成します。

CREATE READONLY CACHE GROUP customerorders
AUTOREFRESH INTERVAL 10 MINUTES
FROM
customer (custid INT NOT NULL,
       name CHAR(100) NOT NULL,
       addr CHAR(100),
       zip INT,
       region CHAR(10),
       PRIMARY KEY(custid)),
ordertab (orderid INT NOT NULL,
       custid INT NOT NULL,
       PRIMARY KEY (orderid),
       FOREIGN KEY (custid) REFERENCES customer(custid));

ASYNCHRONOUS WRITETHROUGHキャッシュ・グループを作成します。

CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP cstomers
FROM
customer (custid INT NOT NULL,
       name CHAR(100) NOT NULL,
       addr CHAR(100),
       zip INT,
       PRIMARY KEY(custid));

SYNCHRONOUS WRITETHROUGHキャッシュ・グループを作成します。

CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP customers
FROM
customer (custid INT NOT NULL,
       name CHAR(100) NOT NULL,
       addr CHAR(100),
       zip INT,
       PRIMARY KEY(custid));

ユーザー管理キャッシュ・グループを作成します。

CREATE USERMANAGED CACHE GROUP updateanywherecustomers
AUTOREFRESH
       MODE INCREMENTAL
       INTERVAL 30 SECONDS
       STATE ON
FROM
customer (custid INT NOT NULL,
       name CHAR(100) NOT NULL,
       addr CHAR(100),
       zip INT,
       PRIMARY KEY(custid),
       PROPAGATE);

時間ベースのエージングが指定されたキャッシュ・グループを作成します。エージング用の列として、agetimestampを指定します。LIFETIMEは2時間、CYCLEは30分を指定します。エージング状態は指定しないため、デフォルト設定(ON)が使用されます。

CREATE READONLY CACHE GROUP agingcachegroup
AUTOREFRESH
       MODE INCREMENTAL
       INTERVAL 5 MINUTES
       STATE PAUSED
FROM
customer (customerid NUMBER NOT NULL,
       agetimestamp TIMESTAMP NOT NULL,
       PRIMARY KEY (customerid))
       AGING USE agetimestamp LIFETIME 2 HOURS CYCLE 30 MINUTES;

Command> DESCRIBE customer;
Table USER.CUSTOMER:
  Columns:
   *CUSTOMERID                      NUMBER NOT NULL
    AGETIMESTAMP                    TIMESTAMP (6) NOT NULL
  AGING USE AgeTimestamp LIFETIME 2 HOURS CYCLE 30 MINUTES ON
1 table found.
(primary key columns are indicated with *)

Oracle Databaseで大文字と小文字が混在するデリミタ付き識別子の表名にシノニムを使用すると、大文字と小文字が混在する表名をTimesTenでキャッシュできます。まず、大文字と小文字が混在するOracle Database表名のキャッシュを試みます。「Could not find 'NameofTable' in Oracle」というエラーが表示されます。

Command> AUTOCOMMIT 0;
Command> PASSTHROUGH 3;
Command> CREATE TABLE "MixedCase" (col1 NUMBER PRIMARY KEY NOT NULL);
Command> INSERT INTO "MixedCase" VALUES (1);
1 row inserted.
Command> COMMIT;
Command> CREATE CACHE GROUP MixedCase1 from "MixedCase" 
        (col1 NUMBER PRIMARY KEY NOT NULL);
 5140: Could not find SAMPLEUSER.MIXEDCASE in Oracle.  May not have privileges.
The command failed.

ここで、PassThrough属性を使用して、シノニム"MIXEDCASE"をOracle Databaseに作成し、そのシノニムを表名として使用します。

Command> AUTOCOMMIT 0;
Command> PASSTHROUGH 3;
Command> CREATE SYNONYM "MIXEDCASE" FOR "MixedCase";
Command> COMMIT;
Command> CREATE CACHE GROUP MixedCase2 FROM "MIXEDCASE" 
         (col1 NUMBER PRIMARY KEY NOT NULL);
Warning  5147: Cache group contains synonyms
Command> COMMIT;

読取り専用キャッシュ・グループまたはAUTOREFRESH属性を持つキャッシュ・グループでシノニムの名前を使用してみます。次のエラーが表示されます。

Command> AUTOCOMMIT 0;
Command> PASSTHROUGH 3;
Command> CREATE SYNONYM "MIXEDCASE_AUTO" FOR "MixedCase";
Command> COMMIT;
Command> CREATE READONLY CACHE GROUP MixedCase3 AUTOREFRESH MODE
         INCREMENTAL INTERVAL 10 MINUTES FROM "MIXEDCASE_AUTO" 
         (Col1 NUMBER PRIMARY KEY NOT NULL);
 5142: Autorefresh is not allowed on cache groups with Oracle synonyms
The command failed.

CREATE FUNCTION

CREATE FUNCTION文は、スタンドアロンのストアド・ファンクションを作成します。

必要な権限

CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)。

SQL構文

CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName 
     [(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])]
     RETURN DataType [InvokerRightsClause] [DETERMINISTIC]
     {IS|AS} PlsqlFunctionBody

InvokerRightsClauseの構文は、次のとおりです。

AUTHID {CURRENT_USER|DEFINER}

InvokerRightsClauseまたはDETERMINISTICは任意の順序で指定できます。

パラメータ

パラメータ 説明
OR REPLACE ファンクションがすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用して、削除および再作成せずに既存のファンクションの定義を変更します。ファンクションを再作成すると、そのファンクションはTimesTenで再コンパイルされます。
FunctionName ファンクションの名前。
arguments 引数またはパラメータの名前。ファンクションに0以上のパラメータを指定できます。パラメータを指定する場合は、パラメータのデータ型を指定する必要があります。データ型はPL/SQLデータ型である必要があります。

PL/SQLデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』の第3章「PL/SQLデータ型」を参照してください。

IN | OUT | IN OUT パラメータのモード。

INは読取り専用パラメータです。パラメータの値をファンクションに渡すことはできますが、ファンクションはパラメータの値をファンクション外に渡したり、コール側PL/SQLブロックに戻したりすることはできません。パラメータの値は変更できません。

OUTは書込み専用パラメータです。値をファンクションからコール側PL/SQLブロックに戻すには、OUTパラメータを使用します。パラメータに値を割り当てることができます。

IN OUTは読取り/書込みパラメータです。値をファンクションに渡し、コール側プログラムに戻すことができます(元の変更されていない値またはファンクション内で設定された新しい値)。

INがデフォルトです。

NOCOPY 可能なかぎり迅速にパラメータを渡すようにTimesTenに指示するには、NOCOPYを指定します。レコード、索引付き表、OUTまたはIN OUTパラメータへのVARRAYなどの大きな値を渡す場合に、パフォーマンスを向上できます。INパラメータでは、常にNOCOPYが渡されます。

詳細は、『Oracle Database PL/SQL言語リファレンス』のNOCOPYに関する項を参照してください。

DEFAULT expr パラメータのデフォルト値を指定するには、この句を使用します。キーワードDEFAULTのかわりに:=を指定できます。
RETURN DataType 必須の句。ファンクションは値を戻す必要があります。ファンクションの戻り値のデータ型を指定する必要があります。

データ型の長さ、精度またはスケールは指定しないでください。

データ型はPL/SQLデータ型です。

PL/SQLデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』の第3章「PL/SQLデータ型」を参照してください。

InvokerRightsClause PL/SQLファンクションまたはプロシージャ内のSQL文が定義者権限で実行されるか実行者権限で実行されるかを指定できます。AUTHIDの設定は、実行時にPL/SQLプロシージャまたはファンクションによって発行されるSQL文の名前解決および権限チェックに次のように影響を与えます。
  • DEFINERを指定すると、SQLの名前解決および権限チェックは、プロシージャまたはファンクションの所有者(定義者、つまりプロシージャまたはファンクションがあるスキーマの所有者)が実行しているものとして実行されます。DEFINERがデフォルトです。

  • CURRENT_USERを指定すると、SQLの名前解決および権限チェックは、現在のユーザー(実行者)が実行しているものとして実行されます。

詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限と実行者の権限に関する項を参照してください。

DETERMINISTIC パラメータに同じ値を指定してファンクションをコールした場合に常に同じ結果値を戻すように指定するには、DETERMINISTICを指定します。
IS|AS ISまたはASを指定して、ファンクションの本体を宣言します。
plsql_function_spec ファンクションの本体を指定します。

制限

次の句はTimesTenではサポートされません。

  • parallel_enable_clause

    句を指定できますが、無効になります。

  • call_spec

  • AS EXTERNAL

レプリケーション環境で、CREATE FUNCTION文はレプリケートされません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の既存のアクティブ・スタンバイ・ペアでの新規PL/SQLオブジェクトの作成に関する項および既存のクラシック・レプリケーション・スキームへのPL/SQLオブジェクトの追加に関する項を参照してください。

ファンクションを作成または置き換えた場合、ファンクションに付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。

1つの入力パラメータを指定してファンクションget_salを作成します。NUMBER型としてsalaryを戻します。

Command> CREATE OR REPLACE FUNCTION get_sal
       >   (p_id employees.employee_id%TYPE) RETURN NUMBER IS
       >   v_sal employees.salary%TYPE := 0;
       > BEGIN
       >   SELECT salary INTO v_sal FROM employees
       >     WHERE employee_id = p_id;
       >   RETURN v_sal;
       > END get_sal;
       > /
 
Function created.

関連項目

『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』

CREATE INDEX

CREATE INDEX文は、範囲索引、ハッシュ索引、またはビットマップ索引を表またはマテリアライズド・ビューの1つ以上の列に作成します。

必要な権限

所有者に必要な権限はありません。

所有者でない場合は、システム権限CREATE ANY INDEXまたはオブジェクト権限INDEXが必要です。

SQL構文

範囲索引またはビットマップ索引を作成するには、次のように実行します。

CREATE [UNIQUE|BITMAP] INDEX [Owner.]IndexName ON
[Owner.]TableName ({ColumnName [ASC | DESC]}
[,... ] )

ハッシュ索引を作成するには、次のように実行します。

CREATE [UNIQUE] HASH INDEX [Owner.]IndexName ON
[Owner.]TableName ({ColumnName [ASC | DESC]}
[,... ] ) [ PAGES = RowPages | CURRENT ]

パラメータ

パラメータ 説明
UNIQUE 範囲索引およびハッシュ索引の両方にUNIQUEを指定します。UNIQUEを指定すると、索引キーの列値の各組合せが出現するのは、その表で1つの行のみです。
BITMAP 一意の値を持つ行に関する情報がビットマップでエンコードされている索引を作成するには、CREATE BITMAP INDEXを指定します。ビットマップの各ビットが表の行に対応します。

ビットマップ索引は、一意の値がそれほど多くない列に使用します。

HASH ハッシュ索引を作成する場合は、HASHを指定します。一意のハッシュ索引を作成する場合は、HASHとともにUNIQUEを指定します。
[Owner.] IndexName 新しい索引に割り当てる名前。表の2つの索引に同じ名前を付けることはできません。所有者を指定する場合、表の所有者と同じ名前を指定する必要があります。
[Owner.] TableName 索引を作成する表またはマテリアライズド・ビューを指定します。
ColumnName 索引キーとして使用する列の名前。主索引キーから補助索引キーの順に、最大16列を指定できます。
[ASC|DESC] 索引の順序を昇順(デフォルト)または降順で指定します。現在、TimesTenではこのパラメータは無視されます。
PAGES = {RowPages | CURRENT} CREATE HASH INDEX文で使用するオプションの句。PAGES句を指定しない場合は、デフォルトはCURRENTになります。

表の想定ページ数に基づいてハッシュ索引のサイズを設定します。CURRENTを指定すると、表内の現在の行数を使用してページ・カウント値が計算されます。RowPagesを指定する場合は、ページ数が使用されます。RowPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

RowPagesの値は、0を含まない正の定数である必要があります。

表に行がない場合は、PAGES=CURRENTを指定しないでください。表に行が追加される際に、ハッシュ索引のパフォーマンスが低下するためです。


説明

  • TimesTenでは、一意でない範囲索引がデフォルトで作成されます。一意の範囲索引を作成するには、CREATE UNIQUE INDEXを指定します。ビットマップ索引を作成するには、CREATE BITMAP INDEXを指定します。

  • 一意でないハッシュ索引を作成する場合は、CREATE HASH INDEXを指定します。一意のハッシュ索引を作成するには、 CREATE UNIQUE HASH INDEXを指定します。

  • LOB列には、索引(範囲、ハッシュ、ビットマップ)を作成できません。

  • 各列でビットマップ索引を指定すると、AND演算子またはOR演算子で連結された複数の列で複数の条件を指定する複雑な問合せのパフォーマンスが向上します。実行時に、TimesTenでは、各条件を満たす行のビットマップが検出され、様々な条件のビットマップがビット単位論理演算子を使用して結合され、その結果生成されるビットマップが条件を満たす行に変換されます。

  • ビットマップ索引は、次の条件を満たすために使用されます。

    • 等価条件。例: 'x1 = 1'

    • 範囲条件。例: 'y1 > 10'および'z1 BETWEEN 1 and 10'

    • AND条件。例: 'x1 > 10 AND y1 > 10'

    • OR条件。例: 'x1 > 10 OR y1 > 10'

    • ANDまたはORを含む複雑な条件。例: '(x1 > 10 AND y1 > 10) OR (z1 > 10)'

    • ANDを含むNOT EQUAL条件。例: 'x1 = 1 and y1 != 1'

  • ビットマップ索引の特徴は次のとおりです。

    • COUNT (*)最適化では、ビットマップからROWIDがカウントされます。

    • ビットマップ索引の列の接頭辞によってグループ化する問合せを最適化するために使用されます。

    • 異なる問合せおよび順序を問合せによって最適化するために使用されます。

    • MERGE結合で使用されます。

  • CREATE INDEX文は、索引の定義をシステム・カタログに追加して、必要なデータ構造を初期化します。表の行はすべて索引に追加されます。

  • UNIQUEを指定した場合、索引付けされた列の既存の行の値はすべて一意である必要があります。

  • 新しい索引は、DROP INDEX文を使用して索引を削除するか、その索引に関連付けられた表を削除しないかぎり自動的にメンテナンスされます。

  • 準備された文が新しく索引付けされた表を参照している場合、その文を次回に実行する際に自動的に再度準備されます。これにより、文は新しい索引を活用することができます。

  • ソート処理では、NULLは最も大きな値としてソートされます。

  • 他の接続が所有する空でないインスタンスが一時表にある場合、別の接続によって一時表に索引を作成することはできません。

  • 言語比較を使用する場合は、言語索引を作成できます。言語索引ではソート・キー値が使用され、ソート・キー値用の記憶域が必要です。1つの索引に指定できるNLS_SORTの値は、一意の値を1つのみです。言語索引および言語比較の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の言語索引の使用に関する説明を参照してください。

  • 冗長な索引を作成すると、TimesTenにより警告またはエラーが生成されます。ttRedundantIndexCheckをコールして、表に対する冗長な索引のリストを表示します。

  • アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVELが2以上の場合にアクティブ・データベースでCREATE INDEXを実行すると、索引はレプリケーション・スキームのすべてのデータベースにレプリケートされます。索引が作成される表は空である必要があります。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

  • 索引は、表の任意の列にわたって作成できます。これには、圧縮列や、別の圧縮列グループに存在する列も含まれます。

  • ハッシュ索引のサイズまたは型を変更するには、ハッシュ索引を削除して新しい索引を作成します。

  • ハッシュ索引は、固定サイズで作成され、表の存続中は変化しません。ハッシュ索引のサイズを変更するには、索引を削除して再作成します。小さいハッシュ索引ほどハッシュの衝突が増えます。大きいハッシュ索引ほど衝突が少なくなりますが、メモリを消費しやすくなります。ハッシュ・キー比較は高速な操作であるため、少数のハッシュ衝突がTimesTenにパフォーマンスの問題を発生させることはありません。

    ハッシュ索引のサイズが適性に設定されていることを確認するには、SET PAGES句のRowPagesパラメータの値により、アプリケーションで表の想定サイズを示す必要があります。この値は、表の想定行数を256で除算して計算します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

  • 索引に指定できる最大列数は16です。

問合せ処理での索引の使用

適正な索引は問合せのパフォーマンス向上につながります。索引の使用が有益な問合せと有益でない問合せがあります。また、問合せでの索引の選択も重要です。

範囲索引は、索引列の値のほとんどが一意の場合に、範囲検索および完全一致の処理に適しています。たとえば、範囲索引が列(C1,C2)に定義されている場合、次の種類の述語の処理に索引を使用できます。ConstantOrParamは、定数値または動的パラメータを指し、rangeは演算子>、<、>=、または<=を指します。

  • C1 = ConstantOrParam AND C2 = ConstantOrParam

  • C1 = ConstantOrParam AND C2 range ConstantOrParam

  • C1 = ConstantOrParam

  • C1 range ConstantOrParam

範囲索引は、等式述語および範囲述語の処理、ソート処理やグループ化処理に効果的です。範囲索引は、一意の値が多数ある索引列に使用します。範囲索引で指定する列の順序は関連しています。範囲索引を使用する問合せの述語内の式の順序は関連していません。問合せ処理時は、表で複数の範囲索引を定義している場合でも、表の各スキャンで範囲索引が1つだけ使用されます。

ハッシュ索引は等式述語の処理に効果的です。最適なパフォーマンスのためには、ハッシュ索引のサイズを適正にする必要があります。PAGESパラメータを使用してハッシュ索引のサイズを指定します。指定したPAGESの値が小さすぎると、多数のハッシュ衝突が発生し、ハッシュ索引にアクセスする文のパフォーマンスが低下します。ハッシュ索引で指定された列の順序は関連せず、範囲索引を使用する問合せの述語内の式の順序は関連しません。ハッシュ索引または範囲索引のいずれかを使用して特定の等式述語を処理する場合は、ハッシュ索引による検索は範囲索引のスキャンより高速なため、ハッシュ索引が使用されます。

ビットマップ索引は、等式述語および範囲述語の処理、特にAND演算子やOR演算子を使用して複数の式を持つ複雑な問合せに効果的です。ビットマップ索引は、索引列に一意の値が少なく(索引列に重複値が多数あり)、索引列のカーディナリティが低い問合せに使用します。索引は、各行を個別に索引付けるのではなく、一意の索引値ごとのビットマップを持ち、ビットマップの各ビットは表の行に対応します。

問合せの処理時に、表の各スキャンで複数のビットマップ索引を使用できます。ビットマップ索引は、等式述語、不等式述語、範囲述語、またはAND演算子やOR演算子によるこれらの述語の組み合わせを処理できます。

文レベルのオプティマイザ・ヒントまたはトランザクション・レベルのオプティマイザ・ヒントを使用することで、オプティマイザが使用する索引に作用できます。文レベルのオプティマイザ・ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。トランザクション・レベルのオプティマイザ・ヒントの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の「ttOptSetFlag」、「ttOptSetOrder」、または「ttOptUseIndex」を参照してください。TimesTen Index Advisorを使用すると、特定の問合せのセットまたは特定のワークロードを考慮した索引に関する推奨事項が提供されます。Index Advisorの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』で、索引アドバイザを使用した索引の推奨に関する説明を参照してください。

表を作成し、col2に一意のハッシュ索引を作成します。PAGES句は指定しないでください。PAGESを指定しない場合、ハッシュ表のサイズに現在の表のページ数が使用されます。INDEXESを使用して、索引が作成されたことを確認します。表に行を挿入し、SHOWPLANを1に設定し、オプティマイザがハッシュ索引を使用していることを確認します。

Command> CREATE TABLE tab (col1 NUMBER PRIMARY KEY NOT NULL, col2 VARCHAR2 (30));
Command> CREATE UNIQUE HASH INDEX hash1 ON tab (col2);
Command> INDEXES;
 
Indexes on table TESTUSER.TAB:
  HASH1: unique hash index on columns:
    COL2
  TAB: unique range index on columns:
    COL1
  2 indexes found.
 
2 indexes found on 1 table.
Command> INSERT INTO tab VALUES (10, 'ABC');
Command> SHOWPLAN 1;
Command> SELECT * FROM tab where col2 = 'ABC';
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkHashScan
  TBLNAME:             TAB
  IXNAME:              HASH1
  INDEXED CONDITION:   TAB.COL2 = 'ABC'
  NOT INDEXED:         <NULL>
 
< 10, ABC >
1 row found.

表を作成し、col1に一意でないハッシュ索引を作成します。PAGES = CURRENTを使用して現在の表のページ数を使用してハッシュ索引のサイズを指定します。INDEXESを使用して、一意でないハッシュ索引が作成されることを確認します。

Command> CREATE TABLE tab2 (col1 NUMBER);
Command> CREATE HASH INDEX hash_index ON tab2 (col1) PAGES = CURRENT;
Command> INDEXES;
 
Indexes on table TESTUSER.TAB2:
  HASH_INDEX: non-unique hash index on columns:
    COL1
  1 index found.
 
1 index found on 1 table.

表を作成し、col3に一意のハッシュ索引を作成します。PAGES = 100を使用して、ハッシュ索引のサイズにページ数100を指定します。INDEXESを使用して、一意のハッシュ索引が作成されることを確認します。

Command> CREATE TABLE tab3 (col1 NUMBER, col2 NUMBER, col3 TT_INTEGER);
Command> CREATE UNIQUE HASH INDEX unique_hash1 on tab3 (col3) PAGES = 100;
Command> INDEXES;
 
Indexes on table TESTUSER.TAB3:
  UNIQUE_HASH1: unique hash index on columns:
    COL3
  1 index found.
 
1 index found on 1 table.

表を作成し、列idにビットマップ索引を作成します。ttIsql SHOWPLANコマンドを使用して、ビットマップ索引が問合せで使用されていることを確認します。

Command> CREATE TABLE tab1 (id NUMBER);
Command> INSERT INTO tab1 VALUES (10);
1 row inserted.
Command> INSERT INTO tab1 VALUES (20);
1 row inserted.
Command> CREATE BITMAP INDEX bitmap_id ON tab1 (id);
Command> COMMIT;
Command> SET AUTOCOMMIT OFF;
Command> SHOWPLAN 1;
Command> SELECT * FROM tab1 WHERE id = 10;
 
Query Optimizer Plan:
 
  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkBitmapScan
  TBLNAME:             TAB1
  IXNAME:              BITMAP_ID
  INDEXED CONDITION:   TAB1.ID = 10
  NOT INDEXED:         <NULL>
 
< 10 >
1 row found.

HRスキーマのregions表により、region_idに一意の索引が作成されます。regions表に対してttIsql INDEXESコマンドを発行します。一意の範囲索引regionsが表示されます。

Command> INDEXES REGIONS;

Indexes on table SAMPLEUSER.REGIONS:
  REGIONS: unique range index on columns:
    REGION_ID
    (referenced by foreign key index COUNTR_REG_FK on table SAMPLEUSER.COUNTRIES)
  1 index found.

1 index found on 1 table.

regions表に一意の索引iを作成し、region_id列に索引を作成してみます。警告メッセージが表示されます。

Command> CREATE UNIQUE INDEX i ON regions (region_id);
Warning  2232: New index I is identical to existing index REGIONS; 
consider dropping index I

ttRedundantIndexCheckをコールして、この索引に対する警告メッセージを表示します。

Command> CALL ttRedundantIndexCheck ('regions');
< Index SAMPLEUSER.REGIONS.I is identical to index SAMPLEUSER.REGIONS.REGIONS;
consider dropping index SAMPLEUSER.REGIONS.I >
1 row found.

redundancyを作成し、列co11およびcol2を定義します。col1およびcol2に2つのユーザー索引を作成します。2つ目の索引r2を作成しようとするとエラー・メッセージが表示されます。索引r1は作成されます。索引r2は作成されません。

Command> CREATE TABLE redundancy (col1 CHAR (30), col2 VARCHAR2 (30));
Command> CREATE INDEX r1 ON redundancy (col1, col2);
Command> CREATE INDEX r2 ON redundancy (col1, col2);
 2231: New index R2 would be identical to existing index R1
The command failed.

redundancy表に対してttIsqlコマンドのINDEXESを発行し、索引r1のみが作成されていることを表示します。

Command> INDEXES redundancy;

Indexes on table SAMPLEUSER.REDUNDANCY:
  R1: non-unique range index on columns:
    COL1
    COL2
  1 index found.

1 index found on 1 table.

この一意索引によって、部品の番号はすべて一意になります。

CREATE UNIQUE INDEX purchasing.partnumindex
ON purchasing.parts (partnumber);

employees1表に、german_indexという名前の言語索引を作成します。2つ以上の言語ソートが必要な場合は、2つ目の言語索引を作成します。

Command> CREATE TABLE employees1 (id CHARACTER (21),
id2 character (21));
Command> CREATE INDEX german_index ON employees1
  (NLSSORT(id, 'NLS_SORT=GERMAN'));
Command> CREATE INDEX german_index2 ON employees1
  (NLSSORT(id2, 'nls_sort=german_ci'));
Command> indexes employees1;
Indexes on table SAMPLEUSER.EMPLOYEES1:
  GERMAN_INDEX: non-unique range index on columns:
    NLSSORT(ID,'NLS_SORT=GERMAN')
  GERMAN_INDEX2: non-unique range index on columns:
    NLSSORT(ID2,'nls_sort=german_ci')
  2 indexes found.
1 table found.

関連項目

DROP INDEX

CREATE MATERIALIZED VIEW

CREATE MATERIALIZED VIEW文は、SelectQuery句で指定された表に対するビューを作成します。ビューを作成するために使用された元の表は、ディテール表と呼ばれます。ビューは、ディテール表の変更に関して、同期または非同期でリフレッシュされます。非同期マテリアライズド・ビューを作成する場合は、まずディテール表にマテリアライズド・ビュー・ログを作成する必要があります。「CREATE MATERIALIZED VIEW LOG」を参照してください。

必要な権限

文を実行するユーザーには、CREATE MATERIALIZED VIEW(所有者の場合)またはCREATE ANY MATERIALIZED VIEW(非所有者の場合)が必要です。

マテリアライズド・ビューの所有者には、ディテール表に対するSELECTが必要です。

マテリアライズド・ビューの所有者には、CREATE TABLEが必要です。

SQL構文

CREATE MATERIALIZED VIEW [Owner.]ViewName
      [REFRESH 
        { FAST | COMPLETE } |
              [NEXT SYSDATE[+NUMTODSINTERVAL(IntegerLiteral,IntervalUnit)]] 
        |  NEXT SYSDATE[+NUMTODSINTERVAL(IntegerLiteral,IntervalUnit) ]
      ]
      AS SelectQuery
      [PRIMARY KEY (ColumnName [,...])] 
      [UNIQUE HASH ON (HashColumnName [,...]) PAGES = PrimaryPages]

パラメータ

パラメータ 説明
[Owner.]ViewName 新しいビューに割り当てる名前。
REFRESH 非同期マテリアライズド・ビューを指定します。
FAST | COMPLETE リフレッシュ方法。FASTは、増分リフレッシュを指定します。COMPLETEは、完全リフレッシュを指定します。
NEXT SYSDATE NUMTODSINTERVALを指定せずにNEXT SYSDATEを指定した場合、マテリアライズド・ビューは、ディテール表が変更されるたびに増分リフレッシュされます。リフレッシュは、ディテール表を変更するトランザクションがコミットされた直後に、別のトランザクションで実行されます。ディテール表が変更されるたびに完全リフレッシュ(COMPLETE)を指定することはできません。

NEXT SYSDATEを省略した場合、マテリアライズド・ビューが自動的にリフレッシュされることはありません。手動でリフレッシュする必要があります。

FASTまたはCOMPLETEを指定しないでNEXT SYSDATEを指定した場合、COMPLETEがデフォルトのリフレッシュ方法です。

[+NUMTODSINTERVAL(IntegerLiteral,
IntervalUnit)]
指定した場合、マテリアライズド・ビューは指定した時間隔でリフレッシュされます。IntegerLiteralは整数である必要があります。IntervalUnitは、'DAY''HOUR''MINUTE''SECOND'のいずれかの値である必要があります。

[NEXT SYSDATE[+NUMTODSINTERVAL(IntegerLiteral),IntervalUnit]を指定しない場合、マテリアライズド・ビューが自動的にリフレッシュされることはありません。REFRESH MATERIALIZED VIEW文を使用すると、ビューを手動でリフレッシュできます。

SelectQuery ビューで使用される、ディテール表の列を選択します。
ColumnName 作成されるビューの主キー列の名前を指定します。主キーには最大16列を指定できます。ビュー表の結果列の名前は、一意である必要があります。表または所有者の要素を列名の定義に含めることはできません。
UNIQUE HASH ON 表のハッシュ索引です。一意のハッシュ索引のみが作成されます。このパラメータは、等価条件に使用します。UNIQUE HASH ONを指定するには、主キーの定義が必要です。
HashColumnName ビューに定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。
PAGES = PrimaryPages 表の想定ページ数に基づいてハッシュ索引のサイズを設定します。PrimaryPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、PrimaryPagesに1000を指定します(256000/256=1000)。

PrimaryPagesの値は、0を含まない正の定数である必要があります。

PrimaryPagesの推定値が小さすぎると、パフォーマンスが悪化します。

ハッシュ索引の詳細は、「CREATE TABLE」を参照してください。


説明

この項では、マテリアライズド・ビューに関する制限事項、要件、その他の考慮事項を、次のトピックを通じて説明します。

マテリアライズド・ビューの制限事項および要件

問合せの定義に関する次の制限事項および要件は、マテリアライズド・ビューに一般的に適用されます。(FASTリフレッシュを使用した非同期マテリアライズド・ビューには、記述のとおり、追加の制限事項があります。)

  • SELECT構文のリストの各式には、一意の名前が必要です。

  • 非マテリアライズド・ビューを使用してマテリアライズド・ビューを定義しないでください。

  • マテリアライズド・ビュー問合せの選択リストの列にCLOBBLOB、またはNCLOBデータ型を定義しないでください。

  • ディテール表はキャッシュ・グループに属すことができず、ディテール表は圧縮を使用できません。

  • SELECT FOR UPDATE.は使用しないでください。

  • システム表またはシステム・ビューを参照しないでください。

  • マテリアライズド・ビューでネストされた定義を使用しないでください。

  • 動的パラメータを使用しないでください。

  • ROWNUMを使用しないでください。

  • 分析関数を使用しないでください。

  • GROUPING SETSROLLUP、またはCUBEを使用しないでください。

  • SYSDATEファンクションを使用しないでください。

  • SYSTEM_USERファンクション、USERファンクション、CURRENT_USERファンクション、またはSESSION_USERファンクションを使用しないでください。

  • NEXTVALまたはCURRVALを使用しないでください。

  • OUTER JOINは使用できますが、選択リストは、外部結合に指定した各内部表に1つ以上のNULL値可能でない列を投影する必要があります。

    注意: FASTリフレッシュを使用した非同期マテリアライズド・ビューでは外部結合は使用できません。

  • WITH 副問合せ句は使用しないでください。

次の制限事項(問合せの定義を除く)は、同期非同期を問わず、マテリアライズド・ビューに一般的に適用されます。

  • マテリアライズド・ビューの列の集計がある、ハッシュ・ベースの主キーを使用しないでください。

  • マテリアライズド・ビューは、TimesTenレプリケーションを使用して直接レプリケートできません。ディテール表はレプリケートできます。レプリケートの両側で同じマテリアライズド・ビューを定義する必要があります。TimesTenでは、該当するマテリアライズド・ビューが自動的に更新されます。

  • 参照元または参照先の表がマテリアライズド・ビューの場合は、外部キーを定義できません。

問合せの定義に関する次の制限事項および要件は、同期マテリアライズド・ビューおよびFASTリフレッシュを使用した非同期マテリアライズド・ビューに適用されます。(FASTリフレッシュを使用した非同期マテリアライズド・ビューには、記述のとおり、追加の制限事項があります。)

  • ビューの定義には、選択リストのGROUP BYリストのすべての列が含まれる必要があります。

  • 集約ビューには、選択リストのCOUNT (*)またはCOUNT(NULL値不可の列)が含まれる必要があります。

  • 導出表またはJOIN表を使用しないでください。

  • SELECT DISTINCTファンクションまたは集計DISTINCTファンクションを使用しないでください。

    注意: FASTリフレッシュを使用した非同期マテリアライズド・ビューでは集計関数は使用できません。

  • 集合演算子UNIONINTERSECTまたはMINUSを使用しないでください。

  • NULL値可能な式のSUMを使用しないでください。

  • 単純な列のみをGROUP BY列として使用してください。

  • GROUP BY列は自己結合表に属することができません。

  • 次の句を使用しないでください。

    • HAVING

    • ORDER BY

    • DISTINCT

    • FIRST

    • JOIN

  • TT_HASHファンクションを使用しないでください。

  • SUMおよびCOUNTを使用できますが、SUMおよびCOUNTを含む式は使用しないでください。SUM/COUNTとして処理されるAVGを使用しないでください。

  • 選択リストでMINファンクションまたはMAXファンクションを指定しないでください。

  • 結合の場合

    • 結合述語にORを使用できません。

    • デカルト積の結合(結合述語のない結合)を指定しないでください。

    • 外部結合では、各内部表を1つ以上の表に外部結合します。

      注意: FASTリフレッシュを使用した非同期マテリアライズド・ビューでは外部結合は使用できません。

問合せの定義に関する次の制限事項がFASTリフレッシュを使用した非同期マテリアライズド・ビューに適用されます。

  • 集計関数はサポートされません。

  • 外部結合はサポートされません。

  • 選択リストには、すべてのディテール表のROWID列または主キー列が含まれている必要があります。

次の制限事項(問合せの定義を除く)は、FASTリフレッシュを使用した非同期マテリアライズド・ビューにのみ適用されます。

  • 非同期マテリアライズド・ビューを作成する前に、FASTリフレッシュでの非同期マテリアライズド・ビューの各ディテール表にマテリアライズド・ビュー・ログを作成する必要があります。

  • マテリアライズド・ビュー・ログに、非同期マテリアライズド・ビューで使用されるすべての列が含まれている必要があります。

マテリアライズド・ビューの追加考慮事項

次の追加考慮事項は、同期非同期を問わず、マテリアライズド・ビューに一般的に適用されます。

  • マテリアライズド・ビューは読取り専用であり、直接更新できません。マテリアライズド・ビューの更新は、関連付けられたディテール表が変更された場合にのみ実行されます。このため、マテリアライズド・ビューに対してDELETEUPDATEまたはINSERT文を実行することはできません。

  • デフォルトでは、マテリアライズド・ビューで主キーを使用するために範囲索引が作成されます。かわりにUNIQUE HASH句を使用して、主キーに対してハッシュ索引を指定できます。

    • アプリケーションでマテリアライズド・ビューの主キーに対して範囲問合せを実行する場合は、UNIQUE HASH句を省略して、マテリアライズド・ビューに対して範囲索引を選択してください。

    • 主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、UNIQUE HASH句を指定します。UNIQUE HASH句の詳細は、「CREATE TABLE」を参照してください。

  • 主キーで使用する索引の変更、またはハッシュ索引のサイズ変更を行うには、ALTER TABLEを使用できます。

  • ALTER TABLE文でマテリアライズド・ビューの列の追加または削除を行うことはできません。マテリアライズド・ビューの構造を変更するには、ビューを削除してから再度作成します。

  • マテリアライズド・ビューの索引は、CREATE INDEX SQL文を使用して作成できます。

次の追加考慮事項は、非同期マテリアライズド・ビューにのみ適用されます。

  • REFRESHを指定する場合は、リフレッシュ・オプション(FASTまたはCOMPLETE)またはリフレッシュ間隔(NEXT SYSDATE)を少なくとも1つ指定する必要があります。(REFRESHを省略すると、マテリアライズド・ビューは同期で更新されます。)

  • REFRESH FASTを使用して非同期マテリアライズド・ビューを作成する場合、マテリアライズド・ビュー・ログ、マテリアライズド・ビューおよびマテリアライズド・ビューが作成される元表の統計を更新して、元表、およびマテリアライズド・ビューでの更新のパフォーマンスを向上させることをお薦めします。

  • FASTリフレッシュを使用した非同期マテリアライズド・ビューの場合、TimesTenでは一意の索引が作成され、増分リフレッシュされます。索引は、選択リストに含まれるディテール表の主キーまたはROWIDに作成されます。

無効なマテリアライズド・ビュー

マテリアライズド・ビューの所有者には、ディテール表に対するSELECT権限が必要です。SELECT権限は、SELECT ANY TABLEおよびADMINシステム権限によって暗黙的に指定されます。ディテール表に対するSELECT権限またはそれ以上のレベルのシステム権限がマテリアライズド・ビューの所有者から削除されると、マテリアライズド・ビューは無効になります。

無効な非同期マテリアライズド・ビューから選択することは可能です。無効な非同期マテリアライズド・ビューをリフレッシュすると、エラーを伴って失敗します。

無効な同期マテリアライズド・ビューから選択すると、エラーを伴って失敗します。無効な同期マテリアライズド・ビューのディテール表を更新しても、そのマテリアライズド・ビューは更新されません。

無効なマテリアライズド・ビューを識別するには、ttIsql describeコマンドを使用し、SYS.DBA_OBJECTSSYS.ALL_OBJECTSまたはSYS.USER_OBJECTSシステム表のSTATUS列を調べます。『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』を参照してください。

削除された権限が回復されると、無効なマテリアライズド・ビューを次の方法で再度有効にすることができます。

  • マテリアライズド・ビューの削除および再作成。

  • 無効な非同期マテリアライズド・ビューが元は完全リフレッシュで指定された場合は、そのビューのリフレッシュ。

詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のマテリアライズド・ビューのオブジェクト権限に関する説明を参照してください。

customer表とbookorder表の列からマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW custorder AS
  SELECT custno, custname, ordno, book
    FROM customer, bookorder
    WHERE customer.custno=bookorder.custno;

t1表のx1およびy1列からマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW v1 AS SELECT x1, y1 FROM t1
  PRIMARY KEY (x1) UNIQUE HASH (x1) PAGES=100;

t1表とt2表のx1およびy1列の外部結合からマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW v2 AS SELECT x1, y1 FROM t1, t2
  WHERE x1=x2(+);

増分リフレッシュでempmatviewという名前の非同期マテリアライズド・ビューを作成します。マテリアライズド・ビューは、employeesへの更新がコミットされた直後にリフレッシュされます。empmatview内の列は、employee_idおよびemailです。非同期マテリアライズド・ビューを作成する前に、マテリアライズド・ビュー・ログを作成する必要があります。

CREATE MATERALIZED VIEW empmatview 
  REFRESH FAST NEXT SYSDATE 
  AS SELECT employee_id, email FROM employees;
107 rows materialized.

完全リフレッシュでempmatview1という名前の非同期マテリアライズド・ビューを作成します。マテリアライズド・ビューの完全リフレッシュは10日ごとに行われます。empmatview内の列は、employee_idおよびemailです。非同期マテリアライズド・ビューを作成する前に、マテリアライズド・ビュー・ログを作成する必要があります。

CREATE MATERIALIZED VIEW empmatview1
    REFRESH COMPLETE NEXT SYSDATE+NUMTODSINTERVAL(10,'day')
    AS SELECT employee_id, email FROM employees;
107 rows materialized.

次の例では、表employeesから選択された列employee_idおよびemailに基づいて、マテリアライズド・ビューempmatview2を作成します。マテリアライズド・ビューの作成後、マテリアライズド・ビューempmatview2の列mvemp_idに索引を作成します。

CREATE MATERIALIZED VIEW empmatview2
   AS SELECT employee_id mvemp_id, email mvemail 
         FROM employees;
107 rows materialized. 

CREATE INDEX empmvindex ON empmatview2 (mvemp_id);

CREATE MATERIALIZED VIEW LOG

CREATE MATERIALIZED VIEW LOG文は、ディテール表に対する変更が記録されるログを作成します。ログは、増分リフレッシュされる非同期マテリアライズド・ビューに必要です。マテリアライズド・ビューを作成する前にログを作成する必要があります。ログは、ユーザーのスキーマ内のMVLOG$_detailTableIDという名前の表であり、detailTableIDはシステム生成されるIDです。

この文は、内部使用のための他のオブジェクトも作成します。

  • MVLGT$_detailTableIDという名前のグローバル一時表

  • MVSEQ$_detailTableIDという名前の順序

オブジェクトは、DROP MATERIALIZED VIEW LOG文を実行すると削除されます。

必要な権限

ディテール表に対するSELECTおよび

CREATE TABLEまたはCREATE ANY TABLE(非所有者の場合)。

SQL構文

CREATE MATERIALIZED VIEW LOG ON [Owner.]TableName
  [ WITH 
       { PRIMARY KEY[, ROWID] | 
         ROWID[, PRIMARY KEY } [(columnName[,...])] 
       | (columnName[,...])
  ]

パラメータ

パラメータ 説明
[Owner.]TableName マテリアライズド・ビューのディテール表の名前。
[(columnName[,...]) 変更がログに記録される列のリスト。PRIMARY KEYオプションを指定した場合、列リストに主キー列を含めることはできません。

説明

  • WITH句を使用して、ディテール表でどの行が更新されたかをマテリアライズド・ビューで示します。更新された行は、対応する主キーの値またはROWIDによって示すことができます。

    • WITH句でPRIMARY KEYまたはROWIDのいずれかを指定します。ただし、どちらのオプションも使用しないでWITH句を指定すると、デフォルトでPRIMARY KEYが使用されます。また、WITH句を完全に省略した場合、マテリアライズド・ビュー・ログではデフォルトでPRIMARY KEYが使用されます。

    • PRIMARY KEYを指定して、変更された行を対応する主キーの値で識別します。または、ROWIDを指定して、変更された行をROWIDで識別します。ROWIDオプションは、表に主キーが含まれていない場合、またはマテリアライズド・ビューの作成時に主キーを使用しない場合に有用です。

    • PRIMARY KEYROWIDの両方を指定できます。マテリアライズド・ビュー・ログは、指定された表をディテール表として使用する複数の非同期マテリアライズド・ビューで使用される場合があります。ただし、マテリアライズド・ビュー・ログに対して指定できるのは、1つのPRIMARY KEY句、1つのROWID句および1つの列リストのみです。

  • 表が、FASTリフレッシュを使用する複数のマテリアライズド・ビューのディテール表である場合でも、表に対して作成されるマテリアライズド・ビュー・ログは1つのみです。FASTリフレッシュを使用する複数の非同期マテリアライズド・ビューで使用されるすべての列を含める必要があります。

  • マテリアライズド・ビュー・ログは、表としてマテリアライズド・ビューを使用して作成したり、キャッシュ・グループ内の表に対して作成することはできません。

  • マテリアライズド・ビュー・ログを変更して列を追加または削除することはできません。

employees表にマテリアライズド・ビュー・ログを作成します。ログにemployee_id(主キー)およびemailを含めます。

CREATE MATERIALIZED VIEW LOG ON employees WITH PRIMARY KEY (email);

次のように、PRIMARY KEYを指定しなくても(デフォルトであるため、暗黙的に指定されます)、employees表に同じマテリアライズド・ビュー・ログを作成できます。

CREATE MATERIALIZED  VIEW LOG ON employees WITH (email);

主キーのみを使用してemployees表にマテリアライズド・ビュー・ログを作成するには、次の文を実行します。

CREATE MATERIALIZED VIEW LOG ON employees;

employees表にマテリアライズド・ビュー・ログを作成します。ログにemployee_id(主キー)およびROWIDを含めます。

Command> CREATE MATERIALIZED VIEW LOG ON employees WITH primary key, rowid;

employees表にマテリアライズド・ビュー・ログを作成します。ログにROWIDを含めます。

Command> CREATE MATERIALIZED VIEW LOG ON employees WITH rowid;

employees表にマテリアライズド・ビュー・ログを作成します。ログにROWID、主キー(employee_id)およびemailを含めます。

Command> CREATE MATERIALIZED VIEW LOG ON employees WITH rowid, primary key (email);

employees表にマテリアライズド・ビュー・ログを作成します。ログに主キー(デフォルト)とその他の2つの列emailおよびlast_nameを含めます。

Command> CREATE MATERIALIZED VIEW LOG ON employees WITH (email, last_name);

CREATE PACKAGE

CREATE PACKAGE文は、データベースに一緒に格納される、関連するプロシージャやファンクション、その他のプログラム・オブジェクトをカプセル化したコレクションである、スタンドアロン・パッケージの仕様部を作成します。パッケージ仕様でこれらのオブジェクトを宣言します。パッケージ本体でこれらのオブジェクトを定義します。

必要な権限

CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)。

SQL構文

CREATE [OR REPLACE] PACKAGE [Owner.]PackageName 
      [InvokerRightsClause] {IS|AS}
      PlsqlPackageSpec

InvokerRightsClauseの構文は、次のとおりです。

AUTHID {CURRENT_USER | DEFINER}

パラメータ

パラメータ 説明
OR REPLACE パッケージ仕様がすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用して、パッケージを削除および再作成せずに既存のパッケージの仕様を変更します。パッケージ仕様を変更すると、そのパッケージ仕様はTimesTenで再コンパイルされます。
PackageName パッケージの名前。
InvokerRightsClause PL/SQLファンクションまたはプロシージャ内のSQL文が定義者権限で実行されるか実行者権限で実行されるかを指定できます。AUTHIDの設定は、実行時にPL/SQLプロシージャまたはファンクションによって発行されるSQL文の名前解決および権限チェックに次のように影響を与えます。
  • DEFINERを指定すると、SQLの名前解決および権限チェックは、プロシージャまたはファンクションの所有者(定義者、つまりプロシージャまたはファンクションがあるスキーマの所有者)が実行しているものとして実行されます。DEFINERがデフォルトです。

  • CURRENT_USERを指定すると、SQLの名前解決および権限チェックは、現在のユーザー(実行者)が実行しているものとして実行されます。

詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限と実行者の権限に関する項を参照してください。

IS|AS ISまたはASを指定して、ファンクションの本体を宣言します。
PlsqlPackageSpec パッケージ仕様を指定します。型定義、カーソル宣言、変数宣言、定数宣言、例外宣言およびPL/SQLサブプログラム宣言を含めることができます。

説明

レプリケートされた環境で、CREATE PACKAGE文はレプリケートされません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の既存のアクティブ・スタンバイ・ペアでの新規PL/SQLオブジェクトの作成に関する項および既存のクラシック・レプリケーション・スキームへのPL/SQLオブジェクトの追加に関する項を参照してください。

パッケージを作成または置き換えた場合、パッケージに付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。

関連項目

『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』

CREATE PACKAGE BODY

CREATE PACKAGE BODY文は、スタンドアロン・パッケージの本体を作成します。パッケージとは、データベースに格納されている関連するプロシージャ、ファンクションおよびその他のプログラム・オブジェクトのカプセル化されたコレクションのことです。パッケージ仕様でこれらのオブジェクトを宣言します。パッケージ本体でこれらのオブジェクトを定義します。

必要な権限

CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)。

SQL構文

CREATE [OR REPLACE] PACKAGE BODY [Owner.]PackageBody 
      {IS|AS} plsql_package_body

パラメータ

パラメータ 説明
OR REPLACE パッケージ本体がすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用して、パッケージを削除および再作成せずに既存のパッケージの本体を変更します。パッケージ本体を変更すると、そのパッケージ本体はTimesTenで再コンパイルされます。
PackageBody パッケージ本体の名前。
IS|AS ISまたはASを指定して、ファンクションの本体を宣言します。
plsql_package_body PL/SQLサブプログラムで構成されるパッケージ本体を指定します。

説明

レプリケートされた環境で、CREATE PACKAGE BODY文はレプリケートされません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の既存のアクティブ・スタンバイ・ペアでの新規PL/SQLオブジェクトの作成に関する項および既存のクラシック・レプリケーション・スキームへのPL/SQLオブジェクトの追加に関する項を参照してください。

パッケージ本体を作成または置き換えた場合、パッケージ本体に付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。

関連項目


『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』

CREATE PROCEDURE

CREATE PROCEDURE文は、スタンドアロンのストアド・プロシージャを作成します。

必要な権限

CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)。

SQL構文

CREATE [OR REPLACE] PROCEDURE [Owner.]ProcedureName 
     [(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])]
     [InvokerRightsClause] [DETERMINISTIC]
     {IS|AS} plsql_procedure_body

InvokerRightsClauseの構文は、次のとおりです。

AUTHID {CURRENT_USER|DEFINER}

InvokerRightsClauseまたはDETERMINISTICは任意の順序で指定できます。

パラメータ

パラメータ 説明
OR REPLACE プロシージャがすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用して、プロシージャを削除および再作成せずに既存のプロシージャの定義を変更します。プロシージャを再作成すると、そのプロシージャはTimesTenで再コンパイルされます。
ProcedureName プロシージャの名前。
arguments 引数またはパラメータの名前。プロシージャには0以上のパラメータを指定できます。パラメータを指定する場合は、パラメータのデータ型を指定する必要があります。データ型はPL/SQLデータ型である必要があります。

PL/SQLデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』の第3章「PL/SQLデータ型」を参照してください。

[IN | OUT | IN OUT] パラメータのモード。

INは読取り専用パラメータです。パラメータの値をプロシージャに渡すことはできますが、プロシージャはパラメータの値をプロシージャ外に渡したり、コール側PL/SQLブロックに戻したりすることはできません。パラメータの値は変更できません。

OUTは書込み専用パラメータです。値をプロシージャからコール側PL/SQLブロックに戻すには、OUTパラメータを使用します。パラメータに値を割り当てることができます。

IN OUTは読取り/書込みパラメータです。値をプロシージャに渡し、コール側プログラムに戻すことができます(元の変更されていない値またはプロシージャ内で設定された新しい値)。

INがデフォルトです。

NOCOPY 可能なかぎり迅速にパラメータを渡すようにTimesTenに指示するには、NOCOPYを指定します。レコード、索引付き表、OUTまたはIN OUTパラメータへのVARRAYなどの大きな値を渡す場合に、パフォーマンスを向上できます。INパラメータでは、常にNOCOPYが渡されます。

詳細は、『Oracle Database PL/SQL言語リファレンス』のNOCOPYに関する項を参照してください。

DEFAULT expr パラメータのDEFAULT値を指定するには、この句を使用します。キーワードDEFAULTのかわりに:=を指定できます。
InvokerRightsClause PL/SQLファンクションまたはプロシージャ内のSQL文が定義者権限で実行されるか実行者権限で実行されるかを指定できます。AUTHIDの設定は、実行時にPL/SQLプロシージャまたはファンクションによって発行されるSQL文の名前解決および権限チェックに次のように影響を与えます。
  • DEFINERを指定すると、SQLの名前解決および権限チェックは、プロシージャまたはファンクションの所有者(定義者、つまりプロシージャまたはファンクションがあるスキーマの所有者)が実行しているものとして実行されます。DEFINERがデフォルトです。

  • CURRENT_USERを指定すると、SQLの名前解決および権限チェックは、現在のユーザー(実行者)が実行しているものとして実行されます。

詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限と実行者の権限に関する項を参照してください。

DETERMINISTIC パラメータに同じ値を指定してプロシージャをコールした場合に常に同じ結果値を戻すように指定するには、DETERMINISTICを指定します。
IS|AS ISまたはASを指定して、プロシージャの本体を宣言します。
plsql_procedure_body プロシージャの本体を指定します。

制限

次の句はTimesTenではサポートされません。

  • call_spec

  • AS EXTERNAL

レプリケートされた環境で、CREATE PROCEDURE文はレプリケートされません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の既存のアクティブ・スタンバイ・ペアでの新規PL/SQLオブジェクトの作成に関する項および既存のクラシック・レプリケーション・スキームへのPL/SQLオブジェクトの追加に関する項を参照してください。

説明

  • PL/SQLプロシージャのネームスペースは、TimesTen組込みプロシージャとは異なります。PL/SQLプロシージャは、TimesTen組込みプロシージャと同じ名前で作成できます。

  • プロシージャを作成または置き換えた場合、プロシージャに付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。

プロシージャquery_empを作成して、従業員に関する情報を取得します。employee_id 171をプロシージャに渡し、2つのOUTパラメータに対してlast_nameおよびsalaryを取得します。

Command> CREATE OR REPLACE PROCEDURE query_emp
       >           (p_id IN employees.employee_id%TYPE,
       >            p_name  OUT employees.last_name%TYPE,
       >            p_salary OUT employees.salary%TYPE) IS
       >         BEGIN
       >           SELECT last_name, salary INTO p_name, p_salary
       >           FROM employees
       >           WHERE employee_id = p_id;
       >         END query_emp;
       >         /
 
Procedure created.

関連項目


『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』

CREATE REPLICATION

CREATE REPLICATION文は、次の処理を実行します。

  • 関連するデータベースにクラシック・レプリケーション・スキームを定義します。

  • 実行するデータベースのレプリケーション・システム表に、指定した構成を組み込みます。

  • 通常は、1つ以上のレプリケーション要素の指定、および0(ゼロ)以上のSTOREの指定が含まれています。

TimesTen SQLによるレプリケーションの構成では、クラシック・レプリケーションをプログラム的な方法で構成できます。この構成は、C、C++またはJavaコードに埋め込むことができます。レプリケーションをローカルで構成したり、クライアント/サーバーを使用してリモート・システムから構成できます。

また、サポートされているSQL文ではカバーされていない処理に対応する場合は、ttRepAdminユーティリティを使用する必要があります。ttRepAdminを使用すると、レプリケーションの状態の変更、データベースの複製、レプリケーション構成の一覧表示およびレプリケーション状態の表示を実行できます。

必要な権限

ADMIN

定義

レプリケーション要素は、TimesTenがデータベース間で同期を取るエンティティです。レプリケーション要素は、表全体またはデータベースです。データベースには、ほとんどのタイプの表およびキャッシュ・グループを含めることができます。指定した表およびキャッシュ・グループのみを含めるか、または指定した表およびキャッシュ・グループを除くすべての表を含めることができます。一時表またはビュー(マテリアライズドか非マテリアライズドかは関係ありません)を含めることはできません。

レプリケーション・スキームは、レプリケーション要素および要素のコピーを管理するデータベースのセットです。

クラシック・レプリケーションのSQL構成の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のクラシック・レプリケーション・スキームの定義に関する説明を参照してください。

SQL構文

CREATE REPLICATION [Owner.]ReplicationSchemeName
{ ELEMENT ElementName
  { DATASTORE | { TABLE [Owner.]TableName [CheckConflicts]} | 
       SEQUENCE [Owner.]SequenceName}
     { MASTER | PROPAGATOR } FullStoreName
     [TRANSMIT { NONDURABLE | DURABLE }]
     { SUBSCRIBER FullStoreName [,...]
        [ReturnServiceAttribute] } [,...] }
     [...]
     [{INCLUDE | EXCLUDE}
          {TABLE [[Owner.]TableName[,...]] |
           CACHE GROUP [[Owner.]CacheGroupName[,...]] | 
           SEQUENCE [[Owner.]SequenceName[,...]} [,...]] 
[ STORE FullStoreName [StoreAttribute [... ]]] [...]
[ NetworkOperation[...]]

CheckConflictsの構文については、「CHECK CONFLICTS」を参照してください。

ReturnServiceAttributeの構文は、次のとおりです。

{ RETURN RECEIPT [BY REQUEST] |
  RETURN TWOSAFE [BY REQUEST] |
  NO RETURN }

StoreAttributeの構文は、次のとおりです。

  DISABLE RETURN {SUBSCRIBER | ALL} NumFailures 
  RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED 
  DURABLE COMMIT {ON | OFF}
  RESUME RETURN Milliseconds 
  LOCAL COMMIT ACTION {NO ACTION | COMMIT} 
  RETURN WAIT TIME Seconds 
  COMPRESS TRAFFIC {ON | OFF}
  PORT PortNumber 
  TIMEOUT Seconds 
  FAILTHRESHOLD Value 
  CONFLICT REPORTING SUSPEND AT Value 
  CONFLICT REPORTING RESUME AT Value 
  TABLE DEFINITION CHECKING {RELAXED|EXACT}

NetworkOperationの構文は、次のとおりです。

ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
  { { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost }
      PRIORITY Priority } [...]

パラメータ

パラメータ 説明
[Owner.]ReplicationSchemeName 新しいクラシック・レプリケーション・スキームに割り当てる名前です。クラシック・レプリケーション・スキームは、他のすべてのデータベース・オブジェクトとは別の一意の名前である必要があります。
CheckConflicts 双方向にレプリケートされたデータベースへの同時書込みで、レプリケーションの競合をチェックします。「CHECK CONFLICTS」を参照してください。
COMPRESS TRAFFIC {ON | OFF} レプリケートされた通信量を圧縮して、ネットワークの帯域幅の量を削減します。ONは、STOREで定義されたデータベースに対してレプリケートされた通信量をすべて圧縮するように指定します。OFF(デフォルト)は、通信量を圧縮しないように指定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケートされた通信量の圧縮に関する説明を参照してください。
CONFLICT REPORTING SUSPEND AT Value 競合解消のレポートを一時停止します。

Valueは、負でない整数です。デフォルトは0(一時停止なし)です。競合のレポートは、競合の割合がValueを超えると一時的に停止されます。Valueを0に設定すると、競合のレポートの一時停止が無効になります。

この句は、表レベルのレプリケーションで有効です。

CONFLICT REPORTING RESUME AT Value 競合解消のレポートを再開します。

Valueは、負でない整数です。競合のレポートは、競合の割合がValueを下回ると再開されます。デフォルトは1です。

この句は、表レベルのレプリケーションで有効です。

DATASTORE データベース全体を要素として定義します。この種類の要素は、同一または異なるレプリケーション・スキームでTABLE型の要素が構成されていないマスター・データベースに対してのみ定義できます。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。
{INCLUDE|EXCLUDE}

{[TABLE[Owner.]TableName [,...]]|

CACHE GROUP

[[Owner.]CacheGroupName [,...]]|

SEQUENCE

[[Owner.]SequenceName[,...]]} [,...]

INCLUDEは、指定された表、順序またはキャッシュ・グループのみをDATASTORE要素に含めます。INCLUDE句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。

EXCLUDEは、指定された表、順序およびキャッシュ・グループを除外して、すべての表、順序およびキャッシュ・グループをDATASTORE要素に含めます。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

DISABLE RETURN {SUBSCRIBER|ALL} NumFailures NumFailuresで指定されているタイムアウト回数を経過した後、RETURNサービスのブロッキングを無効にするようにRETURNサービス障害ポリシーを設定します。SUBSCRIBERを選択すると、レプリケートされた更新を、指定されているタイムアウト期間内に確認できなかったサブスクライバのみにこのポリシーが適用されます。ALLを選択すると、いずれかのサブスクライバから応答がなかった場合、すべてのサブスクライバにこのポリシーが適用されます。この障害ポリシーは、RETURN RECEIPTまたはRETURN TWOSAFEサービスのいずれかで指定できます。

DISABLE RETURNが指定され、RESUME RETURNが指定されていない場合、データベースのレプリケーション・エージェントが再起動されるまでRETURNサービスはオフのままです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

DURABLE COMMIT {ON|OFF} DurableCommits一般接続属性設定を上書きします。DURABLE COMMIT ONは、レプリケーション・エージェントが実行中か停止しているかに関係なく、永続コミットを有効にします。
ELEMENT ElementName TimesTenがデータベース間で同期を取るエンティティです。レプリケーション要素として、TimesTenでは、データベース全体(DATASTORE)および表全体(TABLE)がサポートされています。

ElementNameは、レプリケーション要素に指定される名前です。TABLE要素のElementNameの長さは、最大30文字です。DATASTORE要素のElementNameは、他のDATASTORE要素名について、最初の20文字以内が一意である必要があります。ElementNameは、クラシック・レプリケーション・スキーム内で一意である必要があります。また、同じ要素に対して2つの要素記述を定義することはできません。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。

FAILTHRESHOLD Value サブスクライバ・データベースのために累積できるログ・ファイルの数。この値を超えると、サブスクライバはFailedの状態に設定されます。0を指定すると、この上限は設定されません。これがデフォルトです。

『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のトランザクション・ログ障害しきい値の設定に関する説明を参照してください。

FullStoreName 次のいずれかとして指定されたデータベースです。
  • SELF

  • データベース・ファイル名の接頭辞

たとえば、データベースのパスがdirectory/subdirectory/data.ds0の場合、使用するデータベース名はdataになります。

この名前は、DSNの記述のDataStore属性で指定されるデータベース・ファイル名で、オプションでホストIDを次の書式で指定できます。

DataStoreName [ON Host]

Hostは、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のネットワークの構成に関する項で説明されているように、IPアドレスか、または1つ以上のIPアドレスに割り当てられたリテラル・ホスト名です。ホスト名に特殊文字が含まれている場合は、二重引用符で囲む必要があります。たとえば、"MyHost-500"のようになります。ホスト名は30文字以下で指定します。

LOCAL COMMIT ACTION {NO ACTION | COMMIT} タイムアウト・イベントのRETURN TWOSAFEトランザクションで実行されるデフォルトのアクションを指定します。

注意: この属性は、RETURN TWOSAFEまたはRETURN TWOSAFE BY REQUEST属性がSUBSCRIBER句で設定されている場合にのみ有効です。

NO ACTION: タイムアウト時、コミット関数はアプリケーションに戻り、トランザクションをコミット・コールに入ったときと同じ状態のままにしますが、レプリケートされた表をアプリケーションが更新できない場合を除きます。アプリケーションはコミットのみを再発行できます。トランザクションはロールバックできません。これがデフォルトです。

COMMIT: タイムアウト時、コミット関数はCOMMITを実行して、トランザクションをローカルに終了しようとします。同じトランザクション上でこれ以上の処理を行うことはできません。

この設定は、localActionパラメータを指定してttRepSyncSetプロシージャをコールすることで、特定のトランザクションに対して無効にすることができます。

MASTER FullStoreName アプリケーションで特定の要素が更新されるデータベース。更新はMASTERデータベースによってSUBSCRIBERデータベースに送信されます。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。
NO RETURN RETURNサービスを使用しないように指定します。これがデフォルトです。

RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

PORT PortNumber データベースのレプリケーション・エージェントが接続をリスニングするTCP/IPポート番号です。指定しない場合は、レプリケーション・エージェントによってポート番号が自動的に割り当てられます。
PROPAGATOR FullStoreName レプリケートされた更新を受け取って他のデータベースに渡すデータベース。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。
RESUME RETURN Milliseconds DISABLE RETURNによってRETURNサービスのブロッキングが無効になった場合、この属性によって、RETURNサービスのブロッキングを再度有効にするタイミングに関するポリシーを設定します。RETURNサービスのブロッキングは、障害が発生したサブスクライバが、Millisecondsで指定された時間よりも短い間隔でレプリケートされた更新を確認するとすぐに再度有効になります。

DISABLE RETURNが指定され、RESUME RETURNが指定されていない場合、データベースのレプリケーション・エージェントが再起動されるまでRETURNサービスはオフのままです。

RETURN RECEIPT [BY REQUEST] RETURN RECEIPTサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションを受信するまでブロックされます。

RETURN RECEIPTにより、すべてのトランザクションにサービスが適用されます。RETURN REQUEST BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN SERVICES {ON|OFF} WHEN [REPLICATION] STOPPED レプリケーションが無効になっている場合のRETURNサービスのオンまたはオフを設定します。

OFFは、レプリケーション無効時にRETURNサービスを無効する設定であり、RETURN RECEIPTサービスのデフォルトです。ONは、レプリケーション無効時にもRETURNサービスを有効のままにできる設定であり、RETURN TWOSAFEサービスのデフォルトです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

RETURN TWOSAFE [BY REQUEST] RETURN TWOSAFEサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションをコミットするまでブロックされます。

注意: このサービスは、要素がDATASTOREと定義される場合の双方向レプリケーション・スキームでのみ使用できます。

RETURN TWOSAFEを指定すると、すべてのトランザクションにサービスが適用されます。RETURN TWOSAFE BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN WAIT TIME Seconds RETURNサービスの応答を待機する秒数を指定します。デフォルト値は10秒です。値が0(ゼロ)の場合は、タイムアウトがないことを意味します。returnWaitパラメータを設定してアプリケーションからttRepSyncSetプロシージャをコールすることで、このタイムアウト設定を無効にすることができます。
SEQUENCE [Owner.]SequenceName [Owner.]SequenceNameによって要素として指定された順序を定義します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。
STORE FullStoreName 指定されたデータベースの属性を定義します。属性には、PORTTIMEOUTおよびFAILTHRESHOLDがあります。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。
SUBSCRIBER FullStoreName MASTERデータベースから更新を受け取るデータベース。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。
TABLE [Owner.]TableName [Owner.]TableNameによって要素として指定された表を定義します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。
TIMEOUT Seconds レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大時間(秒)。デフォルトは120秒です。

注意: リモート・レプリケーション・エージェントからの応答の遅延の原因となる大規模なトランザクションの場合、エージェントは、トランザクションのサイズに基づいて、タイムアウトをスケーリングします。TIMEOUTを60秒以下に設定した場合、このスケーリングは無効になります。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のリモート・レプリケーション・エージェントからの応答のタイムアウトの待機の設定に関する項も参照してください。

TRANSMIT {DURABLE | NONDURABLE} コミットされたトランザクション群をサブスクライバに転送する前に、マスターのログをディスクにフラッシュするかどうかを指定します。

TRANSMIT NONDURABLEは、マスターのログ内のレコードがサブスクライバに転送される前にディスクにフラッシュされないように指定します。この設定は、指定された要素がDATASTOREである場合にのみ使用できます。この設定は、RETURN TWOSAFEトランザクションのデフォルト値です。

TRANSMIT DURABLEは、サブスクライバに転送される前にレコードがディスクにフラッシュされるように指定します。この設定は、非同期およびRETURN RECEIPTトランザクションのデフォルト値です。

注意: TRANSMIT DURABLEは、RETURN TWOSAFEトランザクションに影響を与えません。

注意: アクティブ・スタンバイ・ペアに対してTRANSMIT DURABLEを設定することはできません。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のDATASTORE要素での送信永続性の設定に関する説明およびTRANSMIT NONDURABLEによるマスター・データベース全体のレプリケートに関する説明を参照してください。

TABLE DEFINITION CHECKING {EXACT|RELAXED} サブスクライバで実行される表定義チェックの種類を指定します。
  • EXACT: マスターおよびサブスクライバで表が一致している必要があります。

  • RELAXED: 表には同じキー定義、列の数および列のデータ型が必要です。

デフォルトはRELAXEDです。

注意: TABLE DEFINITION CHECKING EXACTを使用している場合、データベースを移行するにはttMigrate -exactUpgradeを使用します。TABLE DEFINITION CHECKING RELAXEDを使用している場合、データベースを移行するにはttMigrate -relaxedUpgradeを使用します。

ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName NetworkOperation句を示します。指定されている場合、各サブスクライバ・ストアへのすべてのアウトバウンド接続にマスター・ストアが使用するネットワーク・インタフェースを制御できます。

複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost MasterHostおよびSubscriberHostは、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。

句は複数回指定できます。

PRIORITY Priority 1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。

NetworkOperation句の構文で必須です。MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost句の後ろに記述します。


CHECK CONFLICTS

構文

CHECK CONFLICTSの構文は、次のとおりです。

{NO CHECK |
CHECK CONFLICTS BY ROW TIMESTAMP
      COLUMN ColumnName
      [ UPDATE BY { SYSTEM | USER } ]
      [ ON EXCEPTION { ROLLBACK [ WORK ] | NO ACTION } ]
      [ {REPORT TO 'FileName'
             [ FORMAT { XML | STANDARD } ] | NO REPORT
      } ]
}

注意:

CHECK CONFLICT句は、TABLE型の要素に対してのみ使用できます。

パラメータ

CREATE REPLICATIONまたはALTER REPLICATION文のCHECK CONFLICTS句には、次のパラメータがあります。

パラメータ 説明
CHECK CONFLICTS BY ROW TIMESTAMP すべての更新競合と一意性競合の検出を指定します。競合はON EXCEPTIONパラメータで指定された方法で解消されます。

DELETE処理とUPDATE処理の競合についても検出します。

COLUMN ColumnName レプリケートされた表の列を使用してタイムスタンプを比較します。表はELEMENTの記述のTableNameで指定されます。

ColumnNameはNULL値可能なBINARY(8)型の列で、行が最後に更新されたタイムスタンプの格納に使用されます。TimesTenでは、格納された値よりも小さいタイムスタンプ値を持つ行の更新要求が拒否されます。指定されたColumnNameは、マスター・データベースとサブスクライバ・データベース両方のレプリケートされた表に存在している必要があります。

NO CHECK 指定された要素に対する競合解消を行わないように指定します。
UPDATE BY {SYSTEM | USER} タイムスタンプ値をTimesTen(SYSTEM)またはアプリケーション(USER)のどちらで管理するかを指定します。マスター・データベースおよびサブスクライバ・データベースのレプリケートされた表は、同じUPDATE BY指定を使用する必要があります。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のシステム・タイムスタンプ列メンテナンスの有効化に関する説明およびユーザー・タイムスタンプ列メンテナンスの有効化に関する説明を参照してください。デフォルト値は、UPDATE BY SYSTEMです。
ON EXCEPTION {ROLLBACK[WORK |NO ACTION} 検出された競合の解消方法を指定します。ROW TIMESTAMP競合の検出には、次の解消オプションがあります。
  • ROLLBACK [WORK]: 競合するアクションを含むトランザクションを強制終了します。

  • NO ACTION: 競合するアクション(UPDATEINSERTまたはDELETE)を実行せずに、トランザクションを完了します。

デフォルトはON EXCEPTION ROLLBACK [WORK]です。

REPORT TO 'FileName' タイムスタンプ比較に失敗した更新を記録するファイルを指定します。FileNameは、1,000文字以下のSQL文字列です。(SQL文字列リテラルは、空白を含む任意の順序の文字が含まれた一重引用符付き文字列です。)複数の表の失敗した更新を記録するために同じファイルを使用できます。
[FORMAT {XML|STANDARD}] オプションで、要素の競合レポートの形式を指定します。デフォルトの形式はSTANDARDです。
NO REPORT 失敗したタイムスタンプの比較を記録しないように指定します。

説明

  • 同じホスト上のすべてのデータベース名は、各TimesTenインスタンスの各クラシック・レプリケーション・スキームについて一意である必要があります。

  • レプリケーション要素の更新(通常のアプリケーション・トランザクションによる)は、MASTERデータベースを使用してのみ可能です。PROPAGATORおよびSUBSCRIBERデータベースは読取り専用です。

  • 複数のデータベースで同じ表を更新できるクラシック・レプリケーション・スキームを定義する場合は、行を更新する際に競合を回避する方法の推奨事項について、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーションの競合解消に関する説明を参照してください。

  • SELFは、関連するデータベースがすべてローカルであるクラシック・レプリケーション・スキーム用です。本番環境(スクリプトで各データベースのホスト名を省略しないで記述すると、関連する各データベースで使用できる)では、分散クラシック・レプリケーション・スキームに対してSELFを使用しないでください。

  • 指定したSTOREの各属性は一度だけ指定するか、または何も指定しません。

  • 単一のクラシック・レプリケーション・スキームのデータベースのPORTを指定すると、すべてのクラシック・レプリケーション・スキームに対して指定されます。その他すべての接続属性は、コマンドで指定したクラシック・レプリケーション・スキームによって異なります。

  • レプリケーション・スキームでは、DataStoreNameは、常にTimesTenデータベースのチェックポイント・ファイル名の接頭辞になります。チェックポイント処理によってディスクに保存される、接尾辞.ds0.ds1のファイルがチェックポイント・ファイルです。

  • デフォルト値NOT INLINE VARCHARが指定されている行がレプリケートされる場合、受信者側のノードのデフォルト値が送信者側のノードのデフォルト値と異なる場合にのみ、受信者はデフォルト値を指すかわりに、各行に対してこの値のコピーを作成します。

  • レプリケートされた表でタイムスタンプ比較を使用するには、NULL値可能なBINARY(8)型の列を指定して、タイムスタンプ値を保持する必要があります。タイムスタンプ列は、表の作成時に定義します。ALTER TABLE文でタイムスタンプ列を追加することはできません。また、タイムスタンプ列を主キーまたは索引に含めることはできません。

  • XMLのレポート形式を指定した場合、2つのXMLドキュメントが生成されます。

    • FileName.xml: このファイルには、レポート用のDTDおよびレポートのルート・ノードが含まれます。このファイルには、ドキュメント定義とINCLUDEディレクティブが含まれます。

    • FileName.include: このファイルはFileName.xmlに含まれており、実際の競合がすべて含まれます。

    • FileName.includeファイルは切捨て可能です。FileName.xmlファイルの切捨ては行わないでください。

    • 各競合の例を含むXML書式の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のXMLファイルへの競合のレポートに関する説明を参照してください。

  • 要素のレポート形式を指定した後でその要素を削除しても、対応するレポート・ファイルは削除されません。

  • 競合解消のレポートを一時停止する最高水位標のしきい値を指定するには、CONFLICT REPORTING SUSPEND AT句を使用します。1秒当たりの競合数が指定した最高水位標のしきい値を超えると、競合解消のレポート(構成済で、レポート・ファイルによってレポートされる場合)およびSNMPが一時的に停止され、一時停止を知らせるSNMPトラップが発行されます。

  • 競合解消のレポートを再開する最低水位標のしきい値を指定するには、CONFLICT REPORTING RESUME AT句を使用します。競合の割合が最低水位標のしきい値を下回ると、競合解消のレポートが再開されます。競合解消の再開を知らせるSNMPトラップが発行されます。このトラップでは、競合解消の一時停止中にレポートされなかった競合の数が通知されます。

  • レプリケーション・エージェントによって競合のレポートが一時停止されている状態または一時停止されていない状態は、ローカル・レプリケーション・エージェントとピア・エージェントが停止および再起動された後は維持されません。

  • キャッシュ・グループをレプリケートする場合にCREATE REPLICATION文を使用しないでください。アクティブ・スタンバイ・ペアのみがキャッシュ・グループをレプリケートできます。CREATE ACTIVE STANDBY PAIR文を参照してください。

repl.tabの内容をmasterdsから2つのサブスクライバsubscriber1dsおよびsubscriber2dsにレプリケートします。

CREATE REPLICATION repl.twosubscribers
       ELEMENT e TABLE repl.tab
         MASTER masterds ON "server1"
         SUBSCRIBER subscriber1ds ON "server2",
                    subscriber2ds ON "server3";

masterdsデータベース全体をサブスクライバsubscriber1dsにレプリケートします。FAILTHRESHOLDを指定すると、subscriber1dsが失敗したとみなされる前に、最大10のログ・ファイルをmasterdsに蓄積します。

CREATE REPLICATION repl.wholestore
  ELEMENT e DATASTORE
     MASTER masterds ON "server1"
     SUBSCRIBER subscriber1ds ON "server2"
  STORE masterds FAILTHRESHOLD 10;

westdsおよびeastdsデータベース全体を双方向にレプリケートして、RETURN TWOSAFEサービスを有効にします。

CREATE REPLICATION repl.biwholestore
  ELEMENT e1 DATASTORE
     MASTER westds ON "westcoast"
     SUBSCRIBER eastds ON "eastcoast"
        RETURN TWOSAFE
  ELEMENT e2 DATASTORE
     MASTER eastds ON "eastcoast"
     SUBSCRIBER westds ON "westcoast"
        RETURN TWOSAFE;

subscriber1dsサブスクライバへの選択トランザクション更新に対して、RETURN RECEIPTサービスを有効にします。

CREATE REPLICATION repl.twosubscribers
  ELEMENT e TABLE repl.tab
     MASTER masterds ON "server1"
     SUBSCRIBER subscriber1ds ON "server2"
        RETURN RECEIPT BY REQUEST
     SUBSCRIBER subscriber2ds ON "server3";

customerswest表の内容をwestデータベースから、customerseast表の内容をeastデータベースから、ROUNDUPデータベースにレプリケートします。すべてのトランザクションに対してRETURN RECEIPTサービスを有効にします。

CREATE REPLICATION r
       ELEMENT west TABLE customerswest
         MASTER west ON "serverwest"
         SUBSCRIBER roundup ON "serverroundup"
            RETURN RECEIPT
       ELEMENT east TABLE customerseast
         MASTER east ON "servereast"
         SUBSCRIBER roundup ON "serverroundup"
            RETURN RECEIPT;

repl.tab表の内容をcentraldsデータベースからpropdsデータベースにレプリケートし、これにより、backup1dsおよびbackup2dsデータベースに変更が伝播されます。

CREATE REPLICATION repl.propagator
       ELEMENT a TABLE repl.tab
         MASTER centralds ON "finance"
         SUBSCRIBER proprds ON "nethandler"
       ELEMENT b TABLE repl.tab
         PROPAGATOR proprds ON "nethandler"
         SUBSCRIBER backup1ds ON "backupsystem1"
                    bakcup2ds ON "backupsystem2";

eastdswestdsデータベースの間で、repl.accounts表の内容を双方向でレプリケートします。各データベースは、repl.accounts表に対してマスターおよびサブスクライバの両方になります。

repl.accounts表がeastdswestdsデータベースのいずれかで更新されるため、ここにはタイムスタンプ列(tstamp)が含まれます。CHECK CONFLICTS句により、2つのデータベース間で発生した更新競合を検出するための自動タイムスタンプ比較が開始されます。比較が失敗すると、古いタイムスタンプを持つ更新が含まれるトランザクションの全体がロールバック(破棄)されます。

CREATE REPLICATION repl.r1
ELEMENT elem_accounts_1 TABLE repl.accounts
   CHECK CONFLICTS BY ROW TIMESTAMP
      COLUMN tstamp
      UPDATE BY SYSTEM
      ON EXCEPTION ROLLBACK
   MASTER westds ON "westcoast"
   SUBSCRIBER eastds ON "eastcoast"
ELEMENT elem_accounts_2 TABLE repl.accounts
   CHECK CONFLICTS BY ROW TIMESTAMP
      COLUMN tstamp
      UPDATE BY SYSTEM
      ON EXCEPTION ROLLBACK
   MASTER eastds ON "eastcoast"
   SUBSCRIBER westds ON "westcoast";

RETURN TWOSAFEサービスを使用し、activedsでTCP/IPポート40000、backupdsでTCP/IPポート40001を使用して、repl.accounts表の内容をactivedsデータベースからbackupdsデータベースにレプリケートします。activedsでのトランザクションはできるかぎりコミットする必要があるため、レプリケーションを構成し、LOCAL COMMIT ACTIONを使用してレプリケーション・タイムアウトの後でもトランザクションがコミットされるようにし、レプリケーションの停止時はRETURN TWOSAFEサービスが無効になるようにします。backupdsデータベースへの接続が割り込まれた場合にアプリケーションでの大幅な遅延を回避するために、5個のトランザクションがタイムアウトした後にRETURNサービスが無効になるように構成しますが、さらにbackupdsデータベースのレプリケーション・エージェントが100ミリ秒未満で応答したときはRETURNサービスを再度有効にするように構成します。最後に、データベース間の帯域幅は制限されるため、activedsデータベースからレプリケートされるときにデータが圧縮されるようにレプリケーションを構成します。

CREATE REPLICATION repl.r
ELEMENT elem_accounts_1 TABLE repl.accounts
   MASTER activeds ON "active"
   SUBSCRIBER backupds ON "backup"
      RETURN TWOSAFE
ELEMENT elem_accounts_2 TABLE repl.accounts
   MASTER activeds ON "active"
   SUBSCRIBER backupds ON "backup"
      RETURN TWOSAFE
STORE activeds ON "active"
   PORT 40000
   LOCAL COMMIT ACTION COMMIT
   RETURN SERVICES OFF WHEN REPLICATION STOPPED
   DISABLE RETURN SUBSCRIBER 5
   RESUME RETURN 100
   COMPRESS TRAFFIC ON
STORE backupds ON "backup"
   PORT 40001;

表レベルのレプリケーションで競合のレポートを一時停止する句と競合のレポートを再開する句の例を示します。これらの句は、データベース・レプリケーションではなく、表レベルのレプリケーションに対して使用します。repschemesコマンドを発行して、レプリケーション・スキームが作成されていることを表示します。

Command> CREATE TABLE repl.accounts (tstamp BINARY (8) NOT NULL 
PRIMARY KEY, tstamp1 BINARY (8));
Command> CREATE REPLICATION repl.r2
> ELEMENT elem_accounts_1 TABLE repl.accounts
> CHECK CONFLICTS BY ROW TIMESTAMP
> COLUMN tstamp1
> UPDATE BY SYSTEM
> ON EXCEPTION ROLLBACK WORK
> MASTER westds ON "west1"
> SUBSCRIBER eastds ON "east1"
> ELEMENT elem_accounts_2 TABLE repl.accounts
> CHECK CONFLICTS BY ROW TIMESTAMP 
> COLUMN tstamp1
> UPDATE BY SYSTEM 
> ON EXCEPTION ROLLBACK WORK 
> MASTER eastds ON "east1"
> SUBSCRIBER westds ON "west1"
> STORE westds
> CONFLICT REPORTING SUSPEND AT 20
> CONFLICT REPORTING RESUME AT 10;
Command> REPSCHEMES;

Replication Scheme REPL.R2:

  Element: ELEM_ACCOUNTS_1
  Type: Table REPL.ACCOUNTS
  Conflict Check Column: TSTAMP1
  Conflict Exception Action: Rollback Work
  Conflict Timestamp Update: System
  Conflict Report File: (none)
  Master Store: WESTDS on WEST1 Transmit Durable
  Subscriber Store: EASTDS on EAST1

  Element: ELEM_ACCOUNTS_2
  Type: Table REPL.ACCOUNTS
  Conflict Check Column: TSTAMP1
  Conflict Exception Action: Rollback Work
  Conflict Timestamp Update: System
  Conflict Report File: (none)
  Master Store: EASTDS on EAST1 Transmit Durable
  Subscriber Store: WESTDS on WEST1

  Store: EASTDS on EAST1
    Port: (auto)
    Log Fail Threshold: (none)
    Retry Timeout: 120 seconds
    Compress Traffic: Disabled

  Store: WESTDS on WEST1
    Port: (auto)
    Log Fail Threshold: (none)
    Retry Timeout: 120 seconds
    Compress Traffic: Disabled
    Conflict Reporting Suspend: 20
    Conflict Reporting Resume: 10

1 replication scheme found.

2つのMASTERIP句とSUBSCRIBERIP句を使用したNetworkOperation句の例を示します。

CREATE REPLICATION r ELEMENT e DATASTORE
MASTER rep1 SUBSCRIBER rep2 RETURN RECEIPT
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2"
    PRIORITY 1
MASTERIP "3.3.3.3" PRIORITY 2 SUBSCRIBERIP "4.4.4.4"
    PRIORITY 2;

NetworkOperation句の例を示します。送信側にはデフォルトのインタフェースを使用しますが、受信側には特定のネットワークを使用します。

CREATE REPLICATION r
ELEMENT e DATASTORE
MASTER rep1 SUBSCRIBER rep2
ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
SUBSCRIBERIP "rep2nic2" PRIORITY 1;

複数のサブスクライバを使用するNetworkOperation句の使用例を示します。

CREATE REPLICATION r ELEMENT e DATASTORE
MASTER rep1 SUBSCRIBER rep2,rep3
ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2"
    PRIORITY 1
ROUTE MASTER Rep1 ON "machine1" SUBSCRIBER Rep3 ON "machine2"
MASTERIP "3.3.3.3" PRIORITY 2 SUBSCRIBERIP "4.4.4.4";

CREATE SEQUENCE

CREATE SEQUENCE文は、この後、複数のユーザーが一意の整数を生成するために使用できる新しい順序番号ジェネレータを作成します。CREATE SEQUENCE文を使用して、順序の初期値を定義し、増分値、最大値または最小値を定義し、最小または最大に達した後も順序番号を生成し続けるかどうかを決定します。

必要な権限

CREATE SEQUENCE(所有者の場合)またはCREATE ANY SEQUENCE(非所有者の場合)。

SQL構文

CREATE SEQUENCE [Owner.]SequenceName
       [INCREMENT BY IncrementValue]
       [MINVALUE MinimumValue]
       [MAXVALUE MaximumValue]
       [CYCLE]
       [CACHE CacheValue]
       [START WITH StartValue]

パラメータ

パラメータ 説明
SEQUENCE [Owner.]SequenceName 順序番号ジェネレータの名前です。
INCREMENT BY IncrementValue 連続する数値の増分値です。この値は正または負の整数値です。0は指定できません。値が正の場合は昇順になります。負の場合は降順になります。デフォルト値は1です。降順では、範囲はMAXVALUEからMINVALUEへ変化し、昇順ではその逆になります。
MINVALUE MinimumValue 順序の最小値を指定します。デフォルトの最小値は1です。
MAXVALUE MaximumValue 昇順の場合は最大値、降順の場合は開始値です。デフォルトの最大値は(263) -1であり、これはBIGINTの最大です。
CYCLE 順序番号ジェネレータが最大値または最小値に達した後、数値の生成を続行するかどうかを指定します。デフォルトでは、順序はサイクルしません。昇順で数値が最大値に達すると、順序は始めに戻り、最小値から値を生成し続けます。降順で最小値に達すると、順序値は最大値に戻ります。CYCLEが指定されていない場合、最大/最小値に達すると順序番号ジェネレータは値の生成を停止し、エラーが返されます。
CACHE CacheValue CACHEは毎回キャッシュを行うタイミングとなる数値の範囲を示します。再起動すると、キャッシュされた未使用の値は失われます。CacheValueに1を指定した場合、順序を使用するたびにデータベースに対して更新が発生します。キャッシュ値が大きいほど、データベースへの変更およびオーバーヘッドは少なくなります。デフォルトは20です。
START WITH StartValue 生成する最初の順序番号を指定します。この句を使用して、その最小値よりも大きい値から昇順順序を開始、あるいはその最大値よりも小さい値から降順順序を開始します。StartValueには、MinimumValue以上、MaximumValue以下の値を指定する必要があります。

説明

  • CREATE SEQUENCE文のすべてのパラメータは整数値である必要があります。

  • パラメータに値を指定しない場合、TimesTenでは、1から開始し、1ずつ増加し、デフォルトの最大値を持ちサイクルしない昇順がデフォルトで作成されます。

  • TimesTenにはALTER SEQUENCE文はありません。順序を変更する場合は、DROP SEQUENCE文を使用してから、同じ名前の順序を新規作成します。たとえば、MINVALUEを変更する場合、順序を削除し、同じ名前で必要なMINVALUEを持つ順序を再度作成します。

  • ビューまたはマテリアライズド・ビューと同じ名前の順序は作成しないでください。

  • CYCLE属性が指定された順序はレプリケートできません。

  • アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVELが3以上の場合にアクティブ・データベースでCREATE SEQUENCEを実行すると、順序はレプリケーション・スキームのすべてのデータベースにレプリケートされます。順序をレプリケーション・スキームに含めるには、DDL_REPLICATION_ACTIONINCLUDEに設定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

CURRVALとNEXTVALによるSEQUENCE値の増加

SQL文でSEQUENCE値を参照するには、CURRVALNEXTVALを使用します。

  • CURRVALは、現在のセッションでNEXTVALがコールされていればその最新の値を返し、コールされていなければエラーを返します。

  • NEXTVALは、指定された増分で順序の現在値を増加させ、アクセスされた行ごとに値を返します。

順序の現在値は、接続ごとに異なります。同じデータベースに2つの同時接続がある場合、各接続は同じ順序について、最後のNEXTVAL参照により設定された独自のCURRVALを取得します。最大値に達した場合、CREATE SEQUENCECYCLEオプションの値によって、SEQUENCEはサイクルする(開始値に戻る)か、エラー文を生成します。リカバリでは、順序はロールバックされません。順序の値の範囲に幅を持たせることができますが、その場合でも各順序値は一意です。

複数のNEXTVAL参照を持つ1つのSQL文を実行する場合、TimesTenでは順序を一度だけ増加させ、すべてのNEXTVALに対して同じ値が返されます。SQL文にNEXTVALCURRVALの両方が含まれている場合は、NEXTVALが最初に実行されます。CURRVALNEXTVALは、そのSQL文では同じ値を持ちます。


注意:

NEXTVALは、アクティブ・スタンバイ・ペアのスタンバイ・ノードへの問合せでは使用できません。

NEXTVALおよびCURRVALは、次の場合に使用できます。

順序を作成します。

CREATE SEQUENCE mysequence INCREMENT BY 1 MINVALUE 2 
       MAXVALUE 1000;

この例では、tab1は表内に1行のデータを持ち、CYCLEが使用されているとします。

CREATE SEQUENCE s1 MINVALUE 2 MAXVALUE 4 CYCLE;
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 2; */
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 3; */
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 4; */

最大値に達した後、最小値から昇順でサイクルを開始します。

SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 2; */

順序を作成して順序番号を生成するには、次の文を使用します。

CREATE SEQUENCE seq INCREMENT BY 1;
INSERT INTO student VALUES (seq.NEXTVAL, 'Sally');

UPDATE SET句で順序を使用するには、次の文を使用します。

UPDATE student SET studentno = seq.NEXTVAL WHERE name = 'Sally';

問合せで順序を使用するには、次の文を使用します。

SELECT seq.CURRVAL FROM student;

関連項目

DROP SEQUENCE

CREATE SYNONYM

CREATE SYNONYM文は、データベース・オブジェクトのパブリック・シノニムまたはプライベート・シノニムを作成します。シノニムは、データベース・オブジェクトの別名です。オブジェクトは、表、ビュー、シノニム、順序、PL/SQLストアド・プロシージャ、PL/SQLファンクション、PL/SQLパッケージ、マテリアライズド・ビューまたはキャッシュ・グループです。

プライベート・シノニムは、特定のユーザーが所有し、そのユーザーのスキーマ内に存在します。プライベート・シノニムに所有者以外のユーザーがアクセスできるのは、基礎となるオブジェクトに対する適切な権限がユーザーにあり、シノニム名とともにスキーマを指定する場合のみです。

パブリック・シノニムは、基礎となるオブジェクトに対する適切な権限がユーザーにあるかぎり、すべてのユーザーがアクセスできます。

CREATE SYNONYMはDDL文です。

シノニムは、次のSQL文で使用できます。

  • DML文: SELECTDELETEINSERTUPDATEMERGE

  • 一部のDDL文: GRANTREVOKECREATE TABLE ... AS SELECTCREATE VIEW ... AS SELECTCREATE INDEXDROP INDEX

  • 一部のキャッシュ・グループ文: LOAD CACHE GROUPUNLOAD CACHE GROUPREFRESH CACHE GROUPFLUSH CACHE GROUP

必要な権限

プライベート・シノニムを作成するには、CREATE SYNONYM(所有者の場合)またはCREATE ANY SYNONYM(非所有者の場合)。

パブリック・シノニムを作成するには、CREATE PUBLIC SYNONYM

SQL構文

CREATE [OR REPLACE] [PUBLIC] SYNONYM [Owner1.]synonym FOR [Owner2.]object

パラメータ

パラメータ 説明
[OR REPLACE] シノニムがすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用すると、既存のシノニムの定義をはじめに削除しなくても、その定義を変更できます。
[PUBLIC] PUBLICを指定すると、パブリック・シノニムを作成できます。パブリック・シノニムは、すべてのユーザーがアクセスできますが、シノニムを使用するには、基礎となるオブジェクトに対する適切な権限が各ユーザーに必要です。

オブジェクトの先頭にスキーマ名が指定されていない場合のみ、オブジェクトへの参照を変換するときに、TimesTenでパブリック・シノニムが使用されます。

[Owner1.]synonym シノニムの所有者を指定します。PUBLICを指定した場合、所有者は指定できません。PUBLICOwner1の両方を省略した場合、TimesTenによって、自分のスキーマ内にシノニムが作成されます。

シノニムの名前を30バイト以内で指定します。

[Owner2.]object オブジェクトが配置される所有者を指定します。シノニムを作成する対象のオブジェクト名を指定します。objectOwner2で修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあります。Owner2およびobjectは、シノニムの作成時に存在している必要はありません。

説明

  • スキーマ・オブジェクトは、そのシノニムの作成時に存在している必要はありません。

  • TimesTen組込みプロシージャと同じ名前のパブリック・シノニムは作成しないでください。

  • シノニムを使用するには、シノニムを使用する前に、シノニムによって別名が付けられるオブジェクトのユーザーに適切な権限が付与されている必要があります。

  • プライベート・シノニムの名前は、プライベート・シノニムと同じスキーマにある表、ビュー、順序、PL/SQLパッケージ、ファンクション、プロシージャおよびキャッシュ・グループと同じにすることはできません。

  • パブリック・シノニムの名前は、プライベート・シノニムやオブジェクト名と同じにすることができます。

  • 問合せがOracle Databaseで実行される必要があるようにPassThrough属性が設定されている場合は、その問合せは変更されずにOracle Databaseに送信されます。問合せがキャッシュ・グループの表に対してシノニムを使用する場合、問合せが成功するためには、同じ名前のシノニムが対応するOracle Database表に定義されている必要があります。

  • オブジェクト名が、シノニムを使用できるDML文およびDDL文で使用される場合、オブジェクト名は次のように解決されます。

    1. 現在のスキーマ内で一致を検索します。一致が見つからない場合は、次に進みます。

    2. パブリック・シノニム名との一致を検索します。一致が見つからない場合は、次に進みます。

    3. SYSスキーマ内で一致を検索します。一致が見つからない場合は、次に進みます。

    4. オブジェクトは存在しません。

    TimesTenでは、一部のオブジェクトのパブリック・シノニムがSYSスキーマ内に作成されます。パブリック・シノニムの名前はオブジェクト名と同じです。そのため、オブジェクト名解決のステップ2と3を入れ替えても、検索結果は変わりません。

  • アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVELが2以上の場合にアクティブ・データベースでCREATE SYNONYMを実行すると、シノニムはレプリケーション・スキームのすべてのデータベースにレプリケートされます。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

ユーザーttuserとして、jobs表のシノニムを作成します。シノニムを使用して情報を取得できることを確認します。SYS.USER_SYNONYMSシステム・ビューの内容を表示します。

Command> CREATE SYNONYM synjobs FOR jobs;
Synonym created.

Command> SELECT FIRST 2 * FROM jobs;
< AC_ACCOUNT, Public Accountant, 4200, 9000 >
< AC_MGR, Accounting Manager, 8200, 16000 >
2 rows found.
Command> SELECT FIRST 2 * FROM synjobs;
< AC_ACCOUNT, Public Accountant, 4200, 9000 >
< AC_MGR, Accounting Manager, 8200, 16000 >
2 rows found.

Command> SELECT * FROM sys.user_synonyms;
< SYNJOBS, TTUSER, JOBS, <NULL> >
1 row found.

employees表のパブリック・シノニムを作成します。

Command> CREATE PUBLIC SYNONYM pubemp FOR employees;
Synonym created.

pubempがパブリック・シノニムとしてSYS.ALL_SYNONYMSシステム・ビューに表示されることを確認します。

Command> SELECT * FROM sys.all_synonyms;
< PUBLIC, TABLES, SYS, TABLES, <NULL> >
...
< TTUSER, SYNJOBS, TTUSER, JOBS, <NULL> >
< PUBLIC, PUBEMP, TTUSER, EMPLOYEES, <NULL> >
57 rows found.

terryスキーマのtab表のシノニムを作成します。シノニムにDESCRIBEを実行します。

Command> CREATE SYNONYM syntab FOR terry.tab;
Synonym created.
Command> DESCRIBE syntab;
 
Synonym TTUSER.SYNTAB:
  For Table TERRY.TAB
  Columns:
    COL1                            VARCHAR2 (10) INLINE
    COL2                            VARCHAR2 (10) INLINE

1 Synonyms found.

OR REPLACE句を使用して、employees表の別名となるように、synjobsシノニムを再定義します。synjobsにDESCRIBEを実行します。

Command> CREATE OR REPLACE synjobs FOR employees;
Synonym created.
 
Command> DESCRIBE synjobs;
 
Synonym TTUSER.SYNJOBS:
  For Table TTUSER.EMPLOYEES
  Columns:
   *EMPLOYEE_ID                     NUMBER (6) NOT NULL
    FIRST_NAME                      VARCHAR2 (20) INLINE
    LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
    EMAIL                           VARCHAR2 (25) INLINE UNIQUE NOT NULL
    PHONE_NUMBER                    VARCHAR2 (20) INLINE
    HIRE_DATE                       DATE NOT NULL
    JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
    SALARY                          NUMBER (8,2)
    COMMISSION_PCT                  NUMBER (2,2)
    MANAGER_ID                      NUMBER (6)
    DEPARTMENT_ID                   NUMBER (4)
 
1 Synonyms found.

関連項目

DROP SYNONYM

CREATE TABLE

CREATE TABLE文は、表を定義します。

必要な権限

CREATE TABLE(所有者の場合)またはCREATE ANY TABLE(非所有者の場合)。

作成された表の所有者には、REFERENCE句によって参照される表に対するREFERENCES権限が必要です。

DDL_REPLICATION_LEVEL=2以上およびDDL_REPLICATION_ACTION=INCLUDEのときに、新しい表をアクティブ・スタンバイ・ペア間でレプリケートする場合は、ADMIN権限。これらの属性によって、CREATE TABLEでは暗黙的にALTER ACTIVE STANDBY PAIR... INCLUDE TABLE文が実行されます。詳細は、「ALTER SESSION」を参照してください。

SQL構文

PRIMARY KEYを、ColumnDefinition句とPRIMARY KEY句の両方で指定することはできません。

永続表の構文は、次のとおりです。

CREATE TABLE [Owner.]TableName
(
    {{ColumnDefinition} [,...]
     [PRIMARY KEY (ColumnName [,...]) |
     [[CONSTRAINT ForeignKeyName]
        FOREIGN KEY ([ColumnName] [,...])
        REFERENCES RefTableName
            [(ColumnName [,...])] [ON DELETE CASCADE]] [...]
    }
)
[TableCompression]
[UNIQUE HASH ON (HashColumnName [,...])
    PAGES = PrimaryPages]
[AGING {LRU|
         USE ColumnName
             LIFETIME Num1 {SECOND[S] | MINUTE[S] | HOUR[S] |DAY[S]}
               [CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
       }[ON|OFF]
]
[AS SelectQuery]

グローバル一時表の構文は、次のとおりです。

CREATE GLOBAL TEMPORARY TABLE [Owner.]TableName
(
    {{ColumnDefinition} [,...]
     [PRIMARY KEY (ColumnName [,...]) |
     [[CONSTRAINT ForeignKeyName]
        FOREIGN KEY ([ColumnName] [,...])
        REFERENCES RefTableName
             [(ColumnName [,...])] [ON DELETE CASCADE]] [...]
      }
)
[UNIQUE HASH ON (HashColumnName [,...])
    PAGES = PrimaryPages]
[ON COMMIT { DELETE | PRESERVE } ROWS 
]

パラメータ

パラメータ 説明
[Owner.]TableName 新しい表に割り当てる名前です。2つの表に同じ所有者名と表名を指定することはできません。

所有者名を指定していない場合は、ログイン名が新しい表の所有者名になります。TimesTenの表の所有者は、ユーザーIDの設定またはログイン名によって決まります。Oracle Database表の所有者名は、TimesTen表の所有者名と常に一致させる必要があります。

名前作成の規則については、「基本名」を参照してください。

GLOBAL TEMPORARY 作成する表をグローバル一時表にします。一時表は永続表と類似していますが、接続で参照された場合にのみ効率的にマテリアライズされます。

グローバル一時表定義は永続的であり、すべての接続に対して表示されますが、表インスタンスは各接続に対してローカルです。表インスタンスは、表を参照するコマンドが接続に対してコンパイルされる場合に作成され、接続が切断されると削除されます。同じ一時表のすべてのインスタンスの名前は同じですが、表名と追加の接続IDに基づいて識別されます。グローバル一時表は、一時領域に割り当てられます。

グローバル一時表の内容は接続間で共有できません。各接続では、その接続の表の内容のみが表示され、一時表を参照するコンパイルされたコマンドは接続間で共有されません。

DDL_REPLICATION_LEVELが2以上の場合、グローバル一時表の作成はアクティブ・スタンバイ・ペア内でレプリケートされますが、グローバル一時表はレプリケーション・スキームに含まれません。

DATASTORE要素が指定されている場合、一時表はアクティブ・スタンバイ・ペアから自動的に除外されます。

キャッシュ・グループ表は、一時表として定義できません。

一時表の変更は、XLAで追跡できません。

一時表の操作でログ・レコードが生成されます。生成されるログの量は、永続表用よりも少なくなります。

TRUNCATE TABLEは、グローバル一時表でサポートされていません。

ローカルの一時表は、サポートされていません。

グローバル一時表にアクセスするには、オブジェクト権限は必要ありません。

グローバル一時表にはAS SelectQuery句を指定しないでください。

ColumnDefinition 表の個々の列です。各表には、列が少なくとも1つ必要です。詳細は、「列定義」を参照してください。

AS SelectQuery句を指定する場合、ColumnDefinitionはオプションです。

ColumnName 作成する表の主キーを構成する列の名前。主キーには最大16列を指定できます。外部キーの場合、ColumnNameはオプションです。外部キーに対して指定しない場合、参照されるのは親表の主キーです。

AS SelectQuery句を指定する場合、ColumnNameを指定する必要はありません。AS SelectQuery句にデータ型を指定しないでください。

PRIMARY KEY PRIMARY KEYは、表定義で一度だけ指定できます。これによって、1つ以上の列が表の主キーを構成していることを示します。主キーの内容は一意かつNOT NULLである必要があります。列には、UNIQUEと単一列PRIMARY KEYの両方を指定することはできません。
CONSTRAINT ForeignKeyName オプションのユーザー定義の名前を外部キーに指定します。ユーザーが指定しない場合は、システムによってデフォルトの名前が指定されます。
FOREIGN KEY 新しい表とRefTableNameによって識別される参照先の表の間で外部キー制約を指定します。外部キー制約で指定される列には、2つのリストがあります。

最初のリストの列は、新しい表の列であり、参照元列と呼ばれます。2番目のリストの列は、参照先の表の列であり、参照先列と呼ばれます。これら2つのリストは、長さ、精度、スケールを含めてデータ型が一致している必要があります。参照先の表には、参照先列に対する主キーまたは一意索引がすでに存在している必要があります。

参照先列の列名リストはオプションです。省略した場合、RefTableNameの1次索引が使用されます。

外部キーを宣言することにより、参照元列に範囲索引が作成されます。参照先の表またはその参照先の索引は、参照元表を削除しないかぎり削除できません。

外部キー制約によって、新しい表の各行と参照先の表の行は、参照元列の内容と参照先列の内容が同じになるように一致させる必要があります。INSERTDELETEまたはUPDATE文が制約に違反した場合、TimesTenエラー3001が返されます。

TimesTenでは、SQL-92 "NO ACTION"の更新および削除規則とON DELETE CASCADEがサポートされています。外部キー制約は遅延可能ではありません。

外部キーはグローバル一時表で定義できますが、グローバル一時表の参照のみを行うことができます。親表がCOMMIT DELETEを使用して定義されている場合は、子表にもCOMMIT DELETE属性が必要です。

外部キーは、アクティブな親表を参照できません。アクティブな親表とは、接続に対してマテリアライズされたインスタンスを持つ表のことです。

AS SelectQuery句を指定する場合は、作成する表に対して外部キーを定義できません。

[ON DELETE CASCADE] ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。
TableCompression データをより効率的に格納する、列レベルでの圧縮を定義します。列での重複する値の冗長な格納を削除し、全表スキャンを実行するSQL問合せのパフォーマンスを向上させます。詳細は、「表のインメモリー列圧縮」を参照してください。
UNIQUE UNIQUE列の各行の値が一意である必要があることを示します。
UNIQUE HASH ON 表のハッシュ索引。このパラメータは、等価条件に使用します。UNIQUE HASH ONを指定するには、主キーの定義が必要です。
HashColumnName 表に定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。

AS SelectQuery句を指定する場合は、作成する表にHashColumnNameを定義する必要があります。

PAGES = PrimaryPages 表の想定ページ数に基づいてハッシュ索引のサイズを設定します。PrimaryPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、PrimaryPagesに1000を指定します(256000/256=1000)。

PrimaryPagesの値は、0を含まない正の定数である必要があります。

PrimaryPagesの推定値が小さすぎると、パフォーマンスが悪化します。

[ON COMMIT {DELETE|PRESERVE} ROWS] グローバル一時表を作成するトランザクションがコミットされるときに、行を削除するか、または保存するかを指定するオプションの文です。この文が指定されていない場合は、一時表の行が削除されます。
[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オペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。

[AGING USE ColumnName...[ON|OFF]] 指定する場合、表の時間ベースのエージング・ポリシーを定義します。時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ONまたはOFF)および時間ベースのエージング属性を定義します。

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

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

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

エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列はNULLにはできません)。

TT_TIMESTAMPデータ型またはTT_DATEデータ型を使用してエージング列を定義できます。TT_DATEデータ型を選択する場合は、LIFETIME単位としてDAYSを指定する必要があります。

AS SelectQuery句を指定する場合は、作成する表にColumnNameを定義する必要があります。

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

LIFETIME Num1 {SECOND[S]| MINUTE[S]|HOUR[S]| DAY[S]} LIFETIMEは時間ベースのエージング属性で、必須の句です。

AGING USE ColumnName句の後にLIFETIME句を指定します。

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

Num1には、行がキャッシュに保持される時間の長さを、秒、分、時間または日数で表す正の整定数を指定します。LIFETIME値を超えた行はエージ・アウト(表から削除)されます。エージング列をTT_DATEデータ型を使用して定義する場合は、LIFETIME単位としてDAYSを指定する必要があります。

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

[CYCLE Num2 {SECOND[S] |MINUTE[S]|HOUR[S]| DAY[S]}] CYCLEは時間ベースのエージング属性で、オプションです。LIFETIME句の後にCYCLE句を指定します。

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

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

CYCLE句を指定しない場合、デフォルト値は5分です。Num2に0を指定した場合、エージング・スレッドは1秒ごとに起動します。

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

AS SelectQuery 指定されている場合、SelectQueryの結果セットの内容から新しい表が作成されます。SelectQueryで返される行が表に挿入されます。

データ型およびデータ型の長さは、SelectQueryから導出されます。

SelectQueryは、副問合せを含めることも含めないこともできる有効なSELECT文です。

SELECT動詞の後に文レベルのオプティマイザ・ヒントを指定できます。文レベルのオプティマイザ・ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。


列定義

SQL構文

ENABLEキーワードは、CREATE TABLE文で列を定義する場合にのみ使用できます。

LOB以外のすべてのデータ型について、構文は次のとおりです。

ColumnName ColumnDataType
 [DEFAULT DefaultVal]
 [[NOT] INLINE]
 [PRIMARY KEY | UNIQUE | 
 NULL [UNIQUE] | 
 NOT NULL [ENABLE] [PRIMARY KEY | UNIQUE] 
]

LOBデータ型の場合、LOB列に主キーまたは一意制約を作成できません。また、LOBデータ型は表外に格納されるため、INLINE属性を指定できません。

すべてのLOBデータ型について、構文は次のとおりです。

ColumnName ColumnDataType
 [DEFAULT DefaultVal] [[NOT] NULL [ENABLE]] |
 [[NOT] NULL [ENABLE]] [DEFAULT DefaultVal]

パラメータ

列定義には、次のパラメータがあります。

パラメータ 説明
ColumnName 新しい表の列に割り当てる名前です。表の2つの列に同じ名前を指定することはできません。1つの表の列数は最大で1000です。

AS SelectQuery句を指定する場合、ColumnNameはオプションです。列名の数は、SelectQueryの列の数と一致している必要があります。

ColumnDataType 列に格納できるデータ型です。長さを指定する必要があるデータ型もあります。指定できるデータ型の詳細は、第1章「データ型」を参照してください。

AS SelectQuery句を指定する場合は、ColumnDataTypeを指定しないでください。

DEFAULT DefaultVal INSERT文で列の値が指定されていない場合、デフォルト値DefaultValを列に挿入します。指定されたデフォルト値は、列のデータ型と互換性がある型である必要があります。デフォルト値には、関連付けられた列で許可されている任意のデータ型を指定できます。ROWIDデータ型について、または読取り専用キャッシュ・グループの列についてデフォルト値を割り当てることはできません。また、DEFAULT句でファンクションを使用することはできません。

DefaultValの適正なデータ型は次のとおりです。

デフォルト値がユーザーのいずれかである場合、列のデータ型はCHARまたはVARCHAR2のいずれかであり、列の幅は30文字以上である必要があります。

AS SelectQuery句を指定する場合は、オプションで、作成する表にDEFAULT句を指定することもできます。

INLINE|NOT INLINE デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。

AS SelectQuery句を指定する場合は、オプションで、作成する表にINLINE | NOT INLINE句を指定することもできます。

NULL 列にNULL値を含めることができます。

AS SelectQuery句を指定する場合は、オプションで、作成する表にNULLを指定することもできます。

NULLを指定した場合は、ENABLEを指定できません。

NOT NULL [ENABLE] 列にNULL値を含めることはできません。NOT NULLを指定した場合、列にNULL値を保存しようとする文はすべて拒否されます。

AS SelectQuery句を指定する場合は、オプションで、作成する表にNOT NULL[ENABLE]を指定することもできます。

NOT NULLを指定する場合は、オプションでENABLEを指定できます。NOT NULL制約は常に有効なため、ENABLEの指定は必須ではありません。

ENABLEキーワードは、CREATE TABLE文で列を定義する場合にのみ使用できます。

UNIQUE 列に設定される一意制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。一意性を実現するために、TimesTenでは一意の範囲索引が作成されます。つまり、一意制約を持つ列は、制約を持たない列よりも多くのメモリーと時間を実行時に使用する可能性があります。PRIMARY KEYとともに使用することはできません。

AS SelectQuery句を指定する場合は、オプションで、作成する表にUNIQUEを指定することもできます。

PRIMARY KEY 列に設定される一意のNOT NULL制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。UNIQUEとともに使用することはできません。

AS SelectQuery句を指定する場合は、オプションで、作成する表にPRIMARY KEYを指定することもできます。


説明

  • 主キーに保存されるすべての列は、NOT NULLである必要があります。

  • ColumnDefinitionで指定されたPRIMARY KEYは、1つの列に対してのみ指定できます。

  • PRIMARY KEYを、ColumnDefinition句とPRIMARY KEY句の両方で指定することはできません。

  • 主キーおよび外部キー制約において、制約列リストでの列名の重複は許可されません。

  • 子表の外部キー制約でON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。

  • ON DELETE CASCADEトリガー・アクションを変更するには、外部キー制約を削除して再定義してください。

  • キャッシュ表を参照する外部キーを持つ表は作成できません。

  • UNIQUE列制約およびデフォルトの列の値は、マテリアライズド・ビューではサポートされていません。

  • 表の主キーで使用する索引を変更するには、ALTER TABLE文を使用します。

  • AS SelectQuery句を指定する場合:

    • データ型およびデータ型の長さは、SelectQueryから導出されます。作成する表の列にデータ型を指定しないでください。

    • SelectQueryで列を含む式ではなく列が選択された場合、TimesTenでは、新しい表の列に対して、選択された表の対応する列に明示的に作成されていたNOT NULL制約を定義します。

    • 選択された表の列(主キーなど)でTimesTenにより暗黙的に作成されていたNOT NULL制約は、新しい表に引き継がれます。選択した表のNOT NULL制約を無効にするには、新しい列をNULLとして定義します。次に例を示します。

      CREATE TABLE newtable (newcol NULL) AS SELECT (col) FROM tab;
      
    • NOT INLINE/INLINE属性は新しい表に引き継がれます。

    • 一意キー、外部キー、索引および列のデフォルト値は、新しい表に引き継がれません。

    • SelectQueryのすべての式が式ではなく列である場合は、作成する表から列を省略できます。この場合、列の名前はSelectQueryの列と同じです。SelectQueryに単純な列参照ではなく式が含まれている場合は、列の別名を指定するか、またはCREATE TABLE文で列に名前を付けます。

    • 作成する表に対して外部キーを指定しないでください。

    • SelectQuerySELECT FOR UPDATE句を指定しないでください。

    • AS SelectQuery句を使用する場合、ORDER BY句はサポートされません。

    • SelectQueryに集合演算子UNIONMINUSおよびINTERSECTを含めることはできません。

    • レプリケートされた環境では、次のことに注意してください。

      グローバル一時表を含む新しい表の作成時に表をアクティブ・スタンバイ・ペアに含めるには、アクティブ・データベースでCREATE TABLE文を実行する前に、DDL_REPLICATION_LEVELを2以上に設定し、DDL_REPLICATION_ACTIONINCLUDEに設定します。この構成では、表はアクティブ・スタンバイ・ペアに含まれ、レプリケーション・スキームのすべてのデータベースにレプリケートされます。

      DDL_REPLICATION_ACTIONEXCLUDEに設定した場合、新しい表は、アクティブ・スタンバイ・ペアに含まれませんが、レプリケーション・スキームのすべてのデータベースにレプリケートされます。表はレプリケーション・スキームの一部にはならないため、その表で発行されたDMLはレプリケートされません。表に対してDMLレプリケーションを有効にするには、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE文を実行して、表を含める必要があります。この場合、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLEを実行すると表の内容は切り捨てられるため、この文を実行する前に、表は空であり、すべてのデータベースに存在している必要があります。

      詳細は、「ALTER SESSION」を参照してください。

  • デフォルトでは、主キーを実現するために、範囲索引が作成されます。主キーに対してハッシュ索引を指定するには、UNIQUE HASH句を使用してください。

    • アプリケーションで表の主キーを使用して範囲問合せを実行する場合は、UNIQUE HASH句を省略して、その表に対して範囲索引を選択してください。

    • 主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、UNIQUE HASH句を指定します。

  • ハッシュ索引は、表が存在している間、ALTER TABLE文を使用してハッシュ索引がサイズ変更されるまで、または索引が削除されて再作成されるまで変更されない固定のサイズで作成されます。小さいハッシュ索引ほどハッシュの衝突が増えます。大きいハッシュ索引ほど衝突が少なくなりますが、メモリを消費しやすくなります。ハッシュ・キー比較は高速な操作であるため、少数のハッシュ衝突がTimesTenにパフォーマンスの問題を発生させることはありません。

    ハッシュ索引のサイズが適性に設定されていることを確認するには、SET PAGES句のRowPagesパラメータの値により、アプリケーションで表の想定サイズを示す必要があります。この値は、表の想定行数を256で除算して計算します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

  • ハッシュ・キーには、最大16列を指定できます。

  • ON DELETE CASCADEは、マテリアライズド・ビューのディテール表でサポートされています。子表に対して定義されたマテリアライズド・ビューがある場合、親表からの削除によって子表でカスケード削除が行われます。つまり、親表での削除により、マテリアライズド・ビューも変更されます。

  • DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。

  • ON DELETE CASCADE: 親表から子表へのパスが異なる場合があるため、次のルールが適用されます。

    • 親表から子表へのすべてのパスを、deleteパスかdo not deleteパスのいずれかに統一します。deleteパスのすべての子表でON DELETE CASCADEを指定します。

    • このルールは、1つの親表から複数の子表へ、または複数の親表から1つの子表へのパスには適用されません。

  • ON DELETE CASCADEには、次の規則も適用されます。

    • ある表にdeleteパスでアクセスする場合、その表のすべての子表にもdeleteパスでアクセスします。

  • レプリケーションを含むON DELETE CASCADE: 次の制限が適用されます。

    • ON DELETE CASCADEで指定された外部キーは、レプリケートされた表のマスターとサブスクライバの間で一致している必要があります。これは実行時に確認されます。エラーが発生すると、RECEIVERスレッドは処理を停止します。

    • カスケード削除のツリーに含まれる表をレプリケートする場合は、ツリーに含まれるすべての表をレプリケートする必要があります。この制限は、レプリケーション・スキームを作成したとき、またはレプリケーション表のいずれかにON DELETE CASCADE付きの外部キーを追加したときにチェックされます。エラーが検出されると、処理は中断します。外部キー制約を変更する前に、まずレプリケーション・スキームを削除することが必要になる場合があります。

    • レプリケートされた表で外部キーの追加や削除を行う前に、レプリケーション・エージェントを停止する必要があります。

  • グローバル一時表のデータは現在の接続専用であり、ユーザー間で保護する必要はありません。このため、グローバル一時表にオブジェクト権限は必要ありません。

  • 表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。

  • エージング・ポリシーは、エージング状態を変更するように定義する必要があります。

  • 時間ベースのエージング・ポリシーの場合、エージング列を追加または変更できません。これは、NOT NULL列を追加または変更できないためです。

  • 1つのシステムでLRUエージングと時間ベースのエージングの両方を組み合せて使用できます。LRUエージングのみを使用する場合、エージング・スレッドはデータベース全体に指定されたサイクルに基づいて起動します。一方、時間ベースのエージングのみを使用する場合、エージング・スレッドは最適な頻度に基づいて起動します。この頻度は、すべての表のCYCLE句に指定された値によって決定されます。LRUエージングと時間ベースのエージングの両方を使用する場合は、両方のタイプを組み合せて考慮した上でスレッドが起動します。

  • LRUエージングでは、行がアクセスされているかまたは参照されているかどうかを、次のルールで判断します。

    • SELECT文の結果セットを構築するために使用された行。

    • INSERT ... SELECT文の結果セットを構築するために使用された行。

    • 更新または削除対象の行。

  • コマンドで参照される表に対してLRUエージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。

  • エージング状態にかかわらずエージング処理をすぐにスケジュールするには、ttAgingScheduleNowプロシージャをコールします。

  • エージングの制限:

    • LRUエージングと時間ベースのエージングは、マテリアライズド・ビューのディテール表ではサポートされていません。

    • LRUエージングと時間ベースのエージングは、グローバル一時表ではサポートされていません。

    • 時間ベースのエージングに使用されている列は削除できません。

    • エージング・ポリシーとエージング状態は、すべてのレプリケーション・サイトで同じである必要があります。

    • 外部キーによって関連付けられている表には、同じエージング・ポリシーを設定する必要があります。

    • LRUエージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。ON DELETE CASCADEの設定は無視されます。

    • 時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。ON DELETE CASCADEは、設定の有無にかかわらず無視されます。

表のインメモリー列圧縮

データをより効率的に格納する列レベルで表を圧縮できます。これは、列での重複する値の冗長な格納を削除し、全表スキャンを実行するSQL問合せのパフォーマンスを向上させます。

表の圧縮される1つ以上の列(圧縮列グループと呼ばれる)を定義できます。各表に1つ以上の圧縮列グループを定義できます。

各圧縮列グループに対して、圧縮列グループのすべての個別値の列を含むディクショナリ表が作成されます。圧縮列グループには、ディクショナリ表の適切な値の行へのポインタが含まれます。このポインタの幅は、ディクショナリ表に対して定義した最大エントリ数に応じて、1、2または4バイトです。そのため、圧縮されている列グループ内の列の幅の合計が、1、2または4バイトのポインタの幅より広い場合、およびこれらの列値に多くの重複する値が存在する場合は、表で使用される領域を削減しました。

図6-1に、ディクショナリ表の適切な行を指している、表の圧縮列グループを示します。

ディクショナリ表には、各個別値へのポインタの列があります。ユーザーが圧縮列グループの個別エントリの最大数を構成すると、圧縮列グループのサイズが次のように設定されます。

  • エントリの最大数が255(28-1)の場合は1バイト。最大数が1から255の場合、ディクショナリのサイズは255(28-1)に設定され、圧縮列グループのポインタ列は1バイトになります。

  • エントリの最大数が65,535(216-1)の場合は2バイト。最大数が256から65,535の場合、ディクショナリのサイズは65,535(216-1)に設定され、圧縮列グループのポインタ列は2バイトになります。

  • エントリの最大数が4,294,967,295(232-1)の場合は4バイト。最大数が65,536から4,294,967,295の場合、ディクショナリのサイズは4,294,967,295(232-1)に設定され、圧縮列グループのポインタ列は4バイトになります。これがデフォルトです。

構文

TableCompressionの構文は、次のとおりです。

[COMPRESS (CompressColumns [,...])] OPTIMIZED FOR READ

CompressColumnsの構文は次のとおりです。

{ColumnDefinition | (ColumnDefinition [,...])} BY DICTIONARY 
   [MAXVALUES = CompressMax]

パラメータ

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

パラメータ 説明
COMPRESS (CompressColumns [,...]) 圧縮が有効な表について圧縮列グループを定義します。表の1つ以上の列を含めることができます。ただし、1つの列は1つの圧縮列グループにのみ含めることができます。

圧縮列グループで複数の列を指定する場合、INLINE列のみがサポートされます。アウトライン列は、それが圧縮グループ内の唯一の列である場合のみ、圧縮グループに指定できます。

各圧縮列グループは、最大16列に制限されます。

OPTIMIZED FOR READ CREATE TABLE文で指定すると、表は圧縮列グループに対して有効になります。圧縮列グループは、CREATE TABLE文を使用して表の作成時に追加するか、ALTER TABLE文を使用して後で追加できます。
BY DICTIONARY 各圧縮列グループの圧縮ディクショナリを定義します。
MAXVALUES = CompressMax CompressMaxは、表の個別値の合計数であり、圧縮列グループ・ポインタ列のサイズを1、2または4バイトに設定し、ディクショナリ表のエントリの最大数のサイズを設定します。

ディクショナリ表の場合、NULLは1つの一意の値としてカウントされます。

CompressMaxは、1から232-1までの整数です。

MAXVALUES句を省略した場合の最大サイズのデフォルトは232-1であり、ポインタ列に4バイトが使用されます。値が232-1よりも大きい場合は、エラーがスローされます。


説明

  • 圧縮列グループは、表の作成時に追加するか、ALTER TABLE文を使用して後で追加できます。ALTER TABLE文を使用して、圧縮列グループを削除できますが、グループ全体を削除する必要があります。

  • キーに含まれる列の一部またはすべてが圧縮された、主キーまたは一意キーを作成できます。圧縮列を主キーまたは一意キーに含める場合、圧縮列グループに存在する列を含めることができますが、圧縮列グループのすべての列を含める必要はありません。また、異なる圧縮列グループの列を含めることができます。

  • 索引は、表の任意の列に作成できます。これには、圧縮列や、別の圧縮列グループに存在する列が含まれます。

  • LOB列は圧縮できません。

  • レプリケートされた表、キャッシュ・グループ表、グリッド表またはグローバル一時表の列では、圧縮はサポートされません。CREATE TABLE AS SELECT文を使用し、その文でその表に対してインメモリー列圧縮を定義すると、表を作成できません。

  • 圧縮が有効な表では、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成できません。

範囲索引がpartnumberに対して作成されます(主キーであるため)。

Command> CREATE TABLE price
> (partnumber INTEGER NOT NULL PRIMARY KEY,
> vendornumber INTEGER NOT NULL,
> vendpartnum CHAR(20) NOT NULL,
> unitprice DECIMAL(10,2),
> deliverydays SMALLINT,
> discountqty SMALLINT);
Command> INDEXES price;
Indexes on table SAMPLEUSER.PRICE:
 PRICE: unique range index on columns:
    PARTNUMBER
  1 index found.
1 index found on 1 table.

ハッシュ索引は、主キーであるclubname列に作成されます。

CREATE TABLE recreation.clubs
(clubname CHAR(15) NOT NULL PRIMARY KEY,
 clubphone SMALLINT,
 activity CHAR(18))
UNIQUE HASH ON (clubname) PAGES = 30;

範囲索引は、membernameおよびclubの2つの列で作成されます(ともに主キーであるため)。

Command> CREATE TABLE recreation.members
> (membername CHAR(20) NOT NULL,
>  club CHAR(15) NOT NULL,
>  memberphone SMALLINT,
>  PRIMARY KEY (membername, club));
Command> INDEXES recreation.members;
Indexes on table RECREATION.MEMBERS:
  MEMBERS: unique range index on columns:
    MEMBERNAME
    CLUB
  1 index found on 1 table.

recreation.events表にはハッシュ索引は作成されません。

CREATE TABLE recreation.events
(sponsorclub CHAR(15),
 event CHAR(30),
 coordinator CHAR(20),
 results VARBINARY(10000));

ハッシュ索引は、vendornumber列に作成されます。

CREATE TABLE purchasing.vendors
(vendornumber INTEGER NOT NULL PRIMARY KEY,
 vendorname CHAR(30) NOT NULL,
 contactname CHAR(30),
 phonenumber CHAR(15),
 vendorstreet CHAR(30) NOT NULL,
 vendorcity CHAR(20) NOT NULL,
 vendorstate CHAR(2) NOT NULL,
 vendorzipcode CHAR(10) NOT NULL,
 vendorremarks VARCHAR(60))
UNIQUE HASH ON (vendornumber) PAGES = 101;

ハッシュ索引は、membername列およびclub列で作成されます(ともに主キーであるため)。

CREATE TABLE recreation.members
    (membername CHAR(20) NOT NULL,
        club CHAR(15) NOT NULL,
        memberphone SMALLINT,
        PRIMARY KEY (membername, club))
    UNIQUE HASH ON (membername, club) PAGES = 100;

ハッシュ索引は、firstname列およびlastname列に作成されます(ともにauthors表の主キーであるため)。外部キーは、authors表の主キーを参照するbooks表のauthorfirstnameauthorlastname列に作成されます。

CREATE TABLE authors
    (firstname VARCHAR(255) NOT NULL,
        lastname VARCHAR(255) NOT NULL,
        description VARCHAR(2000),
        PRIMARY KEY (firstname, lastname))
    UNIQUE HASH ON (firstname, lastname) PAGES=20;
CREATE TABLE books
    (title VARCHAR(100),
    authorfirstname VARCHAR(255),
    authorlastname VARCHAR(255),
    price DECIMAL(5,2),
    FOREIGN KEY (authorfirstname, authorlastname) 
    REFERENCES authors(firstname, lastname));

次の文では、VARCHAR列のデフォルト文字を上書きし、1つのVARCHAR (10)列がNOT INLINEで、1つのVARCHAR (144)INLINEである表が作成されます。

CREATE TABLE t1
    (c1 VARCHAR(10) NOT INLINE NOT NULL,
    c2 VARCHAR(144) INLINE NOT NULL);

次の文では、本のタイトルのUNIQUE列を持つ表が作成されます。

CREATE TABLE books
    (title VARCHAR(100) UNIQUE,
        authorfirstname VARCHAR(255),
        authorlastname VARCHAR(255),
        price DECIMAL(5,2),
        FOREIGN KEY (authorfirstname, authorlastname)
        REFERENCES authors(firstname, lastname));

次の文では、列x1のデフォルト値が1で、列dのデフォルト値がSYSDATEである表が作成されます。

CREATE TABLE t1
    (x1 INT DEFAULT 1, d TIMESTAMP DEFAULT SYSDATE);

この例では、rangex表を作成し、主キーとしてcol1を定義します。デフォルトで範囲索引が作成されます。

Command> CREATE TABLE rangex (col1 TT_INTEGER PRIMARY KEY);
Command> INDEXES rangex;
Indexes on table SAMPLEUSER.RANGEX:
  RANGEX: unique range index on columns:
    COL1
  1 index found
1 index found on 1 table.

次の文は、HRスキーマの親表および子表におけるON DELETE CASCADE句の使用を示しています。外部キーを持つ表は、ON DELETE CASCADEが有効になるように変更されています。

ALTER TABLE countries
ADD CONSTRAINT countr_reg_fk
         FOREIGN KEY (region_id)
           REFERENCES regions(region_id) ON DELETE CASCADE;
ALTER TABLE locations
     ADD CONSTRAINT loc_c_id_fk
          FOREIGN KEY (country_id)
                    REFERENCES countries(country_id) ON DELETE CASCADE;
ALTER TABLE departments
     ADD CONSTRAINT dept_loc_fk
         FOREIGN KEY (location_id)
           REFERENCES locations (location_id) ON DELETE CASCADE;
ALTER TABLE employees
     ADD CONSTRAINT     emp_dept_fk
         FOREIGN KEY (department_id)
           REFERENCES departments ON DELETE CASCADE;
ALTER TABLE employees
     ADD CONSTRAINT     emp_job_fk
         FOREIGN KEY (job_id)
           REFERENCES jobs (job_id);
ALTER TABLE job_history
     ADD CONSTRAINT     jhist_job_fk
         FOREIGN KEY (job_id)
           REFERENCES jobs;
ALTER TABLE job_history
     ADD CONSTRAINT     jhist_emp_fk
         FOREIGN KEY (employee_id)
           REFERENCES employees ON DELETE CASCADE;
ALTER TABLE job_history
     ADD CONSTRAINT     jhist_dept_fk
         FOREIGN KEY (department_id)
           REFERENCES departments ON DELETE CASCADE;
     ;

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

存続時間が3 Daysの場合(単位はDay):

  • (SYSDATE - ColumnValue) <= 3の場合、エージ・アウトされません。

  • (SYSDATE - ColumnValue) > 3の場合、行はエージ・アウトの対象となります。

  • (SYSDATE - ColumnValue) = 3 days, 22 hoursの場合、存続期間を3 Daysに指定すると、行はエージ・アウトされません。存続期間が72 Hoursと指定されていた場合は、行はエージ・アウトされます。

この例では、LRUエージングを使用して表を作成します。エージング状態は、デフォルトでONになっています。

CREATE TABLE agingdemo
       (agingid NUMBER NOT NULL PRIMARY KEY,
        name  VARCHAR2 (20)
       )
       AGING LRU;
Command> DESCRIBE agingdemo;
Table USER.AGINGDEMO:
  Columns:
     *AGINGID NUMBER NOT NULL
     NAME VARCHAR2 (20) INLINE
     AGING LRU ON
1 table found.
(primary key columns are indicated with *)

この例では、時間ベースのエージングを使用する表を作成します。存続期間は3 Daysです。サイクルは指定されていないため、デフォルトで5分です。エージング状態はOFFです。

CREATE TABLE agingdemo2
       (agingid NUMBER NOT NULL PRIMARY KEY,
        name  VARCHAR2 (20),
        agingcolumn TIMESTAMP NOT NULL
        )
        AGING USE agingcolumn LIFETIME 3 DAYS OFF;
Command> DESCRIBE agingdemo2;
Table USER.AGINGDEMO2:
  Columns:
     *AGINGID NUMBER NOT NULL
     NAME VARCHAR2 (20) INLINE
     AGINGCOLUMN TIMESTAMP (6) NOT NULL
  Aging use AGINGCOLUMN lifetime 3 days cycle 5 minutes off
1 table found.
(primary key columns are indicated with *)

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

CREATE TABLE agingdemo2
        (agingid NUMBER NOT NULL PRIMARY KEY,
        name  VARCHAR2 (20),
        agingcolumn TIMESTAMP NOT NULL
        )
        AGING USE agingcolumn LIFETIME 3 DAYS OFF;
ALTER TABLE agingdemo2
        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 agingdemo2
        DROP AGING;
ALTER TABLE agingdemo2
        ADD AGING LRU;
Command> DESCRIBE agingdemo2;
Table USER.AGINGDEMO2:
  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 *)

時間ベースのエージングを指定して表を作成してみます。TT_DATEデータ型と3時間のLIFETIMEを指定してエージング列を定義します。LIFETIME単位はDAYSで指定する必要があるため、エラーが生成されます。

Command> CREATE TABLE aging1 (col1 TT_INTEGER PRIMARY KEY, 
         col2 TT_DATE NOT NULL) AGING USE col2 LIFETIME 3 HOURS;
 2977: Only DAY lifetime unit is allowed with a TT_DATE column
The command failed.

AS SelectQuery句を使用して、emp表を作成します。employees表から、employee_idが100から105までのlast_nameを選択します。empに6行が挿入されたことが示されます。返される必要のある行を確認するために、最初にSELECT文を発行します。

Command> SELECT last_name FROM employees 
 WHERE employee_id BETWEEN 100 AND 105;
< King >
< Kochhar >
< De Haan >
< Hunold >
< Ernst >
< Austin >
6 rows found.
Command> CREATE TABLE emp AS SELECT last_name FROM employees
>WHERE employee_id BETWEEN 100 AND 105;
6 rows inserted.
Command> SELECT * FROM emp;
< King >
< Kochhar >
< De Haan >
< Hunold >
< Ernst >
< Austin >
6 rows found.

AS SelectQueryを使用してtotalsal表を作成します。salaryを合計して、結果をtotalsalaryに挿入します。SelectQuery式の別名sを定義します。

Command> CREATE TABLE totalsal AS SELECT SUM (salary) s FROM employees;
1 row inserted.
Command> SELECT * FROM totalsal;
< 691400 >
1 row found.

AS SelectQueryを使用して、commission_pct列で定義された表を作成します。デフォルト値を.3に設定します。最初に、commission_pct列がNUMBER (2,2)型であることを示すためにemployees表にDESCRIBEを実行します。c_pct表のcommission_pct列は、employees表のcommission_pct列からNUMBER (2,2)型を継承します。

Command> DESCRIBE employees;
Table SAMPLEUSER.EMPLOYEES:
  Columns:
   *EMPLOYEE_ID                     NUMBER (6) NOT NULL
    FIRST_NAME                      VARCHAR2 (20) INLINE
    LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
    EMAIL                           VARCHAR2 (25) INLINE UNIQUE NOT NULL
    PHONE_NUMBER                    VARCHAR2 (20) INLINE
    HIRE_DATE                       DATE NOT NULL
    JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
    SALARY                          NUMBER (8,2)
    COMMISSION_PCT                  NUMBER (2,2)
    MANAGER_ID                      NUMBER (6)
    DEPARTMENT_ID                   NUMBER (4)

1 table found.
(primary key columns are indicated with *)
Command> CREATE TABLE c_pct (commission_pct DEFAULT .3) AS SELECT
         commission_pct FROM employees;
107 rows inserted.
Command> DESCRIBE c_pct;

Table SAMPLEUSER.C_PCT:
  Columns:
    COMMISSION_PCT                 NUMBER (2,2) DEFAULT .3

1 table found.
(primary key columns are indicated with *)

次の例では、job_idが圧縮されたemployees表を作成します。

Command> CREATE TABLE EMPLOYEES
 (EMPLOYEE_ID NUMBER (6) PRIMARY KEY, 
 FIRST_NAME VARCHAR2(20), 
 LAST_NAME VARCHAR2(25) NOT NULL, 
 EMAIL VARCHAR2(25) NOT NULL, 
 PHONE_NUMBER VARCHAR2(20),
 HIRE_DATE DATE NOT NULL, 
 JOB_ID VARCHAR2(10) NOT NULL, 
 SALARY NUMBER (8,2), 
 COMMISSION_PCT NUMBER (2,2), 
 MANAGER_ID NUMBER(6), 
 DEPARTMENT_ID NUMBER(4)) 
 COMPRESS (JOB_ID BY DICTIONARY) OPTIMIZED FOR READ;

Command> DESCRIBE EMPLOYEES;
 
Table MYSCHEMA.EMPLOYEES:
  Columns:
   *EMPLOYEE_ID                     NUMBER (6) NOT NULL
    FIRST_NAME                      VARCHAR2 (20) INLINE
    LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
    EMAIL                           VARCHAR2 (25) INLINE NOT NULL
    PHONE_NUMBER                    VARCHAR2 (20) INLINE
    HIRE_DATE                       DATE NOT NULL
    JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
    SALARY                          NUMBER (8,2)
    COMMISSION_PCT                  NUMBER (2,2)
    MANAGER_ID                      NUMBER (6)
    DEPARTMENT_ID                   NUMBER (4)
  COMPRESS ( JOB_ID BY DICTIONARY ) OPTIMIZED FOR READ
 
1 table found.
(primary key columns are indicated with *)

次の例では、ディクショナリ表に3つのサイズがあることを示します。エントリの最大数に指定した値は、次のサイズに丸められます。たとえば、役職IDの最大数として400を指定すると、最大で65535エントリのディクショナリ表が作成されます。デフォルトのサイズである232-1は、DESCRIBEの出力に表示されません。

Command> CREATE TABLE employees 
 (employee_id NUMBER(6) PRIMARY KEY, 
  first_name VARCHAR2(20), 
  last_name VARCHAR2(25), 
  email VARCHAR2(25) NOT NULL, 
  job_id VARCHAR2(10) NOT NULL, 
  manager_id NUMBER(6), 
  department_id NUMBER(4)) 
 COMPRESS (last_name BY DICTIONARY MAXVALUES=70000, 
           job_id BY DICTIONARY MAXVALUES=400, 
           department_id BY DICTIONARY MAXVALUES=100) 
 OPTIMIZED FOR READ;

Command> DESCRIBE employees;
Table MYSCHEMA.EMPLOYEES:
  Columns:
   *EMPLOYEE_ID                     NUMBER (6) NOT NULL
    FIRST_NAME                      VARCHAR2 (20) INLINE
    LAST_NAME                       VARCHAR2 (25) INLINE
    EMAILS                          VARCHAR2 (25) INLINE NOT NULL
    JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
    MANAGER_ID                      NUMBER (6)
    DEPARTMENT_ID                   NUMBER (4)
  COMPRESS ( LAST_NAME BY DICTIONARY,
             JOB_ID BY DICTIONARY MAXVALUES=65535,
             DEPARTMENT_ID BY DICTIONARY MAXVALUES=255 ) OPTIMIZED FOR READ
 
1 table found.
(primary key columns are indicated with *)

CREATE USER

CREATE USER文は、TimesTenデータベースのユーザーを作成します。

必要な権限

ADMIN

SQL構文

CREATE USER user IDENTIFIED BY {password | "password"}
CREATE USER user IDENTIFIED EXTERNALLY

パラメータ

パラメータ 説明
user データベースに追加されるユーザーの名前。
IDENTIFIED 内部ユーザーのパスワードまたはユーザーが外部であることを指定するための識別句。
BY {password |"password"} 内部ユーザーに対してTimesTenのパスワードを指定する必要があります。内部ユーザー名を使用してデータベースを処理するには、ユーザーがこのパスワードを指定する必要があります。
EXTERNALLY TimesTenデータベースに対するオペレーティング・システムのuserを識別します。データベースを外部ユーザーとして操作するには、オペレーティング・システムまたはネットワークで認証されているユーザー名と一致するTimesTen外部ユーザー名がプロセスに必要です。ユーザーはログイン時にオペレーティング・システムによって認証されているため、TimesTenではパスワードは必要ありません。

説明

  • データベース・ユーザーには、内部ユーザーまたは外部ユーザーを指定できます。

    • 内部ユーザーは、TimesTenデータベース用に定義されるユーザーです。

    • 外部ユーザーは、オペレーティング・システムなどの外部権限によって定義されるユーザーです。外部ユーザーにTimesTenパスワードを割り当てることはできません。

  • パスワードは大文字と小文字が区別されます。

  • ユーザーを作成すると、ユーザーにはPUBLICに付与されている権限が付与され、その他の権限は付与されません。

  • クライアント/サーバー接続を介してユーザーを作成することはできません。ユーザーを作成する場合は、直接接続を使用する必要があります。

  • TimesTenでは、ユーザーbradはユーザー"brad"と同じになります。いずれの場合も、ユーザーの名前はBRADと作成されます。

  • ユーザー名は、TT_CHARデータ型です。

  • レプリケーションが構成されている場合、この文はレプリケートされます。

パスワードが"secret"の内部ユーザーterryを作成するには、次のように実行します。

CREATE USER terry IDENTIFIED BY "secret";
User created.

ユーザーterryが作成されたことを確認します。

Command> SELECT * FROM sys.all_users WHERE username='TERRY';
< TERRY, 11, 2009-05-12 10:28:04.610353 >
1 row found.

外部ユーザーpatをTimesTenデータベースに指定するには、次のように実行します。

CREATE USER pat IDENTIFIED EXTERNALLY;
User created.

CREATE VIEW

CREATE VIEW文は、SelectQuery句で指定された表に対するビューを作成します。ビューとは、1つ以上のディテール表に基づいた論理表のことです。ビュー自体にデータは含まれていません。ビューは、ディテール表からすでに計算されたデータを含むマテリアライズド・ビューと区別するために、非マテリアライズド・ビューと呼ばれることがあります。

アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVELが3以上の場合にアクティブ・データベースでCREATE VIEWを実行すると、ビューはレプリケーション・スキームのすべてのデータベースにレプリケートされます。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

必要な権限

文を実行するユーザーには、CREATE VIEW権限(所有者の場合)または別のユーザーのビューの場合はCREATE ANY VIEW(非所有者の場合)が必要です。

ビューの所有者には、ディテール表に対するSELECT権限が必要です。

SQL構文

CREATE VIEW [Owner.]ViewName AS SelectQuery

パラメータ

パラメータ 説明
[Owner.]ViewName 新しいビューに割り当てる名前。
SelectQuery ビューで使用される、ディテール表の列を選択します。ビューに対して索引を作成することも可能です。

SELECT問合せの制限

ビューの定義に使用される問合せには、いくつかの制限があります。

  • ビュー定義のSELECT *問合せは、ビューの作成時に実行されます。ビューが作成された後に追加された列は、ビューに反映されません。

  • 次のものはビューの作成に使用するSELECT文で使用しないでください。

    • FIRST

    • ORDER BY

      使用した場合は、CREATE VIEWで無視されます。結果はソートされません。

    • 引数

  • SELECT構文のリストの各式には、一意の名前が必要です。列の別名が定義されていないかぎり、単純にその列の名前が使用されます。ROWIDは式とみなされるため、別名が必要です。

  • ビューを作成する場合にSELECT FOR UPDATEを使用しないでください。

  • 特定のTimesTen問合せ制限は、非マテリアライズド・ビューの作成時に確認されません。これらの制限に違反しているビューの作成が可能な場合がありますが、その後、実行した文でこのビューが参照されると、エラーが戻されます。

  • ビューがSELECT文のFROM句で参照されると、ビューの名前は、その定義によって解析時に導出表に置き換えられます。導出表を使用しなくても適切な問合せになるように、元のSELECT問合せの同じ句にビューのすべての句をマージすることができない場合、導出表の内容がマテリアライズされます。たとえば、ビューと参照元のSELECTで集計が指定されている場合は、その結果が選択の他の表に結合される前に、ビューがマテリアライズされます。

  • ビューを削除するには、DROP VIEW文を使用します。

  • ビューの変更にALTER TABLE文を使用することはできません。

  • ビューの参照は、ディテール表が削除または変更されているために失敗することがあります。

employees表から非マテリアライズド・ビューを作成します。

Command> CREATE VIEW v1 AS SELECT employee_id, email FROM employees;
Command> SELECT FIRST 5 * FROM v1;
< 100, SKING >
< 101, NKOCHHAR >
< 102, LDEHAAN >
< 103, AHUNOLD >
< 104, BERNST >
5 rows found.

t1の集計問合せから、列max1を持つ非マテリアライズド・ビューtviewを作成します。

CREATE VIEW tview (max1) AS SELECT MAX(x1) FROM t1;

DELETE

DELETE文は、表から行を削除します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合は表に対するDELETEが必要です。

SQL構文

DELETE [hint] [FIRST NumRows] FROM [Owner.]TableName [CorrelationName] 
[WHERE SearchCondition]
[RETURNING|RETURN Expression[,...]INTO DataItem[,...]]

パラメータ

パラメータ 説明
hint DELETE文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。
FIRST NumRows 削除する行の数を指定します。FIRST NumRowsは、副問合せの文ではサポートされていません。NumRowsには、正のINTEGERか動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。
[Owner.]TableName [CorrelationName] 検索条件を満たす行を削除する表を指定します。

[Owner.]TableNameには、削除する表を指定します。

CorrelationNameは、直前で指定した表の別名を指定します。相関名を使用して、DELETE文の他の場所で表を参照します。CorrelationNameの有効範囲は、それが使用されているSQL文です。基本名の構文ルールを満たしている必要があります。「基本名」を参照してください。

SearchCondition 削除する行を指定します。検索条件に一致する行がない場合、表は変更されません。WHERE句を省略した場合は、すべての行が削除されます。検索条件には副問合せを含めることができます。
Expression 有効な式の構文。第3章「式」を参照してください。
DataItem 取得したExpression値を格納するホスト変数またはPL/SQL変数。

説明

  • 表の行をすべて削除した場合、表は空になりますが、DROP TABLE文を実行しないかぎり、表自体は削除されません。

  • 外部キー制約に違反するDELETE処理はエラーになります。外部キー制約の詳細は、「CREATE TABLE」を参照してください。

  • DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。

  • 子表の外部キー制約でON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。

  • RETURNING句の制限:

    • Expressionは単純な式である必要があります。集計関数はサポートされません。

    • 順序番号はOUTパラメータに戻せません。

    • ROWNUMおよび副問合せは、RETURNING句では使用できません。

    • RETURNING句のパラメータは、DELETE文のいずれの場所とも重複できません。

    • RETURNING句を使用して複数行を戻すには、PL/SQL BULK COLLECT機能が必要です。BULK COLLECTの詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』FORALLおよびBULK COLLECT操作に関する項を参照してください。

    • PL/SQLでは、RETURNING句はWHERE CURRENT処理と一緒には使用できません。

発注件数が50未満の行をすべて削除します。

DELETE FROM purchasing.orderitems
WHERE quantity < 50;

idが主キーでない場合、次の問合せはすべての重複する注文を削除します。

DELETE FROM orders a
WHERE EXISTS (SELECT 1 FROM orders b
WHERE a.id = b.id and a.rowid < b.rowid);

次の順序で文を指定すると、外部キー違反が発生します。

CREATE TABLE master (name CHAR(30), id CHAR(4) NOT NULL PRIMARY KEY);
CREATE TABLE details
  (masterid CHAR(4),description VARCHAR(200), 
   FOREIGN KEY (masterid) REFERENCES master(id));
INSERT INTO master('Elephant', '0001');
INSERT INTO details('0001', 'A VERY BIG ANIMAL');
DELETE FROM master WHERE id = '0001';

ビジーな表を削除しようとするとエラーが発生します。この例では、t1はビジーな表であり、親表とそれに基づく外部キー制約となっています。

CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL,
       PRIMARY KEY (a));
CREATE TABLE t2 (c INT NOT NULL, 
       FOREIGN KEY (c) REFERENCES t1(a));
INSERT INTO t1 VALUES (1,1);
INSERT INTO t2 VALUES (1);
DELETE FROM t1;

次のエラーが返されます。

SQL ERROR (3001):  Foreign key violation [TTFOREIGN_0] a row in child table T2 
has a parent in the delete range.

employeesから従業員を削除します。empidおよびnameemployee_idおよびlast_nameと同じデータ型の変数として宣言します。行を削除し、employee_idおよびlast_nameを変数内に戻します。正しい行が削除されたことを確認します。

Command> VARIABLE empid NUMBER(6) NOT NULL;
Command> VARIABLE name VARCHAR2(25) INLINE NOT NULL;
Command> DELETE FROM employees WHERE last_name='Ernst'
       > RETURNING employee_id, last_name INTO :empid,:name;
1 row deleted.
Command> PRINT empid name;
EMPID                : 104
NAME                 : Ernst

DROPACTIVE STANDBY PAIR

この文は、アクティブ・スタンバイ・ペア・レプリケーション・スキームを削除します。

必要な権限

ADMIN

SQL構文

DROP ACTIVE STANDBY PAIR

パラメータ

DROP ACTIVE STANDBY PAIRに、パラメータはありません。

説明

アクティブ・スタンバイ・ペアは削除されますが、表、キャッシュ・グループ、マテリアライズド・ビューなどのすべてのオブジェクトは、文が発行されたデータベースにまだ存在しています。

TimesTenでOracle Clusterwareを使用する場合は、DROP ACTIVE STANDBY PAIR文は実行できません。

DROP CACHE GROUP

DROP CACHE GROUP文は、キャッシュ・グループに関連付けられている表を削除して、CACHE_GROUPシステム表からキャッシュ・グループの定義を削除します。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

キャッシュ・グループの所有者でない場合は、DROP ANY CACHE GROUP

キャッシュ・グループの少なくとも1つの表が現在のユーザーによって所有されていない場合は、DROP ANY TABLEが必要です。

SQL構文

DROP CACHE GROUP [Owner.]GroupName

パラメータ

パラメータ 説明
[Owner.]GroupName 削除されるキャッシュ・グループの名前です。

説明

  • 使用中のキャッシュ・グループ表を削除しようとすると、エラーが返されます。

  • ASYNCHRONOUS WRITETHROUGHキャッシュ・グループは、レプリケーション・エージェントの実行中には削除できません。

  • 読取り専用キャッシュ・グループおよびAUTOREFRESH属性を持つキャッシュ・グループに対して自動的にインストールされるOracle Databaseオブジェクトは、キャッシュ・エージェントによってアンインストールされます。DROP CACHE GROUP操作時にキャッシュ・エージェントが実行中でない場合、Oracle Databaseオブジェクトは、キャッシュ・エージェントの次の起動時にアンインストールされます。

  • DROP CACHE GROUP文はシリアライズ可能分離レベルでは実行できません。実行しようとするとエラー・メッセージが返されます。

  • DROP CACHE GROUP文を実行し、現在実行中の自動リフレッシュ操作がある場合、次のような結果になります。

    • LockWaitの間隔が0の場合、DROP CACHE GROUP文はロックのタイムアウト・エラーで失敗します。

    • LockWaitの間隔が0以外の場合、現在のトランザクションは自動リフレッシュされず(ロールバックされ)、DROP文の処理が続行されます。これは、同じ自動リフレッシュ間隔を持つすべてのキャッシュ・グループに影響します。

DROP CACHE GROUP westerncustomers;

DROP FUNCTION

DROP FUNCTION文は、データベースからスタンドアロンのストアド・ファンクションを削除します。この文を使用してパッケージに含まれるファンクションを削除しないでください。

必要な権限

ファンクションの所有者に必要な権限はありません。

別のユーザーのファンクションの場合はDROP ANY PROCEDUREが必要です。

SQL構文

DROP FUNCTION [Owner.]FunctionName

パラメータ

パラメータ 説明
[Owner.]FunctionName 削除するファンクションの名前です。

説明

  • ファンクションを削除すると、削除されたファンクションに依存するオブジェクトは無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したファンクションを再作成していない場合、エラー・メッセージが返されます。

  • この文を使用してパッケージに含まれるファンクションを削除しないでください。パッケージを削除するか、またはOR REPLACE句を含むCREATE PACKAGE文を使用して、ファンクションを含まないパッケージを再定義します。

  • DROP FUNCTION文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーがスローされます。

次の文は、ファンクションmyfuncを削除し、myfuncに依存するすべてのオブジェクトを無効にします。

Command> DROP FUNCTION myfunc;
 
Function dropped.

データベースでPL/SQLが無効になっている場合、TimesTenによって次のエラーが返されます。

Command> DROP FUNCTION myfunc;
 8501: PL/SQL feature not installed in this TimesTen database
The command failed.

関連項目

CREATE FUNCTION

DROP INDEX

DROP INDEX文は、指定した索引を削除します。

必要な権限

索引の所有者に必要な権限はありません。

別のユーザーの索引の場合はDROP ANY INDEXが必要です。

SQL構文

DROP INDEX [Owner.]IndexName [FROM [Owner.]TableName]

パラメータ

パラメータ 説明
[Owner.]IndexName 削除する索引の名前です。索引を含む表の所有者名を指定できます。
[Owner.]TableName 索引を作成した表の名前です。

説明

  • ビジーな索引(使用中の索引、または外部キーを適用する索引)を削除しようとすると、エラーが発生します。外部キーを削除して、関連付けられた索引を削除するには、ALTER TABLE文を使用します。

  • 索引がUNIQUE列の制約を使用して作成される場合は、ALTER TABLE DROP UNIQUE文を使用して制約を削除することによってのみ、この索引を削除できます。UNIQUE列の制約の詳細は、「CREATE TABLE」を参照してください。

  • コミットされていないトランザクションでのDROP INDEX操作がアクティブな場合(またはアクティブだった場合)、その索引にアクセスしないDML操作を実行する他のトランザクションはブロックされます。

  • 索引を削除した場合、その索引を使用する準備された文は、次にその文を実行する際に自動的に再準備されます。

  • 表名を指定しない場合、指定した所有者または暗黙的な所有者の索引名は一意である必要があります。指定した表または所有者が存在しない場合、プログラムを現在実行しているユーザーが暗黙的な所有者となります。

  • 索引の所有者を指定せずに表を指定した場合、表の所有者がデフォルトの所有者となります。

  • 表が指定されており、表の所有者が指定されていない場合、プログラムを実行している現在のユーザーがデフォルトの表の所有者となります。

  • 表と索引の所有者は、同じである必要があります。

  • 他の接続が所有する空でないインスタンスが一時表にある場合、別の接続によって一時表から索引を削除することはできません。

  • 索引がアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVELが2以上の場合は、DROP INDEX文を使用して、レプリケーション・スキームのスタンバイ・ペアから索引を削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

次のいずれかの文を使用して、orderitems表で定義した索引partsorderedindexを削除します。

DROP INDEX partsorderedindex
   FROM purchasing.orderitems;

または

DROP INDEX purchasing.partsorderedindex;

関連項目

CREATE INDEX

DROP MATERIALIZED VIEW

DROP MATERIALIZED VIEW文は、指定されたマテリアライズド・ビューを、それに関連付けられたハッシュ索引および範囲索引とともに削除します。

必要な権限

ビューの所有者であるか、またはDROP ANY MATERIALIZED VIEW (非所有者の場合)および

表の所有者であるか、またはDROP ANY TABLE(非所有者の場合)および

ビューに索引がある場合は、索引の所有者であるか、またはDROP ANY INDEX(非所有者の場合)。

SQL構文

DROP MATERIALIZED VIEW [Owner.]ViewName

パラメータ

パラメータ 説明
[Owner.]ViewName 削除するマテリアライズド・ビューを指定します。

説明

DROP MATERIALIZED VIEW操作を実行すると、ディテール表が更新されてロックされます。ディテール表がすでに別のトランザクションによってロックされている場合は、エラーが発生することがあります。

次の文では、custorderマテリアライズド・ビューが削除されます。

DROP MATERIALIZED VIEW custorder;

DROP MATERIALIZED VIEW LOG

DROP MATERIALIZED VIEW LOG文は、ディテール表のマテリアライズド・ビュー・ログを削除します。CREATE MATERIALIZED VIEW LOG文で作成されたグローバル一時表も削除します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合はDROP ANY TABLEが必要です。

SQL構文

DROP MATERIALIZED VIEW LOG ON [Owner.]TableName

パラメータ

パラメータ 説明
[Owner.]TableName マテリアライズド・ビュー・ログが作成されたディテール表の名前です。

説明

この文は、指定したディテール表のマテリアライズド・ビュー・ログを削除します。リフレッシュのログに依存する非同期マテリアライズド・ビューがある場合、マテリアライズド・ビュー・ログを削除することはできません。

DROP MATERIALIZED VIEW LOG ON employees;

DROP PACKAGE [BODY]

DROP PACKAGE文は、データベースからストアド・パッケージを削除します。仕様と本体の両方を削除します。DROP PACKAGE BODYは、パッケージの本体のみを削除します。

必要な権限

パッケージの所有者に必要な権限はありません。

別のユーザーのパッケージの場合はDROP ANY PROCEDUREが必要です。

SQL構文

DROP PACKAGE [BODY] [Owner.]PackageName

パラメータ

パラメータ 説明
PACKAGE [BODY] BODYを指定すると、パッケージ本体のみを削除できます。パッケージの仕様と本体の両方を削除するには、BODYを省略します。
[Owner.]PackageName 削除するパッケージの名前です。

説明

  • パッケージの本体のみを削除した場合、依存するオブジェクトは無効になりません。ただし、パッケージ仕様で宣言されたいずれかのプロシージャまたはストアド・ファンクションは、パッケージ本体を再作成するまで実行できません。

  • パッケージ仕様に依存するオブジェクトはすべて無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したパッケージを再作成していない場合、エラーが戻されます。

  • この文を使用してパッケージから単一のオブジェクトを削除しないでください。かわりに、OR REPLACE句を含むCREATE PACKAGE文およびCREATE PACKAGE BODY文を使用して、オブジェクトを含まないパッケージを再作成します。

  • DROP PACKAGE [BODY]文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーが返されます。

次の文は、パッケージsamplePackageの本体を削除します。

Command> DROP PACKAGE BODY SamplePackage;
Package body dropped.

パッケージsamplePackageの仕様と本体の両方を削除するには、次の文を使用します。

Command> DROP PACKAGE samplepackage;
Package dropped.

関連項目

CREATE PACKAGE

DROP PROCEDURE

DROP PROCEDURE文は、データベースからスタンドアロンのストアド・プロシージャを削除します。この文を使用してパッケージに含まれるプロシージャを削除しないでください。

必要な権限

プロシージャの所有者に必要な権限はありません。

別のユーザーのプロシージャの場合はDROP ANY PROCEDUREが必要です。

SQL構文

DROP PROCEDURE [Owner.]ProcedureName

パラメータ

パラメータ 説明
[Owner.]ProcedureName 削除するプロシージャの名前です。

説明

  • プロシージャを削除すると、削除されたプロシージャに依存するオブジェクトは無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したプロシージャを再作成していない場合、エラー・メッセージが返されます。

  • この文を使用してパッケージに含まれるプロシージャを削除しないでください。パッケージを削除するか、またはOR REPLACE句を含むCREATE PACKAGE文を使用して、プロシージャを含まないパッケージを再定義します。

  • DROP PROCEDURE文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーがスローされます。

次の文は、プロシージャmyprocを削除し、myprocに依存するすべてのオブジェクトを無効にします。

Command> DROP PROCEDURE myproc;
Procedure dropped.

データベースでPL/SQLが無効になっている場合、TimesTenによって次のエラーが返されます。

Command> DROP PROCEDURE myproc;
 
 8501: PL/SQL feature not installed in this TimesTen databaseThe command failed.

関連項目

CREATE PROCEDURE

DROP REPLICATION

DROP REPLICATION文は、クラシック・レプリケーション・スキームを破棄して、実行中のデータベースから削除します。

必要な権限

ADMIN

SQL構文

DROP REPLICATION [Owner.]ReplicationSchemeName

パラメータ

パラメータ 説明
[Owner.]ReplicationSchemeName クラシック・レプリケーション・スキームに割り当てる名前です。

説明

データベースの最新のレプリケーション・スキームを削除しても、レプリケートされた表は削除されません。これらの表は、レプリケーション・スキームの定義の有無にかかわらず、データベース内に継続して保持されます。

次の文は、実行中のデータベースからクラシック・レプリケーション・スキームrの情報を削除します。

DROP REPLICATION r;

DROP SEQUENCE

DROP SEQUENCE文は、既存の順序番号ジェネレータを削除します。

順序がアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVELが3以上の場合は、DROP SEQUENCE文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアから順序を削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

必要な権限

順序の所有者に必要な権限はありません。

別のユーザーの順序の場合はDROP ANY SEQUENCEが必要です。

SQL構文

DROP SEQUENCE [Owner.]SequenceName

パラメータ

パラメータ 説明
[Owner.]SequenceName 順序番号ジェネレータの名前です。

説明

  • 順序は、使用中でも削除できます。

  • TimesTenにはALTER SEQUENCE文はありません。順序を変更する場合は、DROP SEQUENCE文を使用してから、同じ名前の順序を新規作成します。たとえば、MINVALUEを変更する場合、順序を削除し、同じ名前で必要なMINVALUEを持つ順序を再度作成します。

  • 順序がレプリケーション・スキームに含まれている場合は、ALTER REPLICATION文を使用してレプリケーション・スキームから順序を削除します。次にDROP SEQUENCE文を使用して順序を削除します。

次の文は、mysequenceを削除します。

DROP SEQUENCE mysequence;

関連項目

CREATE SEQUENCE

DROP SYNONYM

DROP SYNONYM文は、データベースからシノニムを削除します。

シノニムがアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVELが2以上の場合は、DROP SYNONYM文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアからシノニムを削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

必要な権限

プライベート・シノニムをその所有者が削除する場合は、必要な権限はありません。別のユーザーのプライベート・シノニムを削除するには、DROP ANY SYNONYM権限が必要です。

PUBLICシノニムを削除するには、DROP PUBLIC SYNONYM権限が必要です。

SQL構文

プライベート・シノニムを削除するには、次の構文を使用します。

DROP SYNONYM [Owner.]SynonymName

パブリック・シノニムを削除するには、次の構文を使用します。

DROP PUBLIC SYNONYM SynonymName

パラメータ

パラメータ 説明
PUBLIC PUBLICを指定すると、パブリック・シノニムを削除できます。
Owner オプションで、プライベート・シノニムの所有者を指定します。所有者を省略する場合、プライベート・シノニムは現在のユーザーのスキーマに存在している必要があります。
SynonymName 削除するシノニムの名前を指定します。

パブリック・シノニムpubempを削除します。

DROP PUBLIC SYNONYM pubemp;
Synonym dropped.

プライベート・シノニムsynjobsを削除します。

DROP SYNONYM synjobs;
Synonym dropped.

DROP ANY SYNONYM権限を持つユーザーterryとして、ttuserが所有するプライベート・シノニムsyntabを削除します。

DROP SYNONYM ttuser.syntab;
Synonym dropped.

関連項目

CREATE SYNONYM

DROP TABLE

DROP TABLE文は、指定した表を、それに関連付けられたハッシュ索引および範囲索引とともに削除します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合はDROP ANY TABLEが必要です。

SQL構文

DROP TABLE [Owner.]TableName

パラメータ

パラメータ 説明
[Owner.]TableName 削除する表を指定します。

説明

  • 使用中の表を削除しようとすると、エラーが発生します。

  • コミットされていないトランザクションでのDROP TABLEがアクティブな場合(またはアクティブだった場合)、その表にアクセスしないDML操作を実行する他のトランザクションを続行できます。

  • 表がレプリケートされた表である場合、次のいずれかを実行できます。

    • DROP TABLE文を発行する前に、DROP REPLICATION文を使用してレプリケーション・スキームを削除します。

    • DDL_REPLICATION_LEVELが2以上の場合は、DROP TABLE文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアから表を削除します。

      DDL_REPLICATION_LEVELが1の場合は、レプリケーション・エージェントを停止し、ALTER ACTIVE STANDBY PAIR ... EXCLUDE TABLE文を使用してレプリケーション・スキームから表を除外します。次にDROP TABLE文を使用して表を削除します。

      詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

  • 他の接続が所有する空でないインスタンスが一時表にある場合、別の接続によって一時表を削除することはできません。

CREATE TABLE vendorperf
   (ordernumber INTEGER,
    delivday TT_SMALLINT,
    delivmonth TT_SMALLINT,
    delivyear TT_SMALLINT,
    delivqty TT_SMALLINT,
    remarks VARCHAR2(60));
CREATE UNIQUE INDEX vendorperfindex ON vendorperf (ordernumber);

次の文は、表および索引を削除します。

DROP TABLE vendorperf;

DROP USER

DROP USER文は、データベースからユーザーを削除します。

必要な権限

ADMIN

SQL構文

DROP USER user

パラメータ

パラメータ 説明
user データベースから削除されるユーザーの名前。

説明

ユーザーを削除するには、次の前提条件があります。

  • ユーザーがデータベースに内部的または外部的に存在している必要があります。

  • ユーザーが所有するオブジェクトを削除する必要があります。

  • レプリケーションが構成されている場合、この文はレプリケートされます。

データベースからユーザーterryを削除します。

DROP USER terry;
User dropped.

DROP VIEW

DROP VIEW文は、指定したビューを削除します。

ビューがアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVELが3以上の場合は、DROP VIEW文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアからビューを削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

必要な権限

ビューの所有者であるか、またはDROP ANY VIEW (非所有者の場合)

SQL構文

DROP VIEW [Owner.]ViewName

パラメータ

パラメータ 説明
[Owner.]ViewName 削除するビューを指定します。

次の文では、custorderビューが削除されます。

DROP VIEW custorder;

関連項目


CREATE VIEW

FLUSH CACHE GROUP

FLUSH CACHE GROUP文は、TimesTenキャッシュ表のデータをOracle Database表にフラッシュします。この文は、ユーザー管理キャッシュ・グループでのみ使用できます。キャッシュ・グループの種類については、「ユーザー管理キャッシュ・グループおよびシステム管理キャッシュ・グループ」を参照してください。

この操作には、WHERE句を受け入れる操作およびWITH ID句を受け入れる操作の2つのタイプがあります。

FLUSH CACHE GROUPは、コミットの伝播(TimesTenからOracle Databaseへ)がオフになっているときに使用します。コミットのすべてのトランザクションを伝播するのではなく、変更をOracle Databaseに伝播する前に多数のトランザクションをコミットできます。Oracle Databaseにキャッシュ・インスタンスが存在する場合は、キャッシュ・インスタンスIDごとに更新操作が実行されます。Oracle Databaseにキャッシュ・インスタンスが存在しない場合は、TimesTenによって挿入されます。

この機能は、注文がマスターOracle Database表にコミットされる前に、高速キャッシュとしてTimesTenを使用する、カートへの変更が頻繁に行われるショッピング・カート・アプリケーションなどで役立ちます。


注意:

通常、WHERE句を使用するより、WITH ID句を使用した方が高いシステム・パフォーマンスが得られます。

挿入と更新のみがフラッシュされます。挿入は、Oracle Database表にレコードが存在しない場合は挿入として、または(レコードがすでに存在する場合は)更新として伝播されます。削除をフラッシュすることはできません。つまり、TimesTenでレコードが削除された場合に、その削除をOracle Database表にフラッシュする方法はありません。削除は、手動で、またはコミット伝播をオンにすることで伝播する必要があります。削除されたレコードをフラッシュしようとすると、暗黙的に無視されます。エラーや警告は発行されません。READ ONLYまたはPROPAGATEとして指定されている表のレコードをOracle Database表にフラッシュすることはできません。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合はFLUSHまたはFLUSH ANY CACHE GROUPが必要です。

SQL構文

FLUSH CACHE GROUP [Owner.]GroupName
[WHERE ConditionalExpression];

または

FLUSH CACHE GROUP [Owner.]GroupName
WITH ID (ColumnValueList)

パラメータ

パラメータ 説明
[Owner.]GroupName フラッシュされるキャッシュ・グループの名前。
WHERE ConditionalExpression WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。
WITH ID ColumnValueList WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをフラッシュできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

説明

  • 通常、WHERE句は、単一またはすべてのキャッシュ・インスタンスを対象に使用するものではなく、キャッシュ・インスタンスのセットに対して使用します。フラッシュ操作にWHERE句を使用して、Oracle Databaseに送信するキャッシュ・インスタンスを決定します。

  • 一般的には、FLUSH CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。所有者名を指定しない場合、キャッシュ・グループのWHERE句によって参照されるすべての表は、キャッシュ・グループ操作を実行している現在のログイン名が所有しています。

  • WHERE句を省略した場合、キャッシュ・グループの内容全体がOracle Database表にフラッシュされます。WHERE句を指定した場合、ルート表のみを含めることができます。

  • FLUSH CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数を指定したOCI関数OCIAttrGet()によって、フラッシュされたキャッシュ・インスタンスの数が返されます。

  • WITH ID句を使用して、バインディング・パラメータを指定します。

制限

  • キャッシュ・グループが動的キャッシュ・グループでないかぎり、AWTまたはSWTキャッシュ・グループ、伝播属性が設定されたユーザー管理キャッシュ・グループ、または自動リフレッシュおよび伝播されるユーザー管理キャッシュ・グループに対してWITH ID句を使用しないでください。

FLUSH CACHE GROUP marketbasket;

FLUSH CACHE GROUP marketbasket
WITH ID(10);

関連項目


CREATE CACHE GROUP

GRANT

GRANT文は、1つ以上の権限をユーザーに割り当てます。

必要な権限

システム権限を付与するには、ADMINが必要です。

オブジェクト権限を付与するには、ADMINが必要であるか、オブジェクト所有者である必要があります。

SQL構文

GRANT {SystemPrivilege [,...] | ALL [PRIVILEGES]} [...] TO {user |PUBLIC} [,...]

GRANT {{ObjectPrivilege [,...] | ALL [PRIVILEGES]} ON {[Owner.]object}[,...]} TO
{user | PUBLIC} [,...]

パラメータ

システム権限を付与するためのパラメータは次のとおりです。

パラメータ 説明
SystemPrivilege 付与するシステム権限です。使用できる値のリストについては、「システム権限」を参照してください。
ALL [PRIVILEGES] ユーザーにすべてのシステム権限を割り当てます。
user 権限が付与されるユーザーの名前。ユーザー名は、CREATE USER文を使用してTimesTenデータベースに設定しておく必要があります。
PUBLIC すべてのユーザーに権限を付与することを指定します。

オブジェクト権限を付与するためのパラメータは次のとおりです。

パラメータ 説明
ObjectPrivilege 付与するオブジェクト権限です。使用できる値のリストについては、「オブジェクト権限」を参照してください。
ALL [PRIVILEGES] ユーザーにすべてのオブジェクト権限を割り当てます。
[Owner.]object objectは、権限が付与されるオブジェクトの名前です。Ownerは、オブジェクトの所有者です。Ownerを指定しない場合は、権限を付与しているユーザーが所有者です。
user 権限が付与されるユーザーの名前。ユーザーがデータベースに存在している必要があります。
PUBLIC すべてのユーザーに権限を付与することを指定します。

説明

  • ADMIN権限を持つユーザーは、1つ以上のシステム権限をユーザーに付与できます。

  • オブジェクトの所有者は、そのオブジェクトに対する1つ以上のオブジェクト権限をユーザーに付与できます。

  • ADMIN権限を持つユーザーは、任意のオブジェクトに対する1つ以上のオブジェクト権限をユーザーに付与できます。

  • ユーザーから権限を削除するには、REVOKE文を使用してください。

  • システム権限とオブジェクト権限を1つの文で付与することはできません。

  • オブジェクト権限の文に指定できるオブジェクトの数は1つのみです。

  • レプリケーションが構成されている場合、この文はレプリケートされます。

ユーザーterryADMIN権限を付与します。

GRANT admin TO terry;

ADMIN権限を持っている権限付与者が、ユーザーpatが所有するcustomers表に対するSELECT権限をユーザーterryに付与します。

GRANT SELECT ON pat.customers TO terry;

ユーザーterryにオブジェクト権限を付与します。

GRANT SELECT ON emp_details_view TO terry;

INSERT

INSERT文は、表に行を追加します。

次の式は、INSERT文のVALUES句の中で使用できます。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合、INSERTが必要です。

SQL構文

INSERT [hint] INTO [Owner.]TableName [(Column [,...])]
VALUES (SingleRowValues)
[RETURNING|RETURN Expression[,...] INTO DataItem[,...]]

SingleRowValuesパラメータの構文は、次のとおりです。

{NULL|{?|:DynamicParameter}|{Constant}| DEFAULT}[,...]

パラメータ

パラメータ 説明
hint INSERT文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。
Owner データを挿入する表の所有者。
TableName データを挿入する表の名前。
Column このリストの各列には、SingleRowValuesから値が割り当てられます。

1つ以上の表の列をこのリストで省略した場合、挿入された行では、省略された列の値は、表の作成時または最終更新時に指定された列のデフォルト値になります。省略した列にNOT NULL制約が指定されており、その列にデフォルト値が定義されていない場合は、データベースによってエラーが返されます。

列のリストを完全に省略した場合は、表のすべての列に値を指定する必要があります。

?

:DynamicParameter

準備されたSQL文の動的パラメータのプレースホルダ。動的パラメータの値は、文の実行時に設定されます。
Constant 特定の値。「定数」を参照してください。
DEFAULT 列をデフォルト値で更新する必要があることを指定します。
Expression 有効な式の構文。第3章「式」を参照してください。
DataItem 取得したExpression値を格納するホスト変数またはPL/SQL変数。

説明

  • 表の列を列名リストで省略した場合は、INSERT文によって、省略された列にデフォルト値が割り当てられます。省略した列に表定義でNOT NULLが指定されている場合、その列にデフォルト値が定義されていなければ、INSERT文は失敗します。

  • BINARYおよびVARBINARYデータは、文字形式または16進形式に挿入できます。

    • 文字形式では、一重引用符が必要です。

    • 16進形式では、値の前に接頭辞0xが必要です。

  • 外部キー制約に違反するINSERT処理はエラーになります。外部キー制約の詳細は、「CREATE TABLE」を参照してください。

  • RETURNING句の制限:

    • Expressionは単純な式である必要があります。集計関数はサポートされません。

    • 順序番号はOUTパラメータに戻せません。

    • ROWNUMおよび副問合せは、RETURNING句では使用できません。

    • RETURNING句内のパラメータは、INSERT文で重複して使用できません。

    • PL/SQLでは、RETURNING句はWHERE CURRENT処理と一緒には使用できません。

purchasing.vendors表に新しい単一行を追加します。

INSERT INTO purchasing.vendors
VALUES (9016,
       'Secure Systems, Inc.',
       'Jane Secret',
       '454-255-2087',
       '1111 Encryption Way',
       'Hush',
       'MD',
       '00007',
       'discount rates are secret');

動的パラメータ:pnoおよび:pnameには、実行時に値が設定されます。

INSERT INTO purchasing.parts (partnumber, partname)
  VALUES (:pno, :pname);

新しい従業員の年間のsalaryおよびjob_idを返します。変数salおよびjobidを、salaryおよびjob_idと同じデータ型で宣言します。employeesに行を挿入します。確認用に変数を出力します。

Command> VARIABLE sal12 NUMBER(8,2);
Command> VARIABLE jobid VARCHAR2(10) INLINE NOT NULL;

Command> INSERT INTO employees(employee_id, last_name, email, hire_date, 
       > job_id, salary)
       > VALUES (211,'Doe','JDOE',sysdate,'ST_CLERK',2400)
       > RETURNING salary*12, job_id INTO :sal12,:jobid;
1 row inserted.

PRINT sal12 jobid;
SAL12                 : 28800
JOBID                 : ST_CLERK

INSERT...SELECT

INSERT...SELECT文は、問合せの結果を表に挿入します。

必要な権限

オブジェクトの所有者に必要な権限はありません。

別のユーザーのオブジェクトの場合、INSERTSELECTが必要です。

SQL構文

INSERT INTO [Owner.]TableName [(ColumnName [,...])] InsertQuery

パラメータ

パラメータ 説明
[Owner.]TableName データを追加する表。
ColumnName 値を指定する列。表の列を列名リストで省略した場合は、INSERT...SELECT文によって、省略された列にデフォルト値が割り当てられます。省略した列に表定義でNOT NULLが指定されている場合、その列にデフォルト値が定義されていなければ、INSERT...SELECT文は失敗します。CREATE TABLE文で指定された順序と同じ順序で表のすべての列に対して値を指定する場合は、列名リストを省略できます。指定する値が少なすぎる場合は、その他の列にデフォルト値が割り当てられます。
InsertQuery サポートされている任意のSELECT問合せ。「SELECT」を参照してください。SELECT動詞の後に文レベルのオプティマイザ・ヒントを指定できます。文レベルのオプティマイザ・ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

説明

  • 結果セットの列の型は、ターゲット表の列の型と互換性がある必要があります。

  • 値を挿入するときに、順序CURRVALまたはNEXTVALを指定できます。詳細は、「CURRVALとNEXTVALによるSEQUENCE値の増加」を参照してください。

  • InsertQueryORDER BY句を使用できます。ターゲット表に結果セットを挿入する際に、ORDER BY句を使用してソート順序が変更されますが、順序は保証されません。

  • InsertQueryにエラーがあると、INSERT操作は失敗します。

  • RETURNING句はINSERT...SELECT文では使用できません。

20日以内に配送される部品を示すpurchasing.parts表に新しい行が追加されます。

INSERT INTO purchasing.parts
SELECT partnumber, deliverydays
FROM purchasing.supplyprice
WHERE deliverydays < 20;

LOAD CACHE GROUP

LOAD CACHE GROUP文は、Oracle Database表からTimesTenキャッシュ・グループにデータをロードします。ロードはローカルでの処理です。キャッシュ・メンバー間には伝播されません。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合、LOAD CACHE GROUPまたはLOAD ANY CACHE GROUPが必要です。

SQL構文

LOAD CACHE GROUP [Owner.]GroupName 
[WHERE ConditionalExpression] 
COMMIT EVERY n ROWS
[PARALLEL NumThreads]

または

LOAD CACHE GROUP [Owner.]GroupName
WITH ID (ColumnValueList)

パラメータ

パラメータ 説明
[Owner.]GroupName キャッシュ・グループに割り当てられた名前。
WHERE ConditionalExpression WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。
COMMIT EVERY n ROWS COMMIT EVERY n ROWS句を使用して、ロード操作中にコミットを発行する頻度(キャッシュ・グループにロードされる行数に基づく)を指定します。この句はWITH ID句を指定しない場合に必須です。

nは、トランザクションがコミットされる前にキャッシュ・グループにロードされる行数を示します。nは整数(n >= 0)で指定します。nに0を指定すると、LOAD CACHE GROUP文は、1つのトランザクションとして実行されます。

[PARALLEL NumThreads] キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracle Databaseからのバルク・フェッチを実行し、その他のスレッド(NumThreads - 1個のスレッド)がTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。

NumThreadsの最小値は2です。最大値は10です。10より大きい値を指定すると、TimesTenは値10を割り当てます。

WITH ID ColumnValueList WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをロードできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

説明

  • LOAD CACHE GROUPは、キャッシュ・グループの定義を満たし、キャッシュ・グループにまだ存在していないすべての新しいキャッシュ・インスタンスをOracle Databaseからロードします。

  • キャッシュ・グループがレプリケートされるか、またはAWTキャッシュ・グループである場合、LOAD CACHE GROUP文を発行する前に、レプリケーション・エージェントが実行中であることを確認してください。キャッシュ・エージェントが稼働していることを確認してください。

  • LOAD CACHE GROUPは、独自のトランザクション内で実行され、トランザクション内の最初の操作である必要があります。

  • 明示的にロードされるキャッシュ・グループの場合、LOAD CACHE GROUPはTimesTenキャッシュ表にすでに存在するキャッシュ・インスタンスを更新しません。このため、LOAD CACHE GROUPは、Oracle Database表に対する挿入のみを、対応するTimesTenキャッシュ表にロードします。

  • 動的キャッシュ・グループの場合、LOAD CACHE GROUPは、Oracle Database表で挿入、更新および削除されたキャッシュ・インスタンスをキャッシュ表にロードします。明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループに関する項を参照してください。

  • エラーが発生するとロールバックされます。キャッシュ・インスタンスが定期的にコミットされる場合、エラーが発生すると残りのロードは中止されます。ロードは直前にコミットした時点までロールバックされます。

  • COMMIT EVERY n ROWS (n0以上の値)を指定しているときにLOAD CACHE GROUP文が失敗すると、ロードされた行の一部はすでにコミットされているために、ターゲット・キャッシュ・グループの内容が一貫性のない状態になる場合があります。一部のキャッシュ・インスタンスが部分的にしかロードされていない可能性があります。UNLOAD CACHE GROUP文を使用してキャッシュ・グループをアンロードしてから、キャッシュ・グループを再ロードします。

  • 一般的には、LOAD CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。

  • 読取り専用キャッシュ・グループをロードする場合、次の条件を満たしている必要があります。

    • AUTOREFRESHのSTATEは、PAUSEDにする必要があります。

    • LOAD CACHE GROUP文ではWHERE句を使用できません(動的キャッシュ・グループの場合を除く)。

    • キャッシュ・グループは空である必要があります。

  • 明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、キャッシュ・グループに対して発行されたLOAD CACHE GROUP文が完了した後、状態はONに変更されます。動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDであり、キャッシュ表に移入が行われている場合は、キャッシュ・グループに対して発行されたLOAD CACHE GROUP文が完了した後も状態はPAUSEDのままになります。

  • LOAD CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数を指定したOCI関数OCIAttrGet()を実行すると、ロードされたキャッシュ・インスタンスの数が返されます。

  • 次の場合にWITH ID句を使用します。

    • キャッシュ・インスタンスのロード速度を上げる場合(WHERE句の中で使用)

    • バインディング・パラメータを指定する場合

    • 障害発生時にロード・トランザクションをロールバックする場合

制限

  • WHERE句で子表を参照しないでください。

  • 次の場合にはPARALLEL句を指定しないでください。

    • WITH ID句が使用されている場合

    • COMMIT EVERY 0 ROWS句が使用されている場合

    • データベース・レベルのロックが有効な場合(接続属性LockLevelが1に設定されている場合)

  • 次のタイプのキャッシュ・グループをロードする場合は、WITH ID句を使用しないでください。

    • 明示的にロードされる読取り専用キャッシュ・グループ

    • 明示的にロードされる、自動リフレッシュ属性が指定されたユーザー管理キャッシュ・グループ

    • AUTOREFRESHおよびPROPAGATE属性が指定されたユーザー管理キャッシュ・グループ

  • WITH ID句はCOMMIT EVERY n ROWS句と同時に使用しないでください。

  • WITH ID句を使用して別のキャッシュ・グリッド・メンバーからキャッシュ・インスタンスを取得することはできません。

CREATE CACHE GROUP recreation.cache
    FROM recreation.clubs (
        clubname CHAR(15) NOT NULL,
        clubphone SMALLINT,
        activity CHAR(18),
        PRIMARY KEY(clubname))
    WHERE (recreation.clubs.activity IS NOT NULL);

LOAD CACHE GROUP recreation.cache
    COMMIT EVERY 30 ROWS;

HRスキーマを使用して、PARALLEL句とLOAD CACHE GROUP文を同時に使用する例を示します。COMMIT EVERY n ROWS句が必要です。CACHEGROUPSコマンドを発行します。キャッシュ・グループcg2が定義され、自動リフレッシュの状態がPaused(一時停止中)であることが示されています。キャッシュ・グループcg2をアンロードしてから、LOAD CACHE GROUP文とPARALLEL句を指定してパラレル・ロードを実行します。25個のキャッシュ・インスタンスがロードされます。

Command> CACHEGROUPS;

Cache Group SAMPLEUSER.CG2:

  Cache Group Type: Read Only
  Autorefresh: Yes
  Autorefresh Mode: Incremental
  Autorefresh State: Paused
  Autorefresh Interval: 1.5 Minutes

  Root Table: SAMPLEUSER.COUNTRIES
  Table Type: Read Only

  Child Table: SAMPLEUSER.LOCATIONS
  Table Type: Read Only

  Child Table: SAMPLEUSER.DEPARTMENTS
  Table Type: Read Only

1 cache group found.

Command> UNLOAD CACHE GROUP cg2;
25 cache instances affected.
Command> COMMIT;
Command> LOAD CACHE GROUP cg2 COMMIT EVERY 10 ROWS PARALLEL 2;
25 cache instances affected.
Command> COMMIT;

次の例では、対応するOracle Database表からnew_customersキャッシュ・グループのTimesTenキャッシュ表に、顧客番号が5000以上の顧客のキャッシュ・インスタンスのみをロードします。

LOAD CACHE GROUP new_customers WHERE (oratt.customer.cust_num >= 5000) COMMIT
EVERY 256 ROWS;

MERGE

MERGE文を使用すると、1つまたは複数のソースから行を選択して、ターゲット表に対して更新や挿入ができます。ターゲット表に対してどの行を更新または挿入するかの評価に使用する条件を指定できます。

この文は、複数のINSERT文およびUPDATE文を組み合せるために使用します。

MERGEは、決定的な文であり、同一のMERGE文でターゲット表の同じ行を複数回更新できません。

必要な権限

ターゲット表およびソース表の所有者に必要な権限はありません。

別のユーザーが所有するターゲット表の場合はINSERTまたはUPDATE、別のユーザーが所有するソース表の場合はSELECTが必要です。

SQL構文

MERGE [hint] INTO [Owner.]TargetTableName [Alias] USING
    {[Owner.]SourceTableName|(Subquery)}[Alias] ON (Condtion)
    {MergeUpdateClause MergeInsertClause |
     MergeInsertClause MergeUpdateClause |
     MergeUpdateClause | MergeInsertClause
    }

MergeUpdateClauseの構文は次のとおりです。

WHEN MATCHED THEN UPDATE SET SetClause [WHERE Condition1]

MergeInsertClauseの構文は次のとおりです。

WHEN NOT MATCHED THEN INSERT [Columns [,...]] VALUES
    ( {{Expression | DEFAULT|NULL} [,...] }) [WHERE Condition2]

パラメータ

パラメータ 説明
hint MERGE文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。
[Owner.]TargetTableName ターゲット表の名前。これは、行の更新や挿入の対象となる表です。
[Alias] オプションで、ターゲット表やソース表の別名を指定できます。
USING {[Owner.]SourceTableName | (Subquery)} [Alias] USING句は、データのソースに使用する表の名前や副問合せを指定します。結合や集計を使用する場合は、副問合せを使用します。オプションで、表の名前や副問合せの別名を指定できます。
ON (Condition) 行に対してMerge InsertまたはMerge Updateのどちらを実行するかを決定するために、ターゲット表の各行の評価に使用する条件を指定します。評価時に条件がTRUEの場合、SourceTableNameの対応する行を使用して、ターゲット行に実行するのはMergeUpdateClauseであるとみなされます。ソース表の複数の行がターゲット表の同一行に対応している場合、エラーが発生します。評価時に条件がTRUEでない場合、その行に対して実行するのはMergeInsertClauseであるとみなされます。
SET SetClause UPDATE文とともに使用する句。UPDATE文の詳細は、「UPDATE」を参照してください。
[WHERE Condition1] ON (Condition)に一致する各行に対して、Condition1が評価されます。評価時に条件がTRUEの場合、その行は更新されます。この句では、ターゲット表またはソース表を参照できます。副問合せは使用できません。この句はオプションです。
INSERT [Columns[,...]]VALUES ({{Expression |DEFAULT|NULL} [,...]}) ターゲット表に挿入する列です。INSERT文の詳細は、「INSERT」を参照してください。
[WHERE Condition2] 指定した場合、Condition2が評価されます。評価時に条件がTRUEの場合、その行はターゲット表に挿入されます。条件にはソース表のみ参照できます。副問合せは使用できません。

説明

  • MergeUpdateClauseMergeInsertClauseは、一緒に、または別々に指定できます。両方指定する場合は、どちらが先でもかまいません。

  • DUALが、USING句でのみ指定された表であり、MERGE文の他の場所では参照されない場合は、副問合せではDUALを使用するかわりに、単純な表として指定します。この単純な場合でパフォーマンスを向上させるには、ON句でターゲット表の一意索引にキー条件を指定します。

  • MergeUpdateClauseの制限:

    • ON condition句で参照する列は更新できません。

    • ソース表の列は更新できません。

  • MergeInsertClauseの制限:

    • ターゲット表の列の値は挿入できません。

  • その他の制限:

    • ソース表の副問合せで集合演算子は使用しないでください。

    • MergeUpdateClauseまたはMergeInsertClauseWHERE条件で、副問合せは使用しないでください。

    • ターゲット表は、マテリアライズド・ビューのディテール表には指定できません。

    • RETURNING句はMERGE文では使用できません。

この例では、dualは単純な表として指定されます。ON句に指定されたターゲット表のUNIQUE索引にキー条件があります。この例では、DuplicateBindMode属性は1に設定されます。デフォルトは0(ゼロ)です。

Command> CREATE TABLE mergedualex (col1 TT_INTEGER NOT NULL, 
       > col2 TT_INTEGER, PRIMARY KEY (col1));
Command> MERGE INTO mergedualex USING dual ON (col1 = :v1)
       > WHEN MATCHED THEN UPDATE SET col2 = col2 + 1
       > WHEN NOT MATCHED THEN INSERT VALUES (:v1, 1);
Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1  'V1' (TT_INTEGER) > 10
1 row merged.
Command> SELECT * FROM mergedualex;
< 10, 1 >
1 row found.

この例では、列employee_idおよびmanager_idを含むcontactsという名前の表が作成されます。employee_idおよびmanager_idにそれぞれ101とNULLの値を持つcontactsに、行が1つ挿入されます。MERGE文で、employees表のデータを使用してcontactsに行が挿入されます。SELECT FIRST 3の行では、employee_idが101の場合は、manager_idが100に更新されることを示しています。employees表の残りの106行がcontactsに挿入されます。

Command> CREATE TABLE contacts (employee_id NUMBER (6) NOT NULL PRIMARY KEY, 
       > manager_id NUMBER (6));
Command> SELECT employee_id, manager_id FROM employees WHERE employee_id =101;
< 101, 100 >
1 row found.
Command> INSERT INTO contacts VALUES (101,null);
1 row inserted.
Command> SELECT COUNT (*) FROM employees;
< 107 >
1 row found.
Command> MERGE INTO contacts c
       >   USING employees e
       >   ON (c.employee_id = e.employee_id)
       > WHEN MATCHED THEN
       >   UPDATE SET c.manager_id = e.manager_id
       > WHEN NOT MATCHED THEN
       >   INSERT (employee_id, manager_id)
       >   VALUES (e.employee_id, e.manager_id);
107 rows merged.
Command> SELECT COUNT (*) FROM contacts;
< 107 >
1 row found.
Command> SELECT FIRST 3 employee_id,manager_id FROM employees;
< 100, <NULL> >
< 101, 100 >
< 102, 100 >
3 rows found.
Command> SELECT FIRST 3 employee_id, manager_id FROM contacts;
< 100, <NULL> >
< 101, 100 >
< 102, 100 >
3 rows found.

REFRESH CACHE GROUP

REFRESH CACHE GROUP文は、TimesTenキャッシュ表のデータをキャッシュされたOracle Database表でコミットされた最新のデータに置き換えます。リフレッシュ操作はローカルで、グリッド・メンバー間には伝播されません。

必要な権限

Oracle DatabaseスキーマのCREATE SESSIONおよびOracle Database表のSELECT

キャッシュ・グループの所有者の場合、キャッシュ・グループに対して必要な権限はありません。

別のユーザーのキャッシュ・グループの場合、REFRESH CACHE GROUPまたはREFRESH ANY CACHE GROUPが必要です。

SQL構文

REFRESH CACHE GROUP [Owner.]GroupName 
[WHERE ConditionalExpression]
COMMIT EVERY n ROWS
[PARALLEL NumThreads]

または

REFRESH CACHE GROUP [Owner.]GroupName 
WITH ID (ColumnValueList)

パラメータ

パラメータ 説明
[Owner.]GroupName キャッシュ・グループに割り当てられた名前。
WHERE ConditionalExpression WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。
COMMIT EVERY n ROWS COMMIT EVERY n ROWS句を使用して、リフレッシュ操作中にコミットを発行する頻度(キャッシュ・グループでリフレッシュされる行数に基づく)を指定します。この句はWITH ID句を指定しない場合に必須です。

nは、トランザクションがコミットされる前にリフレッシュされる行数を示します。nは整数(n >= 0)で指定します。nに0を指定すると、REFRESH CACHE GROUP文は、1つのトランザクションとして実行されます。

[PARALLEL NumThreads] キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracle Databaseからのバルク・フェッチを実行し、その他のスレッド(NumThreads - 1個のスレッド)がTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。

NumThreadsの最小値は2です。最大値は10です。10より大きい値を指定すると、TimesTenは値10を割り当てます。

WITH ID ColumnValueList WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをリフレッシュできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

説明

  • REFRESH CACHE GROUP文は、独自のトランザクション内で実行する必要があります。

  • キャッシュ・グループがレプリケートされるか、またはAWTキャッシュ・グループである場合、REFRESH CACHE GROUP文を発行する前に、レプリケーション・エージェントが実行中であることを確認してください。キャッシュ・エージェントが稼働していることを確認してください。

  • REFRESH CACHE GROUP文は、TimesTenキャッシュ表のデータをキャッシュされたOracle Database表でコミットされた最新のデータ(TimesTenキャッシュ表にすでに存在するデータも含む)に置き換えます。明示的にロードされるキャッシュ・グループの場合、リフレッシュ処理は、UNLOAD CACHE GROUP文の後にLOAD CACHE GROUP文を続けて指定した場合と同じ処理を実行します。Oracle Database表のすべての行での挿入、更新、削除などの操作は、キャッシュ表に適用されます。動的キャッシュ・グループの場合、リフレッシュ処理は、更新または削除されたOracle Database表の行のみをキャッシュ表にリフレッシュします。明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループに関する項を参照してください。

  • 読取り専用キャッシュ・グループをリフレッシュする場合、次の条件を満たしている必要があります。

    • AUTOREFRESH文は、PAUSEDにする必要があります。

    • キャッシュ・グループが読取り専用動的キャッシュ・グループである場合、PARALLEL句を使用しないでください。

  • 明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、キャッシュ・グループに対して発行された条件なしのREFRESH CACHE GROUP文が完了した後、状態はONに変更されます。

  • 動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、REFRESH CACHE GROUP...WITH ID文が完了した後も状態はPAUSEDのままになります。

  • 一般的には、REFRESH CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。

  • COMMIT EVERY n ROWS (n0以上の値)を指定しているときにREFRESH CACHE GROUP文が失敗すると、ロードされた行の一部はすでにコミットされているために、ターゲット・キャッシュ・グループの内容が一貫性のない状態になる場合があります。一部のキャッシュ・インスタンスが部分的にしかロードされていない可能性があります。UNLOAD CACHE GROUP文を使用してキャッシュ・グループをアンロードしてから、LOAD CACHE GROUP文を使用してキャッシュ・グループを再ロードします。

  • REFRESH CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数が指定されたOCI関数OCIAttrGet()を実行すると、リフレッシュされたキャッシュ・インスタンスの数が返されます。

  • 次の場合にWITH ID句を使用します。

    • キャッシュ・インスタンスのリフレッシュ速度を上げる場合(WHERE句の中で使用)

    • バインディング・パラメータを指定する場合

    • 障害発生時にリフレッシュ・トランザクションをロールバックする場合

制限

  • 次の場合はPARALLEL句を指定しないでください。

    • WITH ID句が使用されている場合

    • COMMIT EVERY n ROWS句が使用されている場合

    • データベース・レベルのロックが有効な場合(接続属性LockLevelが1に設定されている場合)

    • 読取り専用動的キャッシュ・グループの場合

  • 次のタイプのキャッシュ・グループをリフレッシュする場合は、WITH ID句を使用しないでください。

    • 明示的にロードされる読取り専用キャッシュ・グループ

    • 明示的にロードされる、自動リフレッシュ属性が指定されたユーザー管理キャッシュ・グループ

    • 自動リフレッシュ属性および伝播属性が指定されたユーザー管理キャッシュ・グループ

  • WITH ID句はCOMMIT EVERY n ROWS句と同時に使用しないでください。

  • 動的または読取り専用キャッシュ・グループでWHERE句を使用しないでください。

REFRESH CACHE GROUP recreation.cache COMMIT EVERY 30 ROWS;

これは、次と同じです。

UNLOAD CACHE GROUP recreation.cache;
LOAD CACHE GROUP recreation.cache COMMIT EVERY 30 ROWS;

HRスキーマを使用して、PARALLEL句とREFRESH CACHE GROUP文を同時に使用する例を示します。COMMIT EVERY n ROWSが必要です。CACHEGROUPSコマンドを発行します。キャッシュ・グループcg2が定義され、自動リフレッシュの状態がPaused(一時停止中)であることが示されています。REFRESH CACHE GROUP文とPARALLEL句を指定してパラレル・ロードを実行します。25個のキャッシュ・インスタンスがリフレッシュされます。

Command> CACHEGROUPS;

Cache Group SAMPLEUSER.CG2:

  Cache Group Type: Read Only
  Autorefresh: Yes
  Autorefresh Mode: Incremental
  Autorefresh State: Paused
  Autorefresh Interval: 1.5 Minutes

  Root Table: SAMPLEUSER.COUNTRIES
  Table Type: Read Only

  Child Table: SAMPLEUSER.LOCATIONS
  Table Type: Read Only

  Child Table: SAMPLEUSER.DEPARTMENTS
  Table Type: Read Only

1 cache group found.
Command> REFRESH CACHE GROUP cg2 COMMIT EVERY 20 ROWS PARALLEL 2;
25 cache instances affected.

REFRESH MATERIALIZED VIEW

REFRESH MATERIALIZED VIEW文は、非同期マテリアライズド・ビューを手動でリフレッシュします。

必要な権限

マテリアライズド・ビュー・ログ表に対して必要な権限は、次のとおりです。

  • マテリアライズド・ビュー・ログ表の所有者に必要な権限はありません。

  • マテリアライズド・ビュー・ログ表の所有者でない場合、SELECT ANY TABLEが必要です。

マテリアライズド・ビューに対して必要な権限は、次のとおりです。

  • マテリアライズド・ビューの所有者に必要な権限はありません。

  • マテリアライズド・ビューの所有者でない場合、SELECT ANY TABLEが必要です。

SQL構文

REFRESH MATERIALIZED VIEW ViewName

パラメータ

パラメータ 説明
ViewName これは非同期マテリアライズド・ビューの名前です。

説明

この文は、指定された非同期マテリアライズド・ビューをリフレッシュします。この文は、独立したスレッドで、独立したトランザクションとして実行およびコミットされます。ユーザー・トランザクションに影響はありませんが、ユーザー・スレッドはリフレッシュ処理が完了するまで待機してからユーザーに戻されます。非同期マテリアライズド・ビューにリフレッシュ間隔を指定していない場合は、この文がビューをリフレッシュする唯一の方法です。リフレッシュ間隔を指定している場合でも、この文を使用してビューを手動でリフレッシュできます。

リフレッシュ処理は常に独立したトランザクションで実行されるため、リフレッシュ処理は、コミットされていないユーザー・トランザクションのコミットを待機しません。コミット済の行のみがリフレッシュ処理の対象となります。このことは、手動のリフレッシュ文および定期的に実行される自動リフレッシュに当てはまります。

ビューに対するCREATE MATERIALIZED VIEW文でFASTリフレッシュが指定されていた場合、REFRESH MATERIALIZED VIEW文では増分リフレッシュ方法が使用されます。これ以外の場合は、完全リフレッシュ方法が使用されます。

REFRESH MATERALIZED VIEW bookorders;

REVOKE

REVOKE文は、ユーザーから1つ以上の権限を削除します。

必要な権限

システム権限を削除するには、ADMINが必要です。

オブジェクト権限を削除するには、ADMINが必要であるか、またはオブジェクト所有者である必要があります。

SQL構文

REVOKE {SystemPrivilege [,...] | ALL [PRIVILEGES]} FROM {User |PUBLIC} [,...]

REVOKE {{ObjectPrivilege [,...] | ALL [PRIVILEGES]} ON {[Owner.Object}} [,...]
FROM {user | PUBLIC}[,...]

パラメータ

システム権限を削除するためのパラメータは次のとおりです。

パラメータ 説明
SystemPrivilege 削除するシステム権限です。使用できる値のリストについては、「システム権限」を参照してください。
ALL [PRIVILEGES] ユーザーからすべてのシステム権限を削除します。
User 権限が削除されるユーザーの名前。ユーザー名は、CREATE USER文を使用してTimesTenデータベースに設定しておく必要があります。
PUBLIC すべてのユーザーの権限を削除することを指定します。

オブジェクト権限を削除するためのパラメータは次のとおりです。

パラメータ 説明
ObjectPrivilege 削除するオブジェクト権限です。使用できる値のリストについては、「オブジェクト権限」を参照してください。
ALL [PRIVILEGES] ユーザーからすべてのオブジェクト権限を削除します。
User 権限が削除されるユーザーの名前。ユーザー名は、CREATE USER文を使用してTimesTenデータベースに設定しておく必要があります。
[Owner.]Object Objectは、権限が削除される対象オブジェクトの名前です。Ownerは、オブジェクトの所有者です。Ownerを指定しない場合は、権限を削除しているユーザーが所有者とみなされます。
PUBLIC すべてのユーザーの権限を削除することを指定します。

説明

  • オブジェクトの所有者から、そのオブジェクトの権限を削除することはできません。

  • 権限を付与できるユーザーは、自分以外のユーザーが付与した場合でもその権限を削除できます。

  • 権限は、付与されたときと同じレベルで削除する必要があります。ユーザーからオブジェクト権限を削除する場合、関連するシステム権限が付与されているユーザーからは削除できません。たとえば、あるユーザーにSELECT ANY TABLEを付与し、その後SELECT ON BOB.TABLE1を削除しようとすると、SELECT ANY TABLEに加えてSELECT ON BOB.TABLE1を明示的に付与していない場合は失敗します。

  • ユーザーにすべてのシステム権限が付与されている場合は、特定の権限を削除できます。たとえば、すべてのシステム権限が付与されているユーザーからALTER ANY TABLEを削除できます。

  • すべてのオブジェクト権限が付与されているユーザーからは、特定のオブジェクトの特定の権限を削除できます。たとえば、ユーザーTERRYにすべてのオブジェクト権限が付与されている場合でも、表CUSTOMERSに対するDELETE権限をTERRYから削除できます。

  • ユーザーにすべての権限が付与されていない場合でも、そのユーザーからすべての権限を削除できます。

  • 特定の権限を、その権限を付与されていないユーザーから削除することはできません。

  • ユーザーが所有するオブジェクトに対する権限は削除できません。

  • システム権限とオブジェクト権限を1つの文で削除することはできません。

  • オブジェクト権限の文に指定できるオブジェクトの数は1つのみです。

  • ディテール表に対するSELECT権限またはSELECT権限を含むシステム権限をuser1が所有するディテール表でuser2から削除すると、user2が所有する関連するマテリアライズド・ビューは無効と指定されます。「無効なマテリアライズド・ビュー」を参照してください。

  • レプリケーションが構成されている場合、この文はレプリケートされます。

ADMINおよびDDL権限をユーザーterryから削除します。

REVOKE admin, ddl FROM terry;

ADMIN権限を持っている権限削除者が、patが所有するcustomers表に対するUPDATE権限をterryから削除します。

REVOKE update ON pat.customers FROM terry;

ROLLBACK

現行のトランザクションで行った処理を元に戻すには、ROLLBACK文を使用します。

必要な権限

なし

SQL構文

ROLLBACK [WORK]

パラメータ

ROLLBACK文では次のオプションのキーワードを使用できます。

パラメータ 説明
[WORK] SQL標準に準拠するためにサポートされているオプションの句。ROLLBACKROLLBACK WORKは同等です。

説明

PassThrough接続属性が0(ゼロ)よりも大きい値で指定されている場合は、Oracle Databaseトランザクションもロールバックされます。

ロールバックによって、すべてのオープン・カーソルがクローズされます。

HRスキーマのregions表に行を1つ挿入し、トランザクションをロールバックします。最初に、AUTOCOMMITを0に設定します。

Command> SET AUTOCOMMIT 0;
Command> INSERT INTO regions VALUES (5,'Australia');
1 row inserted.
Command> SELECT * FROM regions;
< 1, Europe >
< 2, Americas >
< 3, Asia >
< 4, Middle East and Africa >
< 5, Australia >
5 rows found.
Command> ROLLBACK;
Command> SELECT * FROM regions;
< 1, Europe >
< 2, Americas >
< 3, Asia >
< 4, Middle East and Africa >
4 rows found.

関連項目


COMMIT

SELECT

SELECT文は、1つ以上の表からデータを取得します。取得されたデータは、結果表結果セットまたは問合せ結果と呼ばれる表の形式で表示されます。

必要な権限

オブジェクトの所有者に必要な権限はありません。

別のユーザーのオブジェクトの場合、SELECTが必要です。

別のユーザーのオブジェクトの場合、SELECT ... FOR UPDATEにはUPDATE権限も必要です。

SQL構文

SELECT文の一般的な構文は、次のとおりです。

[WithClause] SELECT [hint][FIRST NumRows | ROWS m TO n] [ALL | DISTINCT] SelectList
  FROM TableSpec [,...]
  [WHERE SearchCondition]
  [GROUP BY GroupByClause [,...] [HAVING SearchCondition]]
  [ORDER BY OrderByClause [,...]]
  [FOR UPDATE [OF [[Owner.]TableName.]ColumnName [,...]] 
    [NOWAIT | WAIT Seconds] ]

集合演算子UNIONUNION ALLMINUSまたはINTERSECTを含むSELECT文の構文は、次のとおりです。

SELECT [hint] [ROWS m TO n] [ALL] SelectList
  FROM TableSpec [,...]
    [WHERE SearchCondition]
    [GROUP BY GroupByClause [,...] [HAVING SearchCondition] [,...]]
  {UNION [ALL] | MINUS | INTERSECT}
  SELECT [ROWS m TO n] [ALL] SelectList
    FROM TableSpec [,...]
     [WHERE SearchCondition]
     [GROUP BY GroupByClause [,...] [HAVING SearchCondition [,...] ] ]
     [ORDER BY OrderByClause [,...] ]

OrderByClauseの構文は次のとおりです。

{ColumnID|ColumnAlias|Expression} [ASC|DESC] [NULLS { FIRST|LAST }]

パラメータ

パラメータ 説明
[WithClause] WITH句は、副問合せのファクタリングとも呼ばれ、副問合せブロックに名前を割り当てることができ、その後はその名前をトップレベルのSELECT文で複数回参照できます。WITH句の構文は、「WithClause」を参照してください。
hint SELECT文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。
FIRST NumRows 取得する行の数を指定します。NumRowsには、正のINTEGER値か動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。
ROWS m TO n 取得する行の範囲を指定し、mは選択する最初の行、nは選択する最後の行です。行のカウントは、行1から始まります。問合せが順序付けられ、nNumRowsの値が同じであれば、問合せSELECT ROWS 1 TO nは、SELECT FIRST NumRowsと同じ行を返します。

mおよびn値には、正のINTEGER値か動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。

ALL 問合せ結果の重複する行が削除されないようにします。ALLDISTINCTも指定しない場合は、ALLがデフォルトです。
DISTINCT 問合せ結果の各行が一意となるようにします。この比較では、NULL値はすべて同じとみなされます。重複行は評価されません。

LOB列にはSELECT ...は使用できません。

SelectList 問合せ結果の列の導出方法を指定します。SelectListの構文の詳細は、「SelectList」を参照してください。
FROM TableSpec SELECT文で参照される表を指定します。問合せごとの表の最大数は24です。

TableSpecは、行を選択する表を指定します。SELECT文のFROM句によって生成された導出表を指定することもできます。TableSpecの構文の詳細は、「TableSpec」を参照してください。

WHERE SearchCondition WHERE句は、取得される行のセットを決定します。通常、SearchConditionFALSEまたはNULLの行は処理から除外されますが、SearchConditionを使用して外部結合を指定でき、外部結合では、関連する内部表の行に関してSearchConditionTRUEと評価されない外部表の行も返され、内部表を参照する投影式はNULLに設定されます。

列およびROWID式に単項演算子(+)を使用して、外部結合を示すことができます。(+)演算子は、内部表を参照する結合条件のすべての列およびROWID式の後に指定する必要があります。(+)演算子を使用するにはいくつか条件があります。通常、これらの条件によって、作成できる外部結合問合せの種類は制限されます。(+)演算子はWHERE句に指定することができ、HAVING句には指定できません。2つの表を外部結合することはできません。外部結合条件をORで結ぶことはできません。

検索条件の詳細は、第5章「検索条件」を参照してください。

GROUP BY GroupByClause [,...] GROUP BY句には、1つ以上の式を指定して、SelectListに集計関数を指定したり、行のグループに関数を適用する場合のグループ化に使用します。GROUP BY句の構文および説明は、「GROUP BY句」を参照してください。
HAVING SearchCondition SELECT文でHAVING句を使用して、集計結果のグループをフィルタ処理できます。SELECT文にHAVING句が存在すると、問合せは集計問合せとなります。WHERE句を除く句の集計関数のソース以外で参照されるすべての列は、GROUP BY句に指定する必要があります。

副問合せは、HAVING句で指定できます。

(+) 単純な結合(内部結合とも呼ばれる)では、SearchConditionで指定された結合条件を満たす結合表の行の組合せごとに1行が返されます。外部結合はこの演算子の拡張機能であり、結合された内部表での一致する行の有無に関係なく、外部表のすべての行が返されます。一致する行がなかった場合は、内部表を参照する投影式にNULL値が与えられます。
ORDER BY OrderByClause [,...] 指定した列または式に基づいて、問合せの結果行をソートします。ソート・キーとして使用する列を、優先順位の高いものから順に指定します。

ORDER BY句は列の別名をサポートしており、列の別名はORDER BY句でのみ参照できます。単一の問合せ内では、同じ名前を持つ、列の別名を複数宣言できますが、その別名を参照するとエラーが発生します。

ColumnID 選択リストの列に対応する必要があります。ソートする列を指定するには、その名前または序数を指定します。選択リストの最初の列の番号は1です。選択リストの列を参照する場合、それが単純な列でない場合は、列番号を使用する方が適切です。これには、集計関数、算術式、定数などが該当します。

ORDER BY句のColumnIDの構文は次のとおりです。

{ColumnNumber |[[Owner.]TableName.] ColumnName}

ColumnAlias ORDER BY句で使用される列の別名は、SelectListの列に対応している必要があります。同じ別名で複数の列を指定できます。

{* | [Owner.]TableName.* |

{Expression | [[Owner.]TableName.]ColumnName |

[[Owner.]TableName.]ROWID

}

[[AS] ColumnAlias]} [,...]

ASC|DESC ORDER BY句で指定する列ごとに、ソート順序を昇順または降順で指定できます。ASC(昇順)またはDESC(降順)のいずれも指定しない場合は、昇順が適用されます。すべての文字データ型は、NLS_SORTセッション・パラメータの現在の値に従ってソートされます。
NULLS { FIRST|LAST } ORDER BY句を指定する場合にのみ有効であり、オプションです。ASCまたはDESCを指定する場合、NULLS FIRSTまたはNULLS LASTASCまたはDESCの後に指定する必要があります。

順序付けする問合せでNULL値の行が最初に返されるようにするには、NULLS FIRSTを指定します。順序付けする問合せでNULL値の行が最後に返されるようにするには、NULLS LASTを指定します。行が昇順で返される場合は、NULLS LASTがデフォルトです。行が降順で返される場合は、NULLS FIRSTがデフォルトです。

ORDER BY句を指定する際に、ASCまたはDESC句を指定せず、NULLS FIRSTまたはNULLS LAST句を指定しない場合、デフォルトの順序は、昇順のNULLS LASTです。

FOR UPDATE

[OF [[Owner.]

TableName.]

ColumnName [,...]]

[NOWAIT | WAIT Seconds]

FOR UPDATE
  • FOR UPDATEは、分離モードに関係なく、現在のトランザクションが終了するまで、要素(通常は行)のロックを保持します。その要素に対する他のすべてのトランザクションの操作は、トランザクションがコミットまたはロールバックされるまで実行されません。

  • FOR UPDATEは、結合、ORDER BYGROUP BYおよびDISTINCT句で使用されます。オプティマイザが選択した表/行のロック方法に応じて、表または行のいずれかの更新ロックが取得されます。

  • FOR UPDATE OF句が指定されていないかぎり、UPDATEモードでは、WHERE句の条件を満たすすべての表の行がロックされます。この句ではロックする表を指定します。

  • 行ロックを使用する場合、FROM句の表リストのすべての表で、条件を満たすすべての行が更新モードでロックされます。条件を満たす行とは、WHERE句を満たす行です。表ロックを使用する場合、条件を満たす行の有無にかかわらず、表は更新モードでロックされます。

  • シリアライズ可能な分離レベルと行ロックが有効になっている場合、条件を満たさない行は共有モードに切り換えられます。コミット読取り分離レベルと行ロックが有効になっている場合、条件を満たさない行のロックは解除されます。

  • SELECT...FOR UPDATEのロックは、SELECTのロックによってはブロックされません。

FOR UPDATE [OF [[Owner.]TableName.]ColumnName [,...] ]

  • このモードでは、オプションで、更新のためにロックされる表の列名を含めます。

[NOWAIT | WAIT Seconds ]

  • これは、選択した行がロックされている場合の処理方法を指定します。表レベルのロックまたはデータベース・レベルのロックには適用されません。

  • NOWAITは、ロックの待機時間がないことを指定します。ロックを取得できない場合、エラーが返されます。

  • WAIT Secondsでは、ロック・タイムアウト設定を次のように指定します。

    指定された時間内にロックを取得できない場合、エラーが返されます。

    ロックのタイムアウト設定は、秒または小数秒単位で表されます。Secondsのデータ型はNUMBERです。0.0から1000000.0の値が有効です。

  • NOWAITおよびWAITのいずれも指定しない場合、トランザクションのロック・タイムアウト間隔が使用されます。

SelectQuery1

{UNION [ALL] | MINUS | INTERSECT}

SelectQuery2

SelectQuery1およびSelectQuery2の結果が結合されることを指定し、この場合、SelectQuery1およびSelectQuery2は、いくつかの制限を含む一般的なSELECT文です。

UNION演算子は、SelectListに互換性のある2つの問合せの結果を結合します。UNION ALLを指定した場合、両方のSELECT文から返された重複する行が保持されます。その他の場合、重複は削除されます。

MINUS演算子は、最初の問合せで返されたが2番目の問合せで返されなかった行を1つの結果に結合します。

INTERSECT演算子は、両方の問合せで返された行のみを1つの結果に結合します。

両方のSELECT文で選択された対応するエントリのデータ型には、互換性が必要です。データ型を変換するには、CAST演算子を使用します。NULL値可能かどうかは一致している必要はありません。

結果内の列の長さは、列に対応する選択値のうち長い方になります。最終的な結果の列名は、最も左側で選択された列の名前になります。

集合演算子UNIONUNION ALLMINUSINTERSECTを使用して、複数の問合せを組み合せることができます。

集合演算子の一方または両方のオペランドに集合演算子を指定できます。複数の集合演算子やネストされた集合演算子は、左から右に評価されます。

同じ問合せで集合演算子を同時に指定できます。

集合演算子を指定するSELECT文には、次の制限があります。

  • どちらのSELECT文でも、FIRST NumRowsは指定できません。

  • 最終結果をソートするためにORDER BYを指定することはできますが、集合演算子の各オペランドで使用することはできません。ORDER BY句で指定できるのは、最も左側のSELECT文の表の列名または列の別名のみです。

  • GROUP BYは、集合演算子の各SELECTオペランドをグループ化するために使用できますが、集合演算子の結果をグループ化するためには使用できません。

  • マテリアライズド・ビューや結合表では、集合演算子を使用できません。


説明

  • 相関名を使用する場合、相関名は基本名の構文ルールを満たしている必要があります。(「基本名」を参照。)1つのSELECT文のすべての相関名は、一意である必要があります。相関名は、表をその表自体に結合する場合に役立ちます。FROM句内で表の相関名を複数回定義し、選択リストとWHERE句でその相関名を使用して、その表の列を指定します。相関名の詳細は、「TableSpec」を参照してください。

  • SELECT...FOR UPDATEは副問合せを指定するSELECT文で使用できますが、最も外側の問合せでのみ指定できます。

  • 問合せで、FIRST NumRowsまたはROWS m TO nが指定されている場合、返される行の数を制限するためにROWNUMを使用することはできません。

  • FIRST NumRowsおよびROWS m TO nは、同じSELECT文で同時に使用することはできません。

  • PL/SQLでSELECT...INTO文を使用します。PL/SQLの外側でSELECT...INTO文を使用する場合、TimesTenでは構文は許容されますが、暗黙的に無視されます。

この例では、SELECT文での列の別名(max_salary)の使用方法を示します。

SELECT MAX(salary) AS max_salary 
FROM employees 
WHERE employees.hire_date > '2000-01-01 00:00:00';
< 10500 >
1 row found.

この例では、2つの表ordersおよびlineitemsを使用します。

orders表およびlineitems表は、次のように作成されます。

CREATE TABLE orders(orderno INTEGER, orderdate DATE, customer CHAR(20));

CREATE TABLE lineitems(orderno INTEGER, lineno INTEGER, 
  qty INTEGER, unitprice DECIMAL(10,2));

つまり、注文ごとにorders表に1つのレコードがあり、注文の各明細を示すレコードがlineitemsにあります。

年頭以降に入力されたすべての注文の合計を検索するには、HAVING句を使用して、2000年1月1日以降に入力された注文のみを選択します。

SELECT o.orderno, customer, orderdate, SUM(qty * unitprice)
FROM orders o, lineitems l
WHERE o.orderno=l.orderno
GROUP BY o.orderno, customer, orderdate
HAVING orderdate >= DATE '2000-01-01';

次の問合せについて考えてみます。

SELECT * FROM tablea, tableb
WHERE tablea.column1 = tableb.column1 AND tableb.column2 > 5
FOR UPDATE;

この問合せは、次の条件を満たすtableaのすべての行をロックします。

  • tablea.column1の値が、少なくとも1つのtableb.column1の値と同じ。このとき、tableb.column2は5より大きい。

この問合せは、次の条件を満たすtablebのすべての行もロックします。

  • tableb.column2の値が5よりも大きい。

  • tableb.column1の値が、少なくとも1つのtablea.column1の値と同じ。

WHERE句を指定しない場合、両方の表のすべての行がロックされます。

この例は、(+)結合演算子を示しています。

SELECT * FROM t1, t2
WHERE t1.x = t2.x(+);

外部結合条件はORで連結できないため、次の問合せはエラーとなります。

SELECT * FROM t1, t2, t3
WHERE t1.x = t2.x(+) OR t3.y = 5;

次の問合せは有効です。

SELECT * FROM t1, t2, t3
WHERE t1.x = t2.x(+) AND (t3.y = 4 OR t3.y = 5);

IN演算子を使用して(+)記号の付いた列を比較することはできません。たとえば、次の問合せはエラーとなります。

SELECT * FROM t1, t2, t3
WHERE t1.x = t2.x(+) AND t2.y(+) IN (4,5);

次の問合せは有効です。

SELECT * FROM t1, t2, t3
WHERE t1.x = t2.x(+) AND t1.y IN (4,5);

次の問合せは、内部結合になります。(+)演算子が指定されていない条件は、内部結合として扱われます。

SELECT * FROM t1, t2
WHERE t1.x = t2.x(+) AND t1.y = t2.y;

次の問合せのWHERE句には、外部結合の内部表の列と定数を比較する条件が含まれています。(+)演算子が指定されていないため、この条件は内部結合として扱われます。

SELECT * FROM t1, t2
WHERE t1.x = t2.x(+) AND t2.y = 3;

結合のその他の例は、「JoinedTable」を参照してください。

次の例は、student表の順序の現在の値を返します。

SELECT SEQ.CURRVAL FROM student;

次の問合せのFROM句にはSELECT文が含まれているため、導出表が生成されます。

SELECT * FROM t1, (SELECT MAX(x2) maxx2 FROM t2) tab2 
WHERE t1.x1 = tab2.maxx2;

次の問合せは、2つのSELECT文の結果を結合します。

SELECT * FROM t1 
WHERE x1 IN (SELECT x2 FROM t2) 
UNION 
SELECT * FROM t1 
WHERE x1 IN (SELECT x3 FROM t3);

次のように、カテゴリ内の最高価格と同じ価格のすべての注文を選択します。

SELECT * FROM orders WHERE price = (SELECT MAX(price) 
FROM stock WHERE stock.cat=orders.cat);

次の例では、INTERSECT集合演算子の使用方法を示します。employees表にNULLdepartment_id値があります。departments表では、department_idNOT NULLの主キーとして定義されます。INTERSECT集合演算子を使用して返される行には、department_id値がNULLdepartments表の行は含まれません。

Command> SELECT department_id FROM employees INTERSECT SELECT department_id 
       > FROM departments;
< 10 >
< 20 >
< 30 >
< 40 >
< 50 >
< 60 >
< 70 >
< 80 >
< 90 >
< 100 >
< 110 >
11 rows found.
Command> SELECT DISTINCT department_id FROM employees;
< 10 >
< 20 >
< 30 >
< 40 >
< 50 >
< 60 >
< 70 >
< 80 >
< 90 >
< 100 >
< 110 >
< <NULL> >
12 rows found.

次の例では、最初の問合せでは返されるが、2番目の問合せでは返されない行を組み合せて、MINUS集合演算子の使用方法を示します。employees表にNULLdepartment_id値を含む行のみが返されます。

Command> SELECT department_id FROM employees 
       > MINUS SELECT department_id FROM departments;
< <NULL> >
1 row found.

次の例では、GROUP BY句におけるSUBSTR式の使用方法およびHAVING句における副問合せの使用方法を示します。最初の10行が返されます。

Command> SELECT ROWS 1 TO 10 SUBSTR (job_id, 4,10), department_id, manager_id, 
       > SUM (salary) FROM employees
       > GROUP BY SUBSTR (job_id,4,10),department_id, manager_id
       > HAVING (department_id, manager_id) IN
       > (SELECT department_id, manager_id FROM employees x
       > WHERE x.department_id = employees.department_id)
       > ORDER BY SUBSTR (job_id, 4,10),department_id,manager_id;
< ACCOUNT, 100, 108, 39600 >
< ACCOUNT, 110, 205, 8300 >
< ASST, 10, 101, 4400 >
< CLERK, 30, 114, 13900 >
< CLERK, 50, 120, 22100 >
< CLERK, 50, 121, 25400 >
< CLERK, 50, 122, 23600 >
< CLERK, 50, 123, 25900 >
< CLERK, 50, 124, 23000 >
< MAN, 20, 100, 13000 >
10 rows found.

次の例では、更新のためにemployees表をロックし、ロックが取得できるまで10秒間待機します。ロックが10秒以内に取得できない場合、エラーが返されます。最初の5行が選択されます。

Command> SELECT FIRST 5 last_name FROM employees FOR UPDATE WAIT 10;
< King >
< Kochhar >
< De Haan >
< Hunold >
< Ernst >
5 rows found.

次の例では、更新のためにdepartments表をロックします。選択した行が別のプロセスにロックされており、ロックが取得できない場合はエラーが返されます。これは、NOWAITが指定されているためです。

Command> SELECT FIRST 5 last_name e FROM employees e, departments d 
       > WHERE e.department_id = d.department_id 
       > FOR UPDATE OF d.department_id NOWAIT;
< Whalen >
< Hartstein >
< Fay >
< Raphaely >
< Khoo >
5 rows found.

次のように、HRスキーマを使用して、副問合せとFOR UPDATE句を同時に使用する例を示します。

Command> SELECT employee_id, job_id FROM job_history 
       > WHERE (employee_id, job_id) NOT IN (SELECT employee_id, job_id 
       > FROM employees) 
       > FOR UPDATE;
< 101, AC_ACCOUNT >
< 101, AC_MGR >
< 102, IT_PROG >
< 114, ST_CLERK >
< 122, ST_CLERK >
< 176, SA_MAN >
< 200, AC_ACCOUNT >
< 201, MK_REP >
8 rows found.

次のように、SELECT ROWS m TO nおよびSELECT FIRSTの動的パラメータのプレースホルダを使用します。

Command> SELECT ROWS ? TO ? employee_id FROM employees;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 (TT_INTEGER) > 1
Enter Parameter 2 (TT_INTEGER) > 3
< 100 >
< 101 >
< 102 >
3 rows found.
Command> SELECT ROWS :a TO :b employee_id FROM employees;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 (TT_INTEGER) > 1
Enter Parameter 2 (TT_INTEGER) > 3
< 100 >
< 101 >
< 102 >
3 rows found.
Command> SELECT FIRST ? employee_id FROM employees;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 (TT_INTEGER) > 3
< 100 >
< 101 >
< 102 >
3 rows found.

次の例では、ORDER BY句でのNULLS LASTの使用方法を示します。employees表を問い合せて、コミッションの割合が.30より大きいかNULLである従業員を検索します。最初の7人の従業員を選択し、commission_pctおよびlast_nameで順序付けします。commision_pctを降順で順序付けし、NULLS LASTを使用してNULL値の行を問合せの最後に表示します。commission_pctlast_nameを出力します。

Command> SELECT FIRST 7 commission_pct,last_name
         FROM employees where commission_pct > .30
         OR commission_pct IS NULL
         ORDER BY commission_pct DESC NULLS LAST,last_name;
< .4, Russell >
< .35, King >
< .35, McEwen >
< .35, Sully >
< <NULL>, Atkinson >
< <NULL>, Austin >
< <NULL>, Baer >
7 rows found.

WithClause

構文

WithClauseの構文は、次のとおりです。

WITH QueryName AS ( Subquery ) [, QueryName AS ( Subquery )] ...

パラメータ

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

パラメータ 説明
QueryName AS (Subquery) SELECT文で複数回使用できる副問合せの別名を指定します。

説明

副問合せのファクタリングによってWITH句が提供され、この句を使用して副問合せブロックに名前を割り当てることができ、その後はその名前をメインのSELECT問合せで複数回参照できます。問合せ名は、メインの問合せとメインの問合せに含まれる副問合せで参照できます。

WITH句は、メインのSELECT文の接頭辞としてのみ定義できます。

副問合せのファクタリングは、重複する、または複雑な副問合せブロックを1つ以上の場所で使用する複雑な問合せの簡素化に役立ちます。また、TimesTenでは、副問合せのファクタリングを使用し、副問合せブロックを一度評価およびマテリアライズして、その結果をSELECT文での各参照に提供することで、問合せを最適化します。

メインの問合せで集合演算子UNIONMINUS、およびINTERSECTを指定できます。

WITH句の使用制限:

  • ビューまたはマテリアライズド・ビュー定義でWITH句を使用しないでください。

  • グローバル問合せでWITH句を使用しないでください。

  • 再帰的な副問合せのファクタリングはサポートされていません。

  • 副問合せまたは導出表ではWITH句を使用しないでください。

  • 問合せの別名に列パラメータ・リストを指定できません。たとえば、TimesTenではWITH w1(c1,c2) AS ...はサポートされません。

次の例では、初期問合せブロックに対して問合せ名dept_costsおよびavg_costを作成し、これらの名前をメインの問合せの本体で使用します。

Command> WITH dept_costs AS (
> SELECT department_name, SUM(salary) dept_total
> FROM employees e, departments d
> WHERE e.department_id = d.department_id
> GROUP BY department_name),
> avg_cost AS (
> SELECT SUM(dept_total)/COUNT(*) avg
> FROM dept_costs)
> SELECT * FROM dept_costs
> WHERE dept_total >
> (SELECT avg FROM avg_cost)
> ORDER BY department_name;

> DEPARTMENT_NAME DEPT_TOTAL
-------------------------------
Sales 304500
Shipping 156400

SelectList

SQL構文

SELECT文のSelectListパラメータの構文は次のとおりです。

{* | [Owner.]TableName.* | 
  { Expression | [[Owner.]TableName.]ColumnName |
    [[Owner.]TableName.]ROWID | NULL
  }
  [[AS] ColumnAlias] } [,...]

パラメータ

SELECT文のSelectListパラメータは次のとおりです。

パラメータ 説明
*
問合せ結果の列として、FROM句に指定されたすべての表のすべての列を含めます。
[Owner.]TableName.* 指定した表のすべての列を結果に含めます。
Expression 集計問合せに、GROUP BY句または集計関数が含まれます。

選択リストが集計問合せでない場合、列参照はFROM句内の表を参照する必要があります。

集計問合せの選択リスト内の列参照は、GROUP BY句内の列リストを参照する必要があります。GROUP BY句がない場合、列参照はFROM句内の表を参照する必要があります。GROUP BY句の詳細は、「GROUP BY句」を参照してください。

[[Owner.]Table.] ColumnName 指定された所有者の指定された表の特定の列を含めます。順序のCURRVALまたはNEXTVAL列も指定できます。詳細は、「CURRVALとNEXTVALによるSEQUENCE値の増加」を参照してください。
[[Owner.]Table.] ROWID 指定された所有者の指定された表のROWID擬似列を含めます。
NULL NULLを指定した場合、デフォルトではVARCHAR(0)のデータ型が生成されます。結果を別のデータ型に変換するには、CAST関数を使用します。ORDER BY句にはNULLを指定できます。
ColumnAlias ORDER BY句で使用される列の別名は、SelectListの列に対応している必要があります。同じ別名で複数の列を指定できます。

{*|[Owner.]TableName.*|

{Expression |[[Owner.]TableName.]ColumnName |

[[Owner.]TableName.]ROWID

}

[[AS] ColumnAlias]} [,...]


説明

  • 各句は、構文に示されたとおりの順序で指定する必要があります。

  • TimesTenでは、SelectListで副問合せはサポートされません。

  • 選択リストの結果列は、次のいずれかの方法で取得できます。

    • 結果列は、FROM句にリストされているいずれかの表から直接取得できます。

    • 結果列の値は、FROM句にリストされている表の特定の列の値を使用して、算術式を使用して計算できます。

    • 単一表の複数の列の値を算術式で結合して、結果列の値を生成できます。

    • 集計関数(AVGMAXMINSUMおよびCOUNT)を使用すると、行のグループの結果列の値を計算できます。集計関数は、単独で使用することも、式の中で使用することもできます。同じ表の複数の列を処理するDISTINCT修飾子を含む集計関数を指定できます。GROUP BY句を指定しない場合は、問合せを満たすすべての行に関数が適用されます。GROUP BY句を指定した場合は、GROUP BY句で定義された各グループに1回ずつ関数が適用されます。GROUP BY句とともに集計関数を使用する場合は、選択リストに集計関数、算術式、GROUP BY句の列を含めることができます。GROUP BY句の詳細は、「GROUP BY句」を参照してください。

    • 固定値を含む結果列は、定数を指定するか、または定数のみを含む式を使用して作成できます。

  • 選択リストを使用すると、結果列の取得方法を指定できるだけでなく、問合せ結果を表示する位置を制御できます。選択リストで最初に指定した結果列が問合せ結果の最も左側の列に表示され、残りの列も同様に表示されます。

  • SelectListの結果列は、左から右の順に番号が付けられます。左端の列の番号は1です。ORDER BY句内のこの列番号によって、結果列を参照できます。これは、算術式または集計関数で定義した列を参照する場合に特に便利です。

  • 表をその表自体と結合するには、FROM句内で表の相関名を複数回定義し、選択リストとWHERE句でその相関名を使用して、その表の列を指定します。

  • GROUP BY句を使用した場合、次のように、選択リストに従ってグループごとに1つの応答が返されます。

    • 行は、グループ化される前にWHERE句によって削除されます。

    • GROUP BY句は、結果行をグループ化します。詳細は、「GROUP BY句」を参照してください。

    • 選択リストの集計関数は、グループ単位で計算されます。

次の例では、部品が届くまでの平均日数の値のみが返されます。

SELECT AVG(deliverydays)
FROM purchasing.supplyprice;

次の文は、20日未満で配送されるすべての部品の部品番号および配送時刻を返します。

SELECT partnumber, deliverydays
FROM purchasing.supplyprice
WHERE deliverydays < 20;

単一の部品で複数行が返される場合があります。

次の文は、各部品の部品番号と平均価格を返します。

SELECT partnumber, AVG(unitprice)
FROM purchasing.supplyprice
GROUP BY partnumber;

次の例では、結合によってカリフォルニア州の業者の名前と住所が返されます。行は、partnumberの値の昇順で返されます。重複する部品番号を含む行は、vendornameの値の昇順で返されます。FROM句では、選択リストとWHERE句の両方で使用される、2つの相関名(vs)を定義しています。vendornumber列は、vendorssupplypriceで共通する唯一の列です。

SELECT partnumber, vendorname, s.vendornumber,vendorcity
  FROM purchasing.supplyprice s, purchasing.vendors v
  WHERE s.vendornumber = v.vendornumber AND vendorstate = 'CA'
ORDER BY partnumber, vendorname;

次の問合せでは、表purchasing.partsをそれ自体に結合して、シリアル番号が1133-P-01の部品と同じ販売価格の部品を特定します。

SELECT q.partnumber, q.salesprice
  FROM purchasing.parts p, purchasing.parts q
  WHERE p.salesprice = q.salesprice AND p.serialnumber = '1133-P-01';

次に、特定の行のROWIDを取得する方法の例を示します。取得したROWIDの値は、後で別のSELECT文、DELETE文またはUPDATE文で使用できます。

SELECT rowid
FROM purchasing.vendors
WHERE vendornumber = 123;

次に、列の別名を使用して、employees表からデータを取得する方法の例を示します。

SELECT MAX(salary) AS max_salary FROM employees;

TableSpec

SQL構文

SELECT文のTableSpecパラメータの構文は次のとおりです。

{[Owner.]TableName [CorrelationName] | JoinedTable | DerivedTable}

単純な表指定の構文は、次のとおりです。

[Owner.]TableName

パラメータ

SELECT文のTableSpecパラメータは次のとおりです。

パラメータ 説明
[Owner.]TableName 参照する表を指定します。
CorrelationName CorrelationNameは、直前で指定した表の別名を指定します。SELECT文の他の場所でその表の列にアクセスする際、文の中で実際の表名ではなく相関名を使用します。相関名の有効範囲は、それが使用されているSQL文です。相関名は、基本名の構文ルールを満たしている必要があります。「基本名」を参照してください。

単一の文のすべての相関名は、一意である必要があります。

JoinedTable 表の結合を定義する問合せを指定します。JoinedTableの構文の詳細は、「JoinedTable」を参照してください。
DerivedTable SELECT文の評価から導出された表を指定します。このSELECT文には、FIRST NumRowsまたはROWS m TO n句を指定できません。DerivedTableの構文の詳細は、「DerivedTable」を参照してください。

JoinedTable

JoinedTableパラメータには、CROSS JOININNER JOINLEFT OUTER JOINまたはRIGHT OUTER JOINから導出された表を指定します。

SQL構文

JoinedTableの構文は次のとおりです。

{CrossJoin | QualifiedJoin}

CrossJoinは、次のようになります。

TableSpec1 CROSS JOIN TableSpec2

QualifiedJoinは、次のようになります。

TableSpec1 [JoinType] JOIN TableSpec2 ON SearchCondition

QualifiedJoinパラメータでは、JoinTypeの構文は次のとおりです。

{INNER | LEFT [OUTER] | RIGHT [OUTER]}

パラメータ

SELECT文のTableSpec句のJoinedTableパラメータは次のとおりです。

パラメータ 説明
CrossJoin 2つの表に相互結合を実行します。戻り値は、入力表のデカルト積となる結果表です。結果は、次の構文を持つ問合せと同じになります。

SELECT Selectlist FROM Table1, Table2

QualifiedJoin 結合がJoinTypeの種類になることを指定します。
TableSpec1 JOIN句の最初の表を指定します。
TableSpec2 JOIN句の2番目の表を指定します。
JoinType JOIN 実行する結合の種類を指定します。サポートされる結合の種類は、次のとおりです。
  • INNER

  • LEFT [OUTER]

  • RIGHT [OUTER]

INNER JOINは、SearchConditionを満たす2つの表の行を結合した結果表を返します。

LEFT OUTER JOINは、SearchConditionに一致する結合行と、SearchConditionがTRUEと評価されなかった最初の表の行および2番目の表のすべての行を返します。

RIGHT OUTER JOINは、SearchConditionに一致する結合行と、SearchConditionがTRUEと評価されなかった2番目の表の行および最初の表のすべての行を返します。

ON SearchCondition JOINパラメータで使用する検索基準を指定します。SearchConditionが参照できるのは、現在条件を満たしている結合内で参照されている表のみです。

説明

  • FULL OUTER JOINはサポートされていません。

  • 結合表は、マテリアライズド・ビューを定義する文以外のすべての文で、FROM句内の表を置き換えるために使用できます。したがって、結合表は、UNIONMINUSINTERSECT、副問合せ、非マテリアライズド・ビューまたは導出表で使用できます。

  • 結合表のオペランドに副問合せは指定できません。たとえば、次の文はサポートされていません

    SELECT * FROM
      regions INNER JOIN (SELECT * FROM countries) table2
      ON regions.region_id=table2.region_id;
    
  • 結合表のオペランドとしてビューを指定できます。

  • 結合表のオペランドとして一時表は指定できません。

  • OUTER JOINは、WHERE句のSearchConditionでの(+)演算子の使用またはJOIN表操作の使用という2つの方法で指定できます。同じ文で2つの指定方式の両方を使用することはできません。

  • 結合順およびグループ化はJoinedTable演算と併用できますが、(+)演算子とは併用できません。たとえば、次の演算は(+)演算子と併用できません

    t LEFT JOIN (t2 INNER JOIN t3 ON x2=x3) ON (x1 = x2 - x3)
    

これらの例では、HRスキーマのregionsおよびcountries表を使用します。

次の例では、左外部結合を実行します。

SELECT * FROM regions LEFT JOIN countries
  ON regions.region_id=countries.region_id
  WHERE regions.region_id=3;

< 3, Asia, JP, Japan, 3 >
< 3, Asia, CN, China, 3 >
< 3, Asia, IN, India, 3 >
< 3, Asia, AU, Australia, 3 >
< 3, Asia, SG, Singapore, 3 >
< 3, Asia, HK, HongKong, 3 >
6 rows found.

次のように、左外部結合を(+)演算子とともに実行することもできます。

SELECT * FROM regions, countries
  WHERE regions.region_id=countries.region_id (+)
    AND regions.region_id=3;

(+)演算子と併用する結合のその他の例は、「例」を参照してください。

次の例では、右外部結合を実行します。

SELECT * FROM regions RIGHT JOIN countries
  ON regions.region_id=wountries.region_id
  WHERE regions.region_id=3;

< AU, Australia, 3, 3, Asia >
< CN, China, 3, 3, Asia >
< HK, HongKong, 3, 3, Asia >
< IN, India, 3, 3, Asia >
< JP, Japan, 3, 3, Asia >
< SG, Singapore, 3, 3, Asia >
6 rows found.

次の例では、右外部結合を(+)演算子とともに実行します。

SELECT * FROM countries, regions
       WHERE regions.region_id (+)=countries.region_id
       AND countries.region_id=3;
< JP, Japan, 3, 3, Asia >
< CN, China, 3, 3, Asia >
< IN, India, 3, 3, Asia >
< AU, Australia, 3, 3, Asia >
< SG, Singapore, 3, 3, Asia >
< HK, HongKong, 3, 3, Asia >
6 rows found.

右結合方式では、同じ行が異なる表示順序で生成されることに注意してください。結合結果の行の順序は予期できません。

次の例では、内部結合を実行します。

SELECT * FROM regions INNER JOIN countries
  ON regions.region_id=countries.region_id
  WHERE regions.region_id=2;

< 2, Americas, US, United States of America, 2 >
< 2, Americas, CA, Canada, 2 >
< 2, Americas, BR, Brazil, 2 >
< 2, Americas, MX, Mexico, 2 >
< 2, Americas, AR, Argentina, 2 >
5 rows found.

次の例では、相互結合を実行します。

SELECT * FROM regions CROSS JOIN countries 
  WHERE regions.region_id=1;

< 1, Europe, AR, Argentina, 2 >
< 1, Europe, AU, Australia, 3 >
< 1, Europe, BE, Belgium, 1 >
< 1, Europe, BR, Brazil, 2 >
...
< 1, Europe, SG, Singapore, 3 >
< 1, Europe, UK, United Kingdom, 1 >
< 1, Europe, US, United States of America, 2 >
< 1, Europe, ZM, Zambia, 4 >
< 1, Europe, ZW, Zimbabwe, 4 >
25 rows found.

DerivedTable

導出表は、FROM句のSELECT文の結果で、別名を持ちます。

SQL構文

DerivedTableの構文は次のとおりです。

(Subquery) [CorrelationName]

パラメータ

SELECT文のTableSpec句のDerivedTableパラメータは次のとおりです。

パラメータ 説明
Subquery 副問合せの詳細は、「副問合せ」を参照してください。
CorrelationName オプションで、CorrelationNameを使用して、導出表の別名を指定します。問合せで参照される表名とは異なる名前である必要があります。

説明

導出表を使用する場合は、次の制限が適用されます。

  • 別の表を参照しないSELECT文ではDUAL表を使用できますが、この場合は少なくとも1つの行を返す必要があります。DUALから選択することは、定数式(結果が定数値になる式)をSELECT文で計算する場合に便利です。 DUALには行が1つしかないため、定数が返されるのは1回のみです。

  • Subqueryは、別の導出表の列を参照できません。

  • 導出表は、結合表のソースとしては使用できません。

  • 導出表は、DELETE文またはUPDATE文のターゲットとしては使用できません。

GROUP BY句

GROUP BY句を指定すると、データベースで、選択した行を各行の式の値に基づいてグループ化し、各グループのサマリー情報を1行戻すことができます。GROUP BY句を省略した場合、問合せの結果全体が1つのグループとして扱われます。この句にCUBEまたはROLLUPを指定した場合、標準グループ化の他に超集合グループ化が結果に含まれます。

GROUP BY句の式では、次のことが可能です。

  • 1つまたは複数の列を指定します。

  • 算術演算、ROWID擬似列またはNULLを使用します。

  • 日付、定数または動的パラメータを使用します。

  • ROLLUPまたはCUBE句を使用すると、標準グループ化の他に超集合グループ化が結果で生成されます。超集合グループ化は、GROUP BY句で標準グループ化とともに返される、計算された小計および合計です。

  • GROUPING SETS句を使用して、生成する超集合グループ化を指定します。

GROUP BY句を使用する場合、SelectListには集計関数およびGROUP BY句で参照される列のみを含めることができます。選択リストに構成要素*TableName.*またはOwner.TableName.*が含まれている場合は、*に含まれているすべての列をGROUP BY句に含める必要があります。グループ化された行では、NULL値は同じ値とみなされます。他のすべての列が同じである場合、列中のすべてのNULL値は単一のグループにまとめられます。


注意:

NULLグループ化を識別し、潜在的に超集合グループ化から削除するには、「GROUPING」で説明されているように、GROUPING関数を使用します。

SQL構文

GROUP BY句の一般的な構文は次のとおりです。

GROUP BY
 {Expression | RollupCubeClause | GroupingSetsClause }[,...]
 
GroupingSetsClause::=  GROUPING SETS 
 GroupingExpressionList | RollupCubeClause [,...]

RollupCubeClause
{ ROLLUP | CUBE } ( GroupingExpressionList ) }

GroupingExpressionList::=   
{ Expression | ExpressionList [, { Expression | ExpressionList } ] ...}
 
ExpressionList :: = ( Expression [, Expression ] ...)

パラメータ

パラメータ 説明
Expression 有効な式の構文。第3章「式」を参照してください。
RollupCubeClause GROUP BY句には、1つ以上のROLLUPまたはCUBE句が含まれることがあります。
GroupingSetsClause GROUP BY句には、1つ以上のGROUPING SETS句が含まれることがあります。GROUPING SETS句を使用すると、データベースが戻すデータのグループを明示的に指定できます。詳細は、「GROUPING SETS」を参照してください。
GroupingExpressionList GROUP BY句には、複数の式または式リストを含めることができます。
ROLLUP GroupingExpressionList ROLLUP句は、グループから超集合行を生成するために使用されます。詳細は、「ROLLUP」を参照してください。
CUBE GroupingExpressionList CUBE句は、CUBE句のグルーピング列の可能なすべての組合せの値に基づいて、選択された行をグループ化します。詳細は、「CUBE」を参照してください。
ExpressionList カンマで区切られた、1つ以上の式のリスト。

次のGROUP BYの例では、employees表の従業員の給与を合計し、SUBSTR式を使用して、職務権限ごとにデータをグループ化します。

Command> SELECT SUBSTR (job_id, 4,10), SUM (salary) FROM employees
       > GROUP BY SUBSTR (job_id,4,10);
< PRES, 24000 >
< VP, 34000 >
< PROG, 28800 >
< MGR, 24000 >
< ACCOUNT, 47900 >
< MAN, 121400 >
< CLERK, 133900 >
< REP, 273000 >
< ASST, 4400 >
9 rows found.

emp_details_viewを問い合せて、先頭の10部門およびその部門のマネージャを選択し、その部門で同じマネージャの管理下にある従業員の数をカウントします。GROUP BY句を使用して、結果を部門およびマネージャごとにグループ化します。

Command> columnlabels on;
Command> SELECT first 10 department_id AS DEPT, manager_id AS MGR,
       > COUNT(employee_id) AS NUM_EMP
       > FROM emp_details_view
       > GROUP BY (department_id, manager_id)
       > ORDER BY department_id, manager_id;

DEPT, MGR, NUM_EMP
< 10, 101, 1 >
< 20, 100, 1 >
< 20, 201, 1 >
< 30, 100, 1 >
< 30, 114, 5 >
< 40, 101, 1 >
< 50, 100, 5 >
< 50, 120, 8 >
< 50, 121, 8 >
< 50, 122, 8 >
10 rows found.

ROLLUP、CUBEおよびGROUPING SETS句

次の定義では、列をROLLUPCUBEおよびGROUPING SETS句でグループ化する方法を説明します。

  • グルーピング列: GROUP BY句で使用される1つの列。たとえば、次のGROUP BY句では、XYおよびZはグループ列です。

    GROUP BY X, GROUPING SETS(Y, Z)
    
  • 複合列: カッコ内のグルーピング列のリスト。たとえば、次の句では、(C1, C2)および(C3, C4)は複合列です。

    GROUP BY ROLLUP( (C1,C2), (C3,C4), C5);
    
  • グルーピング: グルーピングは、グルーピング・セット内の1つの集計レベルです。たとえば、次の文では、(C1)および(C2, C3)は個別のグルーピングです。

    GROUP BY GROUPING SETS(C1, (C2,C3));
    
  • グルーピング・セット: カッコ内のグルーピングのコレクション。たとえば、次の文では、(C1, (C2, C3))および(C2, (C4, C5))は、2つの個別のグルーピング・セットです。

    GROUP BY GROUPING SETS(C1, (C2,C3)), GROUPING SETS(C2, (C4, C5));
    
  • 連結グルーピング・セット: 複数のグルーピング・セットをカンマで区切ります。結果は、各グルーピング・セットからのグループ化のクロス積です。

  • 総計または空のセット列: 総計または空のセットのグルーピングは、すべての行を1つのグループとみなすことによって集計を計算します。ROLLUPおよびCUBE句では、総計は自動的に結果に含まれますが、GROUPING SETS句では、空のカッコ( )を指定することで要求します。

重複したグルーピング列をROLLUPCUBEまたはGROUPING SETSで使用できます。ただし、結果行は重複します。

ROLLUPCUBEおよびGROUPING SETS句の制限は、次のとおりです。

  • これらの句は、マテリアライズド・ビュー定義ではサポートされません。

  • これらの句は、キャッシュ・グリッド間のグローバル問合せではサポートされません。

次の項では、GROUPING SETSROLLUPおよびCUBE句について説明します。

GROUPING SETS

GROUPING SETS句を使用すると、データベースが戻すデータのグループを明示的に指定できます。目的の超集合サマリーのみが生成されるように、必要なグループのみをカッコで囲んで指定します。

次の文は3つのグループを生成し、1つのグループは各性別と年の列について結果を返し、2番目のグループは各月のサマリー超集合について結果を返し、最後のグループは総計について結果を返します。

SELECT GENDER, YEAR, MONTH,
   SUM (NUM_OF_STUDENTS) AS TOTAL
   FROM INSTRUCTOR_SUMMARY
   GROUP BY GROUPING SETS ((GENDER, YEAR),  -- 1ST GROUP
                           (MONTH), -- 2ND GROUP
                           ()); -- 3RD GROUP
 

複数のGROUPING SETSを組み合せて、複数のGROUPING SETS間の特定の組合せを生成できます。次の文には、2つのGROUPING SETS句があります。

GROUP BY GROUPING SETS (YEAR, MONTH),
         GROUPING SETS (WEEK, DAY);

これは、次のGROUPING SETS文と同等です。

GROUP BY GROUPING SETS (YEAR, WEEK), 
 (YEAR, DAY), 
 (MONTH, WEEK), 
 (MONTH, DAY);

次のように、GROUP BY句に通常のグルーピング列とGROUPING SETS句の両方がある場合、結果は通常のグルーピング列でグループ化されます。

GROUP BY a, b GROUPING SETS(c, d);

これは、次のルールと同等です。

GROUP BY GROUPING SETS((a, b, c), (a, b, d));

次の例は、(region_name, country_name)、state_provinceおよび総計のグルーピング・セットを指定します。

Command> SELECT region_name AS Region,
       >    country_name AS Country,
       >    state_province AS State,
       >    COUNT(employee_id) AS "Total Emp"
       > FROM regions r, countries c, locations l, departments d, employees e
       > WHERE r.region_id = c.region_id AND
       >    l.country_id = c.country_id AND
       >    d.location_id = l.location_id AND
       >    d.department_id = e.department_id
       > GROUP BY grouping sets((region_name, country_name), state_province, ())
       > ORDER BY region_name, state_province;
 
REGION, COUNTRY, STATE, TOTAL EMP
< Americas, Canada, <NULL>, 2 >
< Americas, United States of America, <NULL>, 68 >
< Europe, Germany, <NULL>, 1 >
< Europe, United Kingdom, <NULL>, 35 >
< <NULL>, <NULL>, Bavaria, 1 >
< <NULL>, <NULL>, California, 45 >
< <NULL>, <NULL>, Ontario, 2 >
< <NULL>, <NULL>, Oxford, 34 >
< <NULL>, <NULL>, Texas, 5 >
< <NULL>, <NULL>, Washington, 18 >
< <NULL>, <NULL>, <NULL>, 106 >
< <NULL>, <NULL>, <NULL>, 1 >
12 rows found.

ROLLUP

ROLLUPは、GROUP BY句で使用します。ROLLUPSUMとともに使用すると、最も詳細なレベルの小計(ROLLUP句で指定したすべての列)から総計レベルまでが、レベルごとに列を1つずつ削除して生成されます。これらは超集合行と呼ばれます。

ROLLUP句では次の項目が返されます。

  • ROLLUPを使用しないでGROUP BYによって生成される通常の集計行。

  • ROLLUP句で指定されたグルーピング・リストに基づく小計。ROLLUPは、その引数として、グルーピング列の順序付けリストを取ります。各小計は、グルーピング列の順序付けリストに対して、総計に達するまで最も右にあるグルーピング列を削除しながら作成されます。たとえば、GROUP BY ROLLUP(x, y, z)を指定した場合、返される超集合グループは(x,y,z)、(x,y)、(x)、( )のようになります。

    作成される小計の数はn+1個の集計レベルであり、nはグルーピング列の数です。たとえば、3つの式(n=3)がROLLUP句にある場合、n+1 = 3+1つまり4個のグルーピングになります。

  • 総計行。

カッコ内の複合列を使用して列をグループ化できます。たとえば、次のような文があるとします。

GROUP BY ROLLUP( (a, b), (c, d), e);

(a, b)および(c, d)複合列は、データベースによってROLLUPの結果が生成される際に、1つの単位として処理されます。この例では、返されるグルーピング・セットは、((a, b), (c, d), e )((a, b), (c, d))(a, b)および()となります。

次のように、複数のROLLUP句をSELECT文で実行できます。

SELECT C1, COUNT(*)
FROM T
GROUP BY ROLLUP(a, b), ROLLUP(c, d);

これは、次の文と同じです。

SELECT C1, COUNT(*)
FROM T
GROUP BY GROUPING SETS((a, b),(a),()), 
 GROUPING SETS((c, d),(c), ());

employees表を問い合せて、先頭の10部門を選択し、各部門の各マネージャの管理下にある従業員数を戻します。ROLLUPを使用して、各部門の従業員数の小計を算出し、会社のすべての従業員の総計を戻します。

Command> SELECT first 10 department_id AS Dept,
       > manager_id AS Mgr,
       > COUNT(employee_id) AS "Total emp"
       > FROM employees
       > GROUP BY ROLLUP(department_id, manager_id)
       > ORDER BY department_id, manager_id;
 
DEPT, MGR, TOTAL EMP
< 10, 101, 1 >
< 10, <NULL>, 1 >
< 20, 100, 1 >
< 20, 201, 1 >
< 20, <NULL>, 2 >
< 30, 100, 1 >
< 30, 114, 5 >
< 30, <NULL>, 6 >
< 40, 101, 1 >
< 40, <NULL>, 1 >
10 rows found.

次の問合せによって、各地域、国および州または都道府県の従業員数が返されます。ロールアップによって、各州または都道府県および各国の全従業員の小計の超集合行、および会社の全従業員の総計が返されます。地域と国を(カッコに入れて)独自の単位として組み合せることによって、ロールアップでは各地域の全従業員は返されません。

Command> SELECT region_name AS Region,
       >  country_name AS Country,
       >  state_province AS State,
       >  COUNT(employee_id) AS "Total Emp"
       >  FROM regions r, countries c, locations l, departments d, employees e
       >  WHERE r.region_id = c.region_id
       >  AND l.country_id = c.country_id
       >  AND d.location_id = l.location_id
       >  AND d.department_id = e.department_id
       >  GROUP BY rollup((region_name, country_name), state_province)
       >  ORDER BY region_name;

REGION, COUNTRY, STATE, TOTAL EMP
< Americas, Canada, Ontario, 2 > 
< Americas, United States of America, Texas, 5 > 
< Americas, United States of America, California, 45 > 
< Americas, United States of America, Washington, 18 > 
< Americas, Canada, <NULL>, 2 > 
< Americas, United States of America, <NULL>, 68 > 
< Europe, Germany, Bavaria, 1 > 
< Europe, United Kingdom, <NULL>, 1 > 
< Europe, United Kingdom, Oxford, 34 > 
< Europe, Germany, <NULL>, 1 > 
< Europe, United Kingdom, <NULL>, 35 > 
< <NULL>, <NULL>, <NULL>, 106 > 
12 rows found. 

CUBE

CUBE句は、CUBE句のグルーピング列の可能なすべての組合せの値に基づいて、選択された行をグループ化します。グループごとに1つのサマリー情報行が戻されます。たとえば、3つの式(n=3)がCUBE句にある場合、2n = 23つまり8個のグルーピングになります。n個の式の値でグループ化した行を標準行、その他すべてを超集合行といいます。複合列を使用してグループ化できます。たとえば、一般的に要求されるCUBE操作は、月、州および販売製品のすべての組合せに基づいた州の売上小計用です。

GROUP BY CUBE(a, b, c)を指定した場合、結果として生成される集計グルーピングは、(a,b,c)、(a,b)、(a,c)、(b,c)、a、b、c( )です。

各地域および国の従業員数を返すには、次の問合せを発行します。

Command> SELECT region_name AS Region,
       > country_name AS Country,
       > COUNT(employee_id) AS "Total Emp"
       > FROM regions r, countries c, locations l, departments d, employees e
       > WHERE r.region_id = c.region_id
       > AND l.country_id = c.country_id
       > AND d.location_id = l.location_id
       > AND d.department_id = e.department_id
       > GROUP BY CUBE(region_name, country_name)
       > ORDER BY region_name;
 
REGION, COUNTRY, TOTAL EMP
< Americas, Canada, 2 >
< Americas, United States of America, 68 >
< Americas, <NULL>, 70 >
< Europe, Germany, 1 >
< Europe, United Kingdom, 35 >
< Europe, <NULL>, 36 >
< <NULL>, Canada, 2 >
< <NULL>, Germany, 1 >
< <NULL>, United Kingdom, 35 >
< <NULL>, United States of America, 68 >
< <NULL>, <NULL>, 106 >
11 rows found.

TRUNCATE TABLE

TRUNCATE TABLE文は、すべての行を削除するDELETE文と類似しています。ただし、DELETEは行を個別に削除するため、ほとんどの場合DELETEよりも処理が高速に実行されます。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合、DELETEが必要です。

SQL構文

TRUNCATE TABLE [Owner.]TableName

パラメータ

パラメータ 説明
[Owner.]TableName 切り捨てる表を指定します。

説明

  • TRUNCATEはDDL文であるため、DDLCommitBehavior属性によって制御されます。DDLCommitBehavior=0(デフォルト)の場合、TRUNCATE文の実行前と実行後にコミットが実施されます。DDLCommitBehavior=1の場合、TRUNCATEはトランザクションの一部となり、次のトランザクション・ルールが適用されます。

    • TRUNCATE操作はロールバックできます。

    • TRUNCATE文と同じトランザクション内で、この文の後にINSERT文を使用することはできません。

  • 同時読取りのコミット読取り操作が可能であり、読取りセマンティックはDELETE文がある場合の読取りのコミット読取りと同じになります。

  • 子表がある場合でも、TRUNCATEを実行できます。ただし、TRUNCATEを実行するには、子表を空にする必要があります。いずれかの子表に行が含まれていると、子表が空でないことを示すエラーが返されます。

  • TRUNCATEは、マテリアライズド・ビューのディテール表、キャッシュ・グループに含まれる表または一時表ではサポートされていません。

  • 表に可変長の表外データが含まれている場合、TRUNCATE TABLEの実行結果は、表内のすべての行を削除するDELETE文と同じです。表外データの詳細は、「数値データ型」を参照してください。

  • 表をレプリケートしている場合にTRUNCATE文を使用すると、操作対象の行が存在しない場合でも、サブスクライバにレプリケートされます。

  • タイムスタンプ競合検出が有効な状態で表をレプリケートすると、競合はレポートされません。

  • 切り捨てられた表がコミットされていない場合は、この表のハッシュ・ページを変更するために、DROP TABLEおよびALTER TABLE操作を使用できません。

recreation.clubs表のすべての行を削除するには、次の文を使用します。

TRUNCATE TABLE recreation.clubs;

UNLOAD CACHE GROUP

UNLOAD CACHE GROUP文は、キャッシュ・グループからデータを削除します。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合、UNLOAD CACHE GROUPまたはUNLOAD ANY CACHE GROUPが必要です。

SQL構文

UNLOAD CACHE GROUP [Owner.]GroupName 
  [WHERE ConditionalExpression]
  [COMMIT EVERY n ROWS]

または

UNLOAD CACHE GROUP [Owner.]GroupName 
WITH ID (ColumnValueList);

パラメータ

パラメータ 説明
[Owner.]GroupName キャッシュ・グループに割り当てられた名前。
WHERE ConditionalExpression WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。
COMMIT EVERY n ROWS COMMIT EVERY n ROWS句を使用して、アンロード操作中にコミットを発行する頻度(アンロードされる行数に基づく)を指定します。

ROWSは、キャッシュ・グループから削除される行数を指します。たとえば、キャッシュ・グループに1つのキャッシュ・インスタンスがあり、そのキャッシュ・インスタンスが1つの親行と10の子行で構成されている場合で、COMMIT EVERY 2 ROWSを発行すると、TimesTenでは、キャッシュ・インスタンス全体が消去されてからコミットを1つ発行します。TimesTenでは、キャッシュ・インスタンスの消去中はコミットされません。そのため、アンロード操作がしきい値(この場合2行)に達すると、TimesTenでは、そのキャッシュ・インスタンスのすべての行が消去されてからコミットが発行されます。

この句を指定する場合は、キャッシュ・エージェントが稼働中で、トランザクションで実行されている操作がアンロードのみである必要があります。

nは整数(n >= 0)で指定します。nに0を指定すると、UNLOAD CACHE GROUP文は、1つのトランザクションとして実行され、キャッシュ・エージェントが削除を実行します。

パフォーマンスを高めるには、大量のデータに影響するキャッシュ・グループで操作を実行する際にこの句を使用します。

データが少量のキャッシュ・グループでは、この句を使用しないでください。

WITH ID ColumnValueList WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをアンロードできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

説明

  • UNLOAD CACHE GROUP文は、Oracle Database表のデータに影響することなく、TimesTenキャッシュ表から行を消去します。

  • キャッシュ・グループがレプリケートされている場合、UNLOAD CACHE GROUP文によって、レプリケートされたキャッシュ・グループの内容全体も削除されます。

  • AWTキャッシュ・グループに対するUNLOAD CACHE GROUP文の実行は、行に対する更新がOracle Databaseに伝播されるまで待機します。

  • UNLOAD CACHE GROUP文は、すべての種類のキャッシュ・グループに使用できます。キャッシュ・グループの種類については、「CREATE CACHE GROUP」を参照してください。

  • AUTOREFRESH属性を持つキャッシュ・グループでは、UNLOAD CACHE GROUP文を慎重に使用してください。Oracle Databaseで行または子行が更新されると、自動リフレッシュ操作の結果として、アンロードされた行がキャッシュ・グループに再表示されることがあります。

  • UNLOAD CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数が指定されたOCI関数OCIAttrGet()を実行すると、アンロードされたキャッシュ・インスタンスの数が返されます。

  • COMMIT EVERY n ROWS句を指定する場合は、キャッシュ・エージェントはアンロード処理を実行し、データのアンロード後にトランザクションをコミットします。キャッシュ・エージェントが稼働していることを確認してください。COMMIT EVERY n ROWS句を指定しない場合は、アンロード処理はアプリケーションによって実行されます。

  • COMMIT EVERY n ROWS句を指定する場合は、アンロード操作をロールバックできません。COMMIT EVERY n ROWS句(n0以上の値)を指定しているときにアンロード操作が失敗すると、アンロードされた行の一部はすでにコミットされているために、キャッシュ・グループが一貫性のない状態になる場合があります。そのため、一部のキャッシュ・インスタンスが部分的にしかアンロードされていない可能性があります。その場合は、キャッシュ・グループを再度アンロードします。

  • WITH ID句を使用して、バインディング・パラメータを指定します。

  • UNLOAD CACHE GROUP操作は独自のトランザクションで実行されます。

制限

  • WHERE句で子表を参照しないでください。

  • キャッシュ・グループが動的キャッシュ・グループでない場合は、読取り専用キャッシュ・グループまたは自動リフレッシュ属性を持つユーザー管理キャッシュ・グループでWITH ID句を使用しないでください。

  • WITH ID句はCOMMIT EVERY n ROWS句と同時に使用しないでください。

  • COMMIT EVERY n ROWS句を使用しないでください。GlobalProcessingオプティマイザ・フラグを設定する場合でCOMMIT EVERY n ROWS句でアンロード操作を指定する場合は、TimesTenによりエラーがスローされます。ただし、GlobalProcessingオプティマイザ・フラグを設定する場合でCOMMIT EVERY n ROWS句を使用せずにアンロード操作を指定すると、アンロード処理はグリッド・メンバー間に伝播されます。

キャッシュ表からデータをアンロードする場合はUNLOAD CACHE GROUP... COMMIT EVERY n ROWSを使用します。COMMIT EVERY n ROWS句が使用されるため、キャッシュ・エージェントはデータをアンロードします。

Command> UNLOAD CACHE GROUP testcache WHERE sampleuser.orders.order_id > 100
       > COMMIT EVERY 100 ROWS;
2 cache instances affected.

キャッシュ・グループをCREATEおよびUNLOADします。COMMIT EVERY n ROWS句が使用されないため、アプリケーションはアンロードを実行します。

CREATE CACHE GROUP recreation.cache
    FROM recreation.clubs (
        clubname CHAR(15) NOT NULL,
        clubphone SMALLINT,
        activity CHAR(18),
        PRIMARY KEY(clubname))
    WHERE (recreation.clubs.activity IS NOT NULL);
UNLOAD CACHE GROUP recreation.cache;

UPDATE

UPDATE文は、表のすべての行または検索条件を満たす行の1つ以上の列値を更新します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合、UPDATEが必要です。

SQL構文

UPDATE [hint] [FIRST NumRows] 
{[Owner.]TableName [CorrelationName]}
SET {ColumnName =
{Expression1 | NULL | DEFAULT}} [,...]
[ WHERE SearchCondition ]
RETURNING|RETURN Expression2[,...] INTO DataItem[,...]

パラメータ

パラメータ 説明
hint UPDATE文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。
FIRST NumRows 更新する行の数を指定します。FIRST NumRowsは、副問合せの文ではサポートされていません。NumRowsには、正のINTEGER値か動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。
[Owner.]TableName [CorrelationName] [Owner.]TableNameには、更新する表を指定します。

CorrelationNameは、表の別名を指定し、「基本名」に従って基本名の構文ルールを満たしている必要があります。UPDATE文の他の場所でその表の列にアクセスする際、実際の表名ではなく相関名を使用します。相関名の有効範囲は、それが使用されているSQL文です。

単一の文のすべての相関名は、一意である必要があります。

SET ColumnName ColumnNameは、更新する列を指定します。単一のUPDATE文で同じ表の複数の列を更新できます。主キー列の値が変更されないかぎり、更新する列のリストに主キー列を含めることができます。
Expression1 集計関数を含まない式。式は、更新操作に指定した行ごとに評価されます。式のデータ型は、更新する列のデータ型と互換性がある必要があります。値を更新する場合、Expression1には列や順序CURRVALまたはNEXTVAL参照を指定できます。詳細は、「CURRVALとNEXTVALによるSEQUENCE値の増加」を参照してください。
NULL WHERE句を満たす各行の指定した列にNULL値を挿入します。NULL値可能な列である必要があります。
DEFAULT 列をデフォルト値で更新する必要があることを指定します。
WHERE SearchCondition 検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。
Expression2 有効な式の構文。第3章「式」を参照してください。
DataItem 取得したExpression2値を格納するホスト変数またはPL/SQL変数。

説明

  • WHERE句を省略した場合、表のすべての行はSET句の指定に従って更新されます。

  • UPDATE操作中に文字またはバイナリ文字列が切り捨てられた場合、TimesTenによって警告が生成されます。

  • 一意制約が定義されている表を、重複する行を含むように更新することはできません。

  • 外部キー制約に違反するUPDATE操作はエラーになります。外部キー制約の詳細は、「CREATE TABLE」を参照してください。

  • RETURNING句の制限:

    • Expression2は単純な式である必要があります。集計関数はサポートされません。

    • 順序番号はOUTパラメータに戻せません。

    • ROWNUMおよび副問合せは、RETURNING句では使用できません。

    • RETURNING句に使用されているパラメータは、UPDATE文で重複して使用できません。

    • RETURNING句を使用して複数行を戻すには、PL/SQL BULK COLLECT機能が必要です。『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のFORALL操作およびBULK COLLECT操作に関する説明を参照してください。

    • PL/SQLでは、RETURNING句はWHERE CURRENT処理と一緒には使用できません。

UPDATE文を使用してdepartment_idが110の従業員を更新します。department_idが110の従業員は、manager_idjob_idが'FI_ACCOUNT'の従業員manager_idに更新します。SET句の副問合せでDISTINCT修飾子を使用します。

job_idが'FI_ACCOUNT'の従業員manager_idを検索します。

Command> SELECT manager_id FROM employees where job_id = 'FI_ACCOUNT';
< 108 >
< 108 >
< 108 >
< 108 >
< 108 >
5 rows found.

次に、department_idが110の従業員manager_idを検索します。

Command> SELECT manager_id FROM employees WHERE department_id = 110;
< 101 >
< 205 >
2 rows found.

ここでdepartment_idが110の従業員manager_idを検索します。SET副問合せでSELECT DISTINCTを使用します。UPDATE実行後、department_idが110の従業員manager_idが更新されたことを確認します。

Command> UPDATE employees SET manager_id =
       >   (SELECT DISTINCT employees.manager_id
       >    FROM employees
       >    WHERE employees.job_id = 'FI_ACCOUNT')
       > WHERE employees.department_id = 110;
2 rows updated.

Command> SELECT manager_id FROM employees WHERE department_id = 110;
< 108 >
< 108 >
2 rows found.

UPDATE文のSET句で副問合せを使用します。location_idが1700またはlocation_idが2400の従業員を更新します。これらの従業員のdepartment_idlocation_idが2500のdepartment_idに設定します。(これはdepartment_id 80です。)これらの従業員の給与を所属する部門の最大給与に設定します。

最初の5人の従業員に対して問合せを実行してdepartment_idと給与を確認します。

Command> SELECT FIRST 5 employee_id, department_id, salary
       > FROM employees
       > ORDER BY employee_id, department_id, salary;
< 100, 90, 24000 >
< 101, 90, 17000 >
< 102, 90, 17000 >
< 103, 60, 9000 >
< 104, 60, 6000 >
5 rows found.

ここでUPDATE文を使用して従業員を更新します。

Command> UPDATE employees e1
       > SET department_id =
       >      (SELECT department_id FROM departments
       >       WHERE location_id = 2500),
       >     salary =
       >      (SELECT MAX(salary) FROM employees e2
       >       WHERE e1.department_id = e2.department_id)
       > WHERE department_id IN
       >   (SELECT department_id FROM departments
       >    WHERE location_id = 2400 OR location_id = 1700);
19 rows updated.

最初の5人の従業員を再度問合せて、元のdepartment_id90が更新されていることを確認します。department_idは80になり、給与は24000になっています。

Command> SELECT FIRST 5 employee_id, department_id, salary
       > FROM employees
       > ORDER BY employee_id, department_id, salary;
< 100, 80, 24000 >
< 101, 80, 24000 >
< 102, 80, 24000 >
< 103, 60, 9000 >
< 104, 60, 6000 >
5 rows found.

次の例は、コストが$500を超える部品の価格を25%引き上げます。

UPDATE purchasing.parts
SET salesprice = salesprice * 1.25
WHERE salesprice > 500.00;

次の例は、順序seqNEXTVAL値を使用して列を更新します。

UPDATE student SET studentno = seq.NEXTVAL WHERE name = 'Sally';

次の問合せは、1つでも未出荷注文のあるすべての顧客のステータスを更新します。

UPDATE customers SET customers.status = 'unshipped'
WHERE customers.id = ANY
    (SELECT orders.custid FROM orders
        WHERE orders.status = 'unshipped');

idが主キーでない場合、次の文はすべての重複する注文を更新します。

UPDATE orders a set orders.status = 'shipped'
    WHERE EXISTS (SELECT 1 FROM orders b
        WHERE a.id = b.id AND a.rowid < b.rowid);

次の例は、employees表内の'Jones'という姓の従業員について、job_idsalaryおよびdepartment_idを更新します。salarylast_nameおよびdepartment_idの値が変数に返されます。

Command> VARIABLE bnd1 NUMBER(8,2);
Command> VARIABLE bnd2 VARCHAR2(25) INLINE NOT NULL;
Command> VARIABLE bnd3 NUMBER(4);
Command> UPDATE employees SET job_id='SA_MAN', salary=salary+1000,
       > department_id=140 WHERE last_name='Jones'
       > RETURNING salary*0.25, last_name, department_id
       > INTO :bnd1, :bnd2, :bnd3;
1 row updated.
Command> PRINT bnd1 bnd2 bnd3;
BND1                 : 950
BND2                 : Jones
BND3                 : 140

結合更新

TimesTenでは、結合更新文がサポートされています。結合更新を使用すると、副問合せの結果を使用して、表の列を1つ以上更新できます。

構文

UPDATE [Owner.]TableName
SET ColumnName=Subquery
 [WHERE SearchCondition]

または

UPDATE [Owner.]TableName
SET (ColumnName[,...])=Subquery
 [WHERE SearchCondition]

パラメータ

結合更新文には、次のパラメータがあります。

パラメータ 説明
[Owner.]TableName 更新する表を指定します。
SET (ColumnName[,...])= Subquery 更新する列を指定します。単一のUPDATE文で同じ表の複数の列を更新できます。SET句に含めることができる副問合せは1つのみですが、この副問合せはネストできます。

副問合せの選択リストの値の数は、SET句で指定された列数と同じである必要があります。副問合せが更新する行に対して2行以上返す場合は、エラーが返されます。

WHERE SearchCondition 検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。

説明

結合更新のSET句内で副問合せを使用しても、更新されるターゲット表の行数は削減されません。削減は、WHERE句を使用して指定する必要があります。したがって、WHERE句内でターゲット表の行が指定されているにもかかわらず、副問合せがこの行に対していずれの行も返さない場合、この行の更新対象列はNULL値に更新されます。

この例では、t1の行がt2と一致しない場合、最初のSELECTx1の値と2番目のSELECTx1およびy1の値はNULLに設定されます。

UPDATE t1 SET x1=(SELECT x2 FROM t2 WHERE id1=id2);
UPDATE t1 SET (x1,y1)=(SELECT x2,y2 FROM t2 WHERE id1=id2);

t2と一致するt1の行のみを更新するようにUPDATE文を制限するには、副問合せを含むWHERE句を次のように指定する必要があります。

UPDATE t1 SET x1=(SELECT x2 FROM t2 WHERE id1=id2) 
  WHERE id1 IN (SELECT id2 FROM t2);
UPDATE t1 SET (x1,y1)=(SELECT x2,y2 FROM t2 WHERE id1=id2) 
  WHERE id1 IN (SELECT id2 FROM t2);

関連項目

SELECT