ヘッダーをスキップ
Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス
11g リリース1(11.1)
E05686-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

123 DBMS_SQLDIAG

DBMS_SQLDIAGパッケージは、SQL診断機能のインタフェースを提供します。


関連項目:

診断データの管理の詳細は、『Oracle Database管理者ガイド』を参照してください。

この章では、次の項目について説明します。


DBMS_SQLDIAGの使用方法


概要

重大なエラーが発生してSQL文が失敗した場合は、SQL修復アドバイザを実行して、失敗した文の修復を試行できます。この項では、次の項目について説明します。

SQL修復アドバイザの概要

SQL修復アドバイザは、重大なエラーが発生してSQL文が失敗した場合に実行します。このアドバイザによって、文が分析され、多くの場合、文を修復するためにパッチの適用が推奨されます。リコメンデーションを実装すると、適用されたSQLパッチによって、問合せオプティマイザで将来実行する場合の代替実行計画が選択され、失敗が回避されます。

SQL修復アドバイザの実行

SQL修復アドバイザを実行するには、CREATE_DIAGNOSIS_TASKを使用して診断タスクを作成し、EXECUTE_DIAGNOSIS_TASKを使用してその診断タスクを実行します。SQL修復アドバイザは、まず重大なエラーを再現し、次にSQLパッチの形式での対処方法の生成を試行します。

  1. 問題が発生したSQL文の特定

    重大なエラーが発生した次のSQL文について考えてみます。

    DELETE FROM t t1 WHERE t1.a = 'a' AND ROWID <> (SELECT MAX(ROWID) FROM t t2 WHERE t1.a= t2.a AND t1.b = t2.b AND t1.d=t2.d)
    

    SQL修復アドバイザを使用して、この重大なエラーを修復します。

  2. 診断タスクの作成

    DBMS_SQLDIAG. CREATE_DIAGNOSIS_TASKをコールします。オプションのタスク名、アドバイザ・タスクのオプションの時間制限、および問題のタイプを指定できます。 次の例では、SQLテキストを指定し、タスク名をerror_task、問題のタイプをDBMS_SQLDIAG.PROBLEM_TYPE_COMPILATION_ERRORと指定しています。

    DECLARE
        rep_out         CLOB;
        t_id            VARCHAR2(50);
      BEGIN
        t_id := DBMS_SQLDIAG.CREATE_DIAGNOSIS_TASK(
          sql_text => 'DELETE FROM t t1 WHERE t1.a = ''a'' AND ROWID <> (SELECT MAX(ROWID) FROM t t2 WHERE t1.a= t2.a AND t1.b = t2.b AND t1.d=t2.d)',
          task_name => 'error_task',
          problem_type =>DBMS_SQLDIAG.PROBLEM_TYPE_COMPILATION_ERROR);
    
  3. 診断タスクの実行

    SQL修復アドバイザの対処方法生成および分析フェーズを実行するには、CREATE_DIAGNOSIS_TASKで戻されたタスクIDを使用してDBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASKをコールします。多少の遅延後に、SQL修復アドバイザに戻ります。SQL修復アドバイザは、その実行の一環として検索結果の記録を残します。この記録には、SQL修復アドバイザのレポート機能を使用してアクセスできます。

    DBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASK (t_id);
    
  4. 診断タスクのレポート

    診断タスクの分析には、dbms_sqldiag.report_diagnosis_タスクを使用してアクセスできます。SQL修復アドバイザは、対処方法を検出できた場合、SQLパッチを推奨します。SQLパッチは、SQLプロファイルと類似していますが、SQLプロファイルとは異なり、コンパイル・エラーまたは実行エラーに対処するために使用します。

    rep_out := DBMS_SQLDIAG.REPORT_DIAGNOSIS_TASK (t_id, DBMS_SQLDIAG.TYPE_TEXT);
    
      DBMS_OUTPUT.PUT_LINE ('Report : ' ||  rep_out);
    
      END;
      /
    
  5. パッチの適用

    レポートでパッチが推奨されている場合は、DBMS_SQLDIAG.ACCEPT_SQL_PATCHをコールすることによって、ACCEPT_SQL_PATCHコマンドを実行してパッチを受け入れることができます。 このプロシージャは、引数としてtask_nameを使用します。

    EXECUTE DBMS_SQLDIAG.ACCEPT_SQL_PATCH(task_name => 'error_task', task_owner => 'SYS', replace => TRUE);
    
  6. パッチのテスト

    パッチを受け入れたため、SQL文を再実行できます。今回は重大なエラーが発生しなくなります。この文でEXPLAIN PLANを実行すると、計画を生成するためにSQLパッチが使用されたことが表示されます。

    DELETE FROM t t1 WHERE t1.a = 'a' AND ROWID <> (select max(rowid) FROM t t2 WHERE t1.a= t2.a AND t1.b = t2.b AND t1.d=t2.d);
    

SQLパッチの削除

正式なパッチをOracleから取得してエラーを修正した場合、あるいはエラーの修正を含むOracleの次のパッチ・セットまたはパッチ・リリースにアップグレードした場合は、パッチ名を指定してDBMS_SQLDIAG.DROP_SQL_PATCHをコールし、SQLパッチを削除します。 パッチ名は、EXPLAIN PLANセクションから取得することも、ビューDBA_SQL_PATCHESを問い合せて取得することもできます。


