如果你的数据库是运行在归档模式下,可以恢复到某个时间点conn sys@实例名 as sysdbaSQL>startup mountSQL>recover database until time '2005-02-10 10:00:00'

解决方案 »

  1.   

    采用logminer来恢复用户数据:
    Logminer是oracle提供的一个日志分析工具。它可以根据数据字典对在线联机日志、归档日志进行分析,从而可以获得数据库的各种DML操作的历史记录以及各种DML操作的回退信息。根据这些用户就可以将由于误操作而丢失的数据重新加入数据库内。
    1. 确认数据库的utl_file_dir参数已经设置,如果没有则需要把这个参数加入oracle的初始化参数文件,然后重新启动数据库。下面例子中假设utl_file_dir=’/opt/oracle/db01’;
    2. 创建logminer所需要的数据字典信息,假设生成的数据字典文本文件为dict.ora:
    svrmgrl>execute dbms_logmnr_d.build(dictionary_filename=>'dict.ora', dictionary_location=>'/opt/oracle/db01’);
    3. 确定所需要分析的日志或者归档日志的范围。这可以根据用户误操作的时间来确定大概的日志范围。假设用户误操作时可能的日志文件为/opt/oracle/db02/oradata/ORCL/redo3.log和归档日志’/opt/oracle/arch/orcl/orclarc_1_113.ora’。
    4. 创建要分析的日志文件列表,按日志文件的先后顺序依次加入:
    svrmgrl>execute dbms_logmnr.add_logfile(logfilename=>’/opt/oracle/arch/orcl/orclarc_1_113.ora’,options=>dbms_logmnr.NEW);
    svrmgrl> execute dbms_logmnr.add_logfile(logfilename=>’ /opt/oracle/db02/oradata/ORCL/redo3.log’,options=>dbms_logmnr.ADDFILE);
    5. 开始日志分析,假设需要分析的时间在’2003-06-28 12:00:00’和’2003-06-28 13:00:00’之间:
    svrmgrl>execute dbms_logmnr.start_logmnr(dictfilename=>’ /opt/oracle/db01/dict.ora’,starttime=>to_date(’ 2003-06-28 12:00:00’,’YYYY-MM-DD HH:MI:SS’),endtime=>to_date(to_date(‘2003-06-28 13:00:00’,’YYYY-MM-DD HH:MI:SS’));
    6. 获取分析结果:
    svrmgrl>select operation,sql_redo,sql_undo from v$logmnr_contents;
    7. 根据分析结果修复数据。
    8.结束logmnr:
    svrmgrl>dbms_logmnr.end_logmnr;
    9. 用适当的方法对原数据库进行数据库全备份。
      

  2.   

    9i以上用flashback否则用logminer
    最不济就克隆一个库,进行时间点恢复,再把单个表imp回来