This discussion is archived
4 Replies Latest reply: Jan 24, 2013 5:35 PM by asahide RSS

SQL実行履歴の取得方法

986252 Newbie
Currently Being Moderated
こんにちは

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

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

Oracle10g
FormsBuilder9.0.4

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

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


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

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

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

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

    情報ありがとうございました。
  • 3. Re: SQL実行履歴の取得方法
    asahide Expert
    Currently Being Moderated
    すみません、確かにLogMinerではSELECTは取れませんね。。。失礼しました。。
  • 4. Re: SQL実行履歴の取得方法
    asahide Expert
    Currently Being Moderated
    こんな方法もあるみたいです、ご参考まで。
    <<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;

Legend

  • Correct Answers - 10 points
  • Helpful Answers - 5 points