4 Replies Latest reply: Jan 24, 2013 7:35 PM by asahide RSS

    SQL実行履歴の取得方法

    986252
      こんにちは

      すでに構築されたシステムの解析として実行されたSQL履歴を簡単に取得する方法をさがしています。
      対象システムはFormsBuilderで作成されたもです。
      EMにあるSQL履歴機能で取得できるかと思ったのですが、取得できませんでした。
      この機能はPL/SQLは対象外と推測しています。

      他を探していたらLogMinerを見つけたのですが、これはPL/SQLで発行されたSQLも一覧で取得可能なのでしょうか?
      的外れでしたら他の方法をご教授いただければと思います。

      Oracle10g
      FormsBuilder9.0.4

      以上、よろしくお願いします。
        • 1. Re: SQL実行履歴の取得方法
          asahide
          SQL履歴とは実行された全てのSQLの履歴を、という事でしょうか?
          それなら多分LogMinerなら取る事はできるのではないかと思いますが、手間がかかると思います。(事前にサプリメンタルロギングをONにするとか?)

          ある程度で良いなら定期的にV$SQLを取得するとか、Statspackでi_executions_thを>0とするとかでも確保できるのではないかと思います。


          特にPL/SQLだから対象外となる事はないと思いますが、、、
          • 2. Re: SQL実行履歴の取得方法
            986252
            レスありがとうございます。

            LogMinerを試した結果、select文が取得できないので調査をやめました。

            次に頂いた情報をもとにstatspackを試してみました。
            しきい値をからなず該当するように設定した結果、取得できました。
            しかし、SQLの実行順がとる方法がみつけられませんでした。

            最終的には$sqlテーブルを直接参照して1秒単位の実行順までは取得できたので、こちらの方法を採用しました。

            情報ありがとうございました。
            • 3. Re: SQL実行履歴の取得方法
              asahide
              すみません、確かにLogMinerではSELECTは取れませんね。。。失礼しました。。
              • 4. Re: SQL実行履歴の取得方法
                asahide
                こんな方法もあるみたいです、ご参考まで。
                <<http://www.dba-oracle.com/t_find_historical_sql_by_date.htm>>
                select
                s.sql_id,
                sum(case
                when begin_interval_time = to_date(’14-feb-2009 1100′,’dd-mon-yyyy hh24mi’) then s.executions_total
                else 0
                end) sum_after,
                (sum(case
                when begin_interval_time >= to_date(’14-feb-2009 1100′,’dd-mon-yyyy hh24mi’) then s.executions_total
                else 0
                end) -
                sum(case
                when begin_interval_time < to_date(’14-feb-2009 1100′,’dd-mon-yyyy hh24mi’) then s.executions_total
                else 0
                end)) difference
                from
                   dba_hist_sqlstat s,
                   dba_hist_snapshot sn
                where
                   sn.begin_interval_time between to_date(’05-nov-2008 0001′,’dd-mon-yyyy hh24mi’)
                and
                   to_date(’05-nov-2008 2359′,’dd-mon-yyyy hh24mi’)
                and
                   sn.snap_id=s.snap_id
                group by
                   s.sql_id
                order by
                   difference desc;