oracle 11g归档,Oracle 11g 闪回归档的简单测试

Oracle 11g里面的新特性闪回归档,为历史数据的定制查询提供了一种可能。抽时间学习了一下这个特性,发现还是比较清晰易用。如果使用得当还是很不错的一个特性。

我们来简单模拟一个例子来看看。

首先需要创建独立的表空间,属性需要为segment space management auto,因为默认属性就是如此,所以我们简化语句。

SQL> create tablespace fbarch datafile'/U01/app/oracle/oradata/actvdb/fbarch.dbf' size 10M ;

Tablespace created.

然后我们创建闪回数据归档区,可以指定多个表空间,也可以修改保留时长。

SQL> create flashback archive fda tablespace fbarch retention 1 month;

Flashback archive created.

创建一个测试表

SQL> create table test_fbarch as select * from dba_objects;

Table created.

然后修改表属性,指定闪回归档区,当然这个地方闪回数据归档区是不对应的。

SQL> alter table test_fbarch flashback archive fbarch;

alter table test_fbarch flashback archive fbarch

*

ERROR at line 1:

ORA-55605: Incorrect Flashback Archive is specified

我们删除原有的闪回数据归档区,重新创建一个。

SQL> drop flashback archive fda;

Flashback archive dropped.

重新创建闪回数据归档区

SQL> create flashback archive fbarch tablespace fbarch retention 1 month;

Flashback archive created.

然后再次修改表属性,指定为fbarch

SQL> alter table test_fbarch flashback archive fbarch;

Table altered.

通过闪回功能来查找以前的历史数据,可以基于时间戳或者基于SCN

SQL> select dbms_flashback.get_system_change_number from dual;

GET_SYSTEM_CHANGE_NUMBER

------------------------

380440310

假设基于SCN查询

SQL> select count(*)from test_fbarch as of scn 380440310;

COUNT(*)

----------

86840

在此处,我们故意要刷新undo数据空间,而且要让数据的变化频率大大加快。

使用下面的pl/sql来刷undo

SQL> begin

2  for i in 1 .. 100 loop

3  update test_fbarch set object_id=object_id+1;

4  commit;

5  end loop;

6  end;

7  /

当然这个时候,会不断在后台执行语句,刷新数据,当然原来的闪回数据归档区肯定是不够的。

在alert日志中就会看到如下的报错。

Wed Apr 13 22:43:23 2016

ORA-1688: unable to extend table CYDBA.SYS_FBA_HIST_239635 partition HIGH_PART by 1024 in                tablespace FBARCH

当然这个错误看起来还不是很清晰,我们来简单分析一下。

SQL> col segment_name format a30

SQL> select segment_name,segment_type from user_segments;

SEGMENT_NAME                  SEGMENT_TYPE

------------------------------ ------------------

TEST_FBARCH                    TABLE

SYS_FBA_DDL_COLMAP_239635      TABLE

SYS_FBA_TCRV_239635            TABLE

SYS_FBA_HIST_239635            TABLE PARTITION

SYS_FBA_TCRV_IDX_239635        INDEX

可以看到多出了4个段对象,三个是后台数据表,一个是索引。

通过字段的情况也可以猜出闪回归档的一些实现原理来。

SQL> desc SYS_FBA_TCRV_239635  --这个表记录的是在指定时间范围内,进行特定操作(OP)的记录。

Name                                      Null?    Type

----------------------------------------- -------- ----------------------------

RID                                                VARCHAR2(4000)

STARTSCN                                          NUMBER

ENDSCN                                            NUMBER

XID                                                RAW(8)

OP                                                VARCHAR2(1)

SQL> desc SYS_FBA_HIST_239635  --这个表记录的是指定时间范围内,数据变化的明细情况,可以看到里面有原表的所有字段。

Name                                      Null?    Type

----------------------------------------- -------- ----------------------------

RID                                                VARCHAR2(4000)

STARTSCN                                          NUMBER

ENDSCN                                            NUMBER

XID                                                RAW(8)

OPERATION                                          VARCHAR2(1)

OWNER                                              VARCHAR2(30)

OBJECT_NAME                                        VARCHAR2(128)

SUBOBJECT_NAME                                    VARCHAR2(30)

OBJECT_ID                                          NUMBER

DATA_OBJECT_ID                                    NUMBER

OBJECT_TYPE                                        VARCHAR2(19)

CREATED                                            DATE

LAST_DDL_TIME                                      DATE

TIMESTAMP                                          VARCHAR2(19)

STATUS                                            VARCHAR2(7)

TEMPORARY                                          VARCHAR2(1)

GENERATED                                          VARCHAR2(1)

SECONDARY                                          VARCHAR2(1)

NAMESPACE                                          NUMBER

EDITION_NAME                                      VARCHAR2(30)

SQL> desc SYS_FBA_DDL_COLMAP_239635  --这个表记录的是在指定时间范围内的DDL相关记录。

Name                                      Null?    Type

----------------------------------------- -------- ----------------------------

STARTSCN                                          NUMBER

ENDSCN                                            NUMBER

XID                                                RAW(8)

OPERATION                                          VARCHAR2(1)

COLUMN_NAME                                        VARCHAR2(255)

TYPE                                              VARCHAR2(255)

HISTORICAL_COLUMN_NAME                            VARCHAR2(255)

当然对于闪回归档来说,DDL如果涉及表字段的drop操作,就会有限制,而对于添加字段的操作可以支持。

而对于239635该怎么理解呢?我们来看看object_id

SQL> select object_id,object_name from dba_objects where object_id=239635;

OBJECT_ID OBJECT_NAME

---------- ------------------------------

239635 TEST_FBARCH

这个时候查看后台进程,会发现闪回归档其实还有一个后台进程fbda

SQL> !ps -ef|grep fb

oracle  26606    1 59 22:38 ?        00:07:24 ora_fbda_actvdb

oracle  26924 26849  0 22:51 pts/1    00:00:00 /bin/bash -c ps -ef|grep fb

oracle  26926 26924  0 22:51 pts/1    00:00:00 grep fb

0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值