配置闪回数据归档
准备一个Oracle 11g数据库使用FBDA功能是相当简单的,只需要经过几个简单的步骤即可:
(1)创建或指定一个或多个表空间用于FBDA保留历史数据
(2)随意指派一个FBDA作为数据库的默认FBDA
(3)指派一个用户账户作为FBDA管理员,授予它FLASHBACK ARCHIVE ADMINISTER系统权限
(4)授予FBDA权限给适合的用户账号
(5)授予FLASHBACK和SELECT权限给合适的FBDA表用户
(6)为FBDA用户授予DBMS_FLASHBACK存储过程EXECUTE权限
下面是具体的实现命令:
DROP USER fbda_admin CASCADE;
CREATE USER fbda_admin IDENTIFIED BY fbda_admin;
GRANT FLASHBACK ARCHIVE ADMINISTER TO fbda_admin;
-- 授予其它用户合适的闪回权限
GRANT FLASHBACK ANY TABLE TO hr;
GRANT EXECUTE ON DBMS_FLASHBACK TO hr;
GRANT FLASHBACK ANY TABLE TO oe;
GRANT EXECUTE ON DBMS_FLASHBACK TO oe;
GRANT FLASHBACK ANY TABLE TO sh;
GRANT EXECUTE ON DBMS_FLASHBACK TO sh;
-- 为闪回数据归档创建表空间
DROP TABLESPACE fbda INCLUDING CONTENTS AND DATAFILES;
CREATE TABLESPACE fbda
DATAFILE '/u01/app/oracle/oradata/ORCL/tsp_fdba01.dbf'
SIZE 24M;
-- 创建一个闪回数据归档保留5天有价值的历史
DROP FLASHBACK ARCHIVE fbda_1;
CREATE FLASHBACK ARCHIVE fbda_1
TABLESPACE fbda
QUOTA 1M
RETENTION 5 DAY;
GRANT FLASHBACK ARCHIVE ON fbda_1 TO hr;
GRANT FLASHBACK ARCHIVE ON fbda_1 TO oe;
GRANT FLASHBACK ARCHIVE ON fbda_1 TO sh;
-- 创建一个闪回数据归档保留1整年有价值的历史
DROP FLASHBACK ARCHIVE fbda_2;
CREATE FLASHBACK ARCHIVE fbda_2
TABLESPACE fbda
QUOTA 4M
RETENTION 1 YEAR;
GRANT FLASHBACK ARCHIVE ON fbda_2 TO hr;
GRANT FLASHBACK ARCHIVE ON fbda_2 TO oe;
GRANT FLASHBACK ARCHIVE ON fbda_2 TO sh;
-- 创建一个闪回数据归档保留7年有价值的历史
DROP FLASHBACK ARCHIVE fbda_3;
CREATE FLASHBACK ARCHIVE fbda_3
TABLESPACE fbda
QUOTA 20M
RETENTION 7 YEAR;
GRANT FLASHBACK ARCHIVE ON fbda_3 TO hr;
GRANT FLASHBACK ARCHIVE ON fbda_3 TO oe;
GRANT FLASHBACK ARCHIVE ON fbda_3 TO sh;
从上面的代码可以看出,其实使用闪回数据归档真的很简单,按照上面的代码,我创建一个表空间FBDA,并在它里面创建了三个闪回数据归档:FBDA_A,FBDA_2和FBDA_3,分别保留5天,1年,7年,我还创建了一个新用户账号FBDA_ADMIN,并授予它FLASHBACK ARCHIVE ADMINISTER权限,最后,我们给系统中“sample”方案中的HR,OE和SH用户账号授予了合适的系统权限,以便它们也可以参与FBDA操作。
启用和禁用一个表的历史保留能力:使用ALTER TABLE <表名> FLASHBACK ARCHIVE [FBDA名]; 命令在现有表上启用FBDA。
如果没有指定FBDA名,将会使用默认的FBDA
DBA也可以给表指定想要的FBDA
如果不存在默认的FBDA就必须要明确指定FBDA
同样,使用ALTER TABLE
ALTER FLASHBACK ARCHIVE fbda_2 SET DEFAULT;
-- 将FBDA_1改为默认的FBDA,注意FBDA_1和FBDA_2只会简单地交换名称
ALTER FLASHBACK ARCHIVE fbda_1 SET DEFAULT;
-- 启用一个现有表使用默认的FBDA(fbda_1)
ALTER TABLE hr.applicants FLASHBACK ARCHIVE;
-- 启用表使用指定的FBDA
ALTER TABLE hr.departments FLASHBACK ARCHIVE fbda_1;
ALTER TABLE hr.job_history FLASHBACK ARCHIVE fbda_2;
ALTER TABLE oe.customers FLASHBACK ARCHIVE fbda_3;
-- 在指定表上禁用闪回数据归档
ALTER TABLE hr.departments NO FLASHBACK ARCHIVE;
上面的代码说明了以下基本原理:
可以事后修改默认的FBDA。最初我使用FBDA_2作为默认FBDA,后来我使用ALTER FLASHBACK ARCHIVE
接下来,我在表HR.APPLICANTS上使用默认FBDA开启了闪回数据归档跟踪
然后,我对HR.DEPARTMENTS,HR.JOB_HISTORY和OE.CUSTOMERS表开启了闪回数据归档跟踪,为它们的历史数据选择了不同的FBDA。
最后,为了显示如何在表上中断FBDA跟踪,我再次在OE.CUSTOMERS 表上使用了ALTER TABLE