暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle数据库“闪回数据归档”详解及操作过程

Oracle微学堂 2018-03-05
2747
1、基本概念    

概览

闪回数据归档是一种历史记录数据存储。Oracle Database 11g通过新的闪回数据归档后台进程FBDA自动跟踪和归档启用了闪回数据归档的表中的数据。使用此功能可满足超过还原保留期的长期保留要求。闪回数据归档可确保闪回查询能够获得对数据库对象版本的SQL 级别访问权限,而不会出现快照太旧的错误。

闪回数据归档由一个或多个表空间(或其中的几部分)组成。您可以拥有多个闪回数据归档。每个闪回数据归档都具有特定的保留持续时间。您应根据保留持续时间的要求创建不同的闪回数据归档,例如,为必须保留一年的所有记录创建一个闪回数据归档,为必须保留两年的所有记录创建另一个闪回数据归档等。

FBDA将异步收集原始数据并将其写入闪回数据归档。它并不包括原始索引,因为检索历史记录信息的模式与检索当前信息的模式可能大不相同。

注:可能需要针对历史记录查询持续时间创建适合的索引。

闪回数据归档比较

闪回数据归档技术与闪回数据库的比较:

• 使用闪回数据归档可以访问任意时间点的数据,而不会实际更改当前数据。这与闪回

数据库相反,闪回数据库会使数据库实际返回到某个时间点。

• 必须启用跟踪才能访问历史记录,而闪回数据库需要预配置。闪回数据库属于脱机操

作,需要资源。闪回数据归档属于联机操作(历史记录访问与当前访问无缝共存)。

由于使用了新的后台进程,所以它对现有的进程几乎没有影响。

• 闪回数据归档在表级别启用,而闪回数据库只能在数据库级别运行。

• 使用闪回数据归档,可以返回到一个表的不同行或多个不同表的多个不同时间点,而

使用闪回数据库则只能返回到特定调用的一个时间点。

闪回数据归档:

体系结构

闪回数据归档后台进程(FBDA) 随数据库启动。

1.FBDA首先对缓冲区高速缓存中的还原数据执行操作。

2.如果还原数据已不在缓冲区高速缓存中,FBDA也可以从还原段读取所需值。

3.FBDA将合并启用了闪回归档的表中的修改行,并将其写入相应的历史记录表,这些表将组成闪回数据归档。

可以通过查询*_FLASHBACK_ARCHIVE_TABLES视图查找历史记录表的内部分配名称。历史记录表是压缩的数据,并已在内部进行了分区。

数据库将在保留期到期后的第一天自动清除所有历史记录信息(删除数据,而不破坏闪回数据归档)。例如,如果保留期为10 天,则会在每10 天后的第一天删除最旧的信息,在归档中仅保留10 天的信息。这是实现数字粉碎的一种方法。

准备数据库

要启用闪回数据归档,执行下列任务:

为数据归档创建一个或多个表空间,并对“归档管理员”授予访问权限和适合的限额。

同时,为归档管理员授予FLASHBACK ARCHIVE ADMINISTER系统权限,允许其执行下列语句:

• CREATE FLASHBACK ARCHIVE

• ALTER FLASHBACK ARCHIVE

• DROP FLASHBACK ARCHIVE

要允许特定用户使用特定闪回数据归档,请为归档用户授予对该闪回数据归档的FLASHBACK ARCHIVE对象权限。这样,归档用户可以使用特定闪回数据归档对表启用闪回归档。

以归档管理员身份执行以下示例:

GRANT FLASHBACK ARCHIVE ON FLA1 TO HR;

用户很有可能会使用其它闪回功能。要允许在查询期间访问特定对象,授予对查询涉及的所有对象的FLASHBACK和SELECT权限。

如果用户需要访问DBMS_FLASHBACK程序包,则需要为他们授予对此程序包的SELECT权限。这样,用户就可以使DBMS_FLASHBACK.ENABLE和DBMS_FLASHBACK.DISABLE过程来启用或禁用闪回数据归档。

配置还原:

– 创建还原表空间(默认设置为:可自动扩展的表空间)

– 启用自动还原管理(11g的默认设置)

– 了解还原的自动优化:

— 固定大小的表空间:可获得最佳保留期的自动优化

— 可自动扩展的还原表空间:可获得运行时间最长的查询的自动优化

– 建议对闪回使用以下设置:固定大小的还原表空间

Oracle Database 11g使用下列默认数据库初始化参数:

• UNDO_MANAGEMENT='AUTO'

• UNDO_TABLESPACE='UNDOTBS1'

• UNDO_RETENTION=900

换句话说,默认情况下启用自动还原管理。可自动扩展的还原表空间基于数据库安装而创建。

• 对于固定大小的还原表空间,Oracle DB 会自动优化系统,以便为还原表空间提供可能的最佳还原保留期。

