この章では、TimesTenで使用可能なSQL文について説明します。
通常、SQL文とはデータ操作言語(DML)文またはデータ定義言語(DDL)文のいずれかです。
DML文はデータベース・オブジェクトを変更します。DML文の例として、INSERT
、UPDATE
およびDELETE
があげられます。
DDL文はデータベース・スキーマを変更します。DDL文の例として、CREATE TABLE
およびDROP TABLE
があげられます。
文内のキーワード、パラメータまたは句読点の間に、コメントを表示できます。次の2通りの方法で、文内にコメントを含めることができます。
スラッシュとアスタリスク(/*
)を使用してコメントを開始します。この後にコメントのテキストを続けます。テキストは複数行にまたがってもかまいません。アスタリスクとスラッシュ(*/
)を使用してコメントを終了します。開始文字と終了文字は、空白や改行によってテキストから切り離す必要はありません。
ハイフン2個(--
)を使用してコメントを開始します。この後にコメントのテキストを続けます。テキストは1行しか使用できません。コメントの最後に改行を使用します。
文レベルのオプティマイザ・ヒントは、TimesTen問合せオプティマイザに命令を渡すSQL文のコメントです。問合せに対して最適な実行計画を選択するとき、オプティマイザではこれらのヒントが考慮されます。
内容は次のとおりです。
文レベルとトランザクション・レベルのオプティマイザ・ヒントの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のオプティマイザ・ヒントを使用した実行計画の変更に関する項も参照してください。
SQL文には、文レベルのオプティマイザ・ヒントが1つ以上あるコメントを1つ付けることができます。文レベルのオプティマイザ・ヒントをサポートするSQL文は、DELETE
、INSERT
、MERGE
、SELECT
、UPDATE
、INSERT...SELECT
、およびCREATE
TABLE...AS SELECT
です。ヒントはDELETE
、INSERT
、MERGE
、SELECT
、またはUPDATE
キーワードの後に記述します。(DELETE
、INSERT
、MERGE
、SELECT
、または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
注意: 前の表で説明しているフラグの詳細は、『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では、次の場合にコメントが無視され、エラーは戻されません。
ヒントがDELETE
、INSERT
、MERGE
、SELECT
、または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規則に従って処理されます。
文レベルのオプティマイザ・ヒントは、DELETE
、INSERT
、MERGE
、SELECT
、およびUPDATE
で指定できます。また、CREATE
TABLE
...AS
SELECT
文およびINSERT... SELECT
文でも文レベルのオプティマイザ・ヒントを指定できます。ヒントはコメント構文内に指定し、コメント構文はSQL
VERB
の直後に記述します。(たとえば、DELETE
/*+
ヒント
*
/...
のようにします。)表6-1に文レベルのヒントの正しい配置を示します。
表6-1 SQL文への文レベルのヒントの配置
SQL文 | ヒントの配置 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
副問合せではヒントを指定しないでください。 |
|
|
|
|
ヒントを使用することで、問合せの実行計画の選択決定においてTimesTen問合せオプティマイザに作用することができます。
トランザクション・レベルのオプティマイザ・ヒントを表示するには、組込みプロシージャttOptSetFlag
を実行します。組込みプロシージャttOptGetFlag
の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptGetFlagに関する説明を参照してください。
文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違いの概要を表6-2「文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違い」に示します。TimesTenオプティマイザはコストベースのオプティマイザであり、統計と索引を使用して問合せ計画を生成するため、ヒントを使用する前に、統計の更新の必要性を確認してください。問合せオプティマイザの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTen問合せオプティマイザに関する説明を参照してください。
表6-2 文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違い
文レベルのオプティマイザ・ヒント | トランザクション・レベルのオプティマイザ・ヒント |
---|---|
SQL文のコメント構文内の |
組込みプロシージャ |
ヒントはSQL文を範囲とします。文レベルでオプティマイザに指示する場合に使用します。 |
ヒントはトランザクションを範囲とします。トランザクション・レベルでオプティマイザに指示する場合に使用します。 |
自動コミットは無効になります。これはヒントがSQL文を範囲とするためです。文の実行後は、それ以降の文および問合せではそのヒントは無効になります。 |
自動コミットは有効です。自動コミットをオフに設定します。文が自身のトランザクションで実行されるため、自動コミットをオフにしないと、ヒントが有効になりません。自動コミットをオフに設定すると、ヒントがトランザクションで有効になります(コミットまたはロールバックを発行するまで)。 |
オプティマイザは文に対してのみヒントを使用します。 |
オプティマイザはトランザクションのすべての文にヒントを使用します。 |
ヒントは |
ヒントは |
トランザクション・レベルのオプティマイザ・ヒントが指定されたトランザクションで文レベルのオプティマイザ・ヒントを指定すると、そのヒントは、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'
アクティブ・スタンバイ・ペアは、次の方法で変更できます。
サブスクライバ・データベースを追加または削除します。
ストア属性を変更します。
サブスクライバには、PORT
およびTIMEOUT
属性のみを設定できます。
表、順序またはキャッシュ・グループをレプリケーション・スキームに含めます。
表、順序またはキャッシュ・グループをレプリケーション・スキームから除外します。
『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアのその他の変更に関する説明を参照してください。
SQL構文
ALTER ACTIVE STANDBY PAIR {SubscriberOperation
|StoreOperation
|InclusionOperation
|NetworkOperation
} [...]
SubscriberOperation
の構文は、次のとおりです。
{ADD | DROP } SUBSCRIBER FullStoreName
StoreOperation
の構文は、次のとおりです。
ALTER STOREFullStoreName
SETStoreAttribute
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 属性で指定したデータベース・ファイル名です。
|
FullStoreName |
次のいずれかとして指定されたデータベースです。
たとえば、データベースのパスが この名前は、DSNの記述の
|
{INCLUDE|EXCLUDE}
|
指定された表、順序またはキャッシュ・グループをレプリケーションに含めるか、またはレプリケーションから除外します。
|
ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName |
NetworkOperation をレプリケーション・スキームに追加します。各サブスクライバ・ストアへのすべてのアウトバウンド接続に対してマスター・ストアが使用するネットワーク・インタフェースを制御できます。ADD ROUTE 句のコンテキストでは、各マスター・データベースは他のマスター・データベースのサブスクライバであり、各読取り専用サブスクライバは両方のマスター・データベースのサブスクライバです。
複数回指定できます。
|
DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName |
レプリケーション・スキームからNetworkOperation を削除します。
複数回指定できます。
|
MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost |
MasterHost およびSubscriberHost は、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。
句は複数回指定できます。 |
PRIORITY Priority |
1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。
|
説明
アクティブ・スタンバイ・ペアを変更する前に、レプリケーション・エージェントを停止する必要があります。例外は、「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
文を使用して、AUTOREFRESH
の状態、時間隔およびモードを変更できます。
Oracle Database表の更新は、AUTOREFRESH
を使用してTimesTenキャッシュ・グループに伝播させることができます。AUTOREFRESH
は、キャッシュ・グループがユーザー管理キャッシュ・グループであるか、またはAUTOREFRESH
句でREADONLY
として定義されている場合に有効にできます。
ALTER 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
|
AUTOREFRESH を実行する頻度を分、秒またはミリ秒単位の整数値で指定します。デフォルト値は10分です。指定した時間隔でAUTOREFRESH を完了できない場合は、実行時に警告が生成され、現在の処理が終了するまで次回のAUTOREFRESH を待機します。待機キューが10に達すると、サポート・ログに通知メッセージが生成されます。 |
STATE |
AUTOREFRESH をオン、オフまたは一時停止のいずれかに変更します。デフォルトでは、AUTOREFRESH STATE はON です。 |
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
文はシリアライズ可能分離レベルでは実行できません。実行しようとするとエラー・メッセージが返されます。
ALTER FUNCTION
文は、スタンドアロンのストアド・ファンクションを再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーおよびパフォーマンス・オーバーヘッドが発生しなくなります。
パッケージに含まれるファンクションを再コンパイルするには、ALTER PACKAGE
文を使用してパッケージを再コンパイルします。
パラメータ
パラメータ | 説明 |
---|---|
[ Owner .] FunctionName |
再コンパイルするファンクションの名前。 |
COMPILE |
ファンクションの再コンパイルを発生させる必須キーワード。ファンクションを正常にコンパイルできなかった場合は、ttIsql コマンドのSHOW ERRORS を使用してコンパイラのエラー・メッセージを表示します。 |
CompilerParametersClause |
このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVEL 、PLSCOPE_SETTINGS およびNLS_LENGTH_SEMANTICS があります。
文の中で各パラメータを1回指定できます。 この句のパラメータを省略して |
REUSE SETTINGS |
このオプション句を使用して、TimesTenがコンパイラのスイッチ設定を削除および再取得しないようにします。REUSE SETTINGS を指定すると、TimesTenによって既存の設定が保持され、値を指定していないパラメータのコンパイルに使用されます。 |
説明
ALTER FUNCTION
文は、既存ファンクションの宣言または定義を変更しません。ファンクションを再宣言または再定義するには、CREATE FUNCTION
文を使用します。
ファンクションが依存しているオブジェクトが無効な場合、TimesTenは最初にこれらのオブジェクトを再コンパイルします。
また、TimesTenは、再コンパイルされたファンクションをコールするファンクションや、再コンパイルされたファンクションをコールするファンクションが定義されているパッケージの本体など、ファンクションに依存しているオブジェクトをすべて無効にします。
TimesTenによってファンクションが正常に再コンパイルされると、そのファンクションは有効になります。ファンクションの再コンパイルでコンパイル・エラーになった場合、TimesTenによってエラーが返され、ファンクションは無効のままになります。ttIsql
コマンドのSHOW ERRORS
を使用して、コンパイル・エラーを表示します。
再コンパイル中に、TimesTenはすべての永続コンパイラ設定を削除し、セッションからこれらの設定を再取得して、コンパイルの最後に格納します。この処理を回避するには、REUSE SETTINGS
句を指定します。
ALTER PACKAGE
文は、パッケージ仕様部、パッケージ本体またはその両方を明示的に再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーが発生しなくなります。
この文では、同時にすべてのパッケージ・オブジェクトを再コンパイルします。ALTER PROCEDURE
文またはALTER FUNCTION
文を使用して、パッケージに含まれるプロシージャまたはファンクションを個別に再コンパイルすることはできません。
SQL構文
ALTER PACKAGE [Owner.]PackageNameCOMPILE [PACKAGE|SPECIFICATION|BODY] [
CompilerParametersClause
[...]] [REUSE SETTINGS]
パラメータ
パラメータ | 説明 |
---|---|
[ Owner .] PackageName |
再コンパイルするパッケージの名前。 |
COMPILE |
パッケージ仕様部、パッケージ本体またはその両方の再コンパイルを強制するために使用される必須の句。 |
[PACKAGE|SPECIFICATION|BODY ] |
パッケージ仕様部と本体の両方を再コンパイルするには、PACKAGE を指定します。パッケージ仕様部を再コンパイルするには、SPECIFICATION を指定します。パッケージ本体を再コンパイルするには、BODY を指定します。
|
CompilerParametersClause |
このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVEL 、PLSCOPE_SETTINGS およびNLS_LENGTH_SEMANTICS があります。
文の中で各パラメータを1回指定できます。 この句のパラメータを省略して |
REUSE SETTINGS |
このオプション句を使用して、TimesTenがコンパイラのスイッチ設定を削除および再取得しないようにします。REUSE SETTINGS を指定すると、TimesTenによって既存の設定が保持され、値を指定していないパラメータのコンパイルに使用されます。 |
説明
パッケージ仕様部を再コンパイルすると、TimesTenは、パッケージ内のプロシージャまたはファンクションをコールするプロシージャなど、仕様部に依存しているローカル・オブジェクトを無効にします。パッケージの本体もまた仕様部に依存しています。この後、先にこれらの依存オブジェクトのいずれかを明示的に再コンパイルしないで参照すると、このオブジェクトはTimesTenによって実行時に暗黙的に再コンパイルされます。
パッケージ本体を再コンパイルした場合、パッケージ仕様部に依存しているオブジェクトは無効になりません。本体が依存しているオブジェクトが無効な場合、TimesTenは最初にこれらのオブジェクトを再コンパイルします。TimesTenによって本体が正常に再コンパイルされると、その本体は有効になります。
パッケージを再コンパイルすると、仕様部と本体の両方が明示的に再コンパイルされます。コンパイル・エラーが発生しなかった場合、仕様部および本体は有効になります。コンパイル・エラーが発生した場合、TimesTenによってエラーが返され、パッケージは無効のままになります。
ALTER PROCEDURE
文は、スタンドアロンのストアド・プロシージャを再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーおよびパフォーマンス・オーバーヘッドが発生しなくなります。
パッケージに含まれるプロシージャを再コンパイルするには、ALTER PACKAGE
文を使用してパッケージを再コンパイルします。
SQL構文
ALTER PROCEDURE [Owner.]ProcedureNameCOMPILE [
CompilerParametersClause
[...]] [REUSE SETTINGS]
パラメータ
パラメータ | 説明 |
---|---|
[ Owner .] ProcedureName |
再コンパイルするプロシージャの名前。 |
COMPILE |
プロシージャの再コンパイルを発生させる必須キーワード。プロシージャを正常にコンパイルできなかった場合は、ttIsql コマンドのSHOW ERRORS を使用してコンパイラのエラー・メッセージを表示します。 |
CompilerParametersClause |
このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVEL 、PLSCOPE_SETTINGS およびNLS_LENGTH_SEMANTICS があります。
文の中で各パラメータを1回指定できます。 この句のパラメータを省略して |
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_emp
の
PLSQL_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.
ALTER REPLICATION
文では、レプリケーション要素の追加、変更、削除を行い、クラシック・レプリケーション・スキームに関連するデータベースのレプリケーション属性を変更します。
ほとんどのALTER REPLICATION
処理は、レプリケーション・エージェントが停止している場合(ttAdmin
-repStop
)にのみサポートされます。ただし、レプリケーション・エージェントの実行中にサブスクライバ・データベースをレプリケーション・スキームに動的に追加することは可能です。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のクラシック・レプリケーション・スキームの変更に関する項を参照してください。
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 要素名に対して一意にする必要があります。
要素が |
ADD ELEMENT ElementName DATASTORE
|
新しいDATASTORE 要素を既存のクラシック・レプリケーション・スキームに追加します。ElementName は、30文字以下の識別子です。DATASTORE 要素を使用する場合、ElementName の最初の20文字を、他のDATASTORE 要素名に対して一意にする必要があります。
要素が順序の場合、 |
ADD SUBSCRIBER FullStoreName |
追加のサブスクライバ・データベースを指定します。FullStoreName は、DSNの記述のDataStore 属性で指定したデータベース・ファイル名です。 |
ALTER ELEMENT * IN FullStoreName
|
FullStoreName がMASTER またはPROPAGATOR であるすべての要素を変更します。FullStoreName は、DSNの記述のDataStore 属性で指定したデータベース・ファイル名です。
この構文を一連の要素名に使用すると、次の操作を実行できます。
変更されるデータベースの一部に |
ALTER ELEMENT ElementName |
サブスクライバが追加または削除される要素の名前です。 |
ALTER ELEMENT
|
ElementName1 をElementName2 の名前に変更します。TABLE 型の要素の名前のみを変更できます。 |
ALTER ELEMENT ElementName
|
ElementName は、変更する要素の名前です。
要素が順序の場合、 |
ALTER SUBSCRIBER FullStoreName
|
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 |
競合解消のレポートを一時停止します。
この句は、表レベルのレプリケーションで有効です。 |
CONFLICT REPORTING RESUME AT Value |
競合解消のレポートを再開します。
この句は、表レベルのレプリケーションで有効です。 |
DISABLE RETURN {SUBSCRIBER | ALL} NumFailures |
NumFailures で指定されているタイムアウト回数を経過した後、RETURNサービスのブロッキングを無効にするようにRETURNサービス障害ポリシーを設定します。SUBSCRIBER を選択すると、レプリケートされた更新を、指定されているタイムアウト期間内に確認できなかったサブスクライバのみにこのポリシーが適用されます。ALL を選択すると、いずれかのサブスクライバから応答がなかった場合、すべてのサブスクライバにこのポリシーが適用されます。この障害ポリシーは、RETURN RECEIPT またはRETURN TWOSAFE サービスのいずれかで指定できます。
詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。 |
DURABLE COMMIT {ON | OFF} |
DurableCommits 一般接続属性設定を上書きします。DURABLE COMMIT ON は、レプリケーション・エージェントが実行中か停止しているかに関係なく、永続コミットを有効にします。 |
DROP ELEMENT * IN FullStoreName |
FullStoreName がMASTER であるすべての要素のレプリケーションの記述を削除します。FullStoreName は、DSNの記述のDataStore 属性で指定したデータベース・ファイル名です。 |
DROP ELEMENT ElementName |
ElementName のレプリケーションの記述を削除します。 |
DROP SUBSCRIBER FullStoreName |
指定したサブスクライバ・データベースに更新が送信されないように指定します。この処理は、クラシック・レプリケーション・スキームの持つサブスクライバが1つのみの場合に失敗します。FullStoreName は、DSNの記述のDataStore 属性で指定したデータベース・ファイル名です。 |
FAILTHRESHOLD Value |
サブスクライバ・データベースのために累積できるログ・ファイルの数。この値を超えると、サブスクライバはFailed の状態に設定されます。
0を指定すると、この上限は設定されません。これがデフォルトです。 詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のトランザクション・ログ障害しきい値の設定に関する説明を参照してください。 |
FullStoreName |
次のいずれかとして指定されたデータベースです。
たとえば、データベースのパスが この名前は、DSNの記述の
|
LOCAL COMMIT ACTION {NO ACTION | COMMIT} |
タイムアウト・イベントのRETURN TWOSAFE トランザクションで実行されるデフォルトのアクションを指定します。
この設定は、 |
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 で指定された時間よりも短い間隔でレプリケートされた更新を確認するとすぐに再度有効になります。
|
RETURN RECEIPT [BY REQUEST] |
RETURN RECEIPTサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションを受信するまでブロックされます。
|
RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED |
レプリケーションが無効になっている場合のRETURNサービスのオンまたはオフを設定します。
詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。 |
RETURN TWOSAFE[BY REQUEST] |
RETURN TWOSAFEサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションをコミットするまでブロックされます。
|
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} |
サブスクライバで実行される表定義チェックの種類を指定します。
デフォルトは 注意: |
TIMEOUT Seconds |
レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大時間(秒)。デフォルトは120秒です。
注意: リモート・レプリケーション・エージェントからの応答の遅延の原因となる大規模なトランザクションの場合、エージェントは、トランザクションのサイズに基づいて、必要に応じてタイムアウトを次第に大きい値にスケーリングします。大規模なトランザクションに対して |
ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName |
NetworkOperation をレプリケーション・スキームに追加します。各サブスクライバ・ストアへのすべてのアウトバウンド接続に対してマスター・ストアが使用するネットワーク・インタフェースを制御できます。
複数回指定できます。
|
DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName |
クラシック・レプリケーション・スキームからNetworkOperation を削除します。
複数回指定できます。
|
MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost |
MasterHost およびSubscriberHost は、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。
句は複数回指定できます。 |
PRIORITY Priority |
1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。
|
説明
レプリケーション要素の名前が、別のデータベースにすでに定義されているレプリケーション要素の名前と競合する場合は、ALTER ELEMENT SET NAME
を使用してレプリケーション要素の名前を変更できます。SET NAME
では、* IN
FullStoreName
は使用できません。FullStoreName
は、データベースのファイルの基本名である必要があります。たとえば、データベースのファイル名がdata.ds0
の場合、ファイルの基本名はdata
になります。
ALTER ELEMENT SET MASTER
を使用して、レプリケーション要素のマスター・データベースを変更できます。MASTER
操作には、* IN
FullStoreNameオプションを使用する必要があります。つまり、マスター・データベースは、そのレプリケーション要素すべての所有権を送信して、マスター・ロールを完全に放棄する必要があります。通常、このオプションは、(共通の)
MASTER
の障害の後に、SUBSCRIBER
データベースで要求されるALTER REPLICATION
文で使用します。
マスター要素の所有権をサブスクライバに送信するには、次の手順を実行します。
レプリケートされた各表に対してALTER REPLICATION DROP ELEMENT
を実行し、レプリケートされた要素を手動で削除します。
新しく指定した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
文は、セッション・パラメータを動的に変更します。これは、現在のセッションの同等の接続属性の設定を上書きします(適用可能な場合)。
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_ACTION をINCLUDE に設定します。表または順序のいずれかの作成時に表または順序をアクティブ・スタンバイ・ペアに含めない場合は、DDL_REPLICATION_ACTION をEXCLUDE に設定します。デフォルトはINCLUDE です。
この属性が有効なのは、 詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。 注意: 同等の接続属性は |
DDL_REPLICATION_LEVEL={1|2|3} |
DDLがアクティブ・スタンバイ・ペアのすべてのデータベースにわたってレプリケートされるかどうかを指定します。値は次のいずれかです。
詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。 注意: 同等の接続属性は |
NLS_SORT= {BINARY| SortName } |
言語の比較に使用する照合の順序を示します。
大/小文字を区別しないソートの場合またはアクセントを区別しないソートの場合は、
大/小文字を区別しないソートまたはアクセントを区別しないソートの詳細は、『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オペレーション・ガイド』のトランザクションの分離レベルに関する項を参照してください。 注意: 同等の接続属性は |
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 |
追跡ベース・パラレル・レプリケーションを管理している場合は、レプリケーション追跡に接続を割り当てることができます。接続によって発行されたすべてのトランザクションは、追跡が変更されないかぎり、この追跡に割り当てられます。
指定された番号が、存在しないレプリケーション・トラック 先行する操作がすべて読取り操作だった場合を除き、トランザクションの途中でトラックを変更することはできません。 詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の自動パラレル・レプリケーション環境内のレプリケーション・トラックの指定に関する項を参照してください。 同等の接続属性は |
COMMIT_BUFFER_SIZE_MAX= n |
接続の実行中に、コミット・バッファの最大サイズを変更します。nは整数で表現され、コミット・バッファの最大サイズ(MB)を示します。
変更は次のトランザクションから有効になります。
コミット・バッファおよびトランザクションの再利用操作の詳細は、『Oracle TimesTen In-Memory Databaseオペレーションガイド』のトランザクションの再利用操作に関する説明、および『Oracle TimesTen In-Memory Databaseリファレンス』のCommitBufferSizeMaxに関する説明を参照してください。 注意: 同等の接続属性は |
説明
ALTER SESSION
文は、そのセッションで次に実行されるコマンドから作用します。新しいセッション・パラメータはただちに有効になります。
文字比較を含む演算では、言語を区別する照合順番がサポートされています。大/小文字を区別しないソートは、DISTINCT
値の解釈に影響することがあります。
CHAR
とNCHAR
間の暗黙的および明示的な変換がサポートされています。
TIMESTEN8
キャラクタ・セットを使用している場合は、CHAR
とNCHAR
間の変換ができません。
サポートされているキャラクタ・セットで、SQL文字列関数を使用できます。たとえば、UPPER
およびLOWER
関数では、ASCII
以外のCHAR
およびVARCHAR2
文字とNCHAR
およびNVARCHAR2
文字がサポートされています。
選択したキャラクタ・セットによっては、CHAR
およびVARCHAR2
列のデータに対するメモリー消費に影響する可能性があります。
レプリケーション・スキームに含まれるすべてのデータベースのキャラクタ・セットが一致している必要があります。
既存の表をアクティブ・スタンバイ・ペアに追加するには、DDL_REPLICATION_LEVEL
を2以上に設定し、DDL_REPLICATION_ACTION
をINCLUDE
に設定します。または、DDL_REPLICATION_ACTION
がEXCLUDE
に設定されている場合は、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE
文を使用できます。この場合、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE
文を実行すると表の内容は切り捨てられるため、この文を実行する前に、表は空であり、すべてのデータベースに存在している必要があります。
既存の順序またはビューをアクティブ・スタンバイ・ペアに追加するには、DDL_REPLICATION_LEVEL
を3に設定します。順序をレプリケーション・スキームに含めるには、DDL_REPLICATION_ACTION
をINCLUDE
に設定する必要があります。これは、マテリアライズド・ビューには適用されません。
オブジェクトは、受信側データベースがそのレベルのレプリケーションをサポートする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_LEVEL
を2
に設定し、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 ANY TABLE
が必要です。
ALTER TABLE...ADD FOREIGN KEY
の場合、変更される表の所有者に、外部キー句で参照される表のREFERENCES
権限が必要です。
SQL構文
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)
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 データ型のデフォルト値を割り当てることはできません。
列のデフォルト値を変更しても、既存の行は変更されません。 注意: レプリケーション・スキームの一部である表に |
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つ以上の列を含めることができます。
圧縮グループで複数列を定義する場合は、列を 各圧縮列グループは、最大16列に制限されます。 圧縮列の詳細は、「表のインメモリー列圧縮」を参照してください。 |
BY DICTIONARY |
各圧縮列グループの圧縮ディクショナリを定義します。 |
MAXVALUES = CompressMax |
CompressMax は、表の個別値の合計数であり、圧縮列グループ・ポインタ列のサイズを1、2または4バイトに設定し、ディクショナリ表のエントリの最大数のサイズを設定します。
ディクショナリ表の場合、
MAXVALUES句を省略した場合の最大サイズのデフォルトは2 圧縮ディクショナリの最大サイズ指定の詳細は、「表のインメモリー列圧縮」を参照してください。 |
ADD CONSTRAINT ConstraintName PRIMARY KEY ( ColumnName
|
表に主キー制約を追加します。主キーの列はNOT NULL として定義する必要があります。
主キー制約を適用するために使用する索引の名前として 主キーに対してハッシュ索引を使用するには、
TimesTenでは、表に行がない場合は、 推定した数が小さすぎると、パフォーマンスが悪化します。ハッシュ索引作成の詳細は、「列の定義」を参照してください。 注意: |
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)。
TimesTenでは、表に行がない場合は、 推定した数が小さすぎると、パフォーマンスが悪化します。ハッシュ索引作成の詳細は、「列の定義」を参照してください。 |
ADD AGING LRU [ON | OFF] |
エージング・ポリシーが定義されていない既存の表に、LRUエージングを追加します。
LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態( エージング状態を LRU属性はプロシージャ LRUエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。 |
ADD AGING USE ColumnName ... [ON| OFF] |
エージング・ポリシーが定義されていない既存の表に、時間ベースのエージングを追加します。
時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態( エージング状態を 時間ベースのエージング属性はSQLレベルで定義され、 時間ベース・エージングに使用する列の名前として エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列は
時間ベースのエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。 |
LIFETIME Num1 {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S] |
時間ベースのエージング・ポリシーを既存の表に追加する場合は、ADD AGING USE ColumnName句の後にLIFETIME 句を指定します。LIFETIME の設定を変更するには、SET AGING 句の後にLIFETIME 句を指定します。
時間の単位の概念がサポートされています。時間の単位に |
CYCLE Num2 {SECOND[S]| MINUTE[S]| HOUR[S]|DAY[S]} |
時間ベースのエージング・ポリシーを既存の表に追加する場合は、LIFETIME 句の後にオプションでCYCLE 句を指定します。
エージング状態が
|
SET AGING {ON|OFF} |
エージング状態を変更します。エージング・ポリシーが事前に定義されている必要があります。ON にすると、自動エージングが有効になります。OFF にすると、自動エージングが無効になります。外部のスケジューラでエージングを制御するには、エージングを無効にしてttAgingScheduleNow 組込みプロシージャを起動します。 |
DROP AGING |
表からエージング・ポリシーを削除します。一度定義すると、変更することはできません。エージングを削除してから再定義してください。 |
SET AGING LIFETIME Num1 {SECOND[S]| MINUTE[S]|HOUR[S] |DAY[S]} |
この句を使用して時間ベースのエージングの存続期間を変更します。
エージング列を |
SET AGING CYCLE Num2 {SECOND[S]| MINUTE[S]| HOUR[S]|DAY[S]} |
この句を使用して時間ベースのエージングのサイクルを変更します。
|
表を作成すると、初期パーティションが作成されます。表に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エージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。
エージング状態がON
かOFF
かにかかわらずエージング処理をすぐにスケジュールするには、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 );
表books
のUNIQUE
のtitle列を削除します。
ALTER TABLE books DROP UNIQUE (title);
デフォルト値5を使用してx1
列をt1
表に追加します。
ALTER TABLE t1 ADD (x1 INT DEFAULT 5);
列のデフォルト値x1
を2に変更します。
ALTER TABLE t1 MODIFY (x1 DEFAULT 2);
主キー制約c1
を追加するようにprimarykeytest
表を変更します。ttIsql
INDEXES
コマンドを使用して、主キー制約c1
が作成され、範囲索引が使用されていることを表示します。
Command> CREATE TABLE primarykeytest (col1 TT_INTEGER NOT NULL); Command> ALTER TABLE primarykeytest ADD CONSTRAINT c1 > PRIMARY KEY (col1); Command> INDEXES primarykeytest; Indexes on table SAMPLEUSER.PRIMARYKEYTEST: C1: unique range index on columns: COL1 1 index found. 1 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 *)
次の例では、圧縮列state
をemployees
表から削除します。
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 *)
ALTER USER
文を使用すると、ユーザーはユーザー自身のパスワードを変更できます。ADMIN
権限を持つユーザーは別のユーザーのパスワードを変更できます。
また、ユーザーはこの文を使用して、別のユーザーを内部ユーザーから外部ユーザーに、または外部ユーザーから内部ユーザーに変更できます。
必要な権限
ユーザー自身のパスワードの変更に必要な権限はありません。
別のユーザーのパスワードの変更にはADMIN
権限が必要です。
ユーザーを内部ユーザーから外部ユーザーに、および外部ユーザーから内部ユーザーに変更するにはADMIN
権限が必要です。
パラメータ
パラメータ | 説明 |
---|---|
user |
パスワードが変更されるユーザーの名前。 |
IDENTIFIED |
内部ユーザーのパスワードまたはユーザーが外部であることを指定するための識別句。 |
BY password |" password " |
TimesTenデータベースに対する内部ユーザーを識別するパスワードを指定します。 |
EXTERNALLY |
TimesTenデータベースに対するオペレーティング・システムのuser を識別します。データベースを外部ユーザーとして操作するには、オペレーティング・システムまたはネットワークで認証されているユーザー名と一致するTimesTen外部ユーザー名がプロセスに必要です。ユーザーはログイン時にオペレーティング・システムによって認証されているため、TimesTenではパスワードは必要ありません。 |
説明
データベース・ユーザーには、内部ユーザーまたは外部ユーザーを指定できます。
内部ユーザーは、TimesTenデータベース用に定義されるユーザーです。
外部ユーザーは、オペレーティング・システムなどの外部権限によって定義されています。外部ユーザーにTimesTenパスワードを割り当てることはできません。
user
として接続している内部ユーザーは、この文を実行して自分のTimesTenパスワードを変更します。
パスワードは大文字と小文字が区別されます。
クライアント/サーバー接続を介してユーザーを変更することはできません。ユーザーを変更する場合は、直接接続を使用する必要があります。
レプリケーションが構成されている場合、この文はレプリケートされます。
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
文では次のオプションのキーワードを使用できます。
パラメータ | 説明 |
---|---|
[WORK] |
SQL標準に準拠するためにサポートされているオプションの句。COMMIT とCOMMIT 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.
この文は、アクティブ・スタンバイ・ペアを作成します。アクティブ・マスター・データベースとスタンバイ・マスター・データベースが含まれており、1つ以上の読取り専用サブスクライバが含まれる場合もあります。アクティブ・マスター・データベースはスタンバイ・マスター・データベースへ更新をレプリケートし、スタンバイ・マスター・データベースはサブスクライバへ更新を伝播します。
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 } [...]
パラメータ
説明
アクティブ・スタンバイ・ペアを作成した後、データベースの1つをアクティブ・データベースにします。そのためには、ttRepStateSet
('ACTIVE')
をコールします。次に、ttRepAdmin
を使用して、アクティブ・データベースをセカンダリ・データベースに複製します。処理が完了すると、セカンダリ・データベースがスタンバイ・データベースになります。詳細は、『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のキャッシュ・グループのないアクティブ・スタンバイ・ペアの設定に関する説明を参照してください。
SUBSCRIBER
句には、1つ以上の読取り専用サブスクライバ・データベースを指定します。最大127のサブスクライバ・データベースを指定できます。
アクティブ・マスター・データベースとスタンバイ・マスター・データベースの間のレプリケーションは、RETURN TWOSAFE
、RETURN RECEIPT
または非同期のいずれかに設定できます。RETURN TWOSAFE
に設定すると、トランザクションは失われません。
指定された表、順序およびキャッシュ・グループをレプリケーションから除外する場合、または指定された表、順序およびキャッシュ・グループのみを含めて他は除外する場合は、INCLUDE
およびEXCLUDE
句を使用します。
アクティブ・スタンバイ・ペアにRETURN TWOSAFE
属性があり、キャッシュ・グループをレプリケートしている場合、次のような状態のときにトランザクションが失敗する可能性があります。
レプリケートされるトランザクションにALTER TABLE
文またはALTER CACHE GROUP
文が含まれている。
トランザクションに、レプリケートされた表、レプリケートされたキャッシュ・グループまたはASYNCHRONOUS WRITETHROUGHキャッシュ・グループに対するINSERT
、UPDATE
または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
文は、次の処理を実行します。
キャッシュ・グループで定義される表を作成します。
キャッシュ・グループに関連付けられたすべての新しい情報を、適切なシステム表にロードします。
キャッシュ・グループとは、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
句
キャッシュ表定義でのREADONLY
、PROPAGATE
および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キャッシュ表に手動で新しいキャッシュ・インスタンスをロードするか、または動的ロード操作を使用して要求時にロードできます。動的ロード操作では、いずれかのキャッシュ表でSELECT
、UPDATE
、DELETE
、または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を実行する頻度をMINUTES 、SECONDS またはMILLISECONDS の単位の整数値で指定します。IntervalValue のデフォルト値は5分です。指定した時間隔でAUTOREFRESHを完了できない場合は、実行時に警告が生成され、現在の処理が終了するまで次回のAUTOREFRESHを待機します。待機キューが10に達すると、サポート・ログに通知メッセージが生成されます。 |
STATE [ON | OFF | PAUSED] |
キャッシュ・グループの作成時に自動リフレッシュをON 、OFF または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)。
ハッシュ索引の詳細は、「CREATE TABLE」を参照してください。 |
WHERE ExternalSearchCondition |
Oracle Databaseでキャッシュ・グループに対して評価されるWHERE 句。このWHERE 句は、キャッシュ・グループに対するすべてのLOAD とREFRESH 処理に追加されます。他の表を直接参照することはできません。TimesTenとOracle Databaseの両方で解析されます。『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のWHERE句の使用に関するに関する項を参照してください。 |
AGING LRU [ON | OFF] |
指定する場合、ルート表にLRUエージング・ポリシーを定義します。LRUエージング・ポリシーはキャッシュ・グループのすべての表に適用します。LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態(ON またはOFF )およびLRUエージング属性を定義します。
エージング状態を 動的キャッシュ・グループでは、LRUエージングはデフォルトで キャッシュ・グループが動的でないかぎり、自動リフレッシュ属性が指定されたキャッシュ・グループにはLRUエージングを指定できません。 LRU属性はプロシージャ LRUエージングの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのエージングの実装に関する項を参照してください。 |
AGING USE ColumnName ...[ON|OFF] |
指定する場合、ルート表に時間ベースのエージング・ポリシーを定義します。時間ベースのエージング・ポリシーはキャッシュ・グループのすべての表に適用します。時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ON またはOFF )および時間ベースのエージング属性を定義します。
エージング状態を 時間ベースのエージング属性はSQLレベルで定義され、 時間ベース・エージングに使用する列の名前として エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列は 明示的にロードされるグローバル・キャッシュ・グループでは、エージングはデフォルトで無効です。 時間ベースのエージングの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのエージングの実装に関する項を参照してください。 |
LIFETIME Num1 {SECOND[S]|MINUTE[S]|HOUR[S]DAY[S]} |
LIFETIME は時間ベースのエージング属性で、必須の句です。
時間の単位の概念がサポートされています。時間の単位に |
[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S]| DAY[S]}] |
CYCLE は時間ベースのエージング属性で、オプションです。LIFETIME 句の後に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 GROUP
、LOAD CACHE GROUP
、UNLOAD CACHE GROUP
、REFRESH 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
パラメータは、Oracle DatabaseからTimesTenキャッシュ・グループに自動的に変更を伝播します。明示的にロードされるキャッシュ・グループの場合、削除、更新および挿入がOracle Databaseからキャッシュ・グループに自動的に伝播されます。動的キャッシュ・グループの場合、削除と更新のみが伝播されます。指定されたOracle Database表への挿入は動的キャッシュ・グループには伝播されません。これらは、アプリケーションで参照されたときに、動的にTimesTen Cacheにロードされます。また、アプリケーションで明示的にロードすることもできます。
キャッシュ・グループで自動リフレッシュを使用するには、キャッシュ・グループを作成する際にAUTOREFRESH
を指定する必要があります。MODE
、STATE
および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
を指定した文を含むトランザクションがコミットされたときに、自動リフレッシュ操作をスケジュールします。自動リフレッシュをスケジュールする文は、次のとおりです。
AUTOREFRESH
を指定し、AUTOREFRESH
状態をON
に指定したCREATE CACHE GROUP
文。
AUTOREFRESH状態をON
に変更したALTER CACHE GROUP
文。
自動リフレッシュの状態がPAUSEDに指定されている、空のキャッシュ・グループに対して実行される
LOAD CACHE GROUP文。
自動リフレッシュの頻度は、指定した時間隔によって決まります。
AUTOREFRESH
のSTATE
には、ON
、OFF
またはPAUSED
が指定できます。デフォルトでは、自動リフレッシュの状態はPAUSED
です。
NOT PROPAGATE
属性とAUTOREFRESH
属性を同時に使用することはできません。
時間ベースのエージングでは、スライド期間を指定できます。『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のスライド期間の構成に関する項を参照してください。
表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。
エージング・ポリシーは、エージング状態を変更するように定義する必要があります。
1つのシステムでLRUエージングと時間ベースのエージングの両方を組み合せて使用できます。LRUエージングのみを使用する場合、エージング・スレッドはデータベース全体に指定されたサイクルに基づいて起動します。一方、時間ベースのエージングのみを使用する場合、エージング・スレッドは最適な頻度に基づいて起動します。この頻度は、すべての表のCYCLE
句に指定された値によって決定されます。LRUエージングと時間ベースのエージングの両方を使用する場合は、両方のタイプを組み合せて考慮した上でスレッドが起動します。
エージング状態がON
かOFF
かにかかわらずエージング処理をすぐにスケジュールするには、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
文は、スタンドアロンのストアド・ファンクションを作成します。
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 |
パラメータのモード。
|
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文の名前解決および権限チェックに次のように影響を与えます。
詳細は、『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.
CREATE INDEX
文は、範囲索引、ハッシュ索引、またはビットマップ索引を表またはマテリアライズド・ビューの1つ以上の列に作成します。
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 ]
パラメータ
説明
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.
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) ] ] ASSelectQuery
[PRIMARY KEY (ColumnName
[,...])] [UNIQUE HASH ON (HashColumnName [,...]) PAGES =PrimaryPages
]
パラメータ
パラメータ | 説明 |
---|---|
[ Owner .] ViewName |
新しいビューに割り当てる名前。 |
REFRESH |
非同期マテリアライズド・ビューを指定します。 |
FAST | COMPLETE |
リフレッシュ方法。FAST は、増分リフレッシュを指定します。COMPLETE は、完全リフレッシュを指定します。 |
NEXT SYSDATE |
NUMTODSINTERVAL を指定せずにNEXT SYSDATE を指定した場合、マテリアライズド・ビューは、ディテール表が変更されるたびに増分リフレッシュされます。リフレッシュは、ディテール表を変更するトランザクションがコミットされた直後に、別のトランザクションで実行されます。ディテール表が変更されるたびに完全リフレッシュ(COMPLETE )を指定することはできません。
|
[+NUMTODSINTERVAL(IntegerLiteral, IntervalUnit)] |
指定した場合、マテリアライズド・ビューは指定した時間隔でリフレッシュされます。IntegerLiteral は整数である必要があります。IntervalUnit は、'DAY' 、'HOUR' 、'MINUTE' 、'SECOND' のいずれかの値である必要があります。
|
SelectQuery |
ビューで使用される、ディテール表の列を選択します。 |
ColumnName |
作成されるビューの主キー列の名前を指定します。主キーには最大16列を指定できます。ビュー表の結果列の名前は、一意である必要があります。表または所有者の要素を列名の定義に含めることはできません。 |
UNIQUE HASH ON |
表のハッシュ索引です。一意のハッシュ索引のみが作成されます。このパラメータは、等価条件に使用します。UNIQUE HASH ON を指定するには、主キーの定義が必要です。 |
HashColumnName |
ビューに定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。 |
PAGES = PrimaryPages |
表の想定ページ数に基づいてハッシュ索引のサイズを設定します。PrimaryPages の値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、PrimaryPages に1000を指定します(256000/256=1000)。
ハッシュ索引の詳細は、「CREATE TABLE」を参照してください。 |
説明
この項では、マテリアライズド・ビューに関する制限事項、要件、その他の考慮事項を、次のトピックを通じて説明します。
マテリアライズド・ビューの制限事項および要件
問合せの定義に関する次の制限事項および要件は、マテリアライズド・ビューに一般的に適用されます。(FAST
リフレッシュを使用した非同期マテリアライズド・ビューには、記述のとおり、追加の制限事項があります。)
SELECT構文のリストの各式には、一意の名前が必要です。
非マテリアライズド・ビューを使用してマテリアライズド・ビューを定義しないでください。
マテリアライズド・ビュー問合せの選択リストの列にCLOB
、BLOB
、またはNCLOB
データ型を定義しないでください。
ディテール表はキャッシュ・グループに属すことができず、ディテール表は圧縮を使用できません。
SELECT
FOR
UPDATE
.は使用しないでください。
システム表またはシステム・ビューを参照しないでください。
マテリアライズド・ビューでネストされた定義を使用しないでください。
動的パラメータを使用しないでください。
ROWNUM
を使用しないでください。
分析関数を使用しないでください。
GROUPING
SETS
、ROLLUP
、または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
リフレッシュを使用した非同期マテリアライズド・ビューでは集計関数は使用できません。
集合演算子UNION
、INTERSECT
または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
リフレッシュでの非同期マテリアライズド・ビューの各ディテール表にマテリアライズド・ビュー・ログを作成する必要があります。
マテリアライズド・ビュー・ログに、非同期マテリアライズド・ビューで使用されるすべての列が含まれている必要があります。
マテリアライズド・ビューの追加考慮事項
次の追加考慮事項は、同期非同期を問わず、マテリアライズド・ビューに一般的に適用されます。
マテリアライズド・ビューは読取り専用であり、直接更新できません。マテリアライズド・ビューの更新は、関連付けられたディテール表が変更された場合にのみ実行されます。このため、マテリアライズド・ビューに対してDELETE
、UPDATE
または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_OBJECTS
、SYS.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
文は、ディテール表に対する変更が記録されるログを作成します。ログは、増分リフレッシュされる非同期マテリアライズド・ビューに必要です。マテリアライズド・ビューを作成する前にログを作成する必要があります。ログは、ユーザーのスキーマ内のMVLOG$_
detailTableID
という名前の表であり、detailTableID
はシステム生成されるIDです。
この文は、内部使用のための他のオブジェクトも作成します。
MVLGT$_
detailTableID
という名前のグローバル一時表
MVSEQ$_
detailTableID
という名前の順序
オブジェクトは、DROP MATERIALIZED VIEW LOG
文を実行すると削除されます。
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 KEY
とROWID
の両方を指定できます。マテリアライズド・ビュー・ログは、指定された表をディテール表として使用する複数の非同期マテリアライズド・ビューで使用される場合があります。ただし、マテリアライズド・ビュー・ログに対して指定できるのは、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
文は、データベースに一緒に格納される、関連するプロシージャやファンクション、その他のプログラム・オブジェクトをカプセル化したコレクションである、スタンドアロン・パッケージの仕様部を作成します。パッケージ仕様でこれらのオブジェクトを宣言します。パッケージ本体でこれらのオブジェクトを定義します。
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文の名前解決および権限チェックに次のように影響を与えます。
詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限と実行者の権限に関する項を参照してください。 |
IS|AS |
IS またはAS を指定して、ファンクションの本体を宣言します。 |
PlsqlPackageSpec |
パッケージ仕様を指定します。型定義、カーソル宣言、変数宣言、定数宣言、例外宣言およびPL/SQLサブプログラム宣言を含めることができます。 |
CREATE PACKAGE BODY
文は、スタンドアロン・パッケージの本体を作成します。パッケージとは、データベースに格納されている関連するプロシージャ、ファンクションおよびその他のプログラム・オブジェクトのカプセル化されたコレクションのことです。パッケージ仕様でこれらのオブジェクトを宣言します。パッケージ本体でこれらのオブジェクトを定義します。
パラメータ
パラメータ | 説明 |
---|---|
OR REPLACE |
パッケージ本体がすでに存在する場合に再作成するには、OR REPLACE を指定します。この句を使用して、パッケージを削除および再作成せずに既存のパッケージの本体を変更します。パッケージ本体を変更すると、そのパッケージ本体はTimesTenで再コンパイルされます。 |
PackageBody |
パッケージ本体の名前。 |
IS|AS |
IS またはAS を指定して、ファンクションの本体を宣言します。 |
plsql_package_body |
PL/SQLサブプログラムで構成されるパッケージ本体を指定します。 |
CREATE 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] |
パラメータのモード。
|
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文の名前解決および権限チェックに次のように影響を与えます。
詳細は、『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.
CREATE REPLICATION
文は、次の処理を実行します。
関連するデータベースにクラシック・レプリケーション・スキームを定義します。
実行するデータベースのレプリケーション・システム表に、指定した構成を組み込みます。
通常は、1つ以上のレプリケーション要素の指定、および0(ゼロ)以上のSTORE
の指定が含まれています。
TimesTen SQLによるレプリケーションの構成では、クラシック・レプリケーションをプログラム的な方法で構成できます。この構成は、C、C++またはJavaコードに埋め込むことができます。レプリケーションをローカルで構成したり、クライアント/サーバーを使用してリモート・システムから構成できます。
また、サポートされているSQL文ではカバーされていない処理に対応する場合は、ttRepAdmin
ユーティリティを使用する必要があります。ttRepAdmin
を使用すると、レプリケーションの状態の変更、データベースの複製、レプリケーション構成の一覧表示およびレプリケーション状態の表示を実行できます。
定義
レプリケーション要素は、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 |
競合解消のレポートを一時停止します。
この句は、表レベルのレプリケーションで有効です。 |
CONFLICT REPORTING RESUME AT Value |
競合解消のレポートを再開します。
この句は、表レベルのレプリケーションで有効です。 |
DATASTORE |
データベース全体を要素として定義します。この種類の要素は、同一または異なるレプリケーション・スキームでTABLE 型の要素が構成されていないマスター・データベースに対してのみ定義できます。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。 |
{INCLUDE|EXCLUDE}
|
INCLUDE は、指定された表、順序またはキャッシュ・グループのみをDATASTORE 要素に含めます。INCLUDE 句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。
|
DISABLE RETURN {SUBSCRIBER|ALL} NumFailures |
NumFailures で指定されているタイムアウト回数を経過した後、RETURNサービスのブロッキングを無効にするようにRETURNサービス障害ポリシーを設定します。SUBSCRIBER を選択すると、レプリケートされた更新を、指定されているタイムアウト期間内に確認できなかったサブスクライバのみにこのポリシーが適用されます。ALL を選択すると、いずれかのサブスクライバから応答がなかった場合、すべてのサブスクライバにこのポリシーが適用されます。この障害ポリシーは、RETURN RECEIPT またはRETURN TWOSAFE サービスのいずれかで指定できます。
詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。 |
DURABLE COMMIT {ON|OFF} |
DurableCommits 一般接続属性設定を上書きします。DURABLE COMMIT ON は、レプリケーション・エージェントが実行中か停止しているかに関係なく、永続コミットを有効にします。 |
ELEMENT ElementName |
TimesTenがデータベース間で同期を取るエンティティです。レプリケーション要素として、TimesTenでは、データベース全体(DATASTORE )および表全体(TABLE )がサポートされています。
詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。 |
FAILTHRESHOLD Value |
サブスクライバ・データベースのために累積できるログ・ファイルの数。この値を超えると、サブスクライバはFailed の状態に設定されます。0を指定すると、この上限は設定されません。これがデフォルトです。
『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のトランザクション・ログ障害しきい値の設定に関する説明を参照してください。 |
FullStoreName |
次のいずれかとして指定されたデータベースです。
たとえば、データベースのパスが この名前は、DSNの記述の
|
LOCAL COMMIT ACTION {NO ACTION | COMMIT} |
タイムアウト・イベントのRETURN TWOSAFEトランザクションで実行されるデフォルトのアクションを指定します。
注意: この属性は、
この設定は、 |
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 で指定された時間よりも短い間隔でレプリケートされた更新を確認するとすぐに再度有効になります。
|
RETURN RECEIPT [BY REQUEST] |
RETURN RECEIPTサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションを受信するまでブロックされます。
|
RETURN SERVICES {ON|OFF} WHEN [REPLICATION] STOPPED |
レプリケーションが無効になっている場合のRETURNサービスのオンまたはオフを設定します。
詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。 |
RETURN TWOSAFE [BY REQUEST] |
RETURN TWOSAFEサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションをコミットするまでブロックされます。
注意: このサービスは、要素が
|
RETURN WAIT TIME Seconds |
RETURNサービスの応答を待機する秒数を指定します。デフォルト値は10秒です。値が0(ゼロ)の場合は、タイムアウトがないことを意味します。returnWait パラメータを設定してアプリケーションからttRepSyncSet プロシージャをコールすることで、このタイムアウト設定を無効にすることができます。 |
SEQUENCE [ Owner .] SequenceName |
[ Owner .] SequenceName によって要素として指定された順序を定義します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。 |
STORE FullStoreName |
指定されたデータベースの属性を定義します。属性には、PORT 、TIMEOUT およびFAILTHRESHOLD があります。FullStoreName は、DSNの記述のDataStore 属性で指定したデータベースである必要があります。 |
SUBSCRIBER FullStoreName |
MASTER データベースから更新を受け取るデータベース。FullStoreName は、DSNの記述のDataStore 属性で指定したデータベースである必要があります。 |
TABLE [ Owner .] TableName |
[ Owner .] TableName によって要素として指定された表を定義します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。 |
TIMEOUT Seconds |
レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大時間(秒)。デフォルトは120秒です。
注意: リモート・レプリケーション・エージェントからの応答の遅延の原因となる大規模なトランザクションの場合、エージェントは、トランザクションのサイズに基づいて、タイムアウトをスケーリングします。 |
TRANSMIT {DURABLE | NONDURABLE} |
コミットされたトランザクション群をサブスクライバに転送する前に、マスターのログをディスクにフラッシュするかどうかを指定します。
注意: 注意: アクティブ・スタンバイ・ペアに対して 詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のDATASTORE要素での送信永続性の設定に関する説明およびTRANSMIT NONDURABLEによるマスター・データベース全体のレプリケートに関する説明を参照してください。 |
TABLE DEFINITION CHECKING {EXACT|RELAXED} |
サブスクライバで実行される表定義チェックの種類を指定します。
デフォルトは 注意: |
ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName |
NetworkOperation 句を示します。指定されている場合、各サブスクライバ・ストアへのすべてのアウトバウンド接続にマスター・ストアが使用するネットワーク・インタフェースを制御できます。
複数回指定できます。
|
MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost |
MasterHost およびSubscriberHost は、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。
句は複数回指定できます。 |
PRIORITY Priority |
1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。
|
構文
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処理と |
COLUMN ColumnName |
レプリケートされた表の列を使用してタイムスタンプを比較します。表はELEMENT の記述のTableName で指定されます。
|
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 競合の検出には、次の解消オプションがあります。
デフォルトは |
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";
eastds
とwestds
データベースの間で、repl.accounts
表の内容を双方向でレプリケートします。各データベースは、repl.accounts
表に対してマスターおよびサブスクライバの両方になります。
repl.accounts
表がeastds
とwestds
データベースのいずれかで更新されるため、ここにはタイムスタンプ列(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
文を使用して、順序の初期値を定義し、増分値、最大値または最小値を定義し、最小または最大に達した後も順序番号を生成し続けるかどうかを決定します。
SQL構文
CREATE SEQUENCE [Owner.]SequenceName [INCREMENT BY IncrementValue] [MINVALUE MinimumValue] [MAXVALUE MaximumValue] [CYCLE] [CACHE CacheValue] [START WITH StartValue]
パラメータ
説明
CREATE SEQUENCE
文のすべてのパラメータは整数値である必要があります。
パラメータに値を指定しない場合、TimesTenでは、1から開始し、1ずつ増加し、デフォルトの最大値を持ちサイクルしない昇順がデフォルトで作成されます。
TimesTenにはALTER SEQUENCE
文はありません。順序を変更する場合は、DROP SEQUENCE
文を使用してから、同じ名前の順序を新規作成します。たとえば、MINVALUE
を変更する場合、順序を削除し、同じ名前で必要なMINVALUE
を持つ順序を再度作成します。
ビューまたはマテリアライズド・ビューと同じ名前の順序は作成しないでください。
CYCLE
属性が指定された順序はレプリケートできません。
アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVEL
が3以上の場合にアクティブ・データベースでCREATE SEQUENCE
を実行すると、順序はレプリケーション・スキームのすべてのデータベースにレプリケートされます。順序をレプリケーション・スキームに含めるには、DDL_REPLICATION_ACTION
をINCLUDE
に設定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。
CURRVALとNEXTVALによるSEQUENCE値の増加
SQL文でSEQUENCE
値を参照するには、CURRVAL
とNEXTVAL
を使用します。
CURRVAL
は、現在のセッションでNEXTVAL
がコールされていればその最新の値を返し、コールされていなければエラーを返します。
NEXTVAL
は、指定された増分で順序の現在値を増加させ、アクセスされた行ごとに値を返します。
順序の現在値は、接続ごとに異なります。同じデータベースに2つの同時接続がある場合、各接続は同じ順序について、最後のNEXTVAL
参照により設定された独自のCURRVAL
を取得します。最大値に達した場合、CREATE SEQUENCE
のCYCLE
オプションの値によって、SEQUENCE
はサイクルする(開始値に戻る)か、エラー文を生成します。リカバリでは、順序はロールバックされません。順序の値の範囲に幅を持たせることができますが、その場合でも各順序値は一意です。
複数のNEXTVAL
参照を持つ1つのSQL文を実行する場合、TimesTenでは順序を一度だけ増加させ、すべてのNEXTVAL
に対して同じ値が返されます。SQL文にNEXTVAL
とCURRVAL
の両方が含まれている場合は、NEXTVAL
が最初に実行されます。CURRVAL
とNEXTVAL
は、そのSQL文では同じ値を持ちます。
注意: NEXTVAL は、アクティブ・スタンバイ・ペアのスタンバイ・ノードへの問合せでは使用できません。 |
NEXTVAL
およびCURRVAL
は、次の場合に使用できます。
SELECT
文のSelectList
(ただし、副問合せのSelectList
は除く)
INSERT...SELECT
文のSelectList
UPDATE
文のSET
句
例
順序を作成します。
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;
CREATE SYNONYM
文は、データベース・オブジェクトのパブリック・シノニムまたはプライベート・シノニムを作成します。シノニムは、データベース・オブジェクトの別名です。オブジェクトは、表、ビュー、シノニム、順序、PL/SQLストアド・プロシージャ、PL/SQLファンクション、PL/SQLパッケージ、マテリアライズド・ビューまたはキャッシュ・グループです。
プライベート・シノニムは、特定のユーザーが所有し、そのユーザーのスキーマ内に存在します。プライベート・シノニムに所有者以外のユーザーがアクセスできるのは、基礎となるオブジェクトに対する適切な権限がユーザーにあり、シノニム名とともにスキーマを指定する場合のみです。
パブリック・シノニムは、基礎となるオブジェクトに対する適切な権限がユーザーにあるかぎり、すべてのユーザーがアクセスできます。
CREATE SYNONYM
はDDL文です。
シノニムは、次のSQL文で使用できます。
DML文: SELECT
、DELETE
、INSERT
、UPDATE
、MERGE
一部のDDL文: GRANT
、REVOKE
、CREATE TABLE ... AS SELECT
、CREATE VIEW ... AS SELECT
、CREATE INDEX
、DROP INDEX
一部のキャッシュ・グループ文: LOAD CACHE GROUP
、UNLOAD CACHE GROUP
、REFRESH CACHE GROUP
、FLUSH CACHE GROUP
必要な権限
プライベート・シノニムを作成するには、CREATE SYNONYM
(所有者の場合)またはCREATE ANY SYNONYM
(非所有者の場合)。
パブリック・シノニムを作成するには、CREATE PUBLIC SYNONYM
。
パラメータ
パラメータ | 説明 |
---|---|
[OR REPLACE] |
シノニムがすでに存在する場合に再作成するには、OR REPLACE を指定します。この句を使用すると、既存のシノニムの定義をはじめに削除しなくても、その定義を変更できます。 |
[PUBLIC] |
PUBLIC を指定すると、パブリック・シノニムを作成できます。パブリック・シノニムは、すべてのユーザーがアクセスできますが、シノニムを使用するには、基礎となるオブジェクトに対する適切な権限が各ユーザーに必要です。
オブジェクトの先頭にスキーマ名が指定されていない場合のみ、オブジェクトへの参照を変換するときに、TimesTenでパブリック・シノニムが使用されます。 |
[ Owner1 .] synonym |
シノニムの所有者を指定します。PUBLIC を指定した場合、所有者は指定できません。PUBLIC とOwner1 の両方を省略した場合、TimesTenによって、自分のスキーマ内にシノニムが作成されます。
シノニムの名前を30バイト以内で指定します。 |
[ Owner2 .] object |
オブジェクトが配置される所有者を指定します。シノニムを作成する対象のオブジェクト名を指定します。object をOwner2 で修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあります。Owner2 およびobject は、シノニムの作成時に存在している必要はありません。 |
説明
スキーマ・オブジェクトは、そのシノニムの作成時に存在している必要はありません。
TimesTen組込みプロシージャと同じ名前のパブリック・シノニムは作成しないでください。
シノニムを使用するには、シノニムを使用する前に、シノニムによって別名が付けられるオブジェクトのユーザーに適切な権限が付与されている必要があります。
プライベート・シノニムの名前は、プライベート・シノニムと同じスキーマにある表、ビュー、順序、PL/SQLパッケージ、ファンクション、プロシージャおよびキャッシュ・グループと同じにすることはできません。
パブリック・シノニムの名前は、プライベート・シノニムやオブジェクト名と同じにすることができます。
問合せがOracle Databaseで実行される必要があるようにPassThrough
属性が設定されている場合は、その問合せは変更されずにOracle Databaseに送信されます。問合せがキャッシュ・グループの表に対してシノニムを使用する場合、問合せが成功するためには、同じ名前のシノニムが対応するOracle Database表に定義されている必要があります。
オブジェクト名が、シノニムを使用できるDML文およびDDL文で使用される場合、オブジェクト名は次のように解決されます。
現在のスキーマ内で一致を検索します。一致が見つからない場合は、次に進みます。
パブリック・シノニム名との一致を検索します。一致が見つからない場合は、次に進みます。
SYSスキーマ内で一致を検索します。一致が見つからない場合は、次に進みます。
オブジェクトは存在しません。
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.
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に基づいて識別されます。グローバル一時表は、一時領域に割り当てられます。 グローバル一時表の内容は接続間で共有できません。各接続では、その接続の表の内容のみが表示され、一時表を参照するコンパイルされたコマンドは接続間で共有されません。
キャッシュ・グループ表は、一時表として定義できません。 一時表の変更は、XLAで追跡できません。 一時表の操作でログ・レコードが生成されます。生成されるログの量は、永続表用よりも少なくなります。 TRUNCATE TABLEは、グローバル一時表でサポートされていません。 ローカルの一時表は、サポートされていません。 グローバル一時表にアクセスするには、オブジェクト権限は必要ありません。 グローバル一時表には |
ColumnDefinition |
表の個々の列です。各表には、列が少なくとも1つ必要です。詳細は、「列定義」を参照してください。
|
ColumnName |
作成する表の主キーを構成する列の名前。主キーには最大16列を指定できます。外部キーの場合、ColumnName はオプションです。外部キーに対して指定しない場合、参照されるのは親表の主キーです。
|
PRIMARY KEY |
PRIMARY KEY は、表定義で一度だけ指定できます。これによって、1つ以上の列が表の主キーを構成していることを示します。主キーの内容は一意かつNOT NULL である必要があります。列には、UNIQUE と単一列PRIMARY KEY の両方を指定することはできません。 |
CONSTRAINT ForeignKeyName |
オプションのユーザー定義の名前を外部キーに指定します。ユーザーが指定しない場合は、システムによってデフォルトの名前が指定されます。 |
FOREIGN KEY |
新しい表とRefTableName によって識別される参照先の表の間で外部キー制約を指定します。外部キー制約で指定される列には、2つのリストがあります。
最初のリストの列は、新しい表の列であり、参照元列と呼ばれます。2番目のリストの列は、参照先の表の列であり、参照先列と呼ばれます。これら2つのリストは、長さ、精度、スケールを含めてデータ型が一致している必要があります。参照先の表には、参照先列に対する主キーまたは一意索引がすでに存在している必要があります。 参照先列の列名リストはオプションです。省略した場合、 外部キーを宣言することにより、参照元列に範囲索引が作成されます。参照先の表またはその参照先の索引は、参照元表を削除しないかぎり削除できません。 外部キー制約によって、新しい表の各行と参照先の表の行は、参照元列の内容と参照先列の内容が同じになるように一致させる必要があります。 TimesTenでは、SQL-92 外部キーはグローバル一時表で定義できますが、グローバル一時表の参照のみを行うことができます。親表が 外部キーは、アクティブな親表を参照できません。アクティブな親表とは、接続に対してマテリアライズされたインスタンスを持つ表のことです。
|
[ON DELETE CASCADE] |
ON DELETE CASCADE 参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。 |
TableCompression |
データをより効率的に格納する、列レベルでの圧縮を定義します。列での重複する値の冗長な格納を削除し、全表スキャンを実行するSQL問合せのパフォーマンスを向上させます。詳細は、「表のインメモリー列圧縮」を参照してください。 |
UNIQUE |
UNIQUE 列の各行の値が一意である必要があることを示します。 |
UNIQUE HASH ON |
表のハッシュ索引。このパラメータは、等価条件に使用します。UNIQUE HASH ON を指定するには、主キーの定義が必要です。 |
HashColumnName |
表に定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。
|
PAGES = PrimaryPages |
表の想定ページ数に基づいてハッシュ索引のサイズを設定します。PrimaryPages の値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、PrimaryPages に1000を指定します(256000/256=1000)。
|
[ON COMMIT {DELETE|PRESERVE} ROWS] |
グローバル一時表を作成するトランザクションがコミットされるときに、行を削除するか、または保存するかを指定するオプションの文です。この文が指定されていない場合は、一時表の行が削除されます。 |
[AGING LRU [ON|OFF]] |
指定する場合、表のLRUエージング・ポリシーを定義します。LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態(ON またはOFF )およびLRUエージング属性を定義します。
エージング状態を LRU属性はプロシージャ LRUエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。 |
[AGING USE ColumnName ... [ON|OFF]] |
指定する場合、表の時間ベースのエージング・ポリシーを定義します。時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ON またはOFF )および時間ベースのエージング属性を定義します。
エージング状態を 時間ベースのエージング属性はSQLレベルで定義され、 時間ベース・エージングに使用する列の名前として エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列は
AS 時間ベースのエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。 |
LIFETIME Num1 {SECOND[S]| MINUTE[S]|HOUR[S]| DAY[S]} |
LIFETIME は時間ベースのエージング属性で、必須の句です。
時間の単位の概念がサポートされています。時間の単位に |
[CYCLE Num2 {SECOND[S] |MINUTE[S]|HOUR[S]| DAY[S]}] |
CYCLE は時間ベースのエージング属性で、オプションです。LIFETIME 句の後にCYCLE 句を指定します。
エージング状態が |
AS SelectQuery |
指定されている場合、SelectQuery の結果セットの内容から新しい表が作成されます。SelectQuery で返される行が表に挿入されます。
データ型およびデータ型の長さは、
|
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です。
|
ColumnDataType |
列に格納できるデータ型です。長さを指定する必要があるデータ型もあります。指定できるデータ型の詳細は、第1章「データ型」を参照してください。
|
DEFAULT DefaultVal |
INSERT 文で列の値が指定されていない場合、デフォルト値DefaultVal を列に挿入します。指定されたデフォルト値は、列のデータ型と互換性がある型である必要があります。デフォルト値には、関連付けられた列で許可されている任意のデータ型を指定できます。ROWID データ型について、または読取り専用キャッシュ・グループの列についてデフォルト値を割り当てることはできません。また、DEFAULT 句でファンクションを使用することはできません。
デフォルト値がユーザーのいずれかである場合、列のデータ型は
|
INLINE| NOT INLINE |
デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINE およびNOT INLINE キーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。
|
NULL |
列にNULL 値を含めることができます。
|
NOT NULL [ENABLE] |
列にNULL 値を含めることはできません。NOT NULL を指定した場合、列にNULL 値を保存しようとする文はすべて拒否されます。
|
UNIQUE |
列に設定される一意制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。一意性を実現するために、TimesTenでは一意の範囲索引が作成されます。つまり、一意制約を持つ列は、制約を持たない列よりも多くのメモリーと時間を実行時に使用する可能性があります。PRIMARY KEY とともに使用することはできません。
|
PRIMARY KEY |
列に設定される一意のNOT NULL 制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。UNIQUE とともに使用することはできません。
|
説明
主キーに保存されるすべての列は、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
文で列に名前を付けます。
作成する表に対して外部キーを指定しないでください。
SelectQuery
でSELECT FOR UPDATE
句を指定しないでください。
AS
SelectQuery
句を使用する場合、ORDER BY
句はサポートされません。
SelectQuery
に集合演算子UNION
、MINUS
およびINTERSECT
を含めることはできません。
レプリケートされた環境では、次のことに注意してください。
グローバル一時表を含む新しい表の作成時に表をアクティブ・スタンバイ・ペアに含めるには、アクティブ・データベースでCREATE TABLE
文を実行する前に、DDL_REPLICATION_LEVEL
を2以上に設定し、DDL_REPLICATION_ACTION
をINCLUDE
に設定します。この構成では、表はアクティブ・スタンバイ・ペアに含まれ、レプリケーション・スキームのすべてのデータベースにレプリケートされます。
DDL_REPLICATION_ACTION
をEXCLUDE
に設定した場合、新しい表は、アクティブ・スタンバイ・ペアに含まれませんが、レプリケーション・スキームのすべてのデータベースにレプリケートされます。表はレプリケーション・スキームの一部にはならないため、その表で発行された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つの圧縮列グループにのみ含めることができます。
圧縮列グループで複数の列を指定する場合、 各圧縮列グループは、最大16列に制限されます。 |
OPTIMIZED FOR READ |
CREATE TABLE 文で指定すると、表は圧縮列グループに対して有効になります。圧縮列グループは、CREATE TABLE 文を使用して表の作成時に追加するか、ALTER TABLE 文を使用して後で追加できます。 |
BY DICTIONARY |
各圧縮列グループの圧縮ディクショナリを定義します。 |
MAXVALUES = CompressMax |
CompressMax は、表の個別値の合計数であり、圧縮列グループ・ポインタ列のサイズを1、2または4バイトに設定し、ディクショナリ表のエントリの最大数のサイズを設定します。
ディクショナリ表の場合、
MAXVALUES句を省略した場合の最大サイズのデフォルトは2 |
説明
圧縮列グループは、表の作成時に追加するか、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
表のauthorfirstname
とauthorlastname
列に作成されます。
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
文は、TimesTenデータベースのユーザーを作成します。
パラメータ
パラメータ | 説明 |
---|---|
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
文は、SelectQuery
句で指定された表に対するビューを作成します。ビューとは、1つ以上のディテール表に基づいた論理表のことです。ビュー自体にデータは含まれていません。ビューは、ディテール表からすでに計算されたデータを含むマテリアライズド・ビューと区別するために、非マテリアライズド・ビューと呼ばれることがあります。
アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVEL
が3以上の場合にアクティブ・データベースでCREATE VIEW
を実行すると、ビューはレプリケーション・スキームのすべてのデータベースにレプリケートされます。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。
必要な権限
文を実行するユーザーには、CREATE VIEW
権限(所有者の場合)または別のユーザーのビューの場合はCREATE ANY VIEW
(非所有者の場合)が必要です。
ビューの所有者には、ディテール表に対するSELECT
権限が必要です。
パラメータ
パラメータ | 説明 |
---|---|
[ Owner .] ViewName |
新しいビューに割り当てる名前。 |
SelectQuery |
ビューで使用される、ディテール表の列を選択します。ビューに対して索引を作成することも可能です。 |
ビューの定義に使用される問合せには、いくつかの制限があります。
ビュー定義の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
文は、表から行を削除します。
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 ] |
検索条件を満たす行を削除する表を指定します。
|
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
およびname
をemployee_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
この文は、アクティブ・スタンバイ・ペア・レプリケーション・スキームを削除します。
DROP CACHE GROUP
文は、キャッシュ・グループに関連付けられている表を削除して、CACHE_GROUP
システム表からキャッシュ・グループの定義を削除します。
必要な権限
キャッシュ・グループの所有者に必要な権限はありません。
キャッシュ・グループの所有者でない場合は、DROP ANY CACHE GROUP
、
キャッシュ・グループの少なくとも1つの表が現在のユーザーによって所有されていない場合は、DROP ANY TABLE
が必要です。
説明
使用中のキャッシュ・グループ表を削除しようとすると、エラーが返されます。
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 FUNCTION
文は、データベースからスタンドアロンのストアド・ファンクションを削除します。この文を使用してパッケージに含まれるファンクションを削除しないでください。
説明
ファンクションを削除すると、削除されたファンクションに依存するオブジェクトは無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したファンクションを再作成していない場合、エラー・メッセージが返されます。
この文を使用してパッケージに含まれるファンクションを削除しないでください。パッケージを削除するか、またはOR REPLACE
句を含むCREATE PACKAGE
文を使用して、ファンクションを含まないパッケージを再定義します。
DROP FUNCTION
文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーがスローされます。
DROP INDEX
文は、指定した索引を削除します。
説明
ビジーな索引(使用中の索引、または外部キーを適用する索引)を削除しようとすると、エラーが発生します。外部キーを削除して、関連付けられた索引を削除するには、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変更に関する説明を参照してください。
DROP MATERIALIZED VIEW
文は、指定されたマテリアライズド・ビューを、それに関連付けられたハッシュ索引および範囲索引とともに削除します。
必要な権限
ビューの所有者であるか、またはDROP ANY MATERIALIZED VIEW
(非所有者の場合)および
表の所有者であるか、またはDROP ANY TABLE
(非所有者の場合)および
ビューに索引がある場合は、索引の所有者であるか、またはDROP ANY INDEX
(非所有者の場合)。
DROP MATERIALIZED VIEW LOG
文は、ディテール表のマテリアライズド・ビュー・ログを削除します。CREATE MATERIALIZED VIEW LOG
文で作成されたグローバル一時表も削除します。
DROP PACKAGE
文は、データベースからストアド・パッケージを削除します。仕様と本体の両方を削除します。DROP PACKAGE BODY
は、パッケージの本体のみを削除します。
パラメータ
パラメータ | 説明 |
---|---|
PACKAGE [BODY] |
BODY を指定すると、パッケージ本体のみを削除できます。パッケージの仕様と本体の両方を削除するには、BODY を省略します。 |
[ Owner .] PackageName |
削除するパッケージの名前です。 |
説明
パッケージの本体のみを削除した場合、依存するオブジェクトは無効になりません。ただし、パッケージ仕様で宣言されたいずれかのプロシージャまたはストアド・ファンクションは、パッケージ本体を再作成するまで実行できません。
パッケージ仕様に依存するオブジェクトはすべて無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したパッケージを再作成していない場合、エラーが戻されます。
この文を使用してパッケージから単一のオブジェクトを削除しないでください。かわりに、OR REPLACE
句を含むCREATE PACKAGE
文およびCREATE PACKAGE BODY
文を使用して、オブジェクトを含まないパッケージを再作成します。
DROP PACKAGE [BODY]
文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーが返されます。
DROP PROCEDURE
文は、データベースからスタンドアロンのストアド・プロシージャを削除します。この文を使用してパッケージに含まれるプロシージャを削除しないでください。
説明
プロシージャを削除すると、削除されたプロシージャに依存するオブジェクトは無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したプロシージャを再作成していない場合、エラー・メッセージが返されます。
この文を使用してパッケージに含まれるプロシージャを削除しないでください。パッケージを削除するか、またはOR REPLACE
句を含むCREATE PACKAGE
文を使用して、プロシージャを含まないパッケージを再定義します。
DROP PROCEDURE
文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーがスローされます。
DROP REPLICATION
文は、クラシック・レプリケーション・スキームを破棄して、実行中のデータベースから削除します。
DROP SEQUENCE
文は、既存の順序番号ジェネレータを削除します。
順序がアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVEL
が3以上の場合は、DROP SEQUENCE
文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアから順序を削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。
説明
順序は、使用中でも削除できます。
TimesTenにはALTER SEQUENCE
文はありません。順序を変更する場合は、DROP SEQUENCE
文を使用してから、同じ名前の順序を新規作成します。たとえば、MINVALUE
を変更する場合、順序を削除し、同じ名前で必要なMINVALUE
を持つ順序を再度作成します。
順序がレプリケーション・スキームに含まれている場合は、ALTER REPLICATION
文を使用してレプリケーション・スキームから順序を削除します。次にDROP SEQUENCE
文を使用して順序を削除します。
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 |
削除するシノニムの名前を指定します。 |
DROP TABLE
文は、指定した表を、それに関連付けられたハッシュ索引および範囲索引とともに削除します。
説明
使用中の表を削除しようとすると、エラーが発生します。
コミットされていないトランザクションでの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変更に関する説明を参照してください。
他の接続が所有する空でないインスタンスが一時表にある場合、別の接続によって一時表を削除することはできません。
DROP USER
文は、データベースからユーザーを削除します。
DROP VIEW
文は、指定したビューを削除します。
ビューがアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVEL
が3以上の場合は、DROP VIEW
文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアからビューを削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。
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表にフラッシュすることはできません。
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
句を使用して、バインディング・パラメータを指定します。
GRANT
文は、1つ以上の権限をユーザーに割り当てます。
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つのみです。
レプリケーションが構成されている場合、この文はレプリケートされます。
INSERT
文は、表に行を追加します。
次の式は、INSERT
文のVALUES
句の中で使用できます。
順序NEXTVALおよび順序CURRVAL
DEFAULT
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つ以上の表の列をこのリストで省略した場合、挿入された行では、省略された列の値は、表の作成時または最終更新時に指定された列のデフォルト値になります。省略した列に 列のリストを完全に省略した場合は、表のすべての列に値を指定する必要があります。 |
?
: |
準備されたSQL文の動的パラメータのプレースホルダ。動的パラメータの値は、文の実行時に設定されます。 |
Constant |
特定の値。「定数」を参照してください。 |
DEFAULT |
列をデフォルト値で更新する必要があることを指定します。 |
Expression |
有効な式の構文。第3章「式」を参照してください。 |
DataItem |
取得したExpression 値を格納するホスト変数またはPL/SQL変数。 |
説明
表の列を列名リストで省略した場合は、INSERT
文によって、省略された列にデフォルト値が割り当てられます。省略した列に表定義でNOT NULL
が指定されている場合、その列にデフォルト値が定義されていなければ、INSERT
文は失敗します。
BINARY
およびVARBINARY
データは、文字形式または16進形式に挿入できます。
文字形式では、一重引用符が必要です。
16進形式では、値の前に接頭辞0x
が必要です。
外部キー制約に違反するINSERT
処理はエラーになります。外部キー制約の詳細は、「CREATE TABLE」を参照してください。
各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
文は、問合せの結果を表に挿入します。
パラメータ
パラメータ | 説明 |
---|---|
[ Owner .] TableName |
データを追加する表。 |
ColumnName |
値を指定する列。表の列を列名リストで省略した場合は、INSERT...SELECT 文によって、省略された列にデフォルト値が割り当てられます。省略した列に表定義でNOT NULL が指定されている場合、その列にデフォルト値が定義されていなければ、INSERT...SELECT 文は失敗します。CREATE TABLE 文で指定された順序と同じ順序で表のすべての列に対して値を指定する場合は、列名リストを省略できます。指定する値が少なすぎる場合は、その他の列にデフォルト値が割り当てられます。 |
InsertQuery |
サポートされている任意のSELECT 問合せ。「SELECT」を参照してください。SELECT 動詞の後に文レベルのオプティマイザ・ヒントを指定できます。文レベルのオプティマイザ・ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。 |
説明
結果セットの列の型は、ターゲット表の列の型と互換性がある必要があります。
値を挿入するときに、順序CURRVAL
またはNEXTVAL
を指定できます。詳細は、「CURRVALとNEXTVALによるSEQUENCE値の増加」を参照してください。
InsertQuery
でORDER BY
句を使用できます。ターゲット表に結果セットを挿入する際に、ORDER BY
句を使用してソート順序が変更されますが、順序は保証されません。
InsertQuery
にエラーがあると、INSERT
操作は失敗します。
RETURNING
句はINSERT...SELECT
文では使用できません。
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 句を指定しない場合に必須です。
|
[ PARALLEL NumThreads ] |
キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracle Databaseからのバルク・フェッチを実行し、その他のスレッド(NumThreads - 1 個のスレッド)がTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。
|
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
(n
は0以上
の値)を指定しているときに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
文を使用すると、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の場合、その行はターゲット表に挿入されます。条件にはソース表のみ参照できます。副問合せは使用できません。 |
説明
MergeUpdateClause
とMergeInsertClause
は、一緒に、または別々に指定できます。両方指定する場合は、どちらが先でもかまいません。
DUAL
が、USING
句でのみ指定された表であり、MERGE
文の他の場所では参照されない場合は、副問合せではDUAL
を使用するかわりに、単純な表として指定します。この単純な場合でパフォーマンスを向上させるには、ON
句でターゲット表の一意索引にキー条件を指定します。
MergeUpdateClause
の制限:
ON
condition句で参照する列は更新できません。
ソース表の列は更新できません。
MergeInsertClause
の制限:
ターゲット表の列の値は挿入できません。
その他の制限:
ソース表の副問合せで集合演算子は使用しないでください。
MergeUpdateClause
または
MergeInsertClauseのWHERE
条件で、副問合せは使用しないでください。
ターゲット表は、マテリアライズド・ビューのディテール表には指定できません。
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
文は、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 句を指定しない場合に必須です。
|
[PARALLEL NumThreads ] |
キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracle Databaseからのバルク・フェッチを実行し、その他のスレッド(NumThreads - 1 個のスレッド)がTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。
|
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
(n
は0以上
の値)を指定しているときに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
文は、非同期マテリアライズド・ビューを手動でリフレッシュします。
必要な権限
マテリアライズド・ビュー・ログ表に対して必要な権限は、次のとおりです。
マテリアライズド・ビュー・ログ表の所有者に必要な権限はありません。
マテリアライズド・ビュー・ログ表の所有者でない場合、SELECT ANY TABLE
が必要です。
マテリアライズド・ビューに対して必要な権限は、次のとおりです。
マテリアライズド・ビューの所有者に必要な権限はありません。
マテリアライズド・ビューの所有者でない場合、SELECT ANY TABLE
が必要です。
説明
この文は、指定された非同期マテリアライズド・ビューをリフレッシュします。この文は、独立したスレッドで、独立したトランザクションとして実行およびコミットされます。ユーザー・トランザクションに影響はありませんが、ユーザー・スレッドはリフレッシュ処理が完了するまで待機してからユーザーに戻されます。非同期マテリアライズド・ビューにリフレッシュ間隔を指定していない場合は、この文がビューをリフレッシュする唯一の方法です。リフレッシュ間隔を指定している場合でも、この文を使用してビューを手動でリフレッシュできます。
リフレッシュ処理は常に独立したトランザクションで実行されるため、リフレッシュ処理は、コミットされていないユーザー・トランザクションのコミットを待機しません。コミット済の行のみがリフレッシュ処理の対象となります。このことは、手動のリフレッシュ文および定期的に実行される自動リフレッシュに当てはまります。
ビューに対するCREATE MATERIALIZED VIEW
文でFAST
リフレッシュが指定されていた場合、REFRESH MATERIALIZED VIEW
文では増分リフレッシュ方法が使用されます。これ以外の場合は、完全リフレッシュ方法が使用されます。
REVOKE
文は、ユーザーから1つ以上の権限を削除します。
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
が所有する関連するマテリアライズド・ビューは無効と指定されます。「無効なマテリアライズド・ビュー」を参照してください。
レプリケーションが構成されている場合、この文はレプリケートされます。
現行のトランザクションで行った処理を元に戻すには、ROLLBACK
文を使用します。
パラメータ
ROLLBACK
文では次のオプションのキーワードを使用できます。
パラメータ | 説明 |
---|---|
[WORK] |
SQL標準に準拠するためにサポートされているオプションの句。ROLLBACK とROLLBACK 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.
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] ]
集合演算子UNION
、UNION ALL
、MINUS
または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から始まります。問合せが順序付けられ、 nと NumRows の値が同じであれば、問合せSELECT ROWS 1 TO nは、SELECT FIRST NumRows と同じ行を返します。
|
ALL |
問合せ結果の重複する行が削除されないようにします。ALL もDISTINCT も指定しない場合は、ALL がデフォルトです。 |
DISTINCT |
問合せ結果の各行が一意となるようにします。この比較では、NULL 値はすべて同じとみなされます。重複行は評価されません。
LOB列には |
SelectList |
問合せ結果の列の導出方法を指定します。SelectListの構文の詳細は、「SelectList」を参照してください。 |
FROM TableSpec |
SELECT 文で参照される表を指定します。問合せごとの表の最大数は24です。
|
WHERE SearchCondition |
WHERE 句は、取得される行のセットを決定します。通常、SearchCondition がFALSE またはNULL の行は処理から除外されますが、SearchCondition を使用して外部結合を指定でき、外部結合では、関連する内部表の行に関してSearchCondition がTRUE と評価されない外部表の行も返され、内部表を参照する投影式はNULL に設定されます。
列および 検索条件の詳細は、第5章「検索条件」を参照してください。 |
GROUP BY GroupByClause [,...] |
GROUP BY 句には、1つ以上の式を指定して、SelectListに集計関数を指定したり、行のグループに関数を適用する場合のグループ化に使用します。GROUP BY 句の構文および説明は、「GROUP BY句」を参照してください。 |
HAVING SearchCondition |
SELECT 文でHAVING 句を使用して、集計結果のグループをフィルタ処理できます。SELECT 文にHAVING 句が存在すると、問合せは集計問合せとなります。WHERE 句を除く句の集計関数のソース以外で参照されるすべての列は、GROUP BY 句に指定する必要があります。
副問合せは、 |
(+) |
単純な結合(内部結合とも呼ばれる)では、SearchCondition で指定された結合条件を満たす結合表の行の組合せごとに1行が返されます。外部結合はこの演算子の拡張機能であり、結合された内部表での一致する行の有無に関係なく、外部表のすべての行が返されます。一致する行がなかった場合は、内部表を参照する投影式にNULL 値が与えられます。 |
ORDER BY OrderByClause [,...] |
指定した列または式に基づいて、問合せの結果行をソートします。ソート・キーとして使用する列を、優先順位の高いものから順に指定します。
|
ColumnID |
選択リストの列に対応する必要があります。ソートする列を指定するには、その名前または序数を指定します。選択リストの最初の列の番号は1です。選択リストの列を参照する場合、それが単純な列でない場合は、列番号を使用する方が適切です。これには、集計関数、算術式、定数などが該当します。
|
ColumnAlias |
ORDER BY 句で使用される列の別名は、SelectListの列に対応している必要があります。同じ別名で複数の列を指定できます。
|
ASC|DESC |
ORDER BY 句で指定する列ごとに、ソート順序を昇順または降順で指定できます。ASC (昇順)またはDESC (降順)のいずれも指定しない場合は、昇順が適用されます。すべての文字データ型は、NLS_SORT セッション・パラメータの現在の値に従ってソートされます。 |
NULLS { FIRST|LAST } |
ORDER BY 句を指定する場合にのみ有効であり、オプションです。ASC またはDESC を指定する場合、NULLS FIRST またはNULLS LAST をASC またはDESC の後に指定する必要があります。
順序付けする問合せでNULL値の行が最初に返されるようにするには、
|
FOR UPDATE
|
FOR UPDATE
|
SelectQuery1
|
SelectQuery1 およびSelectQuery2 の結果が結合されることを指定し、この場合、SelectQuery1 およびSelectQuery2 は、いくつかの制限を含む一般的な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
表にNULL
のdepartment_id
値があります。departments
表では、department_id
はNOT NULL
の主キーとして定義されます。INTERSECT
集合演算子を使用して返される行には、department_id
値がNULL
のdepartments
表の行は含まれません。
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
表にNULL
のdepartment_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_pct
とlast_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.
説明
副問合せのファクタリングによってWITH
句が提供され、この句を使用して副問合せブロックに名前を割り当てることができ、その後はその名前をメインのSELECT
問合せで複数回参照できます。問合せ名は、メインの問合せとメインの問合せに含まれる副問合せで参照できます。
WITH
句は、メインのSELECT
文の接頭辞としてのみ定義できます。
副問合せのファクタリングは、重複する、または複雑な副問合せブロックを1つ以上の場所で使用する複雑な問合せの簡素化に役立ちます。また、TimesTenでは、副問合せのファクタリングを使用し、副問合せブロックを一度評価およびマテリアライズして、その結果をSELECT
文での各参照に提供することで、問合せを最適化します。
メインの問合せで集合演算子UNION
、MINUS
、および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
SQL構文
SELECT文の
SelectListパラメータの構文は次のとおりです。
{* | [Owner.]TableName.* | { Expression | [[Owner.]TableName.]ColumnName | [[Owner.]TableName.]ROWID | NULL } [[AS] ColumnAlias] } [,...]
パラメータ
SELECT文の
SelectListパラメータは次のとおりです。
パラメータ | 説明 |
---|---|
* |
問合せ結果の列として、FROM 句に指定されたすべての表のすべての列を含めます。 |
[ Owner .] TableName .* |
指定した表のすべての列を結果に含めます。 |
Expression |
集計問合せに、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の列に対応している必要があります。同じ別名で複数の列を指定できます。
|
説明
各句は、構文に示されたとおりの順序で指定する必要があります。
TimesTenでは、SelectListで副問合せはサポートされません。
選択リストの結果列は、次のいずれかの方法で取得できます。
結果列は、FROM
句にリストされているいずれかの表から直接取得できます。
結果列の値は、FROM
句にリストされている表の特定の列の値を使用して、算術式を使用して計算できます。
単一表の複数の列の値を算術式で結合して、結果列の値を生成できます。
集計関数(AVG
、MAX
、MIN
、SUM
および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つの相関名(v
とs
)を定義しています。vendornumber
列は、vendors
とsupplyprice
で共通する唯一の列です。
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;
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
パラメータには、CROSS JOIN
、INNER JOIN
、LEFT 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パラメータは次のとおりです。
説明
FULL OUTER JOIN
はサポートされていません。
結合表は、マテリアライズド・ビューを定義する文以外のすべての文で、FROM
句内の表を置き換えるために使用できます。したがって、結合表は、UNION
、MINUS
、INTERSECT
、副問合せ、非マテリアライズド・ビューまたは導出表で使用できます。
結合表のオペランドに副問合せは指定できません。たとえば、次の文はサポートされていません。
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.
導出表は、FROM
句のSELECT
文の結果で、別名を持ちます。
パラメータ
SELECT文の
TableSpec句の
DerivedTableパラメータは次のとおりです。
パラメータ | 説明 |
---|---|
Subquery |
副問合せの詳細は、「副問合せ」を参照してください。 |
CorrelationName |
オプションで、CorrelationName を使用して、導出表の別名を指定します。問合せで参照される表名とは異なる名前である必要があります。 |
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値は単一のグループにまとめられます。
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
句でグループ化する方法を説明します。
グルーピング列: GROUP BY
句で使用される1つの列。たとえば、次のGROUP BY
句では、X
、Y
および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
句では、空のカッコ( )
を指定することで要求します。
重複したグルーピング列をROLLUP
、CUBE
またはGROUPING SETS
で使用できます。ただし、結果行は重複します。
ROLLUP
、CUBE
およびGROUPING SETS
句の制限は、次のとおりです。
これらの句は、マテリアライズド・ビュー定義ではサポートされません。
これらの句は、キャッシュ・グリッド間のグローバル問合せではサポートされません。
次の項では、GROUPING SETS
、ROLLUP
およびCUBE
句について説明します。
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
は、GROUP BY
句で使用します。ROLLUP
をSUM
とともに使用すると、最も詳細なレベルの小計(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
句のグルーピング列の可能なすべての組合せの値に基づいて、選択された行をグループ化します。グループごとに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
文は、すべての行を削除するDELETE
文と類似しています。ただし、DELETE
は行を個別に削除するため、ほとんどの場合DELETE
よりも処理が高速に実行されます。
説明
TRUNCATE
はDDL文であるため、DDLCommitBehavior
属性によって制御されます。DDLCommitBehavior
=0
(デフォルト)の場合、TRUNCATE
文の実行前と実行後にコミットが実施されます。DDLCommitBehavior=1
の場合、TRUNCATE
はトランザクションの一部となり、次のトランザクション・ルールが適用されます。
TRUNCATE
操作はロールバックできます。
TRUNCATE
文と同じトランザクション内で、この文の後にINSERT
文を使用することはできません。
同時読取りのコミット読取り操作が可能であり、読取りセマンティックはDELETE
文がある場合の読取りのコミット読取りと同じになります。
子表がある場合でも、TRUNCATE
を実行できます。ただし、TRUNCATE
を実行するには、子表を空にする必要があります。いずれかの子表に行が含まれていると、子表が空でないことを示すエラーが返されます。
TRUNCATE
は、マテリアライズド・ビューのディテール表、キャッシュ・グループに含まれる表または一時表ではサポートされていません。
表に可変長の表外データが含まれている場合、TRUNCATE TABLE
の実行結果は、表内のすべての行を削除するDELETE
文と同じです。表外データの詳細は、「数値データ型」を参照してください。
表をレプリケートしている場合にTRUNCATE
文を使用すると、操作対象の行が存在しない場合でも、サブスクライバにレプリケートされます。
タイムスタンプ競合検出が有効な状態で表をレプリケートすると、競合はレポートされません。
切り捨てられた表がコミットされていない場合は、この表のハッシュ・ページを変更するために、DROP TABLE
およびALTER TABLE
操作を使用できません。
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 句を使用して、アンロード操作中にコミットを発行する頻度(アンロードされる行数に基づく)を指定します。
この句を指定する場合は、キャッシュ・エージェントが稼働中で、トランザクションで実行されている操作がアンロードのみである必要があります。
パフォーマンスを高めるには、大量のデータに影響するキャッシュ・グループで操作を実行する際にこの句を使用します。 データが少量のキャッシュ・グループでは、この句を使用しないでください。 |
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
句(n
は0以上
の値)を指定しているときにアンロード操作が失敗すると、アンロードされた行の一部はすでにコミットされているために、キャッシュ・グループが一貫性のない状態になる場合があります。そのため、一部のキャッシュ・インスタンスが部分的にしかアンロードされていない可能性があります。その場合は、キャッシュ・グループを再度アンロードします。
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
文は、表のすべての行または検索条件を満たす行の1つ以上の列値を更新します。
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 には、更新する表を指定します。
単一の文のすべての相関名は、一意である必要があります。 |
SET ColumnName |
ColumnName は、更新する列を指定します。単一のUPDATE 文で同じ表の複数の列を更新できます。主キー列の値が変更されないかぎり、更新する列のリストに主キー列を含めることができます。 |
Expression 1 |
集計関数を含まない式。式は、更新操作に指定した行ごとに評価されます。式のデータ型は、更新する列のデータ型と互換性がある必要があります。値を更新する場合、Expression1 には列や順序CURRVAL またはNEXTVAL 参照を指定できます。詳細は、「CURRVALとNEXTVALによるSEQUENCE値の増加」を参照してください。 |
NULL |
WHERE 句を満たす各行の指定した列にNULL 値を挿入します。NULL 値可能な列である必要があります。 |
DEFAULT |
列をデフォルト値で更新する必要があることを指定します。 |
WHERE SearchCondition |
検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET 句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。 |
Expression2 |
有効な式の構文。第3章「式」を参照してください。 |
DataItem |
取得したExpression2 値を格納するホスト変数またはPL/SQL変数。 |
説明
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_id
をjob_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_id
をlocation_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_id
90が更新されていることを確認します。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;
次の例は、順序seq
のNEXTVAL
値を使用して列を更新します。
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_id
、salary
およびdepartment_id
を更新します。salary
、last_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つのみですが、この副問合せはネストできます。
副問合せの選択リストの値の数は、 |
WHERE SearchCondition |
検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET 句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。 |
説明
結合更新のSET
句内で副問合せを使用しても、更新されるターゲット表の行数は削減されません。削減は、WHERE
句を使用して指定する必要があります。したがって、WHERE
句内でターゲット表の行が指定されているにもかかわらず、副問合せがこの行に対していずれの行も返さない場合、この行の更新対象列はNULL
値に更新されます。
例
この例では、t1
の行がt2
と一致しない場合、最初のSELECT
のx1
の値と2番目のSELECT
のx1
および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);