Data Guard 之表误操作恢复

有这样种情况,由于误操作了一个业务表(drop/truncate/delete column,etc..)幸被及时发现.此时,我们可以在短时间内恢复这个表的常规操作有这么几种:

1) Flashback/Logmnr(如果是DML类,可以使用闪回查询或者logmnr挖掘;如果是drop,可以使用flashback table,但若是字段的更改或者truncate等操作,上述就无法起到作用了)
2) Dataguard端恢复(当然,需要standby端设置delay,利用延迟应用日志时间差,来迅速将standby recover到故障时间点之前,然后利用逻辑exp&imp来实现表级恢复)

    Dataguard体系下,方法2不失为一种高效简洁的办法.下面,看如下一个试验:

1. 在standby端,设置日志的延迟应用时间:

SQL> alter database recover managed standby database DELAY 60 disconnect from session;
数据库已更改。

2.primay端,模拟表误删除:

SQL> conn mecoyoo/mecoyoo@test
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as MECOYOO

SQL> create table test_auto as select * from dba_objects;
Table created

SQL> select count(*) from test_auto;
COUNT(*)
———-
104018

SQL> select to_char(sysdate,’yyyymmdd hh24:mi:ss’) from dual;

TO_CHAR(SYSDATE,’YYYYMMDDHH24:
——————————
20080225 17:25:53 ——记录该时间点就是日志恢复的终止时间点

SQL> drop table test_auto;
Table dropped

SQL> alter system switch logfile;
System altered

2.在standby端,执行时间点不完全恢复

SQL> alter database recover managed standby database cancel;
数据库已更改。

SQL> ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE until time ’2008-02-25 17
:25:53′;
数据库已更改。

SQL> alter database open;
数据库已更改。

SQL> select count(*) from mecoyoo.test_auto;

COUNT(*)
———-
104018

3.逻辑Exp/imp

D:\Documents and Settings\Administrator>exp mecoyoo/mecoyoo@test_standby
tables=(test_auto) file=auto.dmp

Export: Release 10.2.0.1.0 – Production on 星期一 2月 25 17:34:22 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的表通过常规路径…
. . 正在导出表 TEST_AUTO导出了 104018 行
成功终止导出, 没有出现警告。

D:\Documents and Settings\Administrator>imp mecoyoo/mecoyoo@test tables=(
test_auto) file=auto.dmp ignore=y

Import: Release 10.2.0.1.0 – Production on 星期一 2月 25 17:34:56 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options

经由常规路径由 EXPORT:V10.02.01 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
. 正在将 MECOYOO 的对象导入到 MECOYOO
. 正在将 MECOYOO 的对象导入到 MECOYOO
. . 正在导入表 “TEST_AUTO”导入了 104018 行
成功终止导入, 没有出现警告。

4.登陆primay库,验证表test_auto是否已经恢复

SQL> conn mecoyoo/mecoyoo@test
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as MECOYOO

SQL> select count(*) from test_auto;

COUNT(*)
———-
104018

5.恢复standby起初应用日志设置。

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area 134217728 bytes
Fixed Size 1247708 bytes
Variable Size 71304740 bytes
Database Buffers 58720256 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已更改。

SQL> alter database recover managed standby database DELAY 60 disconnect from session;
数据库已更改。

至此,表恢复完毕。在业务允许的前提下,合理设置主备库的同步间隔,有利于快速处理这一类人为误操作行为。

 

参考http://www.easyora.net/blog/data_guard_recover_table.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值