• 对于可自动扩展的还原表空间(默认),Oracle DB 会保留还原数据,其保留时间至少满足运行时间最长的查询所需的保留期,以及UNDO_RETENTION参数指定的还原保留期阈值。

使用固定大小的还原表空间,自动优化还原保留期通常会产生较好的结果。如果由于此原因或其它原因而希望将还原表空间更改为固定大小,还原指导可帮助您确定要分配的正确固定大小。

如果不能确定空间要求或者无法访问还原指导,请执行以下步骤:

1.以可自动扩展的还原表空间开始。

2.在一个业务循环(例如,1 天或2 天或更长时间)中观察它。

3.使用V$UNDO_STAT视图收集还原块信息,计算空间要求,并使用它们创建大小适合的固定还原表空间(《Oracle 数据库管理员指南》中提供了计算公式)。

4.查询V$UNDOSTAT.TUNED_UNDORETENTION以确定对于当前还原表空间还原数据的保留持续时间。设置UNDO_RETENTION参数并不能保证未到期的还原数据不会被覆盖。如果系统需要较多的空间,Oracle DB 可以用最新生成的还原数据覆盖未到期的还原数据。

- 为还原表空间指定RETENTION GUARANTEE子句,以确保不会丢弃未到期的还原数据。

- 为了满足超过还原保留期的长期保留要求,可创建闪回数据归档。

2、基本操作    

oracle11g 启动闪回功能

1、创建独立的ASSM(自动段空间管理)表空间。
create tablespace fbda datafile'/oracle/oradata/orcl/FBDA.dbf' size 1000M segment space management auto;

2、在独立的ASSM上创建闪回数据归档区。
create flashback archive fda tablespace fbda retention 1 month;

3、对指定的数据表执行闪回数据归档设置。
alter table t flashback archive fda;

4、取消对于表数据的闪回归档设置
alter table table_name no flashback archive;

3、课堂实验    

1.创建表空间

SQL>  create tablespace fbda datafile '/Oradatafile/DBData/FBDA.dbf' size 200M segment space management auto;

Tablespace created.


2.启用闪回数据归档,且设置保留时间

SQL> create flashback archive fda tablespace fbda retention 1 month;

Flashback archive created.


3. 为了测试方便,先将UNDO表空间更改为较小,以使得UNDO数据能够尽快老化

SQL>  create undo tablespace UNDOTBS2_SMALL datafile '/Oradatafile/DBData/undotbs02.dbf' size 20m autoextend off;

Tablespace created.

SQL>  alter system set undo_tablespace= UNDOTBS2_SMALL;

System altered.

SQL>  show parameter undo

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

undo_management                      string      AUTO

undo_retention                       integer     18000

undo_tablespace                      string      UNDOTBS2_SMALL


4. 接下来使用测试用户连接,对测试表执行闪回归档设置

SQL> create user liusm identified by liusm default tablespace fbda;

User created.

SQL> grant dba to liusm;

Grant succeeded.

SQL> conn liusm/liusm

Connected.

SQL> create table liusm as select * from sys.dba_objects;

Table created.

SQL> select table_name from user_tables;

TABLE_NAME

------------------------------

LIUSM

SQL> alter table liusm flashback archive fda;

Table altered.

取消对于数据表的闪回归档可以使用如下命令:

alter table table_name no flashback archive;


5. 接下来记录一下SCN,从数据库表中删除部分数据

SQL> select dbms_flashback.get_system_change_number from dual;  

GET_SYSTEM_CHANGE_NUMBER

------------------------

                  897074

SQL> select count(*) from liusm;

  COUNT(*)

----------

     74897

SQL> delete from liusm where rownum < 1001;

1000 rows deleted.

SQL> commit;

Commit complete.


6.现在执行闪回查询,并看执行计划,看数据来源在哪

SQL>  select count(*) from liusm as of scn 897074;

  COUNT(*)

----------

     74897

Execution Plan

----------------------------------------------------------

Plan hash value: 1194651440

--------------------------------------------------------------------------------

--------------------------------

| Id  | Operation                 | Name               | Rows  | Bytes | Cost (%

CPU)| Time     | Pstart| Pstop |

--------------------------------------------------------------------------------

--------------------------------

|   0 | SELECT STATEMENT          |                    |     1 |       |  1113

 (1)| 00:00:14 |       |       |

|   1 |  SORT AGGREGATE           |                    |     1 |       |

    |          |       |       |

|   2 |   VIEW                    |                    |  5460 |       |  1113

 (1)| 00:00:14 |       |       |

|   3 |    UNION-ALL              |                    |       |       |

    |          |       |       |

|   4 |     PARTITION RANGE SINGLE|                    |  1000 | 28000 |    14

 (0)| 00:00:01 |     1 |     1 |

|*  5 |      TABLE ACCESS FULL    | SYS_FBA_HIST_76292 |  1000 | 28000 |    14

 (0)| 00:00:01 |     1 |     1 |

