文章图片标题

oracle11g闪回数据存档详解

分类:oracle 作者:阳光倾城 评论:0 点击: 663 次 日期:2015-07-25

引言

企业面临着日益增加的数据保留和更改控制方面的需求。这一趋势的促因是法规监督和合规性。Sarbanes-Oxley、HIPAA 和 Basel-II 之类的法规对客户数据实施严格的更改控制和跟踪要求。它们对所有行业不同规模的公司均有影响。其中大多数法规指定了较长的保留期(通常不少于 5 年),这段时间内的历史记录应该是可随时访问的。管理历史记录数据的权宜之计或短期方法并不管用。公司需要一个健壮、长期的历史记录管理系统。企业将进一步意识到可通过数据的历史或时间维度获取的业务价值,可从历史数据存储中挖掘到有价值的客户信息。无法维持适当的跟踪和保留的代价是昂贵的。违规会导致罚款、丧失投资者的信任以及名誉受损。

目前使用各种方法来创建和管理历史事务数据。遗憾的是,这些方法都有明显的局限性,并迫使企业进行代价很高的妥协。闪回数据档是 Oracle 数据库 11g 的一个新特性,可通过应用程序高度透明、安全和高效的方式自

动跟踪和维护所有 Oracle 数据的历史变化。作为 Oracle 全面回忆选件的一部分,闪回数据存档克服了目前各种方法在历史数据管理方面的局限性,为企业提供了一种快速、集中、极为高效的解决方案,满足了他们的历史数据管理需要。

历史数据管理:目前的方法

普遍采用的方法是在应用程序级别实施一个历史数据管理系统。历史记录管理和存档的逻辑嵌入在业务逻辑中。这种方法的一个主要优势是,应用程序了解业务上下文并且可以为需要跟踪的不同业务组件提供简单的分组。然而,这伴随着的代价是:增加了应用程序复杂性。必须通过定义的应用程序接口进行数据访问,从而确保精确、完整的历史记录跟踪。在数据库级别直接更新数据会导致历史记录的数据完整性问题,更重要的是,可能会使整个历史记录失效。在一个通常包含数百个应用程序(包括第三方应用程序和自主开发的应用程序)的企业内,在每个应用程序内都实施历史数据管理系统是非常困难的。应用程序升级、更改保留要求以及缺少集中的管理界面,这一切都进一步加剧了这个问题。

第二种方法是使用数据库触发器来维护数据历史记录。这种方法解决了与应用程序管理的数据历史记录相关的许多问题。然而,它却受制于缺少集中管理界面(这将导致维护开销增加)等局限。而且,由于触发器是由前台的每个事务执行的,因此用户进程和应用程序可能受制于退化的性能。

最后是一些第三方解决方案,它们通过挖掘重做日志创建数据历史记录。由于历史记录存储在单独的数据库中,因此该方法无法顺利访问 OLTP 和历史数据。此外,由于界面不同,这些方法可能需要对用户进行额外的培训,而且这些方法通常很昂贵,难以构建。上述方法均无法提供一个高性能、安全、无缝的历史数据管理系统。

闪回数据存档

Oracle 数据库 11g 中的闪回数据存档特性克服了上述大多数局限性。它自动跟踪数据库中所存储数据的每次更改,维护一个安全、高效、易于访问的历史数据存档。所捕获历史数据的保留时间由业务需要决定,可以使用标准的 SQL 结构轻松地访问这些数据。可以对现有的表和新表立即启用历史数据跟踪,而且更重要的是采用了一种应用程序完全透明的方式。

闪回数据存档在数据库内原生实现,这就提供了一种高性能、优化存储的解决方案,并且提供了集中的管理界面,从而满足了企业的数据保留和更改控制等方面的需求。使用闪回数据存档进行历史数据库跟踪的主要优点包括:

1. 应用程序透明 — 无需或只需极少的应用程序更改即可对一个或多个表立即启用历史数据捕获。因此,客户可以使用该特性为打包的应用程序以及自己开发的应用程序捕获数据。

2. 无缝访问 — 可以使用熟悉的闪回 SQL 结构轻松访问历史数据。闪回数据存档包括对闪回查询的支持。应用程序可以无缝查询表数据不同时间点的历史记录。利用该特性无需采取特殊的快照。

3. 安全性 — 历史数据生成之后对于所有用户来说是永远不变的。这是即需即用的,无需任何特殊的或额外的设置。对内部历史表的访问限制为只读。用户(包括管理员)不允许进行任何 DML 操作。由于通过闪回查询机制提供了无缝访问,因此应用程序无需直接查询内部历史表。

4. 性能开销最小 — 普通用户事务受到的影响可以忽略不计。闪回数据存档利用一个轻型机制对跟踪的表上的 DML 操作进行标记以便进行存档。实际的历史记录生成和存档是通过一个后台进程

(后面会说明)异步完成的。

