V$SQLからPLAN取得
忘れないようにメモ
--事前に実行するSQLに「/* Mark */」を埋め込んでおく
--文字列の代わりにサイトコードでもある程度可能?
--対象のSQL_TEXTを表示する場合コメント解除してください
SELECT /* myplan */
sql_plan.id
, lpad(' ', depth) || operation operation
, sql_plan.options
, sql_plan.object_name
, sql_plan.optimizer
, sql_plan.cost
, sql_plan.time
FROM
inner join (
select
hash_value
, address
, sql_text
from
v$sql v_sqlarea
where
--絞込みは時間でも埋め込んだTEXTでも可能
elapsed_time >= 10000000
--sql_text like '%/* aaa */%'
and sql_text not like '%myplan%'
) v_sql
on (
sql_plan.hash_value = v_sql.hash_value
and sql_plan.address = v_sql.address
)
START WITH
sql_plan.id = 0
CONNECT BY
(
PRIOR sql_plan.id = sql_plan.parent_id
AND PRIOR sql_plan.hash_value = sql_plan.hash_value
AND PRIOR sql_plan.child_number = sql_plan.child_number
)
ORDER SIBLINGS BY
sql_plan.id
, sql_plan.position