|*  6 |     FILTER                |                    |       |       |

    |          |       |       |

|   7 |      MERGE JOIN OUTER     |                    |  4460 |  8885K|  1098

 (1)| 00:00:14 |       |       |

|   8 |       SORT JOIN           |                    |  4460 | 53520 |  1095

 (1)| 00:00:14 |       |       |

|*  9 |        TABLE ACCESS FULL  | LIUSM              |  4460 | 53520 |  1094

 (1)| 00:00:14 |       |       |

|* 10 |       SORT JOIN           |                    |     1 |  2028 |     3

(34)| 00:00:01 |       |       |

|* 11 |        TABLE ACCESS FULL  | SYS_FBA_TCRV_76292 |     1 |  2028 |     2

 (0)| 00:00:01 |       |       |

--------------------------------------------------------------------------------

--------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

   5 - filter("ENDSCN">897074 AND "ENDSCN"<=897353 AND ("STARTSCN" IS NULL OR "S

TARTSCN"<=897074) AND

              ("OPERATION" IS NULL OR "OPERATION"<>'D'))

   6 - filter("STARTSCN"<=897074 OR "STARTSCN" IS NULL)

   9 - filter("T"."VERSIONS_STARTSCN" IS NULL)

  10 - access("RID"(+)=ROWIDTOCHAR("T".ROWID))

       filter("RID"(+)=ROWIDTOCHAR("T".ROWID))

  11 - filter(("ENDSCN"(+) IS NULL OR "ENDSCN"(+)>897353) AND ("STARTSCN"(+) IS

NULL OR

              "STARTSCN"(+)<897353))

Note

-----

   - dynamic sampling used for this statement (level=2)

Statistics

----------------------------------------------------------

         28  recursive calls

          2  db block gets

       1202  consistent gets

       1063  physical reads

          0  redo size

        424  bytes sent via SQL*Net to client

        415  bytes received via SQL*Net from client

          2  SQL*Net roundtrips to/from client

          3  sorts (memory)

          0  sorts (disk)

1         rows processed

如果此时在执行计划中只看到了liusm这张表,说明数据来源于回滚段

可以模拟压力测试,把数据挤出去。

如果看到了SYS_FBA_TCRV_76292这样的表,说明数据可能来源于归档


7. 闪回功能生成的字典对象有多个,通过查询USER_TABLES/USER_OBJECTS视图可以获得这些对象的详细信息:

SQL>  select table_name,tablespace_name from user_tables where table_name like '%FBA%';

TABLE_NAME                     TABLESPACE_NAME

------------------------------ ------------------------------

SYS_FBA_FA                     SYSTEM

SYS_FBA_TSFA                   SYSTEM

SYS_FBA_BARRIERSCN             SYSTEM

SYS_FBA_TRACKEDTABLES          SYSTEM

SYS_FBA_PARTITIONS             SYSTEM

SYS_FBA_USERS                  SYSTEM

SYS_FBA_DL                     SYSTEM

SYS_MFBA_NHIST_76292

SYS_MFBA_NTCRV

SYS_MFBA_NCHANGE

SYS_MFBA_STAGE_RID

TABLE_NAME                     TABLESPACE_NAME

------------------------------ ------------------------------

SYS_MFBA_NROW

SYS_MFBA_TRACKED_TXN

13 rows .


8. 可以通过数据字典视图来查看关于闪回归档表的记录

SQL> select table_name from dict where table_name like '%FLASHBACK_ARCHIVE%';

TABLE_NAME

------------------------------

DBA_FLASHBACK_ARCHIVE

DBA_FLASHBACK_ARCHIVE_TABLES

DBA_FLASHBACK_ARCHIVE_TS

USER_FLASHBACK_ARCHIVE

USER_FLASHBACK_ARCHIVE_TABLES


9. 可以通过数据字典视图来查看关于闪回归档表的记录

SQL> conn liusm/liusm

Connected.

SQL> select * from user_flashback_archive_tables;

TABLE_NAME                     OWNER_NAME

------------------------------ ------------------------------

FLASHBACK_ARCHIVE_NAME

--------------------------------------------------------------------------------

ARCHIVE_TABLE_NAME                                    STATUS

----------------------------------------------------- -------------

LIUSM                          LIUSM

FDA

SYS_FBA_HIST_76292                                    ENABLED

总之,闪回数据归档是Oracle 11g提供的重要增强之一,通过合理使用这一增强,可以为数据库提供更为全面的数据生命周期管理,Oracle关于UNDO技术的进化至此又迈进了重要的一步。

扫描二维码关注我的微学堂

搜索刘老师微信号:Rman-2014,备注“Oracle学习与咨询”,即可添加好友;或者扫描下面二维码,关注我的“微学堂”公众号,了解最新OCP认证动态、题库及答案解析、培训机构及讲师介绍、课堂授课内容等。每天还有一篇技术文章发布哦!




文章转载自Oracle微学堂,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论