• 闪回数据归档测试


    一、测试环境准备:
    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.
  • 相关阅读:
    Qt 布局之二:水平、垂直布局的使用详解
    Qt 布局之一:布局初探
    [数据库] SQL 语法之进阶篇
    [数据库] SQL 语法之基础篇
    看图深入理解单链表的反转
    [数据结构
    (原)tslib的交叉编译
    (转) s-video vs. composite video vs. component video 几种视频格式详细说明和比较
    (转)BT1120接口及协议
    (转)Ubuntu12.04上NFS Server安装使用过程
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317140.html
Copyright © 2020-2023  润新知