SQLトレースをプロセス単位で取ってみる
Oracle10gの新機能の中で、SQLトレースをインスタンス単位、セッション単位以外で取れることになったらしいので、早速(いまさら)試してみた。
http://www5b.biglobe.ne.jp/~taka_2/technique/Oracle_SQLTrace/index.html
SQLトレースって、パフォーマンスチューニングとかに必要な情報が入ったものなのですが、
Oracle8i的なイメージで言うと、
- セッション単位で取ろうとすると、アプリケーションにトレースを取得するためのコマンドを埋め込む必要あり
- プロダクションコードを変更することは、基本的に許されない(変更したらテストし直しが普通)
- でも、最近のDI(というよりはAOP)で、うまいこと差し込めるのかしら。
- プロダクションコードを変更することは、基本的に許されない(変更したらテストし直しが普通)
- インスタンス単位で取ろうとすると、初期化パラメータを変更した上、Oracleインスタンスの再起動が必要
- Oracle9iで導入された、サーバ・パラメータ・ファイル(SPFILE)を使えば、再起動は不要
- でも、ターゲットアプリケーション以外のトレースも取れてしまう
- Oracle9iで導入された、サーバ・パラメータ・ファイル(SPFILE)を使えば、再起動は不要
な感じで、SQLトレースっておいそれと取れないイメージでした。
が、まあOracle10gになって粒度も細かくなったので、
わりと気楽に取れるようになりましたよ。っていう認識。
ただ、それなりに権限がないと使えないみたい。
今回はscottにDBAロールを付与して逃げたけど、
開発者レベルでは、相変わらずSQL*Plusのset autotrace onが一番使えるのかも。