本帖最后由 bdzm 于 2009-08-27 10:20:25 编辑

解决方案 »

  1.   

    Spotlight  可以用这个工具!
      

  2.   

    不知道是重起服务器还是其他什么原因,v$sql 表中只能查到3天内的,还有其他地方能查到吗?
      

  3.   

    oracle有个审计的功能,但是前提是你必须先打开,看楼主的情况貌似没打开......
    关注一下,也想知道没打开审计的情况下怎么查找以前的记录
      

  4.   

    数据库一重启,v$sql中的数据就清空的,其他好象没什么方法。redo日志记的信息太过明细,不是用户原来真实的语句
      

  5.   

    如果是归档的,并且归档都在,那么可以使用logMiner查找归档文件,可以找到你归档文件里任何一个SQL,就是慢......
      

  6.   

    归档日志,并不是真实的记录你的sql语句的
      

  7.   

    用Oracle Logminer ...
    http://user.qzone.qq.com/251097186/blog/1251196695可以从redo,归档 日志里查出sql的执行时间,SCN, 用户,sql等事务操作信息...LogMiner用于分析重做日志和归档日志所记载的事务操作。
    一、确定数据库的逻辑损坏时间。假定某个用户执行drop table误删除了重要表sales,通过LogMiner可以准确定位该误操作的执行时间和SCN值,然后通过基于时间恢复或者基于SCN恢复可以完全恢复该表数据。
    二、确定事务级要执行的精细逻辑恢复操作。假定某些用户在某表上执行了一系列DML操作并提交了事务,并且其中某个用户的DML操作存在错误。通过LogMiner可以取得任何用户的DML操作及相应的UNDO操作,通过执行UNDO操作可以取消用户的错误操作。
    三、执行后续审计。通过LogMiner可以跟踪Oracle数据库的所有DML、DDL和DCL操作,从而取得执行这些操作的时间顺序、执行这些操作的用户等信息。
    用摘取LogMiner字典到字典文件分析DDL操作:1、进行DDL操作,以便分析
    SQL> conn scott/admin
    已连接。
    SQL> drop table emp;
    表已删除。
    SQL> drop table dept;
    表已删除。
    SQL> conn /as sysdba
    已连接。
    SQL> alter system switch logfile;
    系统已更改。2、使用字典文件,请查看数据库是否配置utl_file_dir,这个参数为字典文件的目录。配置该参数后,需要重启数据库
    SQL> show user; 
    USER 为 "SYS" 
    SQL> show parameter utl; 
    NAME                                 TYPE        VALUE                          
    ------------------------------------ ----------- ------------ 
    create_stored_outlines               string                                     
    utl_file_dir                         string                           
    SQL> alter system set utl_file_dir='D:\oracle\logminer' scope=spfile;
    System altered.
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> startup
    ORACLE instance started.
    SQL> show parameter utl 
    NAME                                 TYPE        VALUE                          
    ------------------------------------ ----------- ----------- 
    create_stored_outlines               string                                     
    utl_file_dir                         string      D:\oracle\logminer      3、建立字典文件:
    SQL> execute dbms_logmnr_d.build ('dict.ora','D:\oracle\logminer',dbms_logmnr_d.store_in_flat_file); 
    PL/SQL 过程已成功完成。4、建立日志分析列表:
    SQL> execute dbms_logmnr.add_logfile(logfilename=>'D:\oracle\arch\TEST\ARCHIVELOG\2009_08_25\O1_MF_1_32_597FQD7B_.ARC',options=>dbms_logmnr.new);
    PL/SQL 过程已成功完成。SQL> execute dbms_logmnr.add_logfile(logfilename=>'D:\oracle\arch\TEST\ARCHIVELOG\2009_08_25\O1_MF_1_30_597B5P7B_.ARC',options=>dbms_logmnr.addfile);
    PL/SQL 过程已成功完成。5、启动LogMiner
    SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'D:\oracle\logminer\dict.ora',options=>dbms_logmnr.ddl_dict_tracking);
    PL/SQL 过程已成功完成。6、查询分析日志结果:SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents  where lower(sql_redo) like '%table%'; 
    USERNAME        SCN TIMESTAMP      SQL_REDO
    -------- ---------- -------------- -----------------------------------
                1647538 25-8月 -09     ALTER TABLE "SCOTT"."EMP" RENAME CONSTRAINT "PK_EMP" TO "BIN$f/mFjN+nTmaYjrb17YU80w==$0" ;
                1647550 25-8月 -09     ALTER TABLE "SCOTT"."EMP" RENAME TO "BIN$E5UujHaTR+uItpLtzN0Ddw==$0" ;
                1647553 25-8月 -09     drop table emp AS "BIN$E5UujHaTR+uItpLtzN0Ddw==$0" ;
                1647565 25-8月 -09     ALTER TABLE "SCOTT"."DEPT" RENAME CONSTRAINT "PK_DEPT" TO "BIN$3imFL+/1SqONFCB7LoPcCg==$0" ;
                1647571 25-8月 -09     ALTER TABLE "SCOTT"."DEPT" RENAME TO "BIN$kYKBLvltRb+vYaT6RkaRiA==$0";
                1647574 25-8月 -09     drop table dept AS "BIN$kYKBLvltRb+vYaT6RkaRiA==$0" ;                         
                                                  
    或者其他的查询:SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents where username='SYS'; 
    USERNAME TIMESTAMP           SQL_REDO                                           
    -------- ------------------- -------------------------------------------------- 
    USERNAME        SCN TIMESTAMP      SQL_REDO
    -------- ---------- -------------- -----------------------------------
    SYS         1647487 25-8月 -09     set transaction read write;
    SYS         1647488 25-8月 -09     alter user scott account unlock;
    SYS         1647490 25-8月 -09     Unsupported
    SYS         1647492 25-8月 -09     commit;
                              
    7、结束LogMiner
    SQL> execute dbms_logmnr.end_logmnr;
    PL/SQL 过程已成功完成。注意,v$logmnr_contents内容保存了日志的内容,只在当前会话有效,如果想长期保存分析,可以在当前会话用create table tablename as select * from v$logmnr_contents语句来持久保存。
      

  8.   

    归档中的的确不是原始的SQL,只能做为参考,如果是7天内的,楼主可以看下dba_hist_sqlstat
      

  9.   

    用第三的工具如 Toad 比较方便点,不用写SQL这么麻烦了,在界面上点点就可以了...Database-->Diagnose-->LogMiner  然后直接下一步就可以看到了...注:Toad的版本不一样, 界面有所查遍,我的是Toad 9.6的..
      

  10.   

    多谢楼上各位大虾指点,我现在就是想查一个删除动作,大概是1,2个月以前的,有没有简单的查看redo的命令?