我发现我的Oracle数据库只记录了最近几个小时的日志,再之前的就找不到了,无论是关于select还是update,什么情况?
我查看日志的命令是
select first_load_time, sql_text  from v$sql
where sql_text like '%update%'
order by first_load_time

解决方案 »

  1.   

    1、首先,曾经执行过的SQL语句会放在共享池里(shared pool:也就是一块内存)。
    2、数据是否已经重启过,如果重新动后,共享池被重新分配,所以原来的SQL肯定没有了。
    3、共享池里大小是一定的,有限度的,你可以通过select * from v$sgainfo查看。如果不同语句执行较多(如:SQL语句不使用绑定变量等,即使只有查询条件中的常量不一样,也将被认为是不同的语句。而重新占用一定的共享池空间),共享池空间被用完,则oracle按照一定的淘汰算法,淘汰原来的SQL,释放空间用来存放新的SQL。
      

  2.   

    通过 dba_hist_sqltext 和 dba_hist_sqlstat 视图(oracle 10)可以获取几天内执行的 sql 语句。具体取决于 AWR 的设置,默认每一小时获取一次 V$SQL 视图的快照,并保留一个星期。不过,如果 lz 想要做日志,应该使用 oracle 的审核功能来实现。