ARCHIVELOG模式下用户管理的完全恢复—恢复打开的数据库,并且数据库最初是打开的

回忆一下,user1用户的test表中还是有两条记录

  1. SQL> show user  
  2. USER 为 "USER1"  
  3. SQL> select * from test;  
  4.   
  5.         ID VALUE  
  6. ---------- --------------------  
  7.          1 a  
  8.          2 b  
SQL> show user
USER 为 "USER1"
SQL> select * from test;

        ID VALUE
---------- --------------------
         1 a
         2 b

再向test表中插入第3条数据。

  1. SQL> insert into  test values(3,'c');  
  2.   
  3. 已创建 1 行。  
  4.   
  5. SQL> commit;  
  6.   
  7. 提交完成。  
  8.   
  9. SQL> select  * from test;  
  10.   
  11.         ID VALUE  
  12. ---------- --------------------  
  13.          1 a  
  14.          2 b  
  15.          3 c  
SQL> insert into  test values(3,'c');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select  * from test;

        ID VALUE
---------- --------------------
         1 a
         2 b
         3 c

然后手动切换日志。删除ttb1这个表空间的数据文件,查看恢复表里面还是没有要恢复的记录,说明oracle还没意识到数据文件丢失了,继续查询test表还是可以正常的时候,再向表test里面插入数据也是可以的,因为数据是放在内存的,还没写到数据文件上面。

  1. SQL> conn /as sysdba  
  2. 已连接。  
  3. SQL> alter system archive log current;  
  4.   
  5. 系统已更改。  
  6.   
  7. SQL> ! rm -rf /u01/app/oracle/oradata/orcl/ttb1.dbf  
  8.   
  9. SQL> select * from v$recover_file;  
  10.   
  11. 未选定行  
  12.    
  13. SQL> conn user1/user1  
  14. 已连接。  
  15. SQL> insert into  test values(4,'d');  
  16.   
  17. 已创建 1 行。  
  18.   
  19. SQL> commit;  
  20.   
  21. 提交完成。  
  22.   
  23. SQL> select * from test;  
  24.   
  25.         ID VALUE  
  26. ---------- --------------------  
  27.          1 a  
  28.          2 b  
  29.          3 c  
  30.          4 d  
SQL> conn /as sysdba
已连接。
SQL> alter system archive log current;

系统已更改。

SQL> ! rm -rf /u01/app/oracle/oradata/orcl/ttb1.dbf

SQL> select * from v$recover_file;

未选定行
 
SQL> conn user1/user1
已连接。
SQL> insert into  test values(4,'d');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from test;

        ID VALUE
---------- --------------------
         1 a
         2 b
         3 c
         4 d

这个时候要是手动发生CKPT。可以看见alert日志文件里会记录错误信息。查看恢复表里面就会发现有需要恢复的数据文件拉。如果v$recover_file里面还是没有记录要恢复的数据文件,就shutdown immediate,然后会看见几号文件需要恢复,也可以开始恢复操作了。

  1. SQL> conn /as sysdba  
  2. 已连接。  
  3. SQL> alter system checkpoint;  
  4.   
  5. 系统已更改。  
  6.   
  7. SQL> select * from v$recover_file;  
  8.   
  9. 未选定行  
  10.   
  11. SQL> shutdown immediate  
  12. ORA-01116: 打开数据库文件 14 时出错  
  13. ORA-01110: 数据文件 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'  
  14. ORA-27041: 无法打开文件  
  15. Linux Error: 2: No such file or directory  
  16. Additional information: 3  
  17. SQL> select status from v$instance;  
  18.   
  19. STATUS  
  20. ------------  
  21. OPEN  
SQL> conn /as sysdba
已连接。
SQL> alter system checkpoint;

系统已更改。

SQL> select * from v$recover_file;

未选定行

SQL> shutdown immediate
ORA-01116: 打开数据库文件 14 时出错
ORA-01110: 数据文件 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'
ORA-27041: 无法打开文件
Linux Error: 2: No such file or directory
Additional information: 3
SQL> select status from v$instance;

STATUS
------------
OPEN

恢复

  1. SQL> ! cp /u01/app/oracle/backup/ttb1.dbf /u01/app/oracle/oradata/orcl/  
  2.   
  3. SQL> recover datafile 14;  
  4. ORA-00283: 恢复会话因错误而取消  
  5. ORA-01124: 无法恢复数据文件 14 - 文件在使用中或在恢复中  
  6. ORA-01110: 数据文件 14: '/u01/app/oracle/oradata/orcl/ttb1.dbf'  
  7.   
  8. SQL> alter database datafile 14 offline;  
  9.   
  10. 数据库已更改。  
  11.   
  12. SQL> recover datafile 14;  
  13. ORA-00279: 更改 1004104 (在 10/08/2011 08:29:53 生成) 对于线程 1 是必需的  
  14. ORA-00289: 建议: /u01/app/oracle/archivelog/1_70_761792499.dbf  
  15. ORA-00280: 更改 1004104 (用于线程 1) 在序列 #70 中  
  16.   
  17.   
  18. 指定日志: {<RET>=suggested | filename | AUTO | CANCEL}  
  19. auto  
  20. 已应用的日志。  
  21. 完成介质恢复。  
  22. SQL> alter database datafile 14 online;  
  23.   
  24. 数据库已更改。  
  25.   
  26. SQL> shutdown immediate  
  27. 数据库已经关闭。  
  28. 已经卸载数据库。  
  29. ORACLE 例程已经关闭。  
  30. SQL> startup  
  31. ORACLE 例程已经启动。  
  32.   
  33. Total System Global Area  167772160 bytes  
  34. Fixed Size                  1266392 bytes  
  35. Variable Size             117443880 bytes  
  36. Database Buffers           46137344 bytes  
  37. Redo Buffers                2924544 bytes  
  38. 数据库装载完毕。  
  39. 数据库已经打开。  
  40. SQL> conn user1/user1  
  41. 已连接。  
  42. SQL> select * from test;  
  43.   
  44.         ID VALUE  
  45. ---------- --------------------  
  46.          1 a  
  47.          2 b  
  48.          3 c  
  49.          4 d  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值