基于取消的恢复只要适用于以下情况: 归档日志丢失导致完全恢复失败; 丢失了数据文件和未归档的重做日志(联机重做日志);
先关闭数据库,执行一次全库冷备份。
- 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