11G新特性:FLASHBACK ARCHIVE – 02

在上一篇博客(11G新特性:FLASHBACK ARCHIVE - 01)中提到了关于通过11G新特性FLASHBACK ARCHIVE恢复意外丢失表数据的恢复方法,主要是针对DML操作。在11G中,FALSHBACKARCHIVE可以支持针对DDL语句的恢复。

针对DDL语句(添加/删除列)

创建表t03

23:08:29SQL> create table t03 as select owner,object_id,object_name,object_type fromdba_objects where owner='SCOTT';
Table created.
23:08:36 SQL> select * from t03;
OWNER OBJECT_ID OBJECT_NAME OBJECT_TYPE
---------- ---------- -------------------- --------------------
SCOTT 75334 PK_DEPT INDEX
SCOTT 75333 DEPT TABLE
SCOTT 75335 EMP TABLE
SCOTT 75336 PK_EMP INDEX
SCOTT 75337 BONUS TABLE
SCOTT 75338 SALGRADE TABLE
6 rows selected.

为表t03开启flashback archive

23:08:41SQL> alter table t03 flashback archive;
Table altered.

记录下表定义未被修改前的时间:

23:08:50SQL> select sysdate from dual;
SYSDATE
-------------------
2011-11-1223:09:00

t03添加列object_bytes

23:09:14SQL> alter table t03 add (object_bytes number);
Table altered.

为新列object_bytes添加数据:

23:11:12SQL> update t03 set object_bytes = 1024;
6 rows updated.
23:11:26 SQL> commit;
Commit complete.
23:11:31 SQL> select * from t03;
OWNER OBJECT_ID OBJECT_NAME OBJECT_TYPE OBJECT_BYTES
---------- ---------- -------------------- -------------------- ------------
SCOTT 75334 PK_DEPT INDEX 1024
SCOTT 75333 DEPT TABLE 1024
SCOTT 75335 EMP TABLE 1024
SCOTT 75336 PK_EMP INDEX 1024
SCOTT 75337 BONUS TABLE 1024
SCOTT 75338 SALGRADE TABLE 1024
6 rows selected.

至此,t03表已被添加列object_bytes,并存储有数据,现在我们通过FLASHBACK ARCHIVE查询t03表定义被修改前的数据状态,注意:2011-11-1223:09:00为表定义修改前的时间点,因此,我们可以尝试查询该时间点时的数据状态。

23:12:49SQL> select * from t03 as of timestamp to_timestamp('2011-11-1223:09:00','yyyy-mm-dd hh24:mi:ss');
OWNER OBJECT_ID OBJECT_NAME OBJECT_TYPE OBJECT_BYTES
---------- ---------- -------------------- -------------------- ------------
SCOTT 75334 PK_DEPT INDEX
SCOTT 75333 DEPT TABLE
SCOTT 75335 EMP TABLE
SCOTT 75336 PK_EMP INDEX
SCOTT 75337 BONUS TABLE
SCOTT 75338 SALGRADE TABLE
6 rows selected.

可以看到,其实表定义还在(指新添加的列:object_bytes),不过该列上的数据已不存在,相信Oracle在后续的版本中继续完善。

上面实验的是添加列情况,假如我删除了列object_type,那么通过FLASHBACK ARCHIVE查询出的结果如下:

23:34:43SQL> select * from t04 as of timestamp to_timestamp('2011-11-1223:33:47','yyyy-mm-dd hh24:mi:ss');
OWNER OBJECT_ID OBJECT_NAME D_1248039_OBJECT_TYPE
---------- ---------- -----------------------------------------------------------------------------
SCOTT 75335 EMP TABLE
SCOTT 75336 PK_EMP INDEX
SCOTT 75333 DEPT TABLE
SCOTT 75334 PK_DEPT INDEX
SCOTT 75338 SALGRADE TABLE
SCOTT 75337 BONUS TABLE
6 rows selected.

需要注意列名D_1248039_OBJECT_TYPE,该列即为我们原本的object_type列。

针对DDL语句(TRUNCATE操作)

为表t02开启flashback archive

SQL>alter table t02 flashback archive;
Table altered.

当前表t02的数据状态:

SQL>select * from t02;
OWNER OBJECT_ID OBJECT_NAME OBJECT_TYPE
---------- ---------- -------------------- --------------------
SCOTT 75334 PK_DEPT INDEX
SCOTT 75333 DEPT TABLE
SCOTT 75335 EMP TABLE
SCOTT 75336 PK_EMP INDEX
SCOTT 75337 BONUS TABLE
SCOTT 75338 SALGRADE TABLE
6 rows selected.

记录truncate前的时间点:

SQL>select sysdate from dual;
SYSDATE
-------------------
2011-11-1222:20:22

truncatet02

SQL>truncate table t02;
Table truncated.

t02已空:

SQL>select * from t02;
no rows selected

通过FLASHBACKARCHIVE查询:

SQL>select * from t02 as of timestamp (systimestamp - interval '5' minute);
OWNER OBJECT_ID OBJECT_NAME OBJECT_TYPE
---------- ---------- -------------------- --------------------
SCOTT 75336 PK_EMP INDEX
SCOTT 75335 EMP TABLE
SCOTT 75338 SALGRADE TABLE
SCOTT 75337 BONUS TABLE
SCOTT 75333 DEPT TABLE
SCOTT 75334 PK_DEPT INDEX
6 rows selected.

当然,如果有知道确切的时间,也可以通入下语句查询:

SQL>select * from t02 as of timestamp to_timestamp('2011-11-12 22:20:22','yyyy-mm-ddhh24:mi:ss');

10G版本中是不可能通过此方法恢复的,所谓11G新特性嘛,呵呵。




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25834554/viewspace-710843/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25834554/viewspace-710843/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值