SQL*Plusエラー・ロギングをONまたはOFFに切り替えます。エラー・ロギングでは、SQL、PL/SQLおよびSQL*Plusのエラーと関連パラメータをエラー・ログ表に記録します。このログ表を問い合せて、問合せによって発生するエラーを確認できます。エラー・ロギングがONの場合は、問合せが対話型またはスクリプトのどちらで実行されるかに関係なく、エラーが記録されます。これは、長時間実行される問合せによって生成されるエラーの取得に特に有効で、SPOOLコマンドの使用によるすべての出力の取得、または実行中の監視を回避できます。
デフォルトで、エラーは各スキーマの表SPERRORLOGに書き込まれます。この表が存在しない場合は、自動的に作成されます。TABLE schema.tablenameオプションを使用して、他の表を使用するように指定することもできます。SPERRORLOG以外の表を使用する場合は、その表がすでに存在していて、アクセス可能である必要があります。「ユーザー定義エラー・ログ表の作成」を参照してください。
内部エラーが発生した場合は、それ自体をコールするエラー・ログによって発生する再帰エラーを回避するため、エラー・ロギングは自動的にOFFに設定されます。
エラー・ロギングは、デフォルトでOFFに設定されます。
ON
ORA、PLSおよびSP2エラーをデフォルト表のSPERRORLOGに書き込みます。
OFF
エラーを無効にします。
TABLE [schema.]tablename
デフォルトのSPERRORLOGのかわりにユーザー定義表を使用するように指定します。schema.を省略すると、現行のスキーマに表が作成されます。指定する表は存在している必要があり、それに対するアクセス権限が必要です。
指定した表が存在しないか、またはその表に対するアクセス権がない場合は、エラー・メッセージが表示されて、デフォルト表のSPERRORLOGが使用されます。
TRUNCATE
エラー・ログ表の既存の行すべてが消去されて、現行セッションからのエラーの記録が始まります。
IDENTIFIER identifier
エラーを識別するためのユーザー定義文字列。特定のセッションから、または特定の問合せバージョンからエラーを識別するために使用できます。
ユーザー定義エラー・ログ表の作成
1つ以上のエラー・ログ表を作成して、デフォルトのかわりに使用できます。TABLE schema.tablenameオプションを使用してユーザー定義エラー・ログ表を指定する前に、この表を作成して、表に対するアクセス権限を確保する必要があります。エラー・ログ表には、次の列定義があります。
表12-4 SQL*Plusエラー・ログの列定義
列 | タイプ | 説明 |
---|---|---|
username |
VARCHAR(256) |
Oracleアカウント名。 |
timestamp |
TIMESTAMP |
エラー発生時間。 |
script |
VARCHAR(1024) |
発生元のスクリプトがある場合は、その名前。 |
identifier |
VARCHAR(256) |
ユーザー定義識別子文字列。 |
message |
CLOB |
ORA、PLAまたはSP2のエラー・メッセージ。フィードバック・メッセージは含まれていません。たとえば、「PL/SQLブロックが作成されました。」は記録されません。 |
statement |
CLOB |
エラーを発生させた文。 |
ユーザー定義エラー・ログ表の使用
ユーザー定義ログ表を使用するには、その表へのアクセス権限が必要であり、SET ERRORLOGGINGコマンドにTABLE schema.tablenameオプションを付けて発行して、(必要に応じて)エラー・ログ表とスキーマを識別する必要があります。
エラー・ログ表の問合せ
エラー・ログ表に記録されたレコードを表示するには、任意の表で表示する必要がある列を問い合せます。使用可能な列を表12-4に示しています。
例
デフォルトのエラー・ログ表を使用して、次の内容を含むスクリプトmyfile.sqlによる問合せエラーを記録する場合:
VARIABLE U REFCURSOR BEGIN OPEN :U FOR SELECT * FROM DEPT; END; / SHOW ERRORS PROCEDURE 'SSS' SET GARBAGE SELECT * FROM GARBAGE ;
次のように入力します。
SET ERRORLOGGING ON @myfile
これによって、次の出力が表示されます。
open :u for select * from dept; * ERROR at line 2: ORA-6550: line 2, column 29: PLS-00201: ORA-00942: table or view does not exist ORA-6550: line 2, column 16: PL/SQL: SQL Statement ignored ERROR: ORA-00907: missing right parenthesis SP2-0158: unknown SET option "garbage" garbage * ERROR at line 3: ORA-00942: table or view does not exist
デフォルトのエラー・ログ表SPERRORLOGに書き込まれたエラー・ログを表示するには、次のように入力します。
SELECT TIMESTAMP, USERNAME, SCRIPT, IDENTIFIER, STATEMENT, MESSAGE FROM SPERRORLOG;
これによって、次の出力が表示されます。
TIMESTAMP | USERNAME | SCRIPT | IDENTIFIER | STATEMENT | MESSAGE |
---|---|---|---|---|---|
Mon May 08 21:30:03 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
ORA-06550: 「行2、列27:」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
PL/SQL: ORA-00942: 「表またはビューが存在しません。」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
ORA-06550: 「行2、列13:」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
PL/SQL: 「SQL文が無視されました。」 |
|
Mon May 08 21:30:06 2006 |
SYSTEM |
d:\myfile.sql |
show errors procedure "sss" |
ORA-00907: 「右カッコがありません。」 |
|
Mon May 08 21:30:09 2006 |
SYSTEM |
d:\myfile.sql |
set garbage |
SP2-0158: 「不明なSETオプションです "garbage"」 |
|
Mon May 08 21:30:10 2006 |
SYSTEM |
d:\myfile.sql |
garbage |
ORA-00942: 「表またはビューが存在しません。」 |
例2
ユーザー定義エラー・ログ表を使用して、次の内容を含むスクリプトmyfile.sqlによる問合せエラーを記録する場合:
VARIABLE U REFCURSOR BEGIN OPEN :U FOR SELECT * FROM DEPT; END; / SHOW ERRORS PROCEDURE 'SSS' SET GARBAGE SELECT * FROM GARBAGE ;
次のように入力します。
SET ERRORLOGGING ON @MYFILE
これによって、次の出力が表示されます。
open :u for select * from dept; * ERROR at line 2: ORA-6550: line 2, column 29: PLS-00201: ORA-00942: table or view does not exist ORA-6550: line 2, column 16: PL/SQL: SQL Statement ignored ERROR: ORA-00907: missing right parenthesis SP2-0158: unknown SET option "garbage" garbage * ERROR at line 3: ORA-00942: table or view does not exist
デフォルトのエラー・ログ表SPERRORLOGに書き込まれたエラー・ログを表示するには、次のように入力します。
SELECT TIMESTAMP, USERNAME, SCRIPT, IDENTIFIER, STATEMENT, MESSAGE FROM SPERRORLOG;
これによって、次の出力が表示されます。
TIMESTAMP | USERNAME | SCRIPT | IDENTIFIER | STATEMENT | MESSAGE |
---|---|---|---|---|---|
Mon May 08 21:30:03 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
ORA-06550: 「行2、列27:」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
PL/SQL: ORA-00942: 「表またはビューが存在しません。」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
ORA-06550: 「行2、列13:」 |
|
Mon May 08 21:30:05 2006 |
SYSTEM |
d:\myfile.sql |
open :u for select * from dept; |
PL/SQL: 「SQL文が無視されました。」 |
|
Mon May 08 21:30:06 2006 |
SYSTEM |
d:\myfile.sql |
show errors procedure "sss" |
ORA-00907: 「右カッコがありません。」 |
|
Mon May 08 21:30:09 2006 |
SYSTEM |
d:\myfile.sql |
set garbage |
SP2-0158: 「不明なSETオプションです "garbage"」 |
|
Mon May 08 21:30:10 2006 |
SYSTEM |
d:\myfile.sql |
garbage |
ORA-00942: 「表またはビューが存在しません。」 |
例3
デフォルト以外のエラー・ログ表を使用する場合:
使用するエラー・ログ表を作成します。
SET ERRORLOGGING ONコマンドのTABLEオプションで、使用する表を指定します。
エラー・ログ表の列定義は表12-4で定義されている必要があります。
Johnがエラー・ログ表john_sperrorlogを使用する場合を想定します。Johnは、次のSQL文を実行して新しいエラー・ログ表を作成します。
DROP TABLE john_sperrorlog; CREATE TABLE john_sperrorlog(username VARCHAR(256), timestamp TIMESTAMP, script VARCHAR(1024), identifier VARCHAR(256), message CLOB, statement CLOB);
ユーザー・コメントgiridhar123から前の例のコミットを削除しました(14Feb08)
次にJohnは、次のSETコマンドを発行して、新しく作成したエラー・ログ表を使用したエラー・ロギングを有効にします。
SET ERRORLOGGING ON TABLE john_sperrorlog
これで、Johnのエラー・ロギングはすべて、デフォルトのエラー・ログ表SPERRORLOGではなく、john_sperrorlogに記録されます。
エラー・ログ表へのアクセス権限は、任意のユーザー表へのアクセス権限と同様に処理されます。表に対するアクセス権を付与する方法の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。