ARCHIVELOG模式下用户管理的不完全恢复(1)——基于时间点的不完全恢复!

基于时间点的恢复主要使用于以下情况:误删除表、误截断表、提交了错误的数据。(从oracle 10g利用闪回更easy!)

 

首先关闭数据库执行一个冷全备份(冷备份的时候用户u1的t表中是有3条记录的。)

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             117443880 bytes
Database Buffers           46137344 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> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  167772160 bytes
Fixed Size                  1266392 bytes
Variable Size              62917928 bytes
Database Buffers          100663296 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是“500441 ”。还可以看见控制文件中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                                                                        500441 2011-10-09 02:12:08
         2 ONLINE                                                                        500441 2011-10-09 02:12:08
         3 ONLINE                                                                        500441 2011-10-09 02:12:08
         4 ONLINE                                                                        500441 2011-10-09 02:12:08
         5 ONLINE                                                                        500441 2011-10-09 02:12:08
         6 ONLINE                                                                        500441 2011-10-09 02:12:08

已选择6行。

SQL> select file#,checkpoint_change# from v$datafile;             --查看控制文件中的scn号码

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1             500814
         2             500814
         3             500814
         4             500814
         5             500814
         6             500814

已选择6行。

SQL> select file#,checkpoint_change# from v$datafile_header;     --查看数据文件中的scn号码

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
         1             500441
         2             500441
         3             500441
         4             500441
         5             500441
         6             500441

已选择6行。

 

恢复,由于备份的时间是“2011-10-09 02:12:08”,恢复时间我选在“2011-10-09 02:12:01”,提前了7秒。在实际生产环境中可以大致评估误操作的时间,多基于几个时间点来恢复多次,找到最合适的数据。

SQL> recover database until time '2011-10-09 02:12:01';
完成介质恢复。
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值