將數據庫、表空間、數據文件等恢復至恢復備份集保存時間中的任何一個時間點/SCN/日志序列(一般是日志挖掘找到誤操作點),但須謹慎,操作前一定需要做好備份,具備條件的情況下最好先恢復到異機,避免業務停機時間。
前提:已經有數據庫備份 (作者已經提前准備了備份,這里不進行備份,為了節約空間)
--准備實驗環境
SQL> select * from andy.andy;
select * from andy.andy
*
ERROR at line 1:
ORA-00942: table or view does not exist
--不完全恢復時間點
SQL> select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2015-03-25 07:55:12
SQL> create table andy.andy(id int);
Table created.
SQL> insert into andy.andy values(1);
1 row created.
SQL> insert into andy.andy values(100);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from andy.andy;
ID
----------
1
100
1 基於時間點
方法一: 在RMAN中執行
RMAN>
run{
startup mount force;
set until time "to_date('2015-03-25 07:55:12','yyyy-mm-dd hh24:mi:ss')";
restore database;
recover database;
alter database open resetlogs;
}
Finished recover at 25-MAR-15
database opened
--恢復時間點之后的表不見了,說明的確是不完全恢復。
SQL> select * from andy.andy;
select * from andy.andy
*
ERROR at line 1:
ORA-00942: table or view does not exist
——————————————————————————
方法二:在SQLplus中執行
SQL>startup mount force;
SQL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
SQL>restore database until time "to_date('2015-03-25 07:55:12','YYYY-MM-DD HH24:MI:SS')";
SQL>recover database until time "to_date('2015-03-25 07:55:12','YYYY-MM-DD HH24:MI:SS')";
SQL>alter database open resetlogs;
2 基於 SCN:
SQL>startup mount force;
SQL>restore database until scn XXXX;
SQL>recover database until scn XXXX;
SQL>alter database open resetlogs;
3 基於日志序列
SQL>startup mount force;
SQL>restore database until SEQUENCE 100 thread 1; //100是日志序列
SQL>recover database until SEQUENCE 100 thread 1;
SQL>alter database open resetlogs;