Oracle Database の set feedback on sql_id の使い方


概要

今更ですが、Oracle Database 18c から set feedback on sql_id を設定することによって SQL_ID を簡単に確認することができるようになっています。ちょっとした機能追加ですが、従来は v\$sql や v\$session などから確認していたところが不要になるので、検証等では意外と重宝しそうな気がしています。
ここではマニュアルを参考に、使い方を確認したいと思います。

使い方

使い方は簡単で、"set feedback XXX" の後ろに sql_id と追記するだけです。ちなみに、"set feedback off sql_id" とすれば「XX行が選択されました。」を抑止しつつ SQL_ID を出力してくれます。

 デフォルト値の確認(無効化されている)
SQL> show feedback
FEEDBACK ON for 6 or more rows SQL_ID OFF

 設定
SQL> set feedback 6 sql_id

 有効化の確認
SQL> show feedback
FEEDBACK ON for 6 or more rows SQL_ID ON

この状態で SQL を実行すると、下記のように SQL_ID も同時に出力してくれます。

SQL> select emp_name from emp where emp_id=100;
EMP_NAME
----------
HOGEHOGE

SQL_ID: 7tq899p0fg6b1

また、この SQL_ID は事前定義済変数 _SQL_ID に格納されるため、例えば以下のような形で該当 SQL の関連情報を確認することができます。

SQL> set pages 999 lin 99 tab off
SQL> select * from table(dbms_xplan.display_cursor('&_sql_id'));
   1: select * from table(dbms_xplan.display_cursor('&_sql_id'))
   1: select * from table(dbms_xplan.display_cursor('7tq899p0fg6b1'))

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------
SQL_ID  7tq899p0fg6b1, child number 0
-------------------------------------
select emp_name from emp where emp_id=100

Plan hash value: 2328672378

-------------------------------------------------------------------------------------------
| Id  | Operation                   | Name        | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |             |       |       |     2 (100)|          |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP         |     1 |  1005 |     2   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | IDX_EMP     |     1 |       |     1   (0)| 00:00:01 |
-------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - access("EMP_ID"=100)


19行が選択されました。

SQL_ID: brgt5k4fpz256

参考