ARCHIVELOG模式下使用者管理的不完全恢復—基於SCN的不完全恢復
阿新 • • 發佈:2018-11-10
當用戶執行不完全恢復時,如果能夠確定恢復點所對應的SCN值,那麼可以使用這種方法恢復!
首先關閉資料庫執行一個冷全備份
[sql] view plain copy print ?- SQL> conn /as sysdba
- 已連線。
- SQL> shutdown immediate
- 資料庫已經關閉。
- 已經解除安裝資料庫。
- ORACLE 例程已經關閉。
- SQL> ! cp /u01/app/oracle/oradata/orcl/*.dbf /u01/app/oracle/backup/
SQL> conn /as sysdba
已連線。
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> ! cp /u01/app/oracle/oradata/orcl/*.dbf /u01/app/oracle/backup/
開啟資料庫,可以看見使用者u1的t表裡面是有資料的,然後截斷表
- SQL> conn /as sysdba
- 已連線到空閒例程。
- SQL> startup
- ORACLE 例程已經啟動。
- Total System Global Area 167772160 bytes
- Fixed Size 1266392 bytes
- Variable Size 71306536 bytes
- Database Buffers 92274688 bytes
- Redo Buffers 2924544 bytes
- 資料庫裝載完畢。
- 資料庫已經開啟。
- SQL> conn u1/u1
- 已連線。
- SQL> select * from t;
- ID VALUE
- ---------- ----------
- 1 a
- 2 b
- 3 c
- SQL> truncate table t;
- 表被截斷。
- SQL> select * from t;
- 未選定行
SQL> conn /as sysdba
已連線到空閒例程。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 71306536 bytes
Database Buffers 92274688 bytes
Redo Buffers 2924544 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> conn u1/u1
已連線。
SQL> select * from t;
ID VALUE
---------- ----------
1 a
2 b
3 c
SQL> truncate table t;
表被截斷。
SQL> select * from t;
未選定行
現在使用者發現錯誤的刪除了t表的資料,要求恢復。在不完全恢復之前資料庫處於open狀態,必須先關閉資料庫,再mount,把備份的資料檔案複製過來
[sql] view plain copy print ?- SQL> conn /as sysdba
- 已連線。
- SQL> shutdown immediate
- 資料庫已經關閉。
- 已經解除安裝資料庫。
- ORACLE 例程已經關閉。
- SQL> startup mount
- ORACLE 例程已經啟動。
- Total System Global Area 167772160 bytes
- Fixed Size 1266392 bytes
- Variable Size 71306536 bytes
- Database Buffers 92274688 bytes
- Redo Buffers 2924544 bytes
- 資料庫裝載完畢。
- SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.dbf
- SQL> ! mv /u01/app/oracle/backup/*.dbf /u01/app/oracle/oradata/orcl/
SQL> conn /as sysdba
已連線。
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount
ORACLE 例程已經啟動。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 71306536 bytes
Database Buffers 92274688 bytes
Redo Buffers 2924544 bytes
資料庫裝載完畢。
SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.dbf
SQL> ! mv /u01/app/oracle/backup/*.dbf /u01/app/oracle/oradata/orcl/
檢視如下檢視,可以看見需要恢復的資料檔案,備份時間是“2011-10-09 02:12:08”,scn是“504040 ”。還可以看見控制檔案中scn號碼要比資料檔案中scn號碼新。
- SQL> select file#,online_status,error,change#,to_char(time,'yyyy-mm-dd hh24:mi:ss') from v$recover_file;
- FILE# ONLINE_ ERROR CHANGE# TO_CHAR(TIME,'YYYY-
- ---------- ------- ----------------------------------------------------------------- ---------- -------------------
- 1 ONLINE 504040 2011-10-09 04:07:52
- 2 ONLINE 504040 2011-10-09 04:07:52
- 3 ONLINE 504040 2011-10-09 04:07:52
- 4 ONLINE 504040 2011-10-09 04:07:52
- 5 ONLINE 504040 2011-10-09 04:07:52
- 6 ONLINE 504040 2011-10-09 04:07:52
- 已選擇6行。
- SQL> select file#,checkpoint_change# from v$datafile; --檢視控制檔案中的scn號碼
- FILE# CHECKPOINT_CHANGE#
- ---------- ------------------
- 1 504428
- 2 504428
- 3 504428
- 4 504428
- 5 504428
- 6 504428
- 已選擇6行。
- SQL> select file#,checkpoint_change# from v$datafile_header; --檢視資料檔案中的scn號碼
- FILE# CHECKPOINT_CHANGE#
- ---------- ------------------
- 1 504040
- 2 504040
- 3 504040
- 4 504040
- 5 504040
- 6 504040
- 已選擇6行。
SQL> select file#,online_status,error,change#,to_char(time,'yyyy-mm-dd hh24:mi:ss') from v$recover_file;
FILE# ONLINE_ ERROR CHANGE# TO_CHAR(TIME,'YYYY-
---------- ------- ----------------------------------------------------------------- ---------- -------------------
1 ONLINE 504040 2011-10-09 04:07:52
2 ONLINE 504040 2011-10-09 04:07:52
3 ONLINE 504040 2011-10-09 04:07:52
4 ONLINE 504040 2011-10-09 04:07:52
5 ONLINE 504040 2011-10-09 04:07:52
6 ONLINE 504040 2011-10-09 04:07:52
已選擇6行。
SQL> select file#,checkpoint_change# from v$datafile; --檢視控制檔案中的scn號碼
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 504428
2 504428
3 504428
4 504428
5 504428
6 504428
已選擇6行。
SQL> select file#,checkpoint_change# from v$datafile_header; --檢視資料檔案中的scn號碼
FILE# CHECKPOINT_CHANGE#
---------- ------------------
1 504040
2 504040
3 504040
4 504040
5 504040
6 504040
已選擇6行。
恢復,由於備份的時候scn是504040,這裡就是採用這個值來恢復。
- SQL> recover database until change 504040;
- 完成介質恢復。
- SQL> alter database open;
- alter database open
- *
- 第 1 行出現錯誤:
- ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
- SQL> alter database open resetlogs;
- 資料庫已更改。
- SQL> conn u1/u1
- 已連線。
- SQL> select * from t;
- ID VALUE
- ---------- ----------
- 1 a
- 2 b
- 3 c