DBMS_SQLDIAGパッケージは、SQL診断機能のインタフェースを提供します。
|
関連項目: 診断データの管理の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
この章では、次の項目について説明します。
重大なエラーが発生してSQL文が失敗した場合は、SQL修復アドバイザを実行して、失敗した文の修復を試行できます。この項では、次の項目について説明します。
SQL修復アドバイザの概要
SQL修復アドバイザは、重大なエラーが発生してSQL文が失敗した場合に実行します。このアドバイザによって、文が分析され、多くの場合、文を修復するためにパッチの適用が推奨されます。リコメンデーションを実装すると、適用されたSQLパッチによって、問合せオプティマイザで将来実行する場合の代替実行計画が選択され、失敗が回避されます。
SQL修復アドバイザの実行
SQL修復アドバイザを実行するには、CREATE_DIAGNOSIS_TASKを使用して診断タスクを作成し、EXECUTE_DIAGNOSIS_TASKを使用してその診断タスクを実行します。SQL修復アドバイザは、まず重大なエラーを再現し、次にSQLパッチの形式での対処方法の生成を試行します。
問題が発生した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修復アドバイザを使用して、この重大なエラーを修復します。
診断タスクの作成
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);
診断タスクの実行
SQL修復アドバイザの対処方法生成および分析フェーズを実行するには、CREATE_DIAGNOSIS_TASKで戻されたタスクIDを使用して、DBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASKをコールします。多少の遅延後に、SQL修復アドバイザに戻ります。SQL修復アドバイザは、その実行の一環として検索結果の記録を残し、この記録には、SQL修復アドバイザのレポート機能を使用してアクセス可能です。
DBMS_SQLDIAG.EXECUTE_DIAGNOSIS_TASK (t_id);
診断タスクのレポート
診断タスクの分析には、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;
/
パッチの適用
レポートでパッチが推奨されている場合は、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);
パッチのテスト
パッチを受け入れたため、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パッケージでは、次の表に示す定数が使用されます。
表152-1「DBMS_SQLDIAGの定数: SQLDIAGアドバイザの名前」は、アドバイザのフレームワークに表示されるSQL修復アドバイザの名前について説明しています。
表152-2「DBMS_SQLDIAGの定数: SQLDIAGアドバイザのタスク・スコープ・パラメータの値」は、SQLDIAGアドバイザのタスク・スコープ・パラメータの値について説明しています。
表152-3「DBMS_SQLDIAGの定数: SQLDIAGアドバイザのtime_limit定数」は、SQLDIAGアドバイザのtime_limit定数について説明しています。
表152-4「DBMS_SQLDIAGの定数: レポート・タイプ(設定可能な値)の定数」は、レポートで使用可能な書式について説明しています。
表152-5「DBMS_SQLDIAGの定数 - レポート・レベル(設定可能な値)の定数」は、レポートで使用可能な詳細レベルについて説明しています。
表152-6「DBMS_SQLDIAGの定数: レポート・セクション(設定可能な値)の定数」は、(カンマで区切られた)使用可能なレポート・セクションについて説明しています。
表152-7「DBMS_SQLDIAGの定数: 問題のタイプの定数」は、CREATE_DIAGNOSIS_TASKファンクションのproblem_typeパラメータに設定可能な値について説明しています。
表152-8「DBMS_SQLDIAGの定数: 検索結果のフィルタの定数」は、_sql_findings_modeパラメータに設定可能な値について説明しています。
表152-1 DBMS_SQLDIAGの定数: SQLDIAGアドバイザの名前
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
'SQL Repair Advisor' |
アドバイザのフレームワークに表示されるSQL修復アドバイザの名前 |
表152-2 DBMS_SQLDIAGの定数: SQLDIAGアドバイザのタスク・スコープ・パラメータの値
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
' |
問題の詳細な分析(実行に時間がかかる場合があります) |
|
|
|
' |
問題の簡単な分析 |
表152-3 DBMS_SQLDIAGの定数: SQLDIAGアドバイザのtime_limit定数
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
1800 |
問題の分析に対するデフォルトの時間制限 |
表152-4 DBMS_SQLDIAGの定数: レポート・タイプ(設定可能な値)の定数
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
'HTML' |
REPORT_DIAGNOSIS_TASKファンクションによるレポート(HTML形式) |
|
|
|
'TEXT' |
REPORT_DIAGNOSIS_TASKファンクションによるレポート(テキスト形式) |
|
|
|
'XML' |
REPORT_DIAGNOSIS_TASKファンクションによるレポート(XML形式) |
表152-5 DBMS_SQLDIAGの定数 - レポート・レベル(設定可能な値)の定数
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
'ALL' |
スキップされた文に関する注釈を含む詳細なレポート。 |
|
|
|
'BASIC' |
分析対象の各文に関する情報(実装されていないリコメンデーションなど)を表示します。 |
|
|
|
'TYPICAL' |
簡単なレポートに、アドバイザによって実行されるアクションに関する情報のみが表示されます。 |
表152-6 DBMS_SQLDIAGの定数: レポート・セクション(設定可能な値)の定数
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
'ALL' |
すべての文 |
|
|
|
'ERRORS' |
エラーが発生した文 |
|
|
|
'FINDINGS' |
チューニングの結果 |
|
|
|
'INFORMATION' |
一般的な情報 |
|
|
|
'PLANS' |
EXPLAIN PLAN |
|
|
|
'SUMMARY' |
サマリー情報 |
表152-7 DBMS_SQLDIAGの定数: 問題のタイプの定数
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
1 |
パフォーマンスに問題があるとユーザーが推定しています。 |
|
|
|
2 |
問合せの結果に一貫性がないとユーザーが推定しています。 |
|
|
|
3 |
コンパイル中にクラッシュしたことをユーザーが確認しました。 |
|
|
|
4 |
実行中にクラッシュしたことをユーザーが確認しました。 |
|
|
|
5 |
すべての代替計画を検索するユーザー。 |
表152-8 DBMS_SQLDIAGの定数: 検索結果のフィルタの定数
| 定数 | タイプ | 値 | 説明 |
|---|---|---|---|
|
|
|
1 |
検索可能なすべての結果を表示します。 |
|
|
|
2 |
構造に対する検証ルールのステータスを表示します。 |
|
|
|
3 |
問合せで使用される機能のみを表示します。 |
|
|
|
4 |
アドバイザによって生成された代替計画を表示します。 |
|
|
|
5 |
2つの計画の差異を表示します。 |
|
|
|
6 |
テスト用のマスク情報。 |
|
|
|
7 |
機能の使用履歴を表示します。 |
|
|
|
8 |
アドバイザによって生成された代替計画を表示します。 |
パッチのパック/アンパック
パッチは、パッケージ内のサブプログラムで提供されているステージング表を使用して、あるシステムからエクスポートして別のシステムにインポートできます。SQL診断セットの場合と同様に、ステージング表に挿入する操作は「パック」、ステージング表のデータからパッケージを作成する操作は「アンパック」と呼ばれます。
DBAは、パック/アンパックを次のように実行する必要があります。
CREATE_STGTAB_SQLPATCHをコールして、ユーザー'SH'が所有するステージング表を作成します。
EXEC DBMS_SQLDIAG.CREATE_STGTAB_SQLPATCH(
table_name => 'STAGING_TABLE',
schema_name => 'SH');
PACK_STGTAB_SQLPATCHを1回以上コールして、ステージング表にSQLパッチのデータを書き込みます。この場合、現行のスキーマ所有者が所有するステージング表に、DEFAULTカテゴリ内のすべてのSQLパッチのデータをコピーします。
EXEC DBMS_SQLDIAG.PACK_STGTAB_SQLPATCH(
staging_table_name => 'STAGING_TABLE');
この場合、現行のスキーマ所有者が所有するステージング表には、1つのSQLパッチSP_FIND_EMPLOYEEのみがコピーされます。
EXEC DBMS_SQLDIAG.PACK_STGTAB_SQLPATCH(
patch_name => 'SP_FIND_EMPLOYEE',
staging_table_name => 'STAGING_TABLE');
これによって、データポンプ、インポート・コマンドとエクスポート・コマンドまたはデータベース・リンクのいずれかを使用して、ステージング表を別のシステムに移動できます。
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',
表152-9 DBMS_SQLDIAGパッケージのサブプログラム
| サブプログラム | 説明 |
|---|---|
|
ACCEPT_SQL_PATCHファンクションおよびプロシージャ |
指定したSQL診断タスクで推奨されているとおりに、推奨されたSQLパッチを受け入れます。 |
|
|
既存のSQLパッチ・オブジェクトの特定の属性を変更します。 |
|
|
診断タスクを取り消します。 |
|
|
このファンクションは、1つのSQL文を診断するために診断タスクを作成します。 |
|
|
システム間でのSQLパッチの転送に使用するステージング表を作成します。 |
|
|
診断タスクを削除します。 |
|
|
データベースから名前付きSQLパッチを削除します。 |
|
|
診断タスクを実行します。 |
|
|
SQLテスト・ケースについて記述します。 |
|
|
SQLテスト・ケースをディレクトリにエクスポートします。 |
|
EXPORT_SQL_TESTCASE_DIR_BY_INCファンクション |
引数として渡されるインシデントIDに対応するSQLテスト・ケースを生成します。 |
|
EXPORT_SQL_TESTCASE_DIR_BY_TXTファンクション |
引数として渡されるSQLに対応するSQLテスト・ケースを生成します。 |
|
|
指定したバグ番号に対する修正制御の値を戻します。 |
|
|
SQLテスト・ケースをインポートします。 |
|
|
SQLテスト・ケースをスキーマにインポートします。 |
|
|
インシデントIDの |
|
INTERRUPT_DIAGNOSIS_TASKプロシージャ |
診断タスクを中断します。 |
|
|
テスト・ケース・ビルダー(TCB)・ファイルから |
|
|
CREATE_STGTAB_SQLPATCHプロシージャによって作成されたステージング表へのSQLパッチ。 |
|
|
診断タスクをレポートします。 |
|
|
診断タスクをレポートします。 |
|
|
診断タスクをリセットします。 |
|
|
診断タスクを再開します。 |
|
SET_DIAGNOSIS_TASK_PARAMETERプロシージャ |
診断タスク・パラメータを設定します。 |
|
|
PACK_STGTAB_SQLPATCHプロシージャをコールして移入されたステージング表からアンパックし、ステージング表に格納されているパッチのデータを使用して、システムにパッチを作成します。 |
このプロシージャは、指定した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);
パラメータ
表152-10 ACCEPT_SQL_PATCHファンクションおよびプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL診断タスクの名前。 |
|
|
診断タスクに関連付けられているSQL文を示すアドバイザ・フレームワーク・オブジェクトの識別子。 |
|
|
パッチの名前。二重引用符を含むことはできません。大文字と小文字が区別されます。指定しない場合は、システムによってSQLパッチに一意の名前が生成されます。 |
|
|
SQLパッチの目的を記述したユーザー指定の文字列。記述の最大サイズは500です。 |
|
|
カテゴリ名であり、このパッチを使用するセッションに対するセッションの |
|
task_owner |
診断タスクの所有者。これはオプションのパラメータで、他のユーザーが所有する診断タスクに関連付けられているSQLパッチを受け入れるためには指定する必要があります。現行のユーザーがデフォルト値です。 |
|
|
パッチがすでに存在する場合にこの引数を |
|
|
|
このプロシージャは、既存のSQLパッチ・オブジェクトの特定の属性を変更します。
パラメータ
表152-11 ALTER_SQL_PATCHプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
変更するSQLパッチの名前。 |
|
|
変更するSQLパッチの名前。有効な値は、次のとおりです。
このパラメータは必須で、大/小文字が区別されます。 |
|
|
属性の新しい値。有効な属性値については、 |
このファンクションは、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;
パラメータ
表152-13 CREATE_DIAGNOSIS_TASKファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
SQL文のテキスト。 |
|
|
バインド値のセット。 |
|
|
診断対象の文またはsqlsetがあるユーザーの名前。 |
|
|
診断スコープ(制限付き/包括的)。 |
|
|
診断セッションの最大継続時間(秒)。 |
|
|
診断タスク名(オプション)。 |
|
description |
最大256文字のSQL診断セッションの記述。 |
|
|
タスクの目標を決定します。有効な値は、次のとおりです。
|
|
|
文の識別子。 |
|
|
SQL実行計画のハッシュ値。 |
|
|
sqlset名。 |
|
|
SQLチューニング・セット(STS)からSQLをフィルタするためのSQL述語。 |
|
|
オブジェクト・フィルタ。 |
|
|
選択したSQLのorder-by句。 |
|
|
ランキング・メジャーの合計のパーセント。 |
|
|
フィルタ処理またはランク付けが済んでいるSQLの先頭から数件取得されるSQL文。 |
|
|
計画フィルタ。計画(
|
|
|
sqlsetの所有者。現行のスキーマ所有者の場合はNULL。 |
このプロシージャは、システム間でのSQLパッチの転送に使用するステージング表を作成します。
このプロシージャは、SQLテスト・ケースをディレクトリにエクスポートします。
構文
この変数は、SQL情報とともに指定する必要があります。
DBMS_SQLDIAG.EXPORT_SQL_TESTCASE (
directory IN VARCHAR2,
sql_text IN CLOB,
user_name IN VARCHAR2 := NULL,
bind_list IN sql_binds := NULL,
exportEnvironment IN BOOLEAN := TRUE,
exportMetadata IN BOOLEAN := TRUE,
exportData IN BOOLEAN := FALSE,
exportPkgbody IN BOOLEAN := FALSE,
samplingPercent IN NUMBER := 100,
ctrlOptions IN VARCHAR2 := NULL,
timeLimit IN NUMBER := 0,
testcase_name IN VARCHAR2 := NULL,
testcase IN OUT NOCOPY CLOB,
preserveSchemaMapping IN BOOLEAN := FALSE,
version IN VARCHAR2 := 'COMPATIBLE');
この変数は、インシデント・ファイルからSQL情報を抽出します。
DBMS_SQLDIAG.EXPORT_SQL_TESTCASE (
directory IN VARCHAR2,
incident_id IN VARCHAR2,
exportEnvironment IN BOOLEAN := TRUE,
exportMetadata IN BOOLEAN := TRUE,
exportData IN BOOLEAN := FALSE,
exportPkgbody IN BOOLEAN := FALSE,
samplingPercent IN NUMBER := 100,
ctrlOptions IN VARCHAR2 := NULL,
timeLimit IN NUMBER :=
DBMS_SQLDIAG.TIME_LIMIT_DEFAULT,
testcase_name IN VARCHAR2 := NULL,
testcase IN OUT NOCOPY CLOB,
preserveSchemaMapping IN BOOLEAN := FALSE);
この変数を使用すると、カーソル・キャッシュに存在するカーソルから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,
exportPkgbody IN BOOLEAN := FALSE,
samplingPercent IN NUMBER := 100,
ctrlOptions IN VARCHAR2 := NULL,
timeLimit IN NUMBER :=
DBMS_SQLDIAG.TIME_LIMIT_DEFAULT,
testcase_name IN VARCHAR2 := NULL,
testcase IN OUT NOCOPY CLOB,
preserveSchemaMapping IN BOOLEAN := FALSE);
パラメータ
表152-19 EXPORT_SQL_TESTCASEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
生成された様々なファイルを保存するディレクトリ。 |
|
|
エクスポートするSQL文のテキスト。 |
|
|
違反SQLが含まれているインシデントID。 |
|
|
カーソル・キャッシュ内の文の識別子。 |
|
|
SQLの解析に使用されるユーザー・スキーマの名前。デフォルトは |
|
|
文に関連付けられているバインド値のリスト。 |
|
|
コンパイル環境をエクスポートする必要がある場合は、 |
|
|
SQLで参照されているオブジェクトの定義をエクスポートする必要がある場合は、 |
|
|
SQLで参照されているオブジェクトのデータをエクスポートする必要がある場合は、 |
|
|
SQLで参照されているパッケージの本体をエクスポートする場合は、 |
|
|
|
|
|
不透明な制御パラメータ。たとえば、3回実行するには、文字列
|
|
|
SQLテスト・ケースのエクスポートにかける時間。 |
|
|
SQLテスト・ケースの名前(オプション)。この名前は、生成されたすべてのスクリプトの接頭辞に使用されます。 |
|
|
結果として得られるテスト・ケース。 |
|
|
スキーマ(単数または複数)が元の環境からテスト環境に再マップされない場合は、 |
|
|
抽出されるデータベース・オブジェクトのバージョン。このオプションは、
|
使用上の注意
SQLテスト・ケースは、別のマシンでSQLの失敗を再現するために必要なファイルのセットを生成します。次のものが含まれます。
スキーマ・オブジェクトおよび統計情報を含むダンプ・ファイル(.dmp)
文のEXPLAIN PLAN(拡張モード)
問題となる文で収集した診断情報
オブジェクトを再ロードするために実行する重要なスクリプト
ソースのシステム統計情報をリプレイするSQLスクリプト
SQLテスト・ケースについて記述したコンテンツ・ファイルの表
メタデータ(xxxxmain.xml)
TCBの使用方法を説明するREADME.txtファイル
文(ol.xml)で使用されるアウトライン
エクスポートするdb/env(prmimp.sql)内のパラメータ・セットのリスト
SQL監視レポート(smrpt.html)(存在する場合)
AWRレポート(awrrpt.html)(存在する場合)
当該の文で使用されるバインドのリスト(bndlst.xml)
ユーザーSYSでテスト・ケース・ビルダー(TCB)を実行することはできません。かわりに、DBAロールを付与できる別のユーザーを使用してください。
TCBのデフォルト設定では、データはエクスポートされません。ただし、最適ではない結果を診断するためなどにデータが必要な場合があります。データをエクスポートするには、exportData=>TRUEに設定してEXPORT_SQL_TESTCASEをコールします(importData=>FALSEでOFFに設定しないかぎり、データはデフォルトでインポートされます)。
TCBはデフォルトでPL/SQLパッケージ仕様部を含みますが、PL/SQLパッケージ本体は含みません。しかし、PL/SQLファンクションを起動するため、またはパッケージでVirtual Private Database(VPD)機能が定義されているためパッケージ本体が必要になる場合もあります。PL/SQLパッケージ本体をエクスポートするには、exportPkgbody=>TRUEに設定して、EXPORT_SQL_TESTCASEをコールします。PL/SQLパッケージ本体をインポートするには、importPkgbody=>TRUEに設定して、IMPORT_SQL_TESTCASEプロシージャをコールします。
オブジェクトの統計履歴をエクスポートするには、データベース互換性を12.0以上に設定する必要があります。
このプロシージャでは、グローバル一時表(GTT)のデータおよび統計はエクスポートされません。
例
<parameters>親タグを使用するか、またはその親タグを使用しないでカプセル化されたctrlOptionsで、ユーザーは複数のパラメータを指定できます。
<parameters>タグを使用する場合
<parameters> <parameter name="capture"> with_runtime_info </parameter> <parameter name="mexec_count"> 1 </parameter></parameters>
<parameters>タグを使用しない場合
<parameter name="capture"> with_runtime_info </parameter> <parameter name="mexec_count"> 1 </parameter>'
このファンクションは、引数として渡されるインシデント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;
パラメータ
表152-20 EXPORT_SQL_TESTCASE_DIR_BY_INCファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
違反SQLが含まれているインシデントID。インシデントの詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。 |
|
|
生成されたファイルのディレクトリ・パス |
|
|
コンパイル環境をエクスポートする必要がある場合は、 |
|
|
SQLで参照されているオブジェクトの定義をエクスポートする必要がある場合は、 |
|
|
SQLで参照されているオブジェクトのデータをエクスポートする必要がある場合は、 |
|
|
|
|
|
不透明な制御パラメータ。たとえば、3回実行するには、文字列
|
このファンクションは、引数として渡される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;
パラメータ
表152-21 EXPORT_SQL_TESTCASE_DIR_BY_TXTファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
違反SQLが含まれているインシデントID。 |
|
|
生成された様々なファイルを保存するディレクトリ。 |
|
|
記述するSQL文のテキスト。 |
|
|
SQLの解析に使用されるユーザー・スキーマの名前。デフォルトは |
|
|
コンパイル環境をエクスポートする必要がある場合は、 |
|
|
SQLで参照されているオブジェクトの定義をエクスポートする必要がある場合は、 |
|
|
SQLで参照されているオブジェクトのデータをエクスポートする必要がある場合は、 |
|
|
|
|
|
不透明な制御パラメータ。たとえば、3回実行するには、文字列
|
このプロシージャは、SQLテスト・ケースをスキーマにインポートします。
構文
この変数には、ソース・ディレクトリとSQLテスト・ケース・メタデータ・オブジェクト(XML形式)が必要です。
DBMS_SQLDIAG.IMPORT_SQL_TESTCASE (
directory IN VARCHAR2,
sqlTestCase IN CLOB,
importEnvironment IN BOOLEAN := TRUE,
importMetadata IN BOOLEAN := TRUE,
importData IN BOOLEAN := TRUE,
importPkgbody IN BOOLEAN := FALSE,
importDiagnosis IN BOOLEAN := TRUE,
ignoreStorage IN BOOLEAN := TRUE,
ctrlOptions IN VARCHAR2 := NULL,
preserveSchemaMapping IN BOOLEAN := FALSE);
この変数には、SQLテスト・ケース・メタデータ・ファイルのソース・ディレクトリ名が必要です。
DBMS_SQLDIAG.IMPORT_SQL_TESTCASE (
directory IN VARCHAR2,
filename IN VARCHAR2,
importEnvironment IN BOOLEAN := TRUE,
importMetadata IN BOOLEAN := TRUE,
importData IN BOOLEAN := TRUE,
importPkgbody IN BOOLEAN := FALSE,
importDiagnosis IN BOOLEAN := TRUE,
ignoreStorage IN BOOLEAN := TRUE,
ctrlOptions IN VARCHAR2 := NULL,
preserveSchemaMapping IN BOOLEAN := FALSE);
パラメータ
表152-24 IMPORT_SQL_TESTCASEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
テスト・ケース・ファイルがあるディレクトリ。 |
|
|
SQLテスト・ケースについて記述したXML文書を含むファイルの名前。 |
|
|
コンパイル環境をインポートする必要がある場合は、 |
|
|
SQLで参照されているオブジェクトの定義をインポートする必要がある場合は、 |
|
|
SQLで参照されているオブジェクトのデータをインポートする必要がある場合は、 |
|
|
SQLで参照されているパッケージの本体をインポートする場合は、 |
|
|
タスクに関連付けられた診断情報をインポートする必要がある場合は、 |
|
|
記憶域の属性を無視する必要がある場合は、 |
|
|
不透明な制御パラメータであり、この
|
|
|
スキーマ(単数または複数)が元の環境からテスト環境に再マップされない場合は、 |
使用上の注意
SQLテスト・ケースは、別のマシンでSQLの失敗を再現するために必要なファイルのセットを生成します。次のものが含まれます。
スキーマ・オブジェクトおよび統計情報を含むダンプ・ファイル(.dmp)
文のEXPLAIN PLAN(拡張モード)
問題となる文で収集した診断情報
オブジェクトを再ロードするために実行する重要なスクリプト
ソースのシステム統計情報をリプレイするSQLスクリプト
SQLテスト・ケースについて記述したコンテンツ・ファイルの表
メタデータ(xxxxmain.xml)
TCBの使用方法を説明するREADME.txtファイル
文(ol.xml)で使用されるアウトライン
エクスポートするdb/env(prmimp.sql)内のパラメータ・セットのリスト
SQL監視レポート(smrpt.html)(存在する場合)
AWRレポート(awrrpt.html)(存在する場合)
当該の文で使用されるバインドのリスト(bndlst.xml)
ユーザーSYSでテスト・ケース・ビルダー(TCB)を実行することはできません。かわりに、SYSDBA権限を付与できる別のユーザーを使用してください。
TCBのデフォルト設定では、データはエクスポートされません。ただし、最適ではない結果を診断するためなどにデータが必要な場合があります。データをエクスポートするには、exportData=>TRUEに設定してEXPORT_SQL_TESTCASEプロシージャをコールします(importData=>FALSEでOFFに設定しないかぎり、データはデフォルトでインポートされます)。
TCBはデフォルトでPL/SQLパッケージ仕様部を含みますが、PL/SQLパッケージ本体は含みません。しかし、PL/SQLファンクションを起動するため、またはパッケージでVirtual Private Database(VPD)機能が定義されているためパッケージ本体が必要になる場合もあります。PL/SQLパッケージ本体をエクスポートするには、exportPkgbody=>TRUEに設定して、EXPORT_SQL_TESTCASEプロシージャをコールします。PL/SQLパッケージ本体をインポートするには、importPkgbody=>TRUEに設定して、IMPORT_SQL_TESTCASEプロシージャをコールします。
EXPORT_SQL_TESTCASEプロシージャの起動時に使用されるcapture値は、このプロシージャをコールする際に使用する必要があります。
このプロシージャは、インシデントIDのsql_setrowを初期化します。
このファンクションは、テスト・ケース・ビルダー・ファイルからSQLSETをロードします。
このプロシージャは、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);
使用上の注意
ステージング表に対するADMINISTER SQL PLAN MANAGEMENT OBJECT権限およびINSERT権限が必要です。
デフォルトでは、カテゴリDEFAULT内のすべてのSQLパッチを移動します。詳細は、「例」を参照してください。このサブプログラムは各SQLパッチをパックした後にCOMMITを発行するため、実行中にエラーが発生した場合、ステージング表にいくつかのパッチが残る可能性があります。
このプロシージャは、SQLテスト・ケースの再生成を自動化します。
構文
DBMS_SQLDIAG.REPLAY_SQL_TESTCASE ( directory IN VARCHAR2, filename IN VARCHAR2, ctrlOptions IN VARCHAR2 := NULL, format IN VARCHAR2 := 'TEXT'); DBMS_SQLDIAG.REPLAY_SQL_TESTCASE ( directory IN VARCHAR2, sqlTestCase IN CLOB, ctrlOptions IN VARCHAR2 := NULL, format IN VARCHAR2 := 'TEXT');
パラメータ
表152-29 REPLAY_SQL_TESTCASEプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
テスト・ケース・ファイルがあるディレクトリ。 |
|
|
SQLテスト・ケースについて記述したXML文書を含むファイルの名前。 |
|
|
不透明な制御パラメータ。たとえば、3回実行するには、文字列
|
|
|
SQLテスト・ケース。 |
|
|
リプレイ・レポートの形式。使用可能な形式は、 |
例
TCB Replay Mode: Execute
SELECT /* tcbdynpl_1 */ /*+ gather_plan_statistics */ * FROM (SELECT * FROM emp where emp.sal > 100) emp, dept WHERE emp.deptno = dept.deptno And emp.sal > 1000 /* tcbdynpl_1 */
Explain Plan
Plan Hash Value : 2219294842
-----------------------------------------------------------------
| Id | Operation | Name | Rows |
-----------------------------------------------------------------
| 0 | SELECT STATEMENT | | 13 |
| * 1 | HASH JOIN | | 13 |
| 2 | NESTED LOOPS | | |
| 3 | NESTED LOOPS | | 13 |
| 4 | STATISTICS COLLECTOR | | |
| 5 | TABLE ACCESS FULL | DEPT | 4 |
| * 6 | INDEX RANGE SCAN | EMP_IDX_DEPTNO | |
| * 7 | TABLE ACCESS BY INDEX ROWID | EMP | 3 |
| * 8 | TABLE ACCESS FULL | EMP | 13 |
-----------------------------------------------------------------
Predicate Information (identified by operation id):
------------------------------------------
* 1 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
* 6 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
* 7 - filter("EMP"."SAL">1000)
* 8 - filter("EMP"."SAL">1000)
Runtime Plan
Plan Hash Value : 2219294842
-------------------------------------------------------
| Id | Operation | Name | E-Card | A-Card |
-------------------------------------------------------
| 0 | SELECT STATEMENT | | | 0 |
| * 1 | HASH JOIN | | 13 | 0 |
| 2 | TABLE ACCESS FULL | DEPT | 4 | 0 |
| * 3 | TABLE ACCESS FULL | EMP | 13 | 0 |
-------------------------------------------------------
Predicate Information (identified by operation id):
------------------------------------------
* 1 - access("EMP"."DEPTNO"="DEPT"."DEPTNO")
* 3 - filter("EMP"."SAL">1000)
REPLAY Note:
-----------
- Replay used dynamic sampling
- Replay forced Dynamic plan
このファンクションは、診断タスクをレポートします。これは、必要なレポートが含まれている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;
パラメータ
表152-30 REPORT_DIAGNOSIS_TASKファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
レポートするタスクの名前。 |
|
|
レポートのタイプ。設定可能な値は、TEXT、HTMLおよびXMLです(表152-4「DBMS_SQLDIAGの定数: レポート・タイプ(設定可能な値)の定数」を参照)。 |
|
|
リコメンデーションの形式。設定可能な値は、TYPICAL、BASICおよびALLです(表152-5「DBMS_SQLDIAGの定数 - レポート・レベル(設定可能な値)の定数」を参照)。 |
|
|
レポート内の特定のセクション。設定可能な値は、SUMMARY、FINDINGS、PLAN、INFORMATION、ERRORおよびALLです(表152-6「DBMS_SQLDIAGの定数: レポート・セクション(設定可能な値)の定数」を参照)。 |
|
|
SQLチューニング・セット(STS)の特定の文を表すアドバイザ・フレームワーク・オブジェクトの識別子。 |
|
|
レポート生成の対象となる、STS内の文の数。 |
|
|
使用するタスク実行の名前。 |
このプロシージャは、VARCHAR2タイプのSQL診断パラメータの値を更新するためにコールします。このプロシージャをコールする前に、タスクを初期状態に設定する必要があります。このプロシージャによって設定可能な診断パラメータは、次のとおりです。
MODE: 診断スコープ(制限付き/包括的)。
_SQLDIAG_FINDING_MODE: レポート内の検索結果(設定可能な値については、「DBMS_SQLDIAGの定数: 検索結果のフィルタの定数」を参照)。
このプロシージャは、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);
パラメータ
表152-34 UPPACK_STGTAB_SQLPATCHプロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
アンパックするパッチの名前(%ワイルドカードを使用可、大/小文字区別)。 |
|
|
アンパックするパッチのカテゴリ(%ワイルドカードを使用可、大/小文字区別)。 |
|
|
すでに存在するパッチを置換します。ステージング表のパッチの名前と、別のSQLのアクティブなパッチの名前が同じ場合、パッチは置換できません。すでに存在するパッチを作成しようとすると、エラーが発生します。 |
|
|
(必須)使用する表の名前(大/小文字区別)。 |
|
|
表が存在するスキーマ(大/小文字区別)。現行のスキーマの場合は |