定数

DBMS_SQLDIAGパッケージでは、次の表に示す定数が使用されます。

表123-1 DBMS_SQLDIAGの定数: SQLDIAGアドバイザの名前

定数 説明

ADV_SQL_DIAG_NAME

VARCHAR2(18)

'SQL Repair Advisor'

アドバイザのフレームワークに表示されるSQL修復アドバイザの名前


表123-2 DBMS_SQLDIAGの定数: SQLDIAGアドバイザのタスク・スコープ・パラメータの値

定数 説明

SCOPE_COMPREHENSIVE

VARCHAR2(13)

'COMPREHENSIVE'

問題の詳細な分析(実行に時間がかかる場合があります)

SCOPE_LIMITED

VARCHAR2(7)

'LIMITED'

問題の簡単な分析


表123-3 DBMS_SQLDIAGの定数: SQLDIAGアドバイザのtime_limit定数

定数 説明

TIME_LIMIT_DEFAULT

NUMBER

1800

問題の分析に対するデフォルトの時間制限


表123-4 DBMS_SQLDIAGの定数: レポート・タイプ(設定可能な値)の定数

定数 説明

TYPE_HTML

VARCHAR2(4)

'HTML'

REPORT_DIAGNOSIS_TASKファンクションによるレポート(HTML形式)

TYPE_TEXT

VARCHAR2(4)

'TEXT'

REPORT_DIAGNOSIS_TASKファンクションによるレポート(テキスト形式)

TYPE_XML

VARCHAR2(3)

'XML'

REPORT_DIAGNOSIS_TASKファンクションによるレポート(XML形式)


表123-5 DBMS_SQLDIAGの定数: レポート・レベル(設定可能な値)の定数

定数 説明

LEVEL_ALL

VARCHAR2(3)

'ALL'

スキップされた文に関する注釈を含む詳細なレポート。

LEVEL_BASIC

VARCHAR2(5)

'BASIC'

分析対象の各文に関する情報(実装されていないリコメンデーションなど)を表示します。

LEVEL_TYPICAL

VARCHAR2(7)

'TYPICAL'

簡単なレポートに、アドバイザによって実行されるアクションに関する情報のみが表示されます。


表123-6 DBMS_SQLDIAGの定数: レポート・セクション(設定可能な値)の定数

定数 説明

SECTION_ALL

VARCHAR2(3)

'ALL'

すべての文

SECTION_ERRORS

VARCHAR2(6)

'ERRORS'

エラーが発生した文

SECTION_FINDINGS

VARCHAR2(8)

'FINDINGS'

チューニングの結果

SECTION_INFORMATION

VARCHAR2(11)

'INFORMATION'

一般的な情報

SECTION_PLANS

VARCHAR2(5)

'PLANS'

EXPLAIN PLAN

SECTION_SUMMARY

VARCHAR2(7)

'SUMMARY'

サマリー情報


表123-7 DBMS_SQLDIAGの定数: 問題のタイプの定数

定数 説明

PROBLEM_TYPE_PERFORMANCE

NUMBER

1

パフォーマンスに問題があるとユーザーが推定しています。

PROBLEM_TYPE_WRONG_RESULTS

NUMBER

2

問合せの結果に一貫性がないとユーザーが推定しています。

PROBLEM_TYPE_COMPILATION_ERROR

NUMBER

3

コンパイル中にクラッシュしたことをユーザーが確認しました。

PROBLEM_TYPE_EXECUTION_ERROR

NUMBER

4

実行中にクラッシュしたことをユーザーが確認しました。


表123-8 DBMS_SQLDIAGの定数: 検索結果のフィルタの定数

定数 説明

SQLDIAG_FINDINGS_ALL

NUMBER

1

検索可能なすべての結果を表示します。

SQLDIAG_FINDINGS_VALIDATION

NUMBER

2

構造に対する検証ルールのステータスを表示します。

SQLDIAG_FINDINGS_FEATURES

NUMBER

3

問合せで使用される機能のみを表示します。

SQLDIAG_FINDINGS_FILTER_PLANS

NUMBER

4

アドバイザによって生成された代替プランを表示します。



パッチのパック/アンパック

パッチは、パッケージ内のサブプログラムで提供されているステージング表を使用して、あるシステムからエクスポートして別のシステムにインポートできます。SQL診断セットの場合と同様に、ステージング表に挿入する操作は「パック」、ステージング表のデータからパッケージを作成する操作は「アンパック」と呼ばれます。

