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. |
|