趣味のプログラム工房

Oracle 監査ログ Aud$のSQLTEXT切れてる問題

Oracleの監査ログですがAUD$を直接ではなく、DBA_AUDIT_TRAILのViewを使って監査ログを参照すると、SQLTEXTが切れて、すべて見えない問題が発生します。

というのも、AUD$のSQLTEXTはCLOBですが、DBA_AUDIT_TRAILはVARCHAR2 2000桁で表示されるため、2000文字以上は切れてしまう。
なので、2000文字以上のSQLTEXTを見る場合は、AUD$を直接見る必要がありますが、その場合も、CLOBではなく、VARCHAR2に変換してみるため、SELECT時に工夫が必要。

https://stackoverrun.com/ja/q/1875751

を参考に、2000文字ずつとか、4000文字ずつ表示する必要があります。

SELECT SUBSTR (t1.clob_col, 1, 4000) AS pt1,
CASE WHEN LENGTH (t1.clob_col) > 4000 THEN SUBSTR (t1.clob_col, 4001, 4000) END AS pt2,
CASE WHEN LENGTH (t1.clob_col) > 8000 THEN SUBSTR (t1.clob_col, 8001, 4000) END AS pt3,
CASE WHEN LENGTH (t1.clob_col) > 12000 THEN SUBSTR (t1.clob_col, 1201, 4000) END AS pt4
FROM t1


まあ、分岐する必要があるかは微妙。
別に、0文字~4000文字、4001文字~8000文字、、、を表示するsubstrをそのまま連結でもよさそう。


スマートテレビの新基準
4Kテレビ
2019年02月03日