Oracle 六大闪回技术,flashback(7)

Oracle 11g中flashback增加了:Flashback Data Archive 特性。
该技术与之前的Flashback的实现机制不同,
通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,
这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。
并且可以根据需要指定哪些数据库对象需要保存历史变化数据,
而不是将数据库中所有对象的变化数据都保存下来,这样可以极大地减少空间需求。
Flashback Data Archive并不是记录数据库的所有变化,而只是记录了指定表的数据变化。
所以,Flashback Data Archive是针对对象的保护,是Flashback Database的有力补充。
通过Flashback Data Archive,可以查询指定对象的任何时间点(只要满足保护策略)的数据,
而且不需要用到undo,这在有审计需要的环境,或者是安全性特别重要的高可用数据库中,
是一个非常好的特性。缺点就是如果该表变化很频繁,对空间的要求可能很高。

闪回数据归档区
闪回数据归档区是闪回数据归档的历史数据存储区域,在一个系统中,
可以有一个默认的闪回数据归档区,也可以创建其他许多的闪回数据归档区域。
每一个闪回数据归档区都可以有一个唯一的名称。同时,
每一个闪回数据归档区都对应了一定的数据保留策略。
例如可以配置归档区FLASHBACK_DATA_ARCHIVE_1中的数据保留期为1年,
而归档区FLASHBACK_DATA_ARCHIVE_2的数据保留期为2天或者更短。 
以后如果将表放到对应的闪回数据归档区,则就按照该归档区的保留策略来保存历史数据。
闪回数据归档区是一个逻辑概念,是从一个或者多个表空间中拿出一定的空间,来保存表的修改历史,
这样就摆脱了对Undo撤销数据的依赖,不利用undo就可以闪回到归档策略内的任何一个时间点上。

Flashback archive相关数据字典
*_FLASHBACK_ARCHIVE
 Displays information about Flashback Data Archive files.
 
*_FLASHBACK_ARCHIVE_TS
 Displays tablespaces of Flashback Data Archive files.
 
*_FLASHBACK_ARCHIVE_TABLES
 Displays information about tables that are enabled for Data Flashback Archive files.
 
* 代表DBA 或者User。


Flashback archive的后台进程
Oracle11g为Flashback data archive特性专门引入了一个新的后台进程FBDA,
用于将追踪表(traced table,也就是将指定使用flashback data archive的table)
的历史变化数据转存到闪回归档区。

SQL> select name,description from v$bgprocess where;

NAME  DESCRIPTION
----- -----------------------------------------------------------
FBDA  Flashback Data Archiver Process

Flashback archive 的限制条件
            (1)Flashback data archive只能在ASSM的tablespace上创建
            (2)Flashback data archive要求必须使用自动undo管理,
                即 undo_management 参数为auto

6.2  Flashback Data Archive 的相关操作
Create a Flashback Data Archive with the CREATE FLASHBACK ARCHIVE statement, specifying:
(1)Name of the Flashback Data Archive
(2)Name of the first tablespace of the Flashback Data Archive
(3)(Optional) Maximum amount of space that the Flashback Data Archive can use
    in the first tablespace。The default is unlimited. Unless your space quota
    on the first tablespace is also unlimited, you must specify this value;
    otherwise, error ORA-55621 occurs.
   
    ORA-55621: User quota on tablespace "string" is not enough for Flashback Archive
    Cause: An attempt was made to create or alter a Flashback Archive quota
            which is larger than the user's quota.
    Action: No action required.
(4)Retention time (number of days that Flashback Data Archive data for the
    table is guaranteed to be stored)

--  创建FDA 时,可以指定以上4个参数,没有没有执行Flashback Archive 的配额,
    默认为 unlimited。 这里的配额,指的是用户对表空间的配额。

If you are logged on as SYSDBA, you can also specify that this is the default Flashback
Data Archive for the system. If you omit this option, you can still make this Flashback
Data Archive the default later .
            -- 如果以SYSDBA 登陆,还可以指定default Flashback Data Archive。
              如果没有指定,也可以通过alter flashback archive 命令来指定。

示例:

(1). 先创建几个测试的表空间
SQL> create tablespace FDA1 datafile 'D:/APP/ADMINISTRATOR/ORADATA/NEWCCS/FDA01.dbf' size 100M;
Tablespace created.
SQL> create tablespace FDA2 datafile 'D:/APP/ADMINISTRATOR/ORADATA/NEWCCS/FDA02.dbf' size 100M;
Tablespace created.
SQL> create tablespace FDA3 datafile 'D:/APP/ADMINISTRATOR/ORADATA/NEWCCS/FDA03.dbf' size 100M;
Tablespace created.
SQL> create tablespace FDA4 datafile 'D:/APP/ADMINISTRATOR/ORADATA/NEWCCS/FDA04.dbf' size 100M;
Tablespace created.

