| Oracle Database SQL言語リファレンス 11g リリース1(11.1) E05750-03 |
|
この章では、次のSQL文について説明します。
トリガーはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
ALTER TRIGGER文を使用すると、データベース・トリガーを使用可能化、使用禁止化またはコンパイルできます。
|
参照:
|
トリガーが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY TRIGGERシステム権限が必要です。
DATABASE上のトリガーを変更する場合は、ADMINISTERデータベース・イベント・システム権限が必要です。
(trigger_compile_clause: この句の構文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。)
トリガーが含まれているスキーマを指定します。schemaを指定しない場合、Oracle Databaseではトリガーは自分のスキーマ内にあるとみなされます。
変更するトリガーの名前を指定します。
ENABLEを指定すると、トリガーを使用可能にできます。また、ALTER TABLEのENABLE ALL TRIGGERS句を使用することによって、表に対応付けられたすべてのトリガーを使用可能にできます。「ALTER TABLE」を参照してください。
DISABLEを指定すると、トリガーを使用禁止にできます。また、ALTER TABLEのDISABLE ALL TRIGGERS句を使用することによって、表に対応付けられたすべてのトリガーを使用禁止にできます。
RENAME TO new_nameを指定すると、トリガーの名前を変更できます。トリガーの名前は変更され、名前が変更される前と同じ状態になります。
トリガーの名前を変更すると、USER_SOURCE、ALL_SOURCEおよびDBA_SOURCEデータ・ディクショナリ・ビューに記憶されているトリガーのソースが再構築されます。その結果、トリガー・ソースが変更されていなくても、これらのビューのTEXT列のコメントおよび書式設定が変更される場合があります。
この句の構文とセマンティクスの詳細およびトリガーの作成とコンパイルの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
オブジェクト型はPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
ALTER TYPE文を使用すると、メンバー属性またはメソッドを追加または削除できます。オブジェクト型の既存のプロパティ(FINALまたはINSTANTIABLE)、または型のスカラー属性も変更できます。
この文を使用すると、新しいオブジェクト・メンバーのサブプログラム仕様を追加することによって、型の仕様部または本体を再コンパイルしたり、オブジェクト型の仕様を変更することができます。
オブジェクト型が自分のスキーマ内にあり、CREATE TYPEかCREATE ANY TYPE権限を持っている必要があります。または、ALTER ANY TYPEシステム権限が必要です。
(alter_type_clauses: この句の構文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。)
型が含まれているスキーマを指定します。schemaを指定しない場合、この型は現行のスキーマ内にあるとみなされます。
オブジェクト型、ネストした表型またはVARRAY型の名前を指定します。
この句の構文とセマンティクスの詳細およびオブジェクト型の作成とコンパイルの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
ALTER USERを使用すると、次の操作を実行できます。
ALTER USERシステム権限が必要です。ただし、ユーザー自身のパスワードはこの権限がない場合でも変更できます。
自動ストレージ管理インスタンス・パスワード・ファイルで自分以外のユーザーのパスワードを変更するには、AS SYSASMとして認証されている必要があります。
(size_clause::=を参照)
この項で説明するキーワード、パラメータおよび句は、ALTER USER独自のものと、CREATE USERにもあるが、セマンティクスが異なるものがあります。その他のキーワード、パラメータおよび句には、CREATE USER文と同じ意味があります。
|
参照:
キーワードおよびパラメータについては、「CREATE USER」を参照してください。ユーザーにデータベース・リソースへの制限を割り当てる方法については、「CREATE PROFILE」を参照してください。 |
BY passwordを指定すると、ユーザーの新しいパスワードを指定できます。パスワードは、大/小文字が区別されます。この後に、ユーザーをデータベースに接続するために使用されるCONNECT文字列は、このALTER USER文で使用されているものと同じ文字(大文字、小文字または混在)を使用してパスワードを指定する必要があります。パスワードには、データベース・キャラクタ・セットから、シングルバイト文字、マルチバイト文字または両方を含めることができます。
自分のパスワードを初めて設定する場合、またはALTER USERシステム権限を持っていて、他のユーザーのパスワードを変更する場合は、REPLACE句を省略できます。ただし、ALTER USERシステム権限を持たないかぎり、複雑なパスワードの検証機能が使用可能な場合は、UTLPWDMG.SQLスクリプトを実行するか、またはユーザーに割り当てられたプロファイルのPASSWORD_VERIFY_FUNCTIONパラメータに検証機能を指定して、常にREPLACE句を指定する必要があります。
自動ストレージ管理クラスタで、この句を使用して、ユーザーのパスワードを、現行のノードの自動ストレージ管理インスタンスに対してローカルなパスワード・ファイルで変更できます。REPLACE old_password句を使用せずにIDENTIFIED BY passwordを指定するには、AS SYSASMとして認証されている必要があります。AS SYSASMとして認証されていない場合は、REPLACE old_passwordを指定して自分のパスワードのみを変更できます。
以前のパスワードをREPLACE句に指定した場合でも、自分以外の既存のパスワードを変更している場合は、以前のパスワードはチェックされません。
この句の詳細は、「CREATE USER」を参照してください。
ユーザー・アクセスの検証方法は、IDENTIFIED GLOBALLYからIDENTIFIED BY passwordまたはIDENTIFIED EXTERNALLYのいずれかに変更できます。ユーザーのアクセス検証方法を他のいずれかの検証方法からIDENTIFIED GLOBALLYに変更できるのは、ユーザーに明示的に付与されたすべての外部ロールが取り消された場合のみです。
この句の詳細は、「CREATE USER」を参照してください。
|
参照:
グローバルまたは外部で識別されるユーザーの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。また、「ユーザー識別の変更例:」および「ユーザー認証の変更例:」も参照してください。 |
この句を使用すると、ユーザーの永続セグメントの表領域の割当てまたは再割当てを行うことができます。この句は、データベース用に指定されているデフォルトの表領域を上書きします。
ローカル管理の一時表領域(UNDO表領域を含む)またはディクショナリ管理の一時表領域は、ユーザーのデフォルトの表領域として指定できません。
この句を使用すると、ユーザーの一時セグメントの表領域または表領域グループの割当てまたは再割当てを行うことができます。
ユーザーの一時表領域として割り当てる表領域、または再度割り当てる表領域は、標準的なブロック・サイズの一時表領域である必要があります。
ログイン時にデフォルトによってユーザーに付与されるロールを指定します。この句では、GRANT文を使用してユーザーに直接付与されているロールのみ指定できます。DEFAULT ROLE句を使用して次のロールを使用可能にすることはできません。
Oracle Databaseでは、ユーザーがパスワードを指定したり、別の方法で認証を行わなくても、ログイン時にデフォルトのロールが使用可能になります。ユーザーにアプリケーション・ロールを付与している場合、DEFAULT ROLE ALL EXCEPT role句を使用して、認可済パッケージを使用するアプリケーションを除いて、そのユーザーの後続のログインで使用可能にならないようにするロールを指定する必要があります。
proxy_clauseを使用すると、エンタープライズ・ユーザー(データベースの外側のユーザー)またはデータベース・プロキシ(別のデータベース・ユーザー)が、変更対象のデータベース・ユーザーとして、どのように接続できるようにするかを制御できます。
ENTERPRISE USER句を使用すると、userを、エンタープライズ・ユーザーがプロキシ使用できるように公開できます。Oracle Internet Directoryを担当する管理者は、userの代理として作業するエンタープライズ・ユーザーに権限を適切に付与する必要があります。
db_user_proxy句を使用すると、userを、データベース・ユーザーdb_user_proxyがプロキシ使用できるように公開し、userのロールのすべてまたは一部をアクティブにし(またはすべてを非アクティブにし)、認証が必要かどうかを指定できます。アプリケーション・ユーザーのプロキシ認証の詳細は、『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』を参照してください。GRANTを指定すると、接続を許可できます。REVOKEを指定すると、接続を禁止できます。
Oracle Databaseに接続するプロキシを識別します。AUTHENTICATED USING句を指定しない場合は、Oracle Databaseは、ユーザーの認証にプロキシを想定します。
WITH ROLE role_nameを使用すると、プロキシは指定したユーザーとして接続でき、role_nameで指定されたロールのみをアクティブにできます。
WITH ROLE ALL EXCEPT role_nameを使用すると、プロキシは指定したユーザーとして接続でき、role_nameで指定されたロール以外の、このユーザーに対応付けられたすべてのロールをアクティブにできます。
WITH NO ROLESを使用すると、プロキシは指定したユーザーとして接続できますが、接続後にそのユーザーのロールを1つでもアクティブにすることは禁止されます。
WITH句を指定しない場合、指定したユーザーに付与されているすべてのロールが自動的にアクティブになります。
AUTHENTICATION REQUIREDを指定すると、指定されたプロキシを介してユーザーが認証されるときに、ユーザーに認証の資格証明(パスワード)を要求できます。
この句は、必要なくなりました。現在は非推奨になっています。コードで使用した場合は無視されます。proxy_clauseは、AUTHENTICATION REQUIRED句とともに指定するか、この句を含めずに指定してください。
次の文は、ユーザーsidney(「データベース・ユーザーの作成例:」で作成)のパスワードをsecond_2nd_pwdに、デフォルト表領域を表領域exampleに変更します。
ALTER USER sidney IDENTIFIED BY second_2nd_pwd DEFAULT TABLESPACE example;
次の文は、new_profileプロファイル(「プロファイルの作成例:」で作成)をサンプル・ユーザーshに割り当てます。
ALTER USER sh PROFILE new_profile;
後続のセッションでは、shはnew_profileプロファイルの制限に従います。
次の文は、shに直接付与されているすべてのロール(dw_managerロールを除く)をデフォルト・ロールに設定します。
ALTER USER sh DEFAULT ROLE ALL EXCEPT dw_manager;
shの次のセッションの開始時には、dw_manager以外でshに直接付与されているすべてのロールが使用可能になります。
次の文は、ユーザーapp_user1(「データベース・ユーザーの作成例:」で作成)の認証メカニズムを変更します。
ALTER USER app_user1 IDENTIFIED GLOBALLY AS 'CN=tom,O=oracle,C=US';
次の文は、ユーザーsidneyのパスワードを期限切れにします。
ALTER USER sidney PASSWORD EXPIRE;
PASSWORD EXPIREを使用してデータベース・ユーザーのパスワードを期限切れにした場合、そのユーザー(またはDBA)は、期限切れの後でデータベースにログインする際、パスワードを変更する必要があります。ただし、SQL*Plusなどのツール製品を使用した場合、期限切れの後の最初のログイン時に、パスワードを変更できます。
次の文は、tbs_grp_01(「表領域グループへの一時表領域の追加例:」で作成)を表領域グループとしてユーザーshに割り当てます。
ALTER USER sh TEMPORARY TABLESPACE tbs_grp_01;
次の文は、ユーザーapp_user1を変更します。例では、app_user1がプロキシ・ユーザーshを使用して接続できます。また、プロキシshを使用して接続したときに、app_user1がwarehouse_userロール(「ロールの作成例:」で作成)を使用可能にできます。
ALTER USER app_user1 GRANT CONNECT THROUGH sh WITH ROLE warehouse_user;
基本的な構文を示すため、サンプル・データベースSales Historyのユーザー(sh)をプロキシとして使用します。通常、プロキシ・ユーザーは、アプリケーション・サーバーまたは中間層のエンティティに存在します。アプリケーション・サーバーを経由して、アプリケーション・ユーザーとデータベースの間のインタフェースを作成する場合の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。
次の文は、ユーザーapp_user1がプロキシ・ユーザーshを使用して接続する権限を取り消します。
ALTER USER app_user1 REVOKE CONNECT THROUGH sh;
次の仮想例は、プロキシ認証の他の方法を示します。
ALTER USER sully GRANT CONNECT THROUGH OAS1 AUTHENTICATED USING PASSWORD;
次の例では、ユーザーapp_user1をエンタープライズ・ユーザーがプロキシ使用できるように公開します。エンタープライズ・ユーザーは、Oracle Internet Directory管理者が適切な権限を付与するまでは、app_user1の代理として作業することがきません。
ALTER USER app_user1 GRANT CONNECT THROUGH ENTERPRISE USERS;
ALTER VIEWを使用すると、無効なビューを明示的に再コンパイルしたり、ビューの制約を変更することができます。明示的に再コンパイルすると、実行前にコンパイル・エラーを検査できます。再コンパイルは、ビューの実表を変更した後で、その変更がビューまたはそのビューに依存するオブジェクトに影響していないかどうかを確認するときに便利です。
ALTER VIEWを使用して、制約のビューを定義、変更または削除することもできます。
この文を使用して既存のビュー定義を変更することはできません。また、ビューの実表に対するDDL変更によってビューが無効になる場合、この文を使用して無効なビューをコンパイルすることはできません。このような場合は、CREATE VIEWにOR REPLACEキーワードを指定して使用し、ビューを再定義する必要があります。
ALTER VIEW文を発行した場合、指定したビューは有効か無効かにかかわらず再コンパイルされます。また、そのビューに依存するすべてのローカル・オブジェクトが無効になります。
1つ以上のマテリアライズド・ビューが参照しているビューを変更した場合、これらのマテリアライズド・ビューは無効になります。無効なマテリアライズド・ビューは、クエリー・リライトによって使用できません。また、リフレッシュすることもできません。
|
参照:
|
ビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY TABLEシステム権限が必要です。
(constraint::=構文の項にあるout_of_line_constraint::=を参照)
ビューが含まれているスキーマを指定します。schemaを指定しない場合、Oracle Databaseではビューは自分のスキーマ内にあるとみなされます。
再コンパイルするビューの名前を指定します。
ADD句を使用すると、viewに制約を追加できます。制約のビューおよび制限事項については、「constraint」を参照してください。
MODIFY CONSTRAINT句を使用すると、既存のビュー制約のRELYまたはNORELY設定を変更できます。この設定の使用方法の詳細については、「RELY句」を、ビュー制約の概要については、「ビュー制約の注意事項:」を参照してください。
一意制約または主キー制約が参照整合性制約の一部である場合、外部キーの削除またはviewの設定にあわせた変更をせずに、設定を変更することはできません。
DROPを使用すると、既存のビューの制約を削除できます。
一意制約または主キー制約がビューの参照整合性制約の一部である場合は削除できません。
COMPILEキーワードを指定すると、ビューを再コンパイルできます。
次の文は、ビューcustomer_ro(「読取り専用ビューの作成例:」で作成)を再コンパイルします。
ALTER VIEW customer_ro COMPILE;
customer_roの再コンパイル時にエラーが発生しなければ、customer_roは有効になります。再コンパイル・エラーが発生した場合はエラーが戻り、customer_roは無効のままとなります。
依存するオブジェクトもすべて無効になります。依存オブジェクトとは、customer_roを参照する、プロシージャ、ファンクション、パッケージ本体、ビューなどです。その後、明示的に再コンパイルせずに、これらのオブジェクトを参照した場合、データベースは実行時にそれらを暗黙的に再コンパイルします。
ANALYZE文を使用すると、統計情報を収集して、次のような操作を実行できます。
REF)の構造を検証します。
分析するスキーマ・オブジェクトがローカルである必要があります。自分のスキーマ内にない場合は、ANALYZE ANYシステム権限が必要です。
表またはクラスタの連鎖行をリスト表へ入れる場合、このリスト表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、そのリスト表のINSERT権限またはINSERT ANY TABLEシステム権限が必要です。
パーティション表の妥当性チェックを行う場合は、分析したROWIDを入れる表に対するINSERTオブジェクト権限またはINSERT ANY TABLEシステム権限が必要です。
表、索引またはクラスタが含まれているスキーマを指定します。schemaを指定しない場合、表、索引またはクラスタは自分のスキーマ内にあるとみなされます。
分析する表を指定します。表を分析すると、すべてのファンクション索引に発生する式について統計情報が収集されます。したがって、表を分析する前に、必ずファンクション索引を作成してください。ファンクション索引の詳細は、「CREATE INDEX」を参照してください。
表を分析すると、LOADINGまたはFAILEDのマークが付いたドメイン索引はすべてスキップされます。
索引構成表の場合、マッピング表が分析され、そのPCT_ACCESSS_DIRECT統計情報も計算されます。これらの統計情報は、マッピング表のローカルROWIDの一部として格納されたと推測されるデータ・ブロック・アドレスの精度を評価します。
表については、次の統計情報が収集されます。アスタリスクが付いた統計情報は、常に厳密に計算されます。表の統計情報(ドメイン索引の状態を含む)は、データ・ディクショナリ・ビューUSER_TABLES、ALL_TABLESおよびDBA_TABLESのカッコで示す列に表示されます。
NUM_ROWS)
BLOCKS)*
EMPTY_BLOCKS)*
AVG_SPACE)
CHAIN_COUNT)
AVG_ROW_LEN)
表の分析には、次の制限事項があります。
ANALYZEを使用して、データ・ディクショナリ表の統計情報を収集しないでください。
ANALYZEを使用して、外部表の統計情報を収集しないでください。かわりに、DBMS_STATSパッケージを使用する必要があります。
ANALYZEを使用して、一時表のデフォルト統計情報を収集しないでください。ただし、すでに一時表の1つ以上の列とユーザー定義統計タイプを対応付けている場合、ANALYZEを使用して一時表のユーザー定義統計情報を収集できます
REF列型、VARRAY、ネストした表、LOB列型(LOB列型は分析されずにスキップされる)、LONG列型、オブジェクト型などの列型の統計情報は計算または推定できません。ただし、このような列に統計タイプが対応付けられている場合は、ユーザー定義統計情報が収集されます。統計情報を収集するパーティションまたはサブパーティション、あるいはパーティション値またはサブパーティション値を指定します。クラスタの分析時にこの句は使用できません。
tableがコンポジット・パーティションのときにPARTITIONを指定した場合、指定したパーティション内ですべてのサブパーティションが分析されます。
分析する索引を指定します。
索引については、次の統計情報が収集されます。アスタリスクが付いた統計情報は、常に厳密に計算されます。従来索引について統計情報を計算または推定する場合、統計情報は、データ・ディクショナリ・ビューUSER_INDEXES、ALL_INDEXESおよびDBA_INDEXESのカッコで示す列に表示されます。
BLEVEL)*
LEAF_BLOCKS)
DISTINCT_KEYS)
AVG_LEAF_BLOCKS_PER_KEY)
AVG_DATA_BLOCKS_PER_KEY)
CLUSTERING_FACTOR)
ドメイン索引の場合、索引に関連付けられた統計タイプで指定したユーザー定義統計収集ファンクションが、この文によって起動されます(「ASSOCIATE STATISTICS」を参照)。ドメイン索引に関連付けられた統計タイプがない場合、その索引タイプに関連付けられた統計タイプが使用されます。索引またはその索引タイプの統計タイプがない場合、ユーザー定義統計情報は収集されません。ユーザー定義索引統計情報は、データ・ディクショナリ・ビューUSER_USTATS、ALL_USTATSおよびDBA_USTATSのSTATISTICS列に表示されます。
IN_PROGRESSまたはFAILEDのマークが付いたドメイン索引は分析できません。
|
参照:
|
分析するクラスタを指定します。クラスタの統計情報を収集すると、すべてのクラスタ表、およびクラスタ索引を含むすべての索引の統計情報も自動的に収集されます。
索引クラスタとハッシュ・クラスタには、単一クラスタ・キー(AVG_BLOCKS_PER_KEY)が使用するデータ・ブロックの平均数が収集されます。これらの統計情報は、データ・ディクショナリ・ビューALL_CLUSTERS、USER_CLUSTERSおよびDBA_CLUSTERSに表示されます。
VALIDATE REF UPDATEを指定すると、指定された表のREF値の妥当性チェックを行い、各REF内のROWID部分をチェックして、それを真のROWIDと比較できます。誤りがある場合はそれを修正します。この句は、表を分析する場合にのみ使用できます。
表の所有者が参照先オブジェクトに対するSELECTオブジェクト権限を持っていない場合、このオブジェクトは無効とみなされ、NULLに設定されます。その結果、オブジェクトに対して適切な権限を持つユーザーによって発行された問合せであっても、問合せでこれらのREF値を使用することはできません。
SET DANGLING TO NULLを指定すると、指定した表内のREF値が(範囲が限定されるかどうかにかかわらず)無効なオブジェクトまたは存在しないオブジェクトを指している場合に、REF値がNULLに設定されます。
VALIDATE STRUCTUREを指定すると、分析対象オブジェクトの構造を検証できます。この句で収集された統計情報はOracle Databaseオプティマイザでは使用されません。
INVALID_ROWS表に挿入されます。
通常のすべての索引用の圧縮統計情報(最適なプレフィックス圧縮件数)も計算されます。
索引の統計情報は、データ・ディクショナリ・ビューINDEX_STATSおよびINDEX_HISTOGRAMに格納されます。
オブジェクトの構造に障害がある場合は、エラー・メッセージが戻ります。この場合、オブジェクトを削除して作成しなおす必要があります。
VALIDATE STRUCTUREのINTO句は、パーティション表のみに有効です。正しく照合されなかった行を持つパーティションのROWIDを格納するリスト表を指定します。schemaを指定しない場合、リストは自分のスキーマ内にあるとみなされます。この句自体を指定しない場合、表の名前はINVALID_ROWSになります。この表を作成するために使用するSQLスクリプトはUTLVALID.SQLです。
CASCADEを指定すると、表またはクラスタに関連付けられた索引の構造を検証できます。表を検証するときにこの句を指定すると、その表に定義された索引も検証されます。クラスタを検証するときにこの句を指定した場合、クラスタ表のすべての索引(クラスタ索引を含む)が検証されます。
この句を使用して使用可能な(以前は使用禁止であった)ファンクション索引を検証すると、検証エラーになる場合があります。この場合は、索引を再構築する必要があります。
ONLINEを指定すると、Oracle DatabaseがオブジェクトのDML操作中に検証を実行できるようになります。データベースは、並行して操作が行える程度に、実行する検証の量を減らします。
OFFLINEを指定すると、実行する検証の量が最大になります。この設定は、検証中にINSERT、UPDATEおよびDELETE文がオブジェクトに平行してアクセスすることを防ぎますが、問合せは許可されます。これはデフォルトです。
ONLINEは、クラスタを分析する場合には指定できません。
LIST CHAINED ROWSを指定すると、分析した表またはクラスタの移行行および連鎖行を識別できます。索引の分析時にこのオプションは使用できません。
INTO句には、移行行および連鎖行をリストする表を指定します。schemaを指定しない場合、連鎖行表は自分のスキーマ内にあるとみなされます。この句自体を指定しない場合、表の名前はCHAINED_ROWSになります。連鎖行表は、ローカル・データベース内にある必要があります。
次のいずれかのスクリプトを使用して、CHAINED_ROWS表を作成できます。
UTLCHAIN.SQL: 物理ROWIDを使用します。そのため、行は、索引構成表からではなく従来表から収集されます(次の注意を参照)。
UTLCHN1.SQL: ユニバーサルROWIDを使用します。そのため、行は、従来表および索引構成表の両方から収集されます。
独自の連鎖行表を作成する場合、この2つのスクリプトのいずれかで規定されるフォーマットに従う必要があります。
ユニバーサルROWIDではなく、主キーに基づく索引構成表を分析する場合、索引構成表ごとに別の連鎖行表を作成し、主キー記憶域を確保する必要があります。まず、SQLスクリプトのDBMSIOTC.SQLおよびPRVTIOTC.PLBを使用して、BUILD_CHAIN_ROWS_TABLEプロシージャを定義します。次に、このプロシージャを実行して、索引構成表のIOT_CHAINED_ROWS表を作成します。
|
参照:
|
DELETE STATISTICSを指定すると、現在データ・ディクショナリに格納されている、分析したオブジェクトの統計情報を削除できます。Oracle Databaseに統計情報を使用させないようにする場合、この文を使用します。
表を指定してこの句を使用した場合、指定した表に定義されたすべての索引の統計情報も自動的に削除されます。クラスタを指定してこの句を使用した場合、指定したクラスタのすべての表、およびこれらの表のすべての索引(クラスタ索引を含む)の統計情報も自動的に削除されます。
ユーザー定義統計情報ではなく、システム統計情報のみを削除する場合は、SYSTEMを指定します。SYSTEMを指定しないと、オブジェクトのユーザー定義列または索引統計情報が収集された場合、データベースは、統計情報を収集するために使用された情報タイプに指定されている統計削除ファンクションを起動して、ユーザー定義統計情報も削除します。
validation_clausesを使用すると、REF値および分析したオブジェクトの構造を検証できます。
次の文は、サンプル表oe.ordersとデータ・ディクショナリにあるそのすべての索引の統計情報を削除します。
ANALYZE TABLE orders DELETE STATISTICS;
次の文は、サンプル索引oe.inv_product_ixの構造を検証します。
ANALYZE INDEX inv_product_ix VALIDATE STRUCTURE;
次の文は、サンプル表hr.employeesおよびそのすべての索引を分析します。
ANALYZE TABLE employees VALIDATE STRUCTURE CASCADE;
表に対するVALIDATE REF UPDATE句は、指定した表のREF値を検証します。また、それぞれのREFのROWID部分をチェックし、それを真のROWIDと比較します。その結果、ROWIDが誤っていると判断されると、ROWID部分が正しくなるようにREFが更新されます。
次の文は、サンプル表oe.customersのREF値を検証します。
ANALYZE TABLE customers VALIDATE REF UPDATE;
次の文は、DML操作を同時に実行することを許可して、サンプル表oe.customersの構造を検証します。
ANALYZE TABLE customers VALIDATE STRUCTURE ONLINE;
次の文は、personnelクラスタ(「クラスタの作成例:」で作成)、そのすべての表、クラスタ索引を含むすべての索引を分析します。
ANALYZE CLUSTER personnel VALIDATE STRUCTURE CASCADE;
次の文は、orders表のすべての連鎖行についての情報を収集します。
ANALYZE TABLE orders LIST CHAINED ROWS INTO chained_rows;
前述の文では、情報は表chained_rowsに格納されます。次の問合せでその行を検証できます(表に連鎖行が含まれない場合は、行は戻されません)。
SELECT owner_name, table_name, head_rowid, analyze_timestamp FROM chained_rows ORDER BY owner_name, table_name, head_rowid, analyze_timestamp; OWNER_NAME TABLE_NAME HEAD_ROWID ANALYZE_TIMESTAMP ---------- ---------- ------------------ ----------------- OE ORDERS AAAAZzAABAAABrXAAA 25-SEP-2000
ASSOCIATE STATISTICS文を使用すると、統計収集、選択性またはコストに関するファンクションが含まれた統計タイプ(またはデフォルトの統計)を、1つ以上の列、スタンドアロン・ファンクション、パッケージ、型、ドメイン索引または索引タイプに関連付けることができます。
現在のすべての統計タイプの関連付けのリストについては、USER_ASSOCIATIONSデータ・ディクショナリ・ビューを問い合せます。統計情報に関連付けるオブジェクトを分析する場合、USER_USTATSビューでその関連性を問い合せることができます。
この文を発行する場合は、ベース・オブジェクト(表、ファンクション、パッケージ、型、ドメイン索引または索引タイプ)を変更する適切な権限が必要です。さらに、デフォルト統計情報のみを関連付けていないかぎり、統計タイプに対する実行権限が必要です。統計タイプは、すでに定義されている必要があります。
1つ以上の表の列を指定します。schemaを指定しない場合、表は自分のスキーマ内にあるとみなされます。
1つ以上のスタンドアロン・ファンクション、パッケージ、ユーザー定義データ型、ドメイン索引または索引タイプを指定します。schemaを指定しない場合、オブジェクトは自分のスキーマ内にあるとみなされます。
すでに関連性を定義してあるオブジェクトには指定できません。まず、このオブジェクトと統計情報の関連性を取り消す必要があります。
列、ファンクション、パッケージ、型、ドメイン索引または索引タイプと関連付ける統計タイプ(または型のシノニム)を指定します。statistics_typeは作成済である必要があります。
NULLキーワードは、統計情報を列または索引に関連付ける場合のみに有効です。統計タイプをオブジェクト型に関連付ける場合は、そのオブジェクト型の列は、統計タイプを継承します。同様に、統計タイプを索引タイプに関連付ける場合は、索引タイプの索引インスタンスは統計タイプを継承します。列または索引に別の統計タイプを関連付けると、この継承を上書きできます。または、列または索引に統計タイプを関連付けない場合は、using_statistics_type句でNULLを指定します。
ファンクション、パッケージ、型または索引タイプにはNULLを指定できません。
スタンドアロン・ファンクション、パッケージ、型、ドメイン索引または索引タイプのデフォルトのコストを指定します。この句を指定する場合、CPUコスト、I/Oコスト、ネットワーク・コストの順でそれぞれに対して1つの数を指定する必要があります。それぞれのコストは、ファンクションまたはメソッドを1度実行した場合、またはドメイン索引へ1度アクセスした場合の値です。指定できる値は0(ゼロ)以上の整数です。
スタンドアロン・ファンクション、型、パッケージまたはユーザー定義演算子が指定された述語に対するデフォルトの選択性をパーセントで指定します。default_selectivity_clauseは、0〜100の数値である必要があります。範囲外のものは無視されます。
DEFAULT SELECTIVITYは、ドメイン索引または索引タイプに指定できません。
この句は、INDEXTYPEの統計に対してのみ有効です。
WITH SYSTEM MANAGED STORAGE TABLESを指定すると、統計データの格納がシステムで管理されます。statistics_typeに指定するタイプによって、システムで保持される表に統計関連の情報が格納されます。また、指定する索引タイプはすでに登録済であるか、またはWITH SYSTEM MANAGED STORAGE TABLES句をサポートするように変更されている必要があります。
WITH USER MANAGED STORAGE TABLESを指定すると、ユーザー定義の統計情報を格納する表は、ユーザーによって管理されます。これはデフォルトの動作です。
次の文は、スタンドアロン・パッケージemp_mgmtへの関連性を作成します。このパッケージを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
ASSOCIATE STATISTICS WITH PACKAGES emp_mgmt DEFAULT SELECTIVITY 10;
次の文は、ドメイン索引salary_index(「拡張索引作成機能の使用方法」で作成)を使用して任意の述語を実装した場合、常にCPUコストは100、I/Oコストは5、およびネットワーク・コストは0になるように指定します。
ASSOCIATE STATISTICS WITH INDEXES salary_index DEFAULT COST (100,5,0);
オプティマイザは、コスト・ファンクションをコールするかわりに、これらのデフォルト・コストを使用します。
AUDIT文を使用すると、次の操作を実行できます。
参照:
DBMS_FGAパッケージの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』を参照してください。
SQL文の発行を監査するには、AUDIT SYSTEMシステム権限が必要です。
監査結果を収集するには、初期化パラメータAUDIT_TRAILをデフォルトの設定であるNONE以外の値に設定して、監査を有効にする必要があります。監査オプションは、監査が使用可能であるかどうかにかかわらず指定できます。ただし、監査を有効にしないと、監査レコードは作成されません。
スキーマ・オブジェクト操作を監査するためには、監査対象のオブジェクトが自分のスキーマにある必要があります。自分のスキーマにない場合は、AUDIT ANYシステム権限が必要です。また、監査の対象とするオブジェクトがディレクトリ・オブジェクトの場合は、それが自分で作成したものであっても、AUDIT ANYシステム権限が必要です。
audit_operation_clauseを使用すると、操作の影響を受けるスキーマ・オブジェクトに関係なく、指定された操作を監査できます。
ショートカットを指定すると、特定のSQL文の使用を監査できます。表13-1および表13-2に、ショートカットおよびそれらが監査するSQL文を示します。
監査されるたびに、次の情報を持つ監査レコードが生成されます。
監査レコードは、監査証跡に書き込まれます。監査証跡とは、監査レコードが入っているデータベースの表です。データ・ディクショナリ・ビューを問い合せて監査証跡を調べることによって、データベース・アクティビティを再検討できます。
|
参照:
|
システム権限を指定すると、特定のシステム権限を与えられたSQL文およびその他の操作を監査できます。
多くの個々のシステム権限を指定するのではなく、ロールCONNECT、RESOURCEおよびDBAを指定できます。これは、そのロールに付与されているすべてのシステム権限を監査することと同じです。
Oracle Databaseには、システム権限と文オプションをまとめて指定するための、次の2つのショートカットが用意されています。
ALLを指定すると、表13-1のすべての文オプションを監査できます。ただし、表13-2の追加文オプションは監査しません。
ALL PRIVILEGESを指定すると、システム権限を監査できます。
|
参照:
|
auditing_by_clauseを指定すると、特定のユーザーが発行するSQL文のみを監査できます。この句を指定しない場合、すべてのユーザー文が監査されます。
この句を使用すると、特定のユーザーによって発行されたSQL文のみを監査するように制限できます。
この句を使用すると、特定のプロキシによって発行されたSQL文のみを監査するように制限できます。
audit_schema_object_clauseを使用すると、特定のスキーマ・オブジェクトの操作を監査できます。
監査するSQL操作を指定します。表13-3に、監査できるオブジェクトのタイプ、およびオブジェクトごとに監査できるSQL文を示します。たとえば、ALTER操作を指定して表の監査を選択した場合、その表に対して発行されるALTER TABLE文がすべて監査されます。また、SELECT操作を指定して順序の監査を選択した場合、その順序の値を使用するすべての文が監査されます。
ALLをショートカットに指定することは、オブジェクト・タイプに適用できるSQL操作をすべて指定することと同じです。
auditing_on_clauseを使用すると、監査する特定のスキーマ・オブジェクトを指定できます。
監査の対象として選択されたオブジェクトが定義されているスキーマを指定します。schemaを指定しない場合、オブジェクトは自分のスキーマ内に定義されているものとみなされます。
監査するオブジェクトの名前を指定します。オブジェクトは、表、ビュー、順序、ストアド・プロシージャ、ストアド・ファンクション、ストアド・パッケージ、マテリアライズド・ビュー、マイニング・モデルまたはライブラリのいずれかである必要があります。
表、ビュー、順序、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビューまたはユーザー定義型については、それぞれシノニムも指定できます。
ON DEFAULTを指定すると、それ以降に作成したオブジェクトのデフォルト・オブジェクト・オプションとして使用する、指定のオブジェクト・オプションを作成できます。デフォルトの監査オプションが確立されると、その後作成されるオブジェクトに対して、これらのオプションが自動的に適用され、監査が行われます。ビューに対するデフォルト監査オプションは、常に、そのビューの実表に対する監査オプションの論理和となります。ALL_DEF_AUDIT_OPTSデータ・ディクショナリ・ビューを問い合せることによって、現在のデフォルト監査オプションを表示できます。
デフォルト監査オプションを変更した場合でも、以前作成したオブジェクトの監査オプションはそのまま残ります。AUDIT文のON句にオブジェクトを指定した場合のみ、既存のオブジェクトの監査オプションを変更できます。
ON DIRECTORY句を使用すると、監査するディレクトリ名を指定できます。
ON MINING MODEL句を使用すると、監査するマイニング・モデル名を指定できます。
この句を使用すると、ネットワーク・レイヤーの内部的な障害を検出できます。
以前のリリースでは、BY SESSIONを指定すると、データベースによって、同一セッションの同一スキーマ・オブジェクトで実行された同じ種類のすべてのSQL文または操作に対して1つのレコードが書き込まれました。このリリースのOracle Databaseからは、BY SESSIONおよびBY ACCESSを指定すると、監査された文および操作ごとに1つの監査レコードが書き込まれます。BY ACCESSと比較すると、BY SESSIONでは引き続き異なる値が監査証跡に移入されます。いずれの句も指定しない場合は、BY SESSIONがデフォルトとなります。
BY ACCESSを指定すると、監査された各文および操作について、1つのレコードを書き込むことができます。
DDL文以外のSQL文を監査する文オプションとシステム権限には、BY SESSIONとBY ACCESSのどちらでも指定できます。デフォルトはBY SESSIONです。
WHENEVER SUCCESSFULを指定すると、正常に実行されたSQL文および操作のみを監査できます。
失敗またはエラーが発生したSQL文および操作のみを監査する場合は、WHENEVER NOT SUCCESSFULを指定します。
この句を指定しない場合、処理結果にかかわらず監査が行われます。
注意1: Javaスキーマ・オブジェクト(ソース、クラスおよびリソース)は、監査オプションではプロシージャ、ファンクションおよびパッケージと同じであるとみなされます。
注意2: INSERT、UPDATEおよびDELETE操作の監査は、更新可能なマテリアライズド・ビューに対してのみ可能です。
注意3: FLASHBACK監査オブジェクト・オプションは、フラッシュバック問合せに対してのみ適用されます。
次の文は、ロールの作成、変更、削除または設定を行う各SQL文が正常に終了したかどうかにかかわらず、それらの文について監査を行います。
AUDIT ROLE;
次の文は、ロールの作成、変更、削除または設定を行う、正常に終了した各SQL文ごとに監査を行います。
AUDIT ROLE WHENEVER SUCCESSFUL;
次の文は、Oracle Databaseエラーが発生したCREATE ROLE文、ALTER ROLE文、DROP ROLE文またはSET ROLE文について監査を行います。
AUDIT ROLE WHENEVER NOT SUCCESSFUL;
次の文は、表の問合せまたは更新を実行する文について監査を行います。
AUDIT SELECT TABLE, UPDATE TABLE;
次の文は、ユーザーhrおよびoeが発行する、表やビューの問合せまたは更新を実行する文について監査を行います。
AUDIT SELECT TABLE, UPDATE TABLE BY hr, oe;
次の文は、DELETE ANY TABLEシステム権限で発行された文について監査を行います。
AUDIT DELETE ANY TABLE;
次の文は、CREATE ANY DIRECTORYシステム権限で発行された文について監査を行います。
AUDIT CREATE ANY DIRECTORY;
CREATE ANY DIRECTORYシステム権限を使用しないCREATE DIRECTORY(およびDROP DIRECTORY)文を監査する場合は、次の文を発行します。
AUDIT DIRECTORY;
次の文は、bfile_dirディレクトリからファイルを読み込む各文について監査を行います。
AUDIT READ ON DIRECTORY bfile_dir;
次の文は、スキーマhr内のemployees表を問い合せる各SQL文について監査を行います。
AUDIT SELECT ON hr.employees;
次の文は、スキーマhr内のemployees表を問い合せて正常に終了した各文について監査を行います。
AUDIT SELECT ON hr.employees WHENEVER SUCCESSFUL;
次の文は、スキーマhr内のemployees表を問い合せてOracle Databaseエラーが発生したSQL文について監査を行います。
AUDIT SELECT ON hr.employees WHENEVER NOT SUCCESSFUL;
次の文は、スキーマoe内のcustomers表に対して行を挿入または更新するそれぞれの文について監査を行います。
AUDIT INSERT, UPDATE ON oe.customers;
次の文は、スキーマhr内のemployees_seq順序に対する操作を行うすべての文について監査を行います。
AUDIT ALL ON hr.employees_seq;
この文では、順序に対して操作を行う次の文について監査を行うため、ALLショートカットを使用しています。
次の文は、以降に作成されるオブジェクトのデフォルト監査オプションを指定します。
AUDIT ALTER, GRANT, INSERT, UPDATE, DELETE ON DEFAULT;
以降に作成されるオブジェクトについては、監査機能が使用可能な場合、指定したオプションによって自動的に次の監査が行われます。
ALTER文、GRANT文、INSERT文、UPDATE文またはDELETE文が自動的に監査されます。
GRANT文、INSERT文、UPDATE文またはDELETE文が自動的に監査されます。
ALTER文またはGRANT文が自動的に監査されます。
ALTER文またはGRANT文が自動的に監査されます。
CALL文を使用すると、SQL内からルーチン(スタンドアロン・プロシージャ、スタンドアロン・ファンクション、あるいは型またはパッケージ内で定義されたプロシージャまたはファンクション)を実行できます。
スタンドアロン・ルーチン、またはルーチンが定義されている型またはパッケージに対するEXECUTE権限が必要です。
ルーチンは2つの方法で実行できます。routine_clauseを使用してルーチン自体を名前でコールするか、またはobject_access_expressionを使用して式の型の中でルーチンをコールします。
スタンドアロン・ルーチン(または、ルーチンが含まれている型またはパッケージ)が存在するスキーマを指定します。schemaを指定しない場合、ルーチンは自分のスキーマ内にあるとみなされます。
ルーチンが定義されている型またはパッケージを指定します。
コールするファンクション名またはプロシージャ名、またはファンクションまたはプロシージャに変換されるシノニムを指定します。
型のメンバー・ファンクションまたはメンバー・プロシージャをコールする場合、最初の引数(SELF)がNULLのIN OUTの場合は、エラーが戻されます。SELFがNULLのINの場合には、NULLが戻されます。どちらの場合も、ファンクションまたはプロシージャはコールされません。
ルーチンがファンクションの場合、INTO句は必須です。
分散データベース・システムで、スタンドアロン・ルーチンが含まれているデータベース、またはルーチンが含まれているパッケージまたはファンクションの名前を指定します。dblinkを指定しない場合、ローカル・データベースを指定したとみなされます。
型コンストラクタ、バインド変数などのオブジェクト型の式を使用している場合は、この形式の式を使用して、型内で定義されたルーチンをコールできます。このコンテキストでは、object_access_expressionはメソッドのコールに制限されます。
|
参照:
この形式の式の構文およびセマンティクスについては、「オブジェクト・アクセス式」を参照してください。オブジェクト型の式を使用してルーチンをコールする例については、「オブジェクト型の式を使用したプロシージャのコール例:」を参照してください。 |
ルーチンに引数が必要な場合に、ルーチンの1つ以上の引数を指定します。argumentを、位置表記法、名前表記法および混合表記法で表記できます。たとえば、次の表記はすべて正しい表記です。
CALL my_procedure(arg1 => 3, arg2 => 4) CALL my_procedure(3, 4) CALL my_procedure(3, arg2 => 4)
argumentには、次の制限事項があります。
CALL文によって渡されるパラメータのデータ型は、SQLのデータ型であることが必要です。BOOLEANなど、PL/SQL専用のデータ型は使用できません。
VALUEおよびREFは指定できません。
IN OUT引数またはOUT引数であるすべての引数は、ホスト変数の式に対応している必要があります。
CHAR、VARCHAR2、NCHAR、NVARCHAR2、RAW、LONG RAW)の引数はバインドできません。
INTO句は、ファンクションのコールにのみ適用されます。ファンクションの戻り値を格納するホスト変数を指定します。
ホスト変数の値または状態を指定します。
次の文は、remove_deptプロシージャを使用して、娯楽部門(「順序値の挿入例:」で作成)を削除します。このプロシージャを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
CALL emp_mgmt.remove_dept(162);
次の例では、CALL文のオブジェクト型の式を使用したプロシージャのコール方法を示します。この例では、サンプルの注文入力スキーマOEでwarehouse_typオブジェクト型を使用しています。
ALTER TYPE warehouse_typ ADD MEMBER FUNCTION ret_name RETURN VARCHAR2 CASCADE; CREATE OR REPLACE TYPE BODY warehouse_typ AS MEMBER FUNCTION ret_name RETURN VARCHAR2 IS BEGIN RETURN self.warehouse_name; END; END; / VARIABLE x VARCHAR2(25); CALL warehouse_typ(456, 'Warehouse 456', 2236).ret_name() INTO :x; PRINT x; X -------------------------------- Warehouse 456
次の例では、外部ファンクションを使用したプロシージャのコール方法を示します。
CREATE OR REPLACE FUNCTION ret_warehouse_typ(x warehouse_typ) RETURN warehouse_typ IS BEGIN RETURN x; END; / CALL ret_warehouse_typ(warehouse_typ(234, 'Warehouse 234', 2235)).ret_name() INTO :x; PRINT x; X -------------------------------- Warehouse 234
COMMENT文を使用すると、表または表の列、ビュー、マテリアライズド・ビュー、演算子、索引タイプまたはマイニング・モデルに関するコメントを、データ・ディクショナリに追加できます。
データベースからコメントを削除する場合、空の文字列' 'を設定します。
|
参照:
|
コメントを追加するオブジェクトが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、次の条件を満たす必要があります。
COMMENT ANY TABLEシステム権限を持っている。
CREATE ANY INDEXTYPEシステム権限を持っている。
CREATE ANY OPERATORシステム権限を持っている。
コメントする表またはマテリアライズド・ビューの名前とスキーマを指定します。schemaを指定しない場合、この表およびマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。
コメントする表、ビューまたはマテリアライズド・ビューの列の名前を指定します。schemaを指定しない場合、この表、ビューおよびマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。
データ・ディクショナリ・ビューUSER_TAB_COMMENTS、DBA_TAB_COMMENTS、ALL_TAB_COMMENTS、USER_COL_COMMENTS、DBA_COL_COMMENTSまたはALL_COL_COMMENTSを問い合せることによって、特定の表または列に関するコメントを表示できます。
コメントする演算子の名前を指定します。schemaを指定しない場合、その演算子は自分のスキーマ内にあるとみなされます。
データ・ディクショナリ・ビューUSER_OPERATOR_COMMENTS、DBA_OPERATOR_COMMENTSまたはALL_OPERATOR_COMMENTSを問い合せることによって、特定の演算子に関するコメントを表示できます。
コメントする索引タイプの名前を指定します。schemaを指定しない場合、この索引タイプは自分のスキーマ内にあるとみなされます。
データ・ディクショナリ・ビューUSER_INDEXTYPE_COMMENTS、DBA_INDEXTYPE_COMMENTSまたはALL_INDEXTYPE_COMMENTSを問い合せることによって、特定の索引タイプに関するコメントを表示できます。
コメントするマテリアライズド・ビューの名前を指定します。schemaを指定しない場合、マテリアライズド・ビューは自分のスキーマ内にあるとみなされます。
データ・ディクショナリ・ビューUSER_MVIEW_COMMENTS、DBA_MVIEW_COMMENTSまたはALL_MVIEW_COMMENTSを問い合せることによって、特定のマテリアライズド・ビューに関するコメントを表示できます。
コメントするマイニング・モデルの名前を指定します。この句を指定するには、COMMENT ANY MINING MODELシステム権限が必要です。
コメントのテキストを指定します。'string'の構文の詳細は、「テキスト・リテラル」を参照してください。
次の文は、employees表のjob_id列にコメントを挿入します。
COMMENT ON COLUMN employees.job_id IS 'abbreviated job title';
次の文は、データベースからこのコメントを削除します。
COMMENT ON COLUMN employees.job_id IS ' ';
COMMIT文を使用すると、現行のトランザクションを終了し、トランザクションで実行したすべての変更を確定できます。トランザクションとは、Oracle Databaseが1つの単位として扱う一連のSQL文です。また、この文によって、トランザクション内のセーブポイントがすべて消去され、トランザクション・ロックが解除されます。
トランザクションをコミットするまでは、次の操作が可能です。
ROLLBACK文でロールバックする(元に戻す)。「ROLLBACK」を参照してください。
Oracle Databaseでは、データ定義言語(DDL)文の前後で暗黙的にCOMMITが発行されます。
この文を使用して、次の操作を実行することもできます。
Oracle Databaseとの接続を切断する前に、最新のトランザクションを含むアプリケーション・プログラムのすべてのトランザクションを、COMMIT文またはROLLBACK文を使用して明示的に終了することをお薦めします。トランザクションを明示的にコミットしなかった場合にプログラムが異常終了すると、コミットされていない最後のトランザクションは、自動的にロールバックされます。
OracleユーティリティおよびOracleのツール製品が正常に終了すると、現行のトランザクションがコミットされます。Oracleプリコンパイラ・プログラムが正常に終了した場合は、トランザクションはコミットされず、現行のトランザクションがOracle Databaseによってロールバックされます。
現行のトランザクションをコミットするために、必要な権限は特にありません。
自分がコミットしたインダウト分散トランザクションを手動でコミットする場合は、FORCE TRANSACTIONシステム権限が必要です。別のユーザーがコミットしたインダウト分散トランザクションを手動でコミットする場合は、FORCE ANY TRANSACTIONシステム権限が必要です。
COMMITキーワードに続く句は、すべてオプションです。COMMITのみを指定した場合、デフォルトはCOMMIT WORK WRITE IMMEDIATE WAITです。
標準SQLに準拠するために、WORKキーワードがサポートされています。COMMIT文とCOMMIT WORK文は同じです。
この句は、下位互換性を保つためにのみサポートされています。コミット・コメントのかわりに名前付きトランザクションを使用することをお薦めします。
現行のトランザクションに関するコメントを指定します。'text'は引用符で囲まれた最大255バイトのリテラルで、分散トランザクションの状態が不明(インダウト)になった場合に、そのトランザクションIDとともに、データ・ディクショナリ・ビューDBA_2PC_PENDINGに格納されます。このコメントは、分散トランザクションの障害を診断するときに役立ちます。
この句を使用すると、コミット操作で生成されるREDO情報をREDOログに書き込む優先度を指定できます。この句によって、待機時間を減らしREDOログへのI/Oを待機しないようにすることで、パフォーマンスを向上させることができます。この句は、レスポンス時間に対する要件が厳しい次のような環境下でのレスポンス時間を改善するために使用します。
WAIT | NOWAITおよびIMMEDIATE | BATCH句を任意の順序で指定できます。
この句を使用すると、制御をいつユーザーに戻すかを指定できます。
WAITパラメータを指定すると、対応するREDOがオンラインREDOログで永続的になった後にのみコミットが戻ります。BATCHモードでもIMMEDIATEモードでも、このCOMMIT文から正常にクライアントに戻ったときは、トランザクションは永続メディアにコミットされています。ログへの正常な書込みの後で障害が発生した場合、成功のメッセージがクライアントに戻らない場合があります。この場合には、トランザクションがコミットされたかどうかはクライアントにはわかりません。
NOWAITパラメータを指定すると、REDOログへの書込みが完了したかどうかに関係なく、コミットはクライアントに戻ります。この動作によって、トランザクションのスループットが向上します。WAITパラメータを指定すると、コミット・メッセージを受け取った場合にデータの損失がないことがわかります。この句を指定しない場合、トランザクションはWAITの動作でコミットされます。
この句を使用すると、REDOをいつログに書き込むかを指定できます。
IMMEDIATEパラメータを指定すると、ログ・ライター・プロセス(LGWR)によって、トランザクションのREDO情報がログに書き込まれます。この操作オプションはディスクI/Oを強制するため、トランザクションのスループットは低下します。
BATCHパラメータを指定すると、同時に実行されている他のトランザクションとともに、REDOがREDOログにバッファされます。十分なREDO情報が収集されると、REDOログのディスク書込みが開始されます。この動作はグループ・コミットと呼ばれます。複数のトランザクションのREDOが一度のI/O操作でログに書き込まれるためです。
この句を指定しない場合、トランザクションはIMMEDIATEの動作でコミットされます。
この句を使用すると、インダウト分散トランザクションまたは破損トランザクションを手動でコミットできます。
FORCE string [, integer]句によって、手動でインダウト分散トランザクションをコミットできます。このトランザクションは、ローカル・トランザクションIDまたはグローバル・トランザクションIDを含む'string'で識別されます。このトランザクションのIDを確認する場合、データ・ディクショナリ・ビューDBA_2PC_PENDINGを問い合せます。また、integerを指定することによって、このトランザクションにシステム変更番号(SCN)を具体的に割り当てることもできます。integerを指定しない場合、このトランザクションは現行のSCNを使用してコミットされます。
FORCE CORRUPT_XID 'string'句によって、1つの破損トランザクションを手動でコミットできます。stringは、破損トランザクションのIDです。V$CORRUPT_XID_LISTデータ・ディクショナリ・ビューを問い合せて、破損トランザクションのトランザクションIDを検索します。V$CORRUPT_XID_LISTを表示し、この句を指定するには、DBA権限が必要です。
FORCE CORRUPT_XID_ALLを指定すると、すべての破損トランザクションを手動でコミットできます。この句を指定するには、DBA権限が必要です。次の文は、hr.regions表に行を挿入してこの変更をコミットします。
INSERT INTO regions VALUES (5, 'Antarctica'); COMMIT WORK;
同じ挿入操作をコミットし、データベースに対して、ディスクI/Oを開始せずに変更をREDOログにバッファするよう指示するには、次のCOMMIT文を使用します。
COMMIT WRITE BATCH;
次の文は、現行のトランザクションをコミットして、コメントを関連付けます。
COMMIT COMMENT 'In-doubt transaction Code 36, Call (415) 555-2637';
ネットワーク障害またはマシン障害によって分散トランザクションを適切にコミットできない場合、トランザクションIDとともにデータ・ディクショナリにコメントが格納されます。そのコメントには、障害が発生したアプリケーション部分が示されており、トランザクションがコミットされたデータベースの管理者に連絡する情報が提供されています。
次の文は、不確定なインダウト分散トランザクションを手動でコミットします。V$CORRUPT_XID_LISTデータ・ディクショナリ・ビューを問い合せて、破損トランザクションのトランザクションIDを検索します。V$CORRUPT_XID_LISTを表示し、この文を発行するには、DBA権限が必要です。
COMMIT FORCE '22.57.53';
|
![]() Copyright © 1996, 2008, Oracle Corporation. All Rights Reserved. |
|