[Oracle] SQL*PlusでSQL_IDを取得する

2020年8月3日月曜日

Oracle

set feedback on sql_id

Oracleの18.1から、SQL*PlusでSQL_IDを取得することができるようになっている。
SQL*Plusリリース18c, バージョン18.1での変更点

SQL> set rowlimit 1
SQL> set feedback on sql_id
SQL> select sysdate from dual;

SYSDATE
---------
25-JUL-20

1 row selected. (rowlimit reached)

SQL_ID: 7h35uxf5uhmm1

set rowlimit

上記の例では結果は必ず1行しか返ってこないが、多くの行が返ってきてしまう環境では、同じく18.1から導入された set rowlimit 1 を使えば、SQLを変えることなく、1行のみを取得することができる。
特定SQLのSQL_IDのみを知りたい場合は、こちらを使えばいい。

SQL_ID

SQL_IDはSQLの文字列からハッシュ関数で生成される固定値で、Oracleのバージョンが変わらない限りは変わらない。
このため、V$SQL等から情報を得るために、事前にアプリケーションで実装しているSQLのSQL_IDを一覧にしておくと役に立つ。
この場合は、テーブル定義DDLのみを流した空のDB環境で実施すると、時間がかからなくていいだろう。

ちなみに、sqlclの19.1でも、set feedback on sql_id を試してみたが、残念ながらこちらには実装されていない模様。