DBAは、パック/アンパックを次のように実行する必要があります。

  1. CREATE_STGTAB_SQLPATCHをコールして、ユーザー'SH'が所有するステージング表を作成します。

    EXEC DBMS_SQLDIAG.CREATE_STGTAB_SQLPATCH(
        table_name          =>  'STAGING_TABLE',
        schema_name         =>  'SH');
    
  2. PACK_STGTAB_SQLPATCHを1回以上コールして、ステージング表にSQLパッチのデータを書き込みます。この場合、現行のスキーマ所有者が所有するステージング表に、DEFAULTカテゴリ内のすべてのSQLパッチのデータをコピーします。

    EXEC DBMS_SQLDIAG.PACK_STGTAB_SQLPATCH(
        staging_table_name  =>  'STAGING_TABLE');
    
  3. この場合、現行のスキーマ所有者が所有するステージング表には、1つのSQLパッチSP_FIND_EMPLOYEEのみがコピーされます。

    EXEC DBMS_SQLDIAG.PACK_STGTAB_SQLPATCH(
        patch_name          =>  'SP_FIND_EMPLOYEE',
        staging_table_name  =>  'STAGING_TABLE');
    

    これによって、データポンプ、インポート・コマンドとエクスポート・コマンドまたはデータベース・リンクのいずれかを使用して、ステージング表を別のシステムに移動できます。

  4. UNPACK_STGTAB_SQLPATCHをコールして、ステージング表のパッチのデータから、新しいシステムにSQLパッチを作成します。 この場合、ステージング表に格納されているSP_FIND_EMPLOYEEパッチのデータ内の名前を'SP_FIND_EMP_PROD'に変更します。

    exec dbms_sqldiag.remap_stgtab_sqlpatch(
       old_patch_name      =>  'SP_FIND_EMPLOYEE',
       new_patch_name      =>  'SP_FIND_EMP_PROD',
    

DBMS_SQLDIAGサブプログラムの要約

表123-9 DBMS_SQLDIAGパッケージのサブプログラム

サブプログラム 説明

ACCEPT_SQL_PATCHファンクションおよびプロシージャ


指定したSQL診断タスクで推奨されているとおりに、推奨されたSQLパッチを受け入れます。

ALTER_SQL_PATCHプロシージャ


既存のSQLパッチ・オブジェクトの特定の属性を変更します。

CANCEL_DIAGNOSIS_TASKプロシージャ


診断タスクを取り消します。

CREATE_STGTAB_SQLPATCHプロシージャ


システム間でのSQLパッチの転送に使用するステージング表を作成します。

DROP_DIAGNOSIS_TASKプロシージャ


診断タスクを削除します。

DROP_SQL_PATCHプロシージャ


データベースから名前付きSQLパッチを削除します。

EXECUTE_DIAGNOSIS_TASKプロシージャ


診断タスクを実行します。

EXPLAIN_SQL_TESTCASEファンクション


SQLテスト・ケースについて記述します。

EXPORT_SQL_TESTCASEプロシージャ


SQLテスト・ケースをディレクトリにエクスポートします。

EXPORT_SQL_TESTCASE_DIR_BY_INCファンクション


引数として渡されるインシデントIDに対応するSQLテスト・ケースを生成します。

EXPORT_SQL_TESTCASE_DIR_BY_TXTファンクション


引数として渡されるSQLに対応するSQLテスト・ケースを生成します。

GET_SQLファンクション


SQLテスト・ケースをインポートします。

INCIDENTID_2_SQLプロシージャ


インシデントIDのsql_setrowを初期化します。

INTERRUPT_DIAGNOSIS_TASKプロシージャ


診断タスクを中断します。

PACK_STGTAB_SQLPATCHプロシージャ


CREATE_STGTAB_SQLPATCHプロシージャによって作成されたステージング表へのSQLパッチ。

REPORT_DIAGNOSIS_TASKファンクション


診断タスクをレポートします。

RESET_DIAGNOSIS_TASKプロシージャ


診断タスクをリセットします。

RESUME_DIAGNOSIS_TASKプロシージャ


診断タスクを再開します。

SET_DIAGNOSIS_TASK_PARAMETERプロシージャ


診断タスク・パラメータを設定します。

UNPACK_STGTAB_SQLPATCHプロシージャ


PACK_STGTAB_SQLPATCHプロシージャをコールして移入されたステージング表からアンパックし、ステージング表に格納されているパッチのデータを使用して、システムにパッチを作成します。



ACCEPT_SQL_PATCHファンクションおよびプロシージャ

このファンクションおよびプロシージャは、指定したSQL診断タスクで推奨されているとおりに、推奨されたSQLパッチを受け入れます。

構文

DBMS_SQLDIAG.ACCEPT_SQL_PATCH (
   task_name      IN  VARCHAR2,
   object_id      IN  NUMBER := NULL,
   name           IN  VARCHAR2 := NULL,
   description    IN  VARCHAR2 := NULL,
   category       IN  VARCHAR2 := NULL,
   task_owner     IN  VARCHAR2 := NULL,
   replace        IN  BOOLEAN := FALSE,
   force_match    IN  BOOLEAN := FALSE)
 RETURN VARCHAR2;
DBMS_SQLDIAG.ACCEPT_SQL_PATCH (
   task_name      IN  VARCHAR2,
   object_id      IN  NUMBER := NULL,
   name           IN  VARCHAR2 := NULL,
   description    IN  VARCHAR2 := NULL,
   category       IN  VARCHAR2 := NULL,
   task_owner     IN  VARCHAR2 := NULL,
   replace        IN  BOOLEAN := FALSE,
   force_match    IN  BOOLEAN := FALSE);

パラメータ

表123-10 ACCEPT_SQL_PATCHファンクションおよびプロシージャのパラメータ

パラメータ 説明

taskname

SQL診断タスクの名前。

object_id

診断タスクに関連付けられているSQL文を示すアドバイザ・フレームワーク・オブジェクトの識別子。

name

パッチの名前。二重引用符は指定できません。大文字と小文字が区別されます。指定しない場合は、システムによってSQLパッチに一意の名前が生成されます。

description

SQLパッチの目的を記述したユーザー指定の文字列。記述の最大サイズは500です。

category

カテゴリ名。このパッチを使用するセッションに対するセッションのSQLDIAGNOSE_CATEGORYパラメータの値と一致する必要があります。デフォルトの値はDEFAULTになります。 また、この値はSQLDIAGNOSE_CATEGORYパラメータのデフォルトでもあります。カテゴリには、有効なOracle識別子を指定してください。指定したカテゴリ名は、常に大文字に変換されます。正規化されたSQLテキストとカテゴリ名の組合せによって、パッチの一意のキーが作成されます。この組合せが重複した場合、受入れは正常に実行されません。

task_owner

診断タスクの所有者。これはオプションのパラメータです。別のユーザーが所有する診断タスクに関連付けられているSQLパッチを受け入れる場合に指定する必要があります。現行のユーザーがデフォルト値です。

replace

パッチがすでに存在する場合にこの引数をTRUEに設定すると、そのパッチは置き換えられます。TRUEに設定した場合でも、別のシグネチャ/カテゴリの組合せで使用されている名前を渡すとエラーが発生します。

force_match

TRUEに設定すると、すべてのリテラル値をバインド変数に正規化した後に同じテキストが含まれているSQL文がSQLパッチの対象になります。(SQL文でリテラル値とバインド変数の組合せが使用されている場合、バインド変換は行われません。) これは、CURSOR_SHARINGパラメータのFORCEオプションで使用される一致アルゴリズムと似ています。FALSEに設定すると、リテラルは変換されません。 これは、CURSOR_SHARINGパラメータのEXACTオプションで使用される一致アルゴリズムと似ています。


戻り値

SQLパッチの名前。

使用上の注意

CREATE ANY SQL PATCH権限が必要です。


ALTER_SQL_PATCHプロシージャ

このプロシージャは、既存のSQLパッチ・オブジェクトの特定の属性を変更します。

構文

DBMS_SQLDIAG.ALTER_SQL_PATCH (
   name            IN  VARCHAR2,
   attribute_name  IN  VARCHAR2,
   value           IN  VARCHAR2);

パラメータ

表123-11 ALTER_SQL_PATCHプロシージャのパラメータ

パラメータ 説明

name

変更するSQLパッチの名前。

attribute_name

変更するSQLパッチの名前。有効な値は、次のとおりです。

  • STATUS: ENABLEDまたはDISABLEDに設定できます。

  • NAME: 有効な名前にリセットできます(この名前は、有効なOracle識別子であり一意である必要があります)。

  • DESCRIPTION: 500以下の文字列に設定できます。

  • CATEGORY: 有効なカテゴリ名にリセットできます(この名前は有効なOracle識別子であり、正規化されたSQLテキストと組み合せた場合は一意である必要があります)。

このパラメータは必須で、大/小文字が区別されます。

value

属性の新しい値。 有効な属性値については、attribute_nameを参照してください。このパラメータは必須です。


使用上の注意

ALTER ANY SQL PATCH権限が必要です。


CANCEL_DIAGNOSIS_TASKプロシージャ

このプロシージャは、診断タスクを取り消します。

構文

DBMS_SQLDIAG.CANCEL_DIAGNOSIS_TASK (
    taskname        IN   VARCHAR2);

パラメータ

表123-12 CANCEL_DIAGNOSIS_TASKプロシージャのパラメータ

パラメータ 説明

taskname

タスクの名前。



CREATE_DIAGNOSIS_TASKファンクション

このファンクションは、1つのSQL文を診断するために診断タスクを作成します。このファンクションは、SQL診断タスクの一意の名前を戻します。

構文

テキストを指定して、単一の文の診断を準備します。

DBMS_SQLDIAG.CREATE_DIAGNOSIS_TASK (
    sql_text           IN   CLOB,
    bind_list          IN   sql_binds := NULL,
    user_name          IN   VARCHAR2  := NULL,
    scope              IN   VARCHAR2  := SCOPE_COMPREHENSIVE,
    time_limit         IN   NUMBER    := TIME_LIMIT_DEFAULT,
    task_name          IN   VARCHAR2  := NULL,
    description        IN   VARCHAR2  := NULL,
    problem_type       IN   NUMBER    := PROBLEM_TYPE_PERFORMANCE)
  RETURN VARCHAR2;

識別子を指定して、カーソル・キャッシュ内の単一の文の診断を準備します。

DBMS_SQLDIAG.CREATE_DIAGNOSIS_TASK (
    sql_id             IN   VARCHAR2,
    plan_hash_value    IN   NUMBER    := NULL,
    scope              IN   VARCHAR2  := SCOPE_COMPREHENSIVE,
    time_limit         IN   NUMBER    := TIME_LIMIT_DEFAULT,
    task_name          IN   VARCHAR2  := NULL,
    description        IN   VARCHAR2  := NULL,
    problem_type       IN   NUMBER    := PROBLEM_TYPE_PERFORMANCE)
  RETURN VARCHAR2;

sqlsetの診断を準備します。

DBMS_SQLDIAG.CREATE_DIAGNOSIS_TASK (
    sqlset_name       IN VARCHAR2,
    basic_filter      IN VARCHAR2 :=  NULL,
    object_filter     IN VARCHAR2 :=  NULL,
    rank1             IN VARCHAR2 :=  NULL,
    rank2             IN VARCHAR2 :=  NULL,
    rank3             IN VARCHAR2 :=  NULL,
    result_percentage IN NUMBER   :=  NULL,
    result_limit      IN NUMBER   :=  NULL,
    scope             IN VARCHAR2 :=  SCOPE_COMPREHENSIVE,
    time_limit        IN NUMBER   :=  TIME_LIMIT_DEFAULT,
    task_name         IN VARCHAR2 :=  NULL,
    description       IN VARCHAR2 :=  NULL,
    plan_filter       IN VARCHAR2 :=  'MAX_ELAPSED_TIME',
    sqlset_owner      IN VARCHAR2 :=  NULL,
    problem_type      IN NUMBER   := PROBLEM_TYPE_PERFORMANCE)  RETURN VARCHAR2;

パラメータ

表123-13 CREATE_DIAGNOSIS_TASKファンクションのパラメータ

パラメータ 説明

sql_text

SQL文のテキスト。

bind_list

バインド値のセット。

user_name

診断対象の文またはsqlsetがあるユーザーの名前。

scope

診断スコープ(制限付き/包括的)。

time_limit

診断セッションの最大継続時間(秒)。

task_name

診断タスク名(オプション)。

description

最大256文字のSQL診断セッションの記述。

problem_type

タスクの目標を決定します。有効な値は、次のとおりです。

  • PROBLEM_TYPE_WRONG_RESULTS

  • PROBLEM_TYPE_COMPILATION_ERROR

  • PROBLEM_TYPE_EXECUTION_ERROR

sql_id

文の識別子。

plan_hash_value

SQL実行計画のハッシュ値。

sqlset_name

sqlset名。

basic_filter

SQLチューニング・セット(STS)からSQLをフィルタするためのSQL述語。

object_filter

オブジェクト・フィルタ。

rank(i)

選択したSQLのorder-by句。

result_percentage

ランキング・メジャーの合計のパーセント。

result_limit

フィルタ処理またはランク付けが済んでいるSQLの先頭から数件取得されるSQL文。

plan_filter

計画フィルタ。 計画(plan_hash_value)が複数ある場合に適用できます。 このフィルタには、1つの計画(plan_hash_value)のみを選択できます。有効な値は、次のとおりです。

  • LAST_GENERATED: タイムスタンプが最も新しい計画。

  • FIRST_GENERATED: LAST_GENERATEDの反対です。

  • LAST_LOADED: first_load_time統計情報が最も新しい計画。

  • FIRST_LOADED: LAST_LOADEDの反対です。

  • MAX_ELAPSED_TIME: 経過時間が最も長い計画。

  • MAX_BUFFER_GETS: バッファ取得回数が最も多い計画。

  • MAX_DISK_READS: ディスク読取り回数が最も多い計画。

  • MAX_DIRECT_WRITES: 直接書込み回数が最も多い計画。

  • MAX_OPTIMIZER_COST: オプティマイザ・コストが最も大きい計画。

sqlset_owner

sqlsetの所有者。現行のスキーマ所有者の場合はNULL。



CREATE_STGTAB_SQLPATCHプロシージャ

このプロシージャは、システム間でのSQLパッチの転送に使用するステージング表を作成します。

構文

DBMS_SQLDIAG.CREATE_STGTAB_SQLPATCH (
   table_name       IN  VARCHAR2,
   schema_name      IN  VARCHAR2 := NULL,
   tablespace_name  IN  VARCHAR2 := NULL);

パラメータ

表123-14 CREATE_STGTAB_SQLPATCHプロシージャのパラメータ

パラメータ 説明

table_name

(必須)作成する表の名前(大/小文字区別)。

schema_name

作成する表を格納するスキーマ(大/小文字区別)。現行のスキーマの場合はNULL

tablespace_name

ステージング表を格納する表領域(大/小文字区別)。現行のユーザーのデフォルト表領域の場合はNULL



DROP_DIAGNOSIS_TASKプロシージャ

このプロシージャは、診断タスクを削除します。

構文

DBMS_SQLDIAG.DROP_DIAGNOSIS_TASK (
    taskname        IN   VARCHAR2);

パラメータ

表123-15 DROP_DIAGNOSIS_TASKプロシージャのパラメータ

パラメータ 説明

taskname

タスクの名前。



DROP_SQL_PATCHプロシージャ

このプロシージャは、データベースから名前付きSQLパッチを削除します。

構文

DBMS_SQLDIAG.DROP_SQL_PATCH (
   name     IN  VARCHAR2,   ignore   IN  BOOLEAN := FALSE);

パラメータ

表123-16 DROP_SQL_PATCHファンクションおよびプロシージャのパラメータ

パラメータ 説明

name

削除するパッチの名前。大文字と小文字が区別されます。

ignore

オブジェクトが存在しないために起こるエラーは無視されます。


使用上の注意

DROP ANY SQL PATCH権限が必要です。


EXECUTE_DIAGNOSIS_TASKプロシージャ

このプロシージャは、診断タスクを実行します。

構文

DBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASK (
    taskname        IN   VARCHAR2);

パラメータ

表123-17 EXECUTE_DIAGNOSIS_TASKプロシージャのパラメータ

パラメータ 説明

taskname

タスクの名前。



EXPLAIN_SQL_TESTCASEファンクション

このファンクションは、SQLテスト・ケースについて記述します。

構文

DBMS_SQLDIAG.EXPLAIN_SQL_TESTCASE (
    sqlTestCase        IN   CLOB)
  RETURN CLOB;

パラメータ

表123-18 EXPLAIN_SQL_TESTCASEファンクションのパラメータ

パラメータ 説明

sqlTestCase

SQLテスト・ケースについて記述したXML文書。



EXPORT_SQL_TESTCASEプロシージャ

このプロシージャは、SQLテスト・ケースをディレクトリにエクスポートします。

構文

この変数は、SQL情報とともに指定する必要があります。

DBMS_SQLDIAG.EXPORT_SQL_TESTCASE (
    directory          IN   VARCHAR2,
    sql_text           IN   CLOB,
    user_name          IN   VARCHAR2  := 'SYS',
    bind_list          IN   sql_binds :=  NULL,
    exportEnvironment  IN   BOOLEAN   :=  TRUE,
    exportMetadata     IN   BOOLEAN   :=  TRUE,
    exportData         IN   BOOLEAN   :=  TRUE,
    samplingPercent    IN   NUMBER    :=  100,
    ctrlOptions        IN   VARCHAR2  :=  NULL,
    timeLimit          IN   NUMBER    :=  0,
    testcase_name      IN   VARCHAR2  :=  NULL,
    testcase           IN OUT NOCOPY CLOB);

この変数は、インシデント・ファイルからSQL情報を抽出します。

DBMS_SQLDIAG.EXPORT_SQL_TESTCASE (
    directory          IN   VARCHAR2,
    incident_id        IN   VARCHAR2,
    exportEnvironment  IN   BOOLEAN   :=  TRUE,
    exportMetadata     IN   BOOLEAN   :=  TRUE,
    exportData         IN   BOOLEAN   :=  TRUE,
    samplingPercent    IN   NUMBER    :=  100,
    ctrlOptions        IN   VARCHAR2  :=  NULL,
    timeLimit          IN   NUMBER    :=  0,
    testcase_name      IN   VARCHAR2  :=  NULL,
    testcase           IN OUT NOCOPY CLOB);

この変数を使用すると、カーソル・キャッシュに存在するカーソルからSQLテスト・ケースを生成できます。 SQL識別子およびSQLハッシュ値を取得するには、V$SQLを使用します。

DBMS_SQLDIAG.EXPORT_SQL_TESTCASE (
    directory          IN   VARCHAR2,
    sql_id             IN   VARCHAR2,
    plan_hash_value    IN   NUMBER    := NULL,
    exportEnvironment  IN   BOOLEAN   :=  TRUE,
    exportMetadata     IN   BOOLEAN   :=  TRUE,
    exportData         IN   BOOLEAN   :=  TRUE,
    samplingPercent    IN   NUMBER    :=  100,
    ctrlOptions        IN   VARCHAR2  :=  NULL,
    timeLimit          IN   NUMBER    :=  0,
    testcase_name      IN   VARCHAR2  :=  NULL,
    testcase           IN OUT NOCOPY CLOB);

パラメータ

表123-19 EXPORT_SQL_TESTCASEプロシージャのパラメータ

パラメータ 説明

directory

生成された様々なファイルを保存するディレクトリ。

sql_text

エクスポートするSQL文のテキスト。

username

SQLの解析に使用されるユーザー・スキーマの名前。デフォルトはSYSです。

bind_list

文に関連付けられているバインド値のリスト。

exportEnvironment

コンパイル環境をエクスポートする必要がある場合は、TRUEを指定します。

exportMetadata

SQLで参照されているオブジェクトの定義をエクスポートする必要がある場合は、TRUEを指定します。

exportData

SQLで参照されているオブジェクトのデータをエクスポートする必要がある場合は、TRUEを指定します。

samplingPercent

TRUEの場合は、ダンプ・ファイルの作成に使用するサンプリングのパーセントを指定します。

ctrlOptions

不透明な制御パラメータ。

timeLimit

SQLテスト・ケースのエクスポートにかける時間。

testcaseName

SQLテスト・ケースの名前(オプション)。この名前は、生成されたすべてのスクリプトの接頭辞に使用されます。

testcaseMetadata

結果として得られるテスト・ケース。

incident_id

違反SQLが含まれているインシデントID。

sql_id

カーソル・キャッシュ内の文の識別子。



EXPORT_SQL_TESTCASE_DIR_BY_INCファンクション

このファンクションは、引数として渡されるインシデントIDに対応するSQLテスト・ケースを生成します。また、引数として渡されるディレクトリ内に、スクリプトおよびダンプ・ファイルのセットを作成します。

構文

DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_INC (
    incident_id        IN   NUMBER,
    directory          IN   VARCHAR2,
    exportEnvironment  IN   VARCHAR2 := 'TRUE',
    exportMetadata     IN   VARCHAR2 := 'TRUE',
    exportData         IN   VARCHAR2 := 'FALSE',
    samplingPercent    IN   VARCHAR2 := '100',
    ctrlOptions        IN   VARCHAR2 := NULL)
 RETURN BOOLEAN;

パラメータ

表123-20 EXPORT_SQL_TESTCASE_DIR_BY_INCファンクションのパラメータ

パラメータ 説明

incident_id

違反SQLが含まれているインシデントID。

directory

生成された様々なファイルを保存するディレクトリ。

exportEnvironment

コンパイル環境をエクスポートする必要がある場合は、TRUEを指定します。

exportMetadata

SQLで参照されているオブジェクトの定義をエクスポートする必要がある場合は、TRUEを指定します。

exportData

SQLで参照されているオブジェクトのデータをエクスポートする必要がある場合は、TRUEを指定します。

samplingPercent

TRUEの場合は、ダンプ・ファイルの作成に使用するサンプリングのパーセントを指定します。

ctrlOptions

不透明な制御パラメータ。



EXPORT_SQL_TESTCASE_DIR_BY_TXTファンクション

このファンクションは、引数として渡されるSQLに対応するSQLテスト・ケースを生成します。また、引数として渡されるディレクトリ内に、スクリプトおよびダンプ・ファイルのセットを作成します。

構文

DBMS_SQLDIAG.EXPORT_SQL_TESTCASE_DIR_BY_TXT (
    incident_id        IN   NUMBER,
    directory          IN   VARCHAR2,
    sql_text           IN   CLOB,
    user_name          IN   VARCHAR2 := 'SYS',
    exportEnvironment  IN   VARCHAR2 := 'TRUE',
    exportMetadata     IN   VARCHAR2 := 'TRUE',
    exportData         IN   VARCHAR2 := 'FALSE',
    samplingPercent    IN   VARCHAR2 := '100',     ctrlOptions        IN   VARCHAR2 := NULL)
  RETURN BOOLEAN;

パラメータ

表123-21 EXPORT_SQL_TESTCASE_DIR_BY_TXTファンクションのパラメータ

パラメータ 説明

incident_id

違反SQLが含まれているインシデントID。

directory

生成された様々なファイルを保存するディレクトリ。

sql_text

記述するSQL文のテキスト。

username

SQLの解析に使用されるユーザー・スキーマの名前。デフォルトはSYSです。

exportEnvironment

コンパイル環境をエクスポートする必要がある場合は、TRUEを指定します。

exportMetadata

SQLで参照されているオブジェクトの定義をエクスポートする必要がある場合は、TRUEを指定します。

exportData

SQLで参照されているオブジェクトのデータをエクスポートする必要がある場合は、TRUEを指定します。

samplingPercent

TRUEの場合は、ダンプ・ファイルの作成に使用するサンプリングのパーセントを指定します。

ctrlOptions

不透明な制御パラメータ。



GET_SQLファンクション

このファンクションは、指定したインシデントIDに関連付けられているトレース・ファイルからsql_setrowをロードします。

構文

DBMS_SQLDIAG.GET_SQL (
    incident_id  IN     VARCHAR2)
  RETURN SQLSET_ROW;

パラメータ

表123-22 GET_SQLファンクションのパラメータ

パラメータ 説明

incident_id

インシデントの識別子。



INCIDENTID_2_SQLプロシージャ

このプロシージャは、インシデントIDのsql_setrowを初期化します。

構文

DBMS_SQLDIAG.INCIDENTID_2_SQL (
    incident_id   IN     VARCHAR2,
    sql_stmt      OUT    SQLSET_ROW,
    problem_type  OUT    NUMBER,
    err_code      OUT    BINARY_INTEGER,
    err_mesg      OUT    VARCHAR2);

パラメータ

表123-23 INCIDENTID_2_SQLプロシージャのパラメータ

パラメータ 説明

incident_id

インシデントの識別子。

sql_stmt

結果として得られるSQL。

problem_type

SQL問題の暫定タイプ(現時点では、PROBLEM_TYPE_COMPILATION_ERRORおよびPROBLEM_TYPE_EXECUTION_ERROR)。

err_code

エラー・コード。存在しない場合はNULLに設定されます。

err_msg

エラー・メッセージ。存在しない場合はNULLに設定されます。



INTERRUPT_DIAGNOSIS_TASKプロシージャ

このプロシージャは、診断タスクを中断します。

構文

DBMS_SQLDIAG.INTERRUPT_DIAGNOSIS_TASK (
    taskname        IN   VARCHAR2);

パラメータ

表123-24 INTERRUPT_DIAGNOSIS_TASKプロシージャのパラメータ

パラメータ 説明

taskname

タスクの名前。



PACK_STGTAB_SQLPATCHプロシージャ

このプロシージャは、CREATE_STGTAB_SQLPATCHプロシージャをコールして作成されたステージング表にSQLパッチをパックします。

構文

DBMS_SQLDIAG.UPPACK_STGTAB_SQLPATCH (
   patch_name            IN  VARCHAR2 := '%',
   patch_category        IN  VARCHAR2 := 'DEFAULT',
   staging_table_name    IN  VARCHAR2,
   staging_schema_owner  IN  VARCHAR2 := NULL);

パラメータ

表123-25 PACK_STGTAB_SQLPATCHプロシージャのパラメータ

パラメータ 説明

patch_name

パックするパッチの名前(%ワイルドカードを使用可、大/小文字区別)。

patch_category

パックするパッチのカテゴリ(%ワイルドカードを使用可、大/小文字区別)。

staging_table_name

(必須)使用する表の名前(大/小文字区別)。

staging_schema_owner

表が存在するスキーマ(大/小文字区別)。現行のスキーマの場合はNULL


使用上の注意


REPORT_DIAGNOSIS_TASKファンクション

このファンクションは、診断タスクをレポートします。また、必要なレポートが含まれているCLOBを戻します。

構文

DBMS_SQLDIAG.REPORT_DIAGNOSIS_TASK (
    taskname           IN   VARCHAR2,
    type               IN   VARCHAR2  := TYPE_TEXT,
    level              IN   VARCHAR2  := LEVEL_TYPICAL,
    section            IN   VARCHAR2  := SECTION_ALL,
    object_id          IN   NUMBER    := NULL,
    result_limit       IN   NUMBER    := NULL,
    owner_name         IN   VARCHAR2  := NULL)
  RETURN CLOB;

パラメータ

表123-26 REPORT_DIAGNOSIS_TASKファンクションのパラメータ

パラメータ 説明

taskname

レポートするタスクの名前。

type

レポートのタイプ。 設定可能な値は、TEXT、HTMLおよびXMLです(表123-4「DBMS_SQLDIAGの定数: レポート・タイプ(設定可能な値)の定数」を参照)。

level

リコメンデーションの形式。 設定可能な値は、TYPICAL、BASICおよびALLです(表123-5「DBMS_SQLDIAGの定数: レポート・レベル(設定可能な値)の定数」を参照)。

section

レポート内の特定のセクション。 設定可能な値は、SUMMARY、FINDINGS、PLAN、INFORMATION、ERRORおよびALLです(表123-6「DBMS_SQLDIAGの定数: レポート・セクション(設定可能な値)の定数」を参照)。

object_id

SQLチューニング・セット(STS)の特定の文を表すアドバイザ・フレームワーク・オブジェクトの識別子。

result_limit

レポート生成の対象となる、STS内の文の数。

owner_name

使用するタスク実行の名前。NULLの場合は、最後のタスク実行に関するレポートが生成されます。



RESET_DIAGNOSIS_TASKプロシージャ

このプロシージャは、診断タスクをリセットします。

構文

DBMS_SQLDIAG.RESET_DIAGNOSIS_TASK (
    taskname        IN   VARCHAR2);

パラメータ

表123-27 RESET_DIAGNOSIS_TASKプロシージャのパラメータ

パラメータ 説明

taskname

タスクの名前。



RESUME_DIAGNOSIS_TASKプロシージャ

このプロシージャは、診断パスを再開します。

構文

DBMS_SQLDIAG.RESUME_DIAGNOSIS_TASK (
    taskname        IN   VARCHAR2);

パラメータ

表123-28 RESUME_DIAGNOSIS_TASKプロシージャのパラメータ

パラメータ 説明

taskname

タスクの名前。



SET_DIAGNOSIS_TASK_PARAMETERプロシージャ

このプロシージャは、VARCHAR2型のSQL診断パラメータの値を更新するためにコールします。このプロシージャをコールする前に、タスクを初期状態に設定する必要があります。このプロシージャによって設定可能な診断パラメータは、次のとおりです。

構文

DBMS_SQLDIAG.SET_DIAGNOSIS_TASK_PARAMETER (
    taskname           IN   VARCHAR2,
    parameter          IN   VARCHAR2,    value              IN   NUMBER);

パラメータ

表123-29 SET_DIAGNOSIS_TASK_PARAMETERプロシージャのパラメータ

パラメータ 説明

taskname

実行するタスクの識別子。

parameter

設定するパラメータの名前。

value

指定したパラメータの新しい値。



UNPACK_STGTAB_SQLPATCHプロシージャ

このプロシージャは、PACK_STGTAB_SQLPATCHプロシージャをコールして移入されたステージング表からアンパックします。ステージング表に保存されているパッチ・データを使用して、システム上にパッチを作成します。パッチがすでに存在する場合、ユーザーは既存のパッチをパッチ・データに置き換えることもできます。 このとき、同じ文を参照するパッチは、名前が同じ場合にのみ置き換えることができます。(「ACCEPT_SQL_PATCHファンクションおよびプロシージャ」を参照)。

構文

DBMS_SQLDIAG.UPPACK_STGTAB_SQLPATCH (
   patch_name            IN  VARCHAR2 := '%',
   patch_category        IN  VARCHAR2 := '%',
   replace               IN  BOOLEAN,
   staging_table_name    IN  VARCHAR2,
   staging_schema_owner  IN  VARCHAR2 := NULL);

パラメータ

表123-30 UNPACK_STGTAB_SQLPATCHプロシージャのパラメータ

パラメータ 説明

patch_name

アンパックするパッチの名前(%ワイルドカードを使用可、大/小文字区別)。

patch_category

アンパックするパッチのカテゴリ(%ワイルドカードを使用可、大/小文字区別)。

replace

すでに存在するパッチを置換します。ステージング表のパッチの名前と、別のSQLのアクティブなパッチの名前が同じ場合、パッチは置換できません。すでに存在するパッチを作成しようとすると、エラーが発生します。

staging_table_name

(必須)使用する表の名前(大/小文字区別)。

staging_schema_owner

表が存在するスキーマ(大/小文字区別)。現行のスキーマの場合はNULL


使用上の注意