5. 优化的存储 — 历史数据在内部进行分区并进行了高度压缩,减少了存储空间。闪回数据存档使用一个高效的压缩方案来压缩内部历史表。此外,它根据范围分区方案对内部历史表进行分区。闪回数据库存档中的压缩和分区都是自动管理的,无需任何特殊管理。

6. 集中管理 — 闪回数据存档提供了一个集中的、基于策略的管理界面,自动执行大量正在进行的管理任务。使用闪回数据存档,您可以轻松地对表进行分组并设置一个通用的保留策略。新表将自动继承所在闪回数据存档中的保留参数。Oracle 将根据指定的保留自动清除跟踪的所有表中的过期历史数据。这可以将管理员从重复性的历史数据管理工作中解放出来,避免了与手动维护有关的成本高昂的错误(如清除错误的历史记录)。

ORACLE 闪回技术

Oracle 的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复。闪回技术是 Oracle 数据库独有的,支持任何级别的恢复,包括行、事务、表和数据库范围。使用闪回特性,您可以查询以前的数据版本,还可以执行更改分析和自助式修复,以便在保持数据库联机的同时从逻辑损坏中恢复。闪回技术包括以下特性:

闪回查询允许用户查询过去某个时间点的数据,以重新构建由于意外删除或更改而丢失的数据。 闪回版本查询提供了一种查看行级数据库随时间变化的方法。 闪回事务查询提供了一种查看事务级数据库变化的方法。

闪回数据库是进行时间点恢复的新策略。它能够快速将 Oracle 数据库恢复到以前的时间,正确更正由于逻辑数据损坏或用户错误而引起的任何问题。

闪回表功能使 DBA 可以非常快速、轻松地将一个表或一组表恢复至过去特定的某一时间点。

闪回删除在删除对象时提供了一个安全网,您可以非常快速、轻松地取消对一个表及其相关对象对象的删除。

闪回数据存档是闪回系列最近新推出的特性。在 Oracle 数据库 11g 第 1 版中,闪回数据存档支持使用熟悉的闪回查询 SQL 结构“AS

OF”查询历史数据。使闪回数据存档区别于其他闪回特性的一个重要区别就在于,可以访问任何指定期限内的历史数据,远远超出了保留的重做或闪回日志数据的数量。根据合规性或其他业务原因的需要,历史数据保留多久都可以。使用闪回数据存档,历史数据始终可用且可查询。

体系结构

Oracle 采用了一个多版本控制机制,在维护高度并发性的同时可确保读一致性。对数据执行 DML 操作(如插入、更新或删除)时,Oracle 将数据写入到一个重做表空间内,该表空间不仅用于事务回滚,还用于保证并发环境中的读一致性。闪回数据存档处理重做数据的方式与其他许多闪回特性一样。然而,如上所述,闪回数据存档中的历史数据保留并不受重做表空间大小的限制。历史记录生成是以一种非破坏性的方式通过一个名为 “fbda”的新后台进程实现的。开始对一个表通过闪回数据存档跟踪历史记录之后,将对所有事务和相应的重做记录进行标记以便存档。

clip_image002

为了保证对每个事务进行存档,对重做记录进行回收,直至生成历史记录并将其存储在数据库中。该进程按照系统管理的时间间隔休眠和唤醒,并将标记处理为待存档的重做数据。“fbda”生成历史记录后,就准备事务和重做记录来进行回收。异步的“fbda”进程确保对整个事务或前台性能的影响可忽略不计。

“fbda”进程根据系统重做生成速率智能地调整其休眠时间间隔。随着事务活动的增加,“fbda”将自动减少休眠时间间隔(默认休眠时间为 5 分钟)。为了提高性能,“fbda”进程还调整其休眠时间,以尽可能多地从缓冲缓存读取重做数据。闪回数据存档还对所有历史数据使用一个内部分区方案,以提高性能。它还用表压缩来减少因保留时间较长而很快增长至数百 TB 的历史数据的存储空间。

了解闪回数据存档

闪回数据存档是一个用于管理相关表的历史信息的逻辑容器。它是 Oracle 数据库 11g 中新的数据字典对象,定义了存档存储和数据清除策略。闪回数据存档可以跨多个表空间。管理员可以使用“QUOTA”参数定义闪回数据存档在每个表空间中可使用的空间大小。可根据实施不同存档策略的需要创建多个闪回数据存档。每个闪回数据存档都包含一个“RETENTION”参数,该参数指定了保留历史更改的期限。闪回数据存档保证历史数据将保留“RETENTION”指定的时间,并自动清除过期的历史数据。此外,具有必要权限的管理员可以即席清除历史数据。

闪回数据存档为跟踪的每个表创建一个内部历史表。内部历史表是所跟踪表的副本,具有额外的时间戳列。当更新所跟踪表中的一列或多列时,将向历史表中插入新的一列,这是该事务之前该行的前映像。需要特别注意