(2). 创建一个默认的Flashback Archive, 配额为10M,数据保留期为1年
SQL> create flashback archive default fla1 tablespace fda1 quota 10M retention 1 year;
默认的Flashback Archive 只能有一个:
SQL> create flashback archive default fla3 tablespace fda1 quota 10M retention 1 year;
create flashback archive default fla3 tablespace fda1 quota 10M retention 1 year

*
ERROR at line 1:

ORA-55609: Attempt to create duplicate default Flashback Archive
 
这里报错了,我们可以使用alter flashback 来修改默认的Flashback Archive.

(3)  创建一个Flashback Archive fla2,使用默认配额unlimited。 retention 为2 年。
SQL> create flashback archive fla2 tablespace fda2 retention 2 year;
Flashback archive created.

根据官网的说法,这种情况下,用户对该表空间的配额也必须为ulimited。
否则就会报错ORA-55621。

测试一下:

SQL> conn / as sysdba;
Connected.
SQL> revoke unlimited tablespace from dvd;
Revoke succeeded.
SQL> alter user dvd quota 10m on fda4;
User altered.
SQL> conn dvd/dvd;
Connected.
SQL> create flashback archive fla5 tablespace fda4 retention 1 day;
create flashback archive fla5 tablespace fda4 retention 1 day
                                        *
ERROR at line 1:
ORA-55621: User quota on tablespace "FDA4" is not enough for Flashback Archive
 
报错。

修改用户的配额,再创建,成功:

SQL> conn / as sysdba;
Connected.

SQL> grant unlimited tablespace to dvd;
Grant succeeded.

SQL> conn dvd/dvd;
Connected.

SQL> create flashback archive fla5 tablespace fda4 retention 1 day;
Flashback archive created.

6.2.2  Altering a Flashback Data Archive
With the ALTER FLASHBACK ARCHIVE statement, you can:
-- 使用alter flashback archive 可以修改如下内容:
            (1)Change the retention time of a Flashback Data Archive
            (2)Purge some or all of its data
            (3)Add, modify, and remove tablespaces

Note:
Removing all tablespaces of a Flashback Data Archive causes an error.
If you are logged on as SYSDBA, you can also use the ALTER FLASHBACK ARCHIVE statement
to make a specific file the default Flashback Data Archive for the system.
            -- 不能移除Flashback Data Archive里的所有表空间。 否则报错。
              如果用sysdba 登陆,可以修改默认的Flashback archive。

示例:
6.2.2.1  将Flashback Data Archive 修改为default FA
先用我们具有flashback archive administer 权限的用户试试:

SQL> conn dvd/dvd;
Connected.
SQL> alter flashback archive fla1 set default;
alter flashback archive fla1 set default

*

ERROR at line 1:
ORA-55611: No privilege to manage default Flashback Archive
报错,没有权限,用sysdba 测试成功:

SQL> conn / as sysdba;
Connected.
SQL> alter flashback archive fla1 set default;
Flashback archive altered.

注意一点,只能有一个默认的Flashback archive.

SQL> select flashback_archive_name name, status  from dba_flashback_archive;

NAME      STATUS
---------- -------
FLA1      DEFAULT

FLA2

当前默认的Flashback Archive 是FLA1,我们将默认改成FLA2,在查看:

SQL> alter flashback archive fla2 set default;
Flashback archive altered.

SQL>  select flashback_archive_name name, status  from dba_flashback_archive;

NAME      STATUS
---------- -------
FLA1
FLA2      DEFAULT

6.2.2.2  为已经存在的Flashback Archive 添加表空间,并指定配额

SQL> alter flashback archive fla1 add tablespace fda3 quota 20M;
Flashback archive altered.

6.2.2.3 为已经存在的Flashback Archive 添加表空间,不指定配额,即需要多少用多少空间

SQL>  alter flashback archive fla1 add tablespace fda4;
Flashback archive altered.


6.2.2.4  修改已经存在的Flashback Archive的配额

SQL> alter flashback archive fla1 modify tablespace fda1 quota 20m;
Flashback archive altered.

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/59716b2fb9394c7866eb3120ed90cd10.html