ARCHIVELOG模式下使用者管理的不完全恢復—基於取消的不完全恢復
阿新 • • 發佈:2018-11-10
基於取消的恢復只要適用於以下情況: 歸檔日誌丟失導致完全恢復失敗; 丟失了資料檔案和未歸檔的重做日誌(聯機重做日誌);
先關閉資料庫,執行一次全庫冷備份。
[sql] view plain copy print ?- SQL> conn /as sysdba
- 已連線。
- SQL> shutdown immediate
- 資料庫已經關閉。
- 已經解除安裝資料庫。
- ORACLE 例程已經關閉。
- SQL> ! cp /u01/app/oracle/oradata/orcl/* /u01/app/oracle/backup/
SQL> conn /as sysdba 已連線。 SQL> shutdown immediate 資料庫已經關閉。 已經解除安裝資料庫。 ORACLE 例程已經關閉。 SQL> ! cp /u01/app/oracle/oradata/orcl/* /u01/app/oracle/backup/
然後開啟資料庫繼續使用,可以看見在備份的時候資料庫使用者u1的t表裡面就有一條記錄。接著在向t表裡插入資料,多切換幾次日誌,模擬資料庫使用了很久的樣子,讓redo log歸檔。
- SQL> startup
- ORACLE 例程已經啟動。
- Total System Global Area 167772160 bytes
- Fixed Size 1266392 bytes
- Variable Size 62917928 bytes
- Database Buffers 100663296 bytes
- Redo Buffers 2924544 bytes
- 資料庫裝載完畢。
- 資料庫已經開啟。
- SQL> conn u1/u1
- 已連線。
- SQL> select * from t;
- ID VALUE
- ---------- ----------
- 1 a
- SQL> insert into t values(2,'b');
- 已建立 1 行。
- SQL> commit;
- 提交完成。
- SQL> select * from t;
- ID VALUE
- ---------- ----------
- 1 a
- 2 b
- SQL> conn /as sysdba
- 已連線。
- SQL> alter system switch logfile;
- 系統已更改。
- SQL> /
- 系統已更改。
- SQL> /
- 系統已更改。
- SQL> /
- 系統已更改。
- SQL> /
- 系統已更改。
- SQL> /
- 系統已更改。
- SQL> /
- 系統已更改。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 62917928 bytes
Database Buffers 100663296 bytes
Redo Buffers 2924544 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> conn u1/u1
已連線。
SQL> select * from t;
ID VALUE
---------- ----------
1 a
SQL> insert into t values(2,'b');
已建立 1 行。
SQL> commit;
提交完成。
SQL> select * from t;
ID VALUE
---------- ----------
1 a
2 b
SQL> conn /as sysdba
已連線。
SQL> alter system switch logfile;
系統已更改。
SQL> /
系統已更改。
SQL> /
系統已更改。
SQL> /
系統已更改。
SQL> /
系統已更改。
SQL> /
系統已更改。
SQL> /
系統已更改。
現在模擬資料庫還沒來得及再一次備份,資料檔案都丟失了。歸檔日誌也丟失了,所以資料庫只能不完全恢復。
- SQL> conn /as sysdba
- 已連線。
- SQL> shutdown immediate
- 資料庫已經關閉。
- 已經解除安裝資料庫。
- ORACLE 例程已經關閉。
- SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.dbf
- SQL> ! cp /u01/app/oracle/backup/*.dbf /u01/app/oracle/oradata/orcl/
SQL> conn /as sysdba
已連線。
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.dbf
SQL> ! cp /u01/app/oracle/backup/*.dbf /u01/app/oracle/oradata/orcl/
基於取消的不完全恢復
- SQL> startup
- ORACLE 例程已經啟動。
- Total System Global Area 167772160 bytes
- Fixed Size 1266392 bytes
- Variable Size 62917928 bytes
- Database Buffers 100663296 bytes
- Redo Buffers 2924544 bytes
- 資料庫裝載完畢。
- ORA-01113: 檔案 1 需要介質恢復
- ORA-01110: 資料檔案 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
- SQL> select * from v$recover_file;
- FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
- ---------- ------- ------- ----------------------------------------------------------------- ---------- --------------
- 1 ONLINE ONLINE 500797 09-10月-11
- 2 ONLINE ONLINE 500797 09-10月-11
- 3 ONLINE ONLINE 500797 09-10月-11
- 4 ONLINE ONLINE 500797 09-10月-11
- 5 ONLINE ONLINE 500797 09-10月-11
- 6 ONLINE ONLINE 500797 09-10月-11
- 已選擇6行。
- SQL> recover database until cancel;
- ORA-00279: 更改 500797 (在 10/09/2011 06:24:47 生成) 對於執行緒 1 是必需的
- ORA-00289: 建議: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_09/o1_mf_1_2_%u_.arc
- ORA-00280: 更改 500797 (用於執行緒 1) 在序列 #2 中
- 指定日誌: {<RET>=suggested | filename | AUTO | CANCEL}
- cancel
- 介質恢復已取消。
- SQL> select * from v$recover_file;
- FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
- ---------- ------- ------- ----------------------------------------------------------------- ---------- --------------
- 1 ONLINE ONLINE 500797 09-10月-11
- 2 ONLINE ONLINE 500797 09-10月-11
- 3 ONLINE ONLINE 500797 09-10月-11
- 4 ONLINE ONLINE 500797 09-10月-11
- 5 ONLINE ONLINE 500797 09-10月-11
- 6 ONLINE ONLINE 500797 09-10月-11
- 已選擇6行。
- SQL> alter database open;
- alter database open
- *
- 第 1 行出現錯誤:
- ORA-01589: 要開啟資料庫則必須使用 RESETLOGS 或 NORESETLOGS 選項
- SQL> alter database open resetlogs;
- 資料庫已更改。
- SQL> select status from v$instance;
- STATUS
- ------------
- OPEN
- SQL> conn u1/u1;
- 已連線。
- SQL> select * from t;
- ID VALUE
- ---------- ----------
- 1 a