sitemap

RSS地图

收藏本站

设为首页

Oracle研究中心

当前位置:Oracle研究中心 > 运维DBA >

【学习笔记】oracle Flashback闪回归档 详细研究笔记一

时间:2017-01-08 23:38   来源:Oracle研究中心   作者:网络   点击:

天萃荷净 oracle研究中心学习笔记:分享一篇关于oracle flashback归回归档的研究笔记。

Oracle Flashback闪回是从10g开始推出的一系列技术新特性。闪回Flashback的范围很广泛,包括Flashback Query、Flashback Database、Flashback Transaction和Flashback Drop等

在之前的Blog系列《使用闪回拯救我们的数据》,笔者已经分析过Flashback闪回的一些特性。Flashback就是在不进行还原操作的情况下,将已经被commit或者ddl操作过的数据恢复过来。

Flashback借用多种技术来实现flashback的目标。Flashback存在一些问题和不适应性。比如:进行flashback的对象时间往往较短,而且不可控。另一方面,flashback的目标没有针对性,对一些不需要进行flashback的数据表,也消耗资源进行flashback准备操作。

在Oracle 11g中,Oracle推出了flashback archive(闪回归档)的新特性。Flashback Archive实现了有针对性数据表的可控时间闪回功能。我们可以设置一块存储空间区域,保留一个特定数据表在不同时间的数据镜像。而且可以设置保留时间,没有达到保留时间的时候,数据都会进行保留。

下面我们通过一系列的实验来说明这些特性。

1、环境准备

我们选择Oracle 11g进行测试,同时建立一个表空间mytest。表空间mytest选择ASSM方式进行segment space management。

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE     11.2.0.1.0       Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> create tablespace mytest datafile size 100m extent management local uniform. size 1m
  2  segment space management auto;

Tablespace created

2、创建Flashback Archive空间

Flashback的其他特性,如flashback drop、flashback database,都是数据库的默认选择项目,基本不需要用户进行指定和配置。如果不希望有这些配置项目,则可以通过参数配置开关进行关闭。

Flashback Archive是一种比较特殊的类型,需要我们进行一系列的配置工作。首先,我们在sys用户下创建一个flashback archive存储对象。

SQL> show user;
User is "SYS"

SQL> create flashback archive flar1 tablespace mytest retention 1 year;
Done

创建flar1对象作为使用的flashback archive,存储使用的表空间为mytest,设置的保留年限为1年。

在创建flar1之后,我们可以在dba_flashback_archive、dba_flashback_archive_ts(dba_前缀可以使用user等进行替换)查询到闪回信息。

SQL> select * from dba_flashback_archive;

OWNER_NAME FLASHBACK_ARCHI FLASHBACK_ RETENTION_IN_DAYS CREATE_TIME          LAST_PURGE_TIME      STATUS
---------- --------------- ---------- ----------------- -------------------- -------------------- -------
SYS        FLAR1                    1               365 05-9月 -11 11.07.43. 05-9月 -11 11.07.43.
                                                        000000000 上午       000000000 上午     

SQL> select * from dba_flashback_archive_ts;

FLASHBACK_ARCHI FLASHBACK_ARCHIVE#  TABLESPACE_NAME QUOTA_IN_MB
--------------- ----------          --------------- ----------------------------------------
FLAR1                    1          MYTEST        

3、设置具有闪回归档功能的数据表

我们转移到scott用户下,进行闪回归档演示。

SQL> conn scott/tiger@ora11g;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as scott

SQL> desc t;
Object t does not exist.

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

SQL> select count(*) from t;
  COUNT(*)
----------
     72226

之后,我们尝试使用alter table xx flashback archive yyy的方法,将数据表与设置的闪回归档区关联上。

SQL> alter table t flashback archive flar1;
alter table t flashback archive flar1

ORA-55620: 无权使用闪回归档

在scott普通用户下,直接调用该命令是被拒绝的。使用设置闪回归档,需要拥有flashback archive系统权限。

--在sys用户下
SQL> grant flashback archive on flar1 to scott;
Grant succeeded

--在scott用户下
SQL> alter table t flashback archive flar1;
Table altered

此时,可以观察到dba_flashback_archive_tables视图的结果,建立了数据表T与flar1的关系。


SQL> select * from dba_flashback_archive_tables;

TABLE_NAME   OWNER_NAME    FLASHBACK_ARCHIVE_NAME     ARCHIVE_TABLE_NAME   STATUS
-------------------------- ----------------------------------------------- --------
T            SCOTT         FLAR1                      SYS_FBA_HIST_88294   ENABLED

4、闪回归档数据表

下面,我们分别在不同的时间点,对数据表进行DML操作,演示flashback archive特性。

--大规模DML操作前
SQL> select sum(bytes)/1024/1024 "USED MBs" from dba_free_space where tablespace_name='MYTEST';
  USED MBs
----------
        92

SQL> select count(*) from t;
  COUNT(*)
----------
    113346

SQL> select sysdate from dual;
SYSDATE
--------------------
2011/9/6 9:06:57

--进行大规模DML操作;
SQL> insert into t select * from dba_objects;
72233 rows inserted

SQL> commit;
Commit complete

SQL> select count(*) from t;
  COUNT(*)
----------
    185579

SQL> select count(*) from t as of timestamp to_timestamp('2011/9/6 9:06:57','yyyy/mm/dd hh24:mi:ss');

  COUNT(*)
----------
    113346

SQL> select sum(bytes)/1024/1024 "USED MBs" from dba_free_space where tablespace_name='MYTEST';

  USED MBs
----------
        75


上面的实验,可以清晰的看出Flashback Archive的特点。从query语法上看,flashback archive与flashback query很相像,都是利用指定过去的一个时间点(timestamp,scn)进行查询。但是,flashback query是利用undo的负效应,将没有被覆写的数据返回给用户。这种方式首先是对所有的数据表均有效果,另一个是时间有限,受到undo大小和数据库事务频繁度的影响。

而flashback archive则是将数据归档做到了数据库的层面上。设置一块专门的区域空间,称之为flashback archive。这个区域是真实对应在表空间上可以进行存储使用的。之后设置这块区域的保留时间。

在数据表层面,可以选择需要进行保留的数据表,让其与flashback archive区域关联,这样在存储区域中,就会保留各个时间点的镜像数据。

本篇中研究了如何设置和使用flashback archive,下面我们一起分析研究下设置flashback archive的数据表特征和其他特点。

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【学习笔记】oracle Flashback闪回归档 详细研究笔记一

本文由大师惜分飞原创分享,网址:http://www.oracleplus.net/arch/1455.html

Oracle研究中心

关键词:

oracle Flashback

oracle闪回归档