闪回数据归档测试

一、测试环境准备:
1、首先创建一个闪回数据归档的表空间,闪回数据归档由一个或多个表空间(或其中的几部分)组成。
sys@TEST0924> create tablespace fla_tbs1
2 datafile '/u01/app/oracle/oradata/test0924/fla_tbs01.dbf' size 10M
3 reuse autoextend on next 640k maxsize 32767M
4 nologging extent management local segment space management auto
5 /
Tablespace created.
2、再创建一个undo表空间做测试用
sys@TEST0924> create undo tablespace undotbs2
2 datafile '/u01/app/oracle/oradata/test0924/undotbs02.dbf' size 105M
3 reuse autoextend on next 5120k maxsize 32767M
4 /
Tablespace created.
3、创建一个archive_admin用户,来作为归档管理员,默认表空间为fla_tbs1。
sys@TEST0924> create user archive_admin profile default identified by archive_admin
2 default tablespace fla_tbs1
3 account unlock
4 /
User created.
4、授予这个用户相应的权限
sys@TEST0924> grant alter session to archive_admin;
Grant succeeded.
sys@TEST0924> grant create database link to archive_admin;
Grant succeeded.
sys@TEST0924> grant create sequence to archive_admin;
Grant succeeded.
sys@TEST0924> grant create session to archive_admin;
Grant succeeded.
sys@TEST0924> grant create synonym to archive_admin;
Grant succeeded.
sys@TEST0924> grant create view to archive_admin;
Grant succeeded.
sys@TEST0924> grant unlimited tablespace to archive_admin;
Grant succeeded.
sys@TEST0924> grant execute on sys.dbms_stats to archive_admin;
Grant succeeded.
sys@TEST0924> grant connect,resource to archive_admin;
Grant succeeded.
环境搭建完毕。
二、授予archive_admin一些闪回数据归档的权限
授予archive_admin用户管理权限以创建、维护和删除闪回数据归档,以sys用户授予
sys@TEST0924> grant flashback archive administer to archive_admin;
Grant succeeded.
为归档管理员授予FLASHBACK ARCHIVE ADMINISTER系统权限,允许其执行下列语句:
• CREATE FLASHBACK ARCHIVE
• ALTER FLASHBACK ARCHIVE
• DROP FLASHBACK ARCHIVE
三、以archive_admin用户连接数据库
sys@TEST0924> conn archive_admin/archive_admin
Connected.
四、创建闪回数据归档。
archive_admin@TEST0924> create flashback archive fla1 tablespace fla_tbs1 quota 10M retention 1 year
2 /
Flashback archive created.
使用CREATE FLASHBACK ARCHIVE语句创建闪回数据归档。
• 可以为系统指定默认的闪回数据归档(可选)。如果省略此选项,则以后仍可以将此闪回数据归档指定为默认选项。
• 需要提供闪回数据归档的名称。
• 需要提供闪回数据归档的第一个表空间的名称。
• 可以确定表空间中闪回数据归档可以使用的最大空间量。默认设置是不受限制。如果第一个表空间中的空间限额不是无限制的,则必须指定该值,否则会引发ORA-55621。
• 需要提供保留时间(表的闪回数据归档数据的保留天数)。
五、授予HR用户使用fla1归档的权限。
archive_admin@TEST0924> grant flashback archive on fla1 to hr;
Grant succeeded.
要允许特定用户使用特定闪回数据归档,为归档用户授予对该闪回数据归档的FLASHBACK ARCHIVE对象权限。这样,归档用户可以使用特定闪回数据归档对表启用闪回归档。
以归档管理员身份执行以下示例:
GRANT FLASHBACK ARCHIVE ON FLA1 TO HR;
用户很有可能会使用其它闪回功能。要允许在查询期间访问特定对象,授予对查询涉及的所有对象的FLASHBACK和SELECT权限。
如果用户需要访问DBMS_FLASHBACK程序包,则需要为他们授予对此程序包的SELECT权限。这样,用户就可以使DBMS_FLASHBACK.ENABLE和DBMS_FLASHBACK.DISABLE过程来启用或禁用闪回数据归档。
六、切换闪回归档用户角色,即HR用户,将employees表启用闪回数据归档。
archive_admin@TEST0924> conn hr/hr
Connected.
hr@TEST0924> alter table employees flashback archive fla1;
Table altered.
七、查看Feeney先生的薪金并为其加薪三次,每次增加1000.
hr@TEST0924> select employee_id,last_name,salary from employees
2 where last_name='Feeney';
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
197 Feeney 3000
hr@TEST0924>
hr@TEST0924> update employees set salary=salary+1000 where last_name='Feeney';
1 row updated.
hr@TEST0924> commit;
Commit complete.
hr@TEST0924> update employees set salary=salary+1000 where last_name='Feeney';
1 row updated.
hr@TEST0924> commit;
Commit complete.
hr@TEST0924> update employees set salary=salary+1000 where last_name='Feeney';
1 row updated.
hr@TEST0924> commit;
Commit complete.
hr@TEST0924> select employee_id,last_name,salary from employees
2 where last_name='Feeney';
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
197 Feeney 6000
八、查询归档表的内部名称
hr@TEST0924> select * from user_flashback_archive_tables;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME STATUS
---------- ---------- -------------------- ------------------------- -------------
EMPLOYEES HR FLA1 SYS_FBA_HIST_76277 ENABLED
九、确保一下查询使用归档表而不是undo区,故将切换undo表空间并删除旧的表空间。
以sys用户将undotbs2指定为当前表空间。
hr@TEST0924> conn /as sysdba
Connected.
sys@TEST0924> alter system set undo_tablespace=UNDOTBS2;
System altered.
sys@TEST0924> drop tablespace UNDOTBS1;
Tablespace dropped.
十、以hr用户身份,选择在创建闪回数据库归档之后到执行错误DML之前这段时间内的一个时间。
查看'Feeney'先生在该时间的雇员记录,用所选历史日期替换‘10’ minute,示例格式如下:‘50’ SECOND, ‘10’ DAY, ‘5’ MONTH):
注意:如果指定了启动闪回数据归档之前的时间,将出现ORA-1466错误。缩短时间间隔,然后重试。
如果仍然看到薪金为6000,就增加时间间隔再查询。
hr@TEST0924> select employee_id,last_name,salary from employees
2 as of timestamp (systimestamp - interval '20' minute)
3 where last_name='Feeney';
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
197 Feeney 6000
hr@TEST0924> select employee_id,last_name,salary from employees
2 as of timestamp (systimestamp - interval '30' minute)
3 where last_name='Feeney';
EMPLOYEE_ID LAST_NAME SALARY
----------- ------------------------- ----------
197 Feeney 3000
十一、作为hr用户,最新的更新是错误的。要还原到所选历史日期的原始值(例如,三十分钟钱)
hr@TEST0924> update employees
2 set salary=(select salary from employees as of timestamp (systimestamp - interval '30' minute) where last_name='Feeney')
3 where last_name='Feeney';
1 row updated.
hr@TEST0924> select salary from employees where last_name='Feeney';
SALARY
----------
3000
hr@TEST0924> commit;
Commit complete.
十二、以sys用户连接数据库,查看可用的数据字典视图:
sys@TEST0924> select table_name from dict where table_name like upper('%flashback_archive%');
TABLE_NAME
------------------------------
DBA_FLASHBACK_ARCHIVE
DBA_FLASHBACK_ARCHIVE_TABLES
DBA_FLASHBACK_ARCHIVE_TS
USER_FLASHBACK_ARCHIVE
USER_FLASHBACK_ARCHIVE_TABLES
查看DBA_FLASHBACK_ARCHIVE
sys@TEST0924> desc DBA_FLASHBACK_ARCHIVE
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
OWNER_NAME VARCHAR2(30)
FLASHBACK_ARCHIVE_NAME NOT NULL VARCHAR2(255)
FLASHBACK_ARCHIVE# NOT NULL NUMBER
RETENTION_IN_DAYS NOT NULL NUMBER
CREATE_TIME TIMESTAMP(9)
LAST_PURGE_TIME TIMESTAMP(9)
STATUS VARCHAR2(7)
sys@TEST0924> select OWNER_NAME,FLASHBACK_ARCHIVE_NAME,CREATE_TIME,STATUS,RETENTION_IN_DAYS from DBA_FLASHBACK_ARCHIVE;
OWNER_NAME FLASHBACK_ARCHIVE_NAME CREATE_TIME STATUS RETENTION_IN_DAYS
--------------- ------------------------- ----------------------------------- ------- -----------------
ARCHIVE_ADMIN FLA1 01-OCT-13 05.09.38.000000000 PM 365
查询DBA_FLASHBACK_ARCHIVE_TS
sys@TEST0924> desc DBA_FLASHBACK_ARCHIVE_TS
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
FLASHBACK_ARCHIVE_NAME NOT NULL VARCHAR2(255)
FLASHBACK_ARCHIVE# NOT NULL NUMBER
TABLESPACE_NAME NOT NULL VARCHAR2(30)
QUOTA_IN_MB VARCHAR2(40)
sys@TEST0924> select * from DBA_FLASHBACK_ARCHIVE_TS;
FLASHBACK_ARCHIVE_NAME FLASHBACK_ARCHIVE# TABLESPACE_NAME QUOTA_IN_MB
------------------------- ------------------ ------------------------------ ---------------
FLA1 1 FLA_TBS1 10
查询DBA_FLASHBACK_ARCHIVE_TABLES
sys@TEST0924> desc DBA_FLASHBACK_ARCHIVE_TABLES
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
TABLE_NAME NOT NULL VARCHAR2(30)
OWNER_NAME NOT NULL VARCHAR2(30)
FLASHBACK_ARCHIVE_NAME NOT NULL VARCHAR2(255)
ARCHIVE_TABLE_NAME VARCHAR2(53)
STATUS VARCHAR2(13)
sys@TEST0924> select * from DBA_FLASHBACK_ARCHIVE_TABLES;
TABLE_NAME OWNER_NAME FLASHBACK_ARCHIVE_NAME ARCHIVE_TABLE_NAME STATUS
------------------------------ --------------- ------------------------- -------------------- -------------
EMPLOYEES HR FLA1 SYS_FBA_HIST_76277 ENABLED
以用户的身份来查询,同sys_*一样
hr@TEST0924> select table_name from dict where table_name like '%FLASHBACK_ARCHIVE%';
TABLE_NAME
------------------------------
USER_FLASHBACK_ARCHIVE
USER_FLASHBACK_ARCHIVE_TABLES
十三、闪回数据归档维护
以archive_admin用户来实验
hr@TEST0924> conn archive_admin/archive_admin
Connected.
archive_admin@TEST0924>
1、超过保留时间,将自动清除闪回数据归档中的数据。也可以使用以下命令来显示清除数据。
清除两分钟以前的数据:
archive_admin@TEST0924> alter flashback archive fla1 purge before timestamp(systimestamp - interval '2' minute);
Flashback archive altered.
2、添加另一个表孔家用于增加闪回数据归档空间
archive_admin@TEST0924> conn /as sysdba
Connected.
sys@TEST0924> create tablespace fla_tbs2
2 datafile '/u01/app/oracle/oradata/test0924/fla_tbs02.dbf'
3 size 10M reuse autoextend on next 640K maxsize 32767M
4 nologging extent management local segment space management auto
5 /
Tablespace created.
3、作为archive_admin用户,将5MB的fla_tbs2表空间添加到fla1闪回数据归档。
sys@TEST0924> conn archive_admin/archive_admin
Connected.
archive_admin@TEST0924> alter flashback archive fla1 add tablespace fla_tbs2 quota 5M;
Flashback archive altered.
4、一个特定闪回数据归档中的所有表都具有相同的保留时间。
将fla1闪回数据归档的保留时间更改为2年。
archive_admin@TEST0924> alter flashback archive fla1 modify retention 2 year;
Flashback archive altered.
 
十四、以 ARCHIVE_ADMIN 用户身份,删除 FLA1 闪回数据归档。
注:删除闪回数据归档也会删除内部防篡改历史记录表。由于审计和安全的要求,无法直接删除此表。由于表空间可能包含其它数据,因此删除闪回数据归档不会删除它所在的表空间。
archive_admin@TEST0924> DROP FLASHBACK ARCHIVE fla1;
Flashback archive dropped.
原文地址:https://www.cnblogs.com/hzcya1995/p/13317140.html