的是,UPDATE 和 DELETE 操作在历史表中生成一条新记录。闪回数据存档不会为 INSERT 操作创建一条新的历史记录。为了提高性能,对内部历史表进行分区。不允许对内部分区进行任何修改。对内部历史表进行压缩,以降低磁盘空间需求。应用程序或用户无需直接访问内部历史表。“AS OF”SQL 结构可用于无缝查询历史数据。

使用闪回数据存档跟踪历史记录

闪回数据存档要求

1. 通过自动段空间管理 (ASSM) 管理的表空间是使用闪回数据存档所必需的

2. 必须启用自动重做管理

具体方法

使用闪回数据存档启用历史记录跟踪需要 3 个步骤。

1. 使用自动段空间管理创建一个新的表空间,用于存储历史数据(可选)

2. 创建一个闪回数据存档

CREATE FLASHBACK ARCHIVE fda1

TABLESPACE tbs1

RETENTION 5 YEAR;

这段代码在 tbs1 表空间上创建了一个名为“fda1”的新闪回数据存档,

保留策略为 5 年。由于未指定“QUOTA”,因此使用默认的 Unlimited 设置。此时,我们已经为历史数据创建了一个逻辑容器或占位符。

FLASHBACK ARCHIVE ADMINISTER 系统权限是创建新闪回数据存档所必需的 提供了以下静态数据字典视图

DBA/USER_FLASHBACK_ARCHIVE — 显示有关闪回数据存档的信息

DBA/USER_FLASHBACK_ARCHIVE_TS — 显示表空间以及闪回数据存档的映射

3. 启用历史数据存档所需的表

ALTER TABLE EMPLOYEES FLASHBACK ARCHIVE fda1;

现在已经启用了 EMPLOYEES 表来跟踪历史数据,该表的历史数据将存储在闪回数据存档“fda1”中。第一个 DML 操作发生时,在“fda1”中创建内部历史表。

FLASHBACK ARCHIVE 对象权限是启用历史数据跟踪所必需的 提供了以下静态数据字典视图

DBA/USER_FLASHBACK_ARCHIVE_TABLES — 显示为闪回存档而启用的表的信息。

查询历史数据

闪回数据存档使用“AS OF”SQL 结构无缝访问历史数据。您可以查询所跟踪的表中任何行在您指定的保留期的状态。

下面的示例查询 id=193 的员工在 2007 年 6 月 1 日的工资详细信息。

SELECT last_name, first_name, salary

FROM EMPLOYEES AS OF TIMESTAMP TO_TIMESTAMP ('2007-06-

01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') WHERE employee_id=193;

管理闪回数据存档

闪回数据存档确保对所跟踪表的所有事务更改进行历史数据捕获。因此,闪回数据存档自动禁止所有可能导致历史记录失效的操作。所跟踪的表上禁止的 DDL 操作包括删除、截断或重命名表、删除或修改列。内部历史表上的分区或子分区操作也被禁止。然而,在不破坏历史数据捕获的情况下可以添加新列。

闪回数据存档的新权限

FLASHBACK ARCHIVE ADMINISTER — 用于管理闪回数据存档的新系统权限。所允许的操作包括: 创建新的闪回数据存档 修改现有的闪回数据存档 将特定的闪回数据存档作为默认值

设置 RETENTION 时间

即席清除历史数据 添加/删除表空间 禁用对所跟踪表的跟踪 删除闪回数据存档

FLASHBACK ARCHIVE — 用于启用对闪回数据存档上的表的跟踪的新对象权限

最佳实践建议

为了优化性能和空间占用,闪回数据存档不会自动复制内部历史表上的基表索引。建议用户查询 DBA/USER_FLASHBACK_ARCHIVE_TABLES 视图来查找内部表使用的名称,并在这个内部历史表上创建所需的索引。需要特别注意的是,这些索引会影响闪回数据存档进程的性能,因为该进程除了收集和存档事务更改之外还必须维护索引。

其次,建议使用专门的表空间进行闪回数据存档。应保留 QUOTA 参数的默认值 Unlimited。这可以简化空间规划以及闪回数据存档的维护。而且,根据所期望的保留期限对表进行分组,为每个保留期限创建一个新的闪回数据存档。

最后,应限制对系统权限“FLASHBACK ARCHIVE ADMINISTER”的访问。建议将用户对系统权限“FLASHBACK ARCHIVE ADMINISTER”的访问与对象权限“FLASHBACK ARCHIVE”分离。

总结

闪回数据存档提供了一个安全、高效、应用程序透明的解决方案,用于生成和管理历史数据。它提供了一个集中、集成的界面来管理和保留数据历史记录。自动化的、基于策略的管理大大简化了管理。使用闪回数据存档,您可以轻松实现历史数据跟踪,从而遵从新的法规或适应不断变化的业务需求。




声明: 除非注明,本文属( 阳光倾城 )原创,转载请保留链接: http://www.tomrrow.com/archives-2945.html