zoukankan      html  css  js  c++  java
  • [转]Oracle DB 使用闪回技术2

    • 描述和使用Oracle Total Recall
    – 创建和启用闪回数据归档(FDA)
    – 管理FDA
    – 查看元数据
    • 描述和使用闪回回收站
    – 从回收站还原删除的表
    – 管理回收站的空间使用量
    – 查询回收站
     
     
    Oracle Total Recall 概览
     
    自动跟踪数据库历史更改:
    • 在你指定的保留期内在表级别启用。
    • 所有后续更改都是透明存储的并能够防止篡改。
    • 早于保留期的记录会被自动删除。
    • 使用闪回技术检索历史记录。
     
    SELECT … AS OF TIMESTAMP…
     
    SELECT … VERSIONS BETWEEN TIMESTAMP and TIMESTAMP…
     
     
     
    Oracle Total Recall 概览
     
    Oracle Database 11g中的Oracle Total Recall(也称为闪回数据归档)选件提供了一种用于跟踪生产数据库更改的机制,这种机制是一种安全、高效、易于使用和应用程序透明的机制。
     
     
    参考:闪回数据归档.概述http://blog.csdn.net/rlhua/article/details/12221269
     
     
     
     
     
    使用Oracle Total Recall 技术,你可以自动跟踪和存储启用了闪回数据归档的表中的数据。
    这可确保闪回查询能够获得对数据库对象版本的SQL 级别访问权限,而不会出现快照太旧的错误。
    利用闪回数据归档功能,可以在“跟踪的”表的整个生命期内跟踪并存储对该表的所有事务处理更改。
    不再需要将此智能功能内置到应用程序中。
     
    可将Oracle Total Recall 用于合规性报告、审计报表、数据分析和决策支持系统。闪回数据归档后台进程随数据库一起启动。
     
    使用情形示例:
    • 审计支持:查找自去年以来重复的保险索赔。
    • 合规性支持:监视平静期的股票交易情况。
    • 信息生命周期管理(ILM):确保对病历的永久访问权。
    • 保留策略执行:自动清除五年以前的记录。
    • 历史报告:检索客户的信用及付款历史记录。
    • 错误恢复:还原被错误地删除或更新的记录。
     
     
    设置过程
    1. 创建用于保存FDA 的新表空间。
    2. 使用FLASHBACK ARCHIVE ADMINISTER系统权限:创建闪回数据归档,将它分配到表空间,并指定其保留期。
    CREATE FLASHBACK ARCHIVE fda1
    TABLESPACE fda_tbs1 QUOTA 10M RETENTION 1 YEAR;
    3. 使用FLASHBACK ARCHIVE对象权限:变更基表以启用归档并将其分配到一个闪回归档。
    ALTER TABLE HR.EMPLOYEES FLASHBACK ARCHIVE fda1;
     
     
    闪回数据归档的过程
     
    一个闪回数据归档包含一个或多个表空间。可以拥有多个闪回数据归档,它们都配置有保留时间。你应根据保留时间的要求创建不同的闪回数据归档-例如,为必须保留两年的所有记录创建一个闪回数据归档,为必须保留五年的所有记录创建另一个闪回数据归档。
     
    数据库将在保留期到期后的第一天自动清除所有历史记录信息。
     
     
    1.为闪回数据归档创建表空间。空间大小取决于基表及预期的DML 和DDL 活动。
    2.创建一个闪回数据归档并设置保留时间。归档在闪回数据归档中的数据的保存时间等于配置的保留时间。此任务需要FLASHBACK ARCHIVE ADMINISTER系统权限。
    如果需要不同的保留期,必须创建不同的归档。
    3.为(整个)表启用闪回归档(然后再禁用此归档)。此任务需要FLASHBACK ARCHIVE对象权限。即使为某个表启用了闪回归档,也仍然不允许对该表执行某些
    DDL 语句。默认情况下,闪回归档对任何表都处于关闭状态。
     
     
    • Total Recall 的工作原理
    由fdba后台进程以自优化间隔从还原(及缓冲区高速缓存)中捕获历史数据。默认间隔为5 分钟。不论更新的列有多少,都会存储所更新的整个基表行。
     
    • 使用OLTP 表压缩(而不是Hybrid Columnar 压缩)对历史数据进行压缩。
    注:如果基表使用Hybrid Columnar 压缩,则表无法启用闪回数据归档
     
    • 每个闪回归档分区至少为1 天和1 MB 数据,基于ENDSCN 进行分区。对归档进行闪回查询可避免查询不相关的分区。
     
    • fbda进程最多可调用10 个闪回归档从属进程。
     
    • 如果闪回归档进程和从属进程太忙,则归档可能会按顺序执行,这对用户的响应时间有很大影响。
     
    • Oracle Total Recall 场景
    使用闪回数据归档访问历史数据:
    -- create the Flashback Data Archive
    CREATE FLASHBACK ARCHIVE DEFAULT fla1
    TABLESPACE tbs1 QUOTA 10G RETENTION 5 YEAR;
     
     
    创建了一个名为fla1的默认闪回数据归档,该归档最多可以使用tbs1表空间的10 GB 空间,其数据的保留期为五年。
     
     
    -- Specify the default Flashback Data Archive
    ALTER FLASHBACK ARCHIVE fla1 SET DEFAULT;
     
     
    指定了默认闪回数据归档。默认情况下,系统没有任何闪回数据归档。可以使用以下两种方式之一设置它:
    • 在ALTER FLASHBACK ARCHIVE语句的SET DEFAULT子句中指定某个现有闪回数据归档的名称。
    • 在创建闪回数据归档时,在CREATE FLASHBACK ARCHIVE语句中包括DEFAULT。
     
     
    -- Enable Flashback Data Archive
    ALTER TABLE inventory FLASHBACK ARCHIVE;
    ALTER TABLE stock_data FLASHBACK ARCHIVE;
     
     
    启用了闪回数据归档。如果自动还原管理处于禁用状态,则在尝试修改表时会出现ORA-55614。
     
     
    SELECT product_number, product_name, count FROM inventory AS
    OF TIMESTAMP TO_TIMESTAMP ('2007-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS');
     
    显示了如何检索2007 年年初的所有物料库存。
     
     
     
    Oracle Total Recall 场景
    可以使用CREATE FLASHBACK ARCHIVE语句创建闪回数据归档。
    • 可以为系统指定默认的闪回数据归档(可选)。
    • 需要提供闪回数据归档的名称。
    • 需要提供闪回数据归档的第一个表空间的名称。
    • 可以确定闪回数据归档在表空间中允许使用的最大空间量。默认值为“Unlimited(无限制)”。
    如果第一个表空间中的空间限额不是无限制的,则必须指定该值,否则会引发ORA-55621。
    • 需要提供保留时间(即需要保证表的闪回数据归档数据存储多少天)。
     
     
     
     
     
    Oracle Total Recall 场景
     
    可以选择增加空间:
    ALTER FLASHBACK ARCHIVE fla1
    ADD TABLESPACE tbs3 QUOTA 5G;
     
    将tbs3表空间的最多5 GB 空间添加至fla1闪回数据归档。
     
     
     
    可以选择更改保留时间:
    ALTER FLASHBACK ARCHIVE fla1 MODIFY RETENTION 2 YEAR;
     
    将闪回数据归档fla1的保留时间更改为两年。
     
     
    可以选择清除数据:
    ALTER FLASHBACK ARCHIVE fla1 PURGE BEFORE TIMESTAMP
    (SYSTIMESTAMP - INTERVAL '1' day);
     
    从闪回数据归档fla1中清除了一天前的所有历史数据。通常会在保留时间到期后的第一天执行自动清除。也可以覆盖此设置进行临时清除。
     
     
    可以选择删除闪回数据归档:
    DROP FLASHBACK ARCHIVE fla1;
     
    删除闪回数据归档fla1和历史数据,但不删除其表空间。
     
     
     
    要对表启用闪回归档,请在CREATE TABLE或ALTER TABLE语句中包括FLASHBACK ARCHIVE子句。在FLASHBACK ARCHIVE子句中,可指定用于存储表的历史数据的闪回数据归档。默认值为系统的默认闪回数据归档。要对表禁用闪回归档,请在ALTER TABLE语句中指定NO FLASHBACK ARCHIVE。
    使用ALTER FLASHBACK ARCHIVE命令可以:
    - 更改闪回数据归档的保留时间
    - 清除部分或全部数据
    - 增加、修改和删除表空间
    注:删除闪回数据归档的全部表空间会引发错误。
     
     
     
    • 透明的方案演化
    • DDL 支持:
    – 添加、删除、重命名和修改列
    – 删除和截断分区
    – 重命名和截断表
    • 闪回查询可以跨DDL 更改运行。
    • 不能自动支持所有其它DDL。
     
    透明的方案演化
    闪回数据归档可以使用最常用的DDL 命令。闪回查询会随相应方案返回对应的一行或多行。
     
    • 完整方案演化
    取消关联或关联DBMS_FLASHBACK_ARCHIVE程序包中的过程:
    • 对指定的表禁用Total Recall 并允许更复杂的DDL(升级、拆分表,等等)。
    • 在关联期间执行方案完整性检查。(基表和历史记录表必须为相同的方案。)
     
    注:应谨慎使用此项功能,请注意此功能会导致归档不再保持不变,因为在取消关联期间历史记录可能会更改。
     
     
    可以通过DBMS_FLASHBACK_ARCHIVE程序包执行不被自动支持的所有DDL 更改。可以使用DISASSOCIATE_FBA和REASSOCIATE_FBA过程从闪回数据归档取消关联和重新关联给定的表。
     
    注:应谨慎使用此项功能,请注意此功能会导致归档不再保持不变,因为在取消关联期间历史记录可能会更改。取消关联发生时,系统目录会有记录。
     
     
    上图中显示了下列工作流:
    • 如果有FLASHBACK ARCHIVE ADMINISTER权限,你可以从基表中取消关联归档。
    • 为基表进行必要的更改。
    • 为相应的归档进行必要的更改。
    • 然后使用相同方案将表与归档关联。Total Recall 验证关联方案是否相同。
     
    • 限制
    • 如果使用Hybrid Columnar 压缩,则对基表不能启用Total Recall。
    • 如果使用取消关联,则不能保证历史记录的永久性(但你总可以通过正确的权限清除之前的历史记录。)
    • 历史记录表没有可移植性。
     
     
    限制
    针对启用了闪回数据归档的表使用DDL 语句时,某些DDL 语句会导致ORA-55610错误。例如:
    • ALTER TABLE语句,包含UPGRADE TABLE子句并且使用或不使用INCLUDING DATA子句
    • ALTER TABLE语句,用于移动或交换分区或子分区操作
    • DROP TABLE语句
     
    • 准则
    • 使用SCN 进行精确查询。或者为方便可使用闪回技术。
    • 闪回使用当前系统设置。
    • 在查询过去的数据之前,使用COMMIT或ROLLBACK操作确保数据库的一致性。
    • 不能从动态性能(V$) 视图检索过去的数据。它们包含当前数据。
    • 但是,可以在静态数据字典视图(如*_TABLES)中执行对过去数据的查询。
     
     
    准则
    • 为了方便起见,可以对你编写的SQL 代码使用闪回查询、闪回版本查询或闪回事务处理查询。
    • 记住,所有闪回处理过程都使用当前会话设置(如国家/地区语言和字符集),而不是在所查询的时间有效的设置。
    • 要查询某个精确时间的过去数据,可使用SCN。如果使用时间戳,查询的实际时间可能会比指定的时间提前3 秒钟。Oracle DB 在内部使用SCN,并以3 秒钟的粒度级别将它们映射到时间戳。
    • 要获得稍后与闪回功能一起使用的SCN,可以使用DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER函数。
    • 要计算或检索一个过去时间供查询使用,可以使用一个函数返回值作为时间戳或SC参数。例如,将SYSTIMESTAMP函数的值加上或减去一个INTERVAL值。
    • 要确保数据库的一致性,始终在查询过去数据之前执行COMMIT或ROLLBACK操作。
    • 不能从动态性能(V$) 视图检索过去的数据。对此类视图的查询总是返回当前数据。但是,可以在静态数据字典视图(如*_TABLES)中执行对过去数据的查询。
     
    • 查看闪回数据归档
    查看结果:
    视图名称(DBA/USER) 说明
    *_FLASHBACK_ARCHIVE 显示有关闪回数据归档的信息
    *_FLASHBACK_ARCHIVE_TS 显示闪回数据归档的表空间
    *_FLASHBACK_ARCHIVE_TABLES 显示有关启用了闪回归档的表的信息
     
     
    查看闪回数据归档
    可使用动态数据字典视图查看跟踪的表和闪回数据归档元数据。要访问USER_FLASHBACK_*视图,必须拥有表的所有权。要检查DBA_FLASHBACK_*视图,
    需要SYSDBA权限。
     
    • 闪回删除和回收站
    使用FLASHBACK TABLE命令,可以在无需使用时间点恢复的情况下,还原DROP TABLE语句的结果。
    注:初始化参数RECYCLEBIN用于控制闪回删除功能是打开(ON) 还是关闭(OFF)。如果将该参数设置为OFF,则删除的表不会进入回收站。如果将该参数设置为ON,则删除的表将进入回收站,并且可以进行恢复。默认情况下,RECYCLEBIN设置为ON。
     
    • 回收站
     
    如果不启用回收站,则删除表时,与该表及其从属对象关联的空间会立即变为可回收(也就是说,该空间可用于其它对象)。
     
    如果启用了回收站,则删除表时,与该表及其从属对象关联的空间不会立即变为可回收,即使该空间确实显示在DBA_FREE_SPACE中。
     
    相反,会在回收站中引用删除的对象,这些对象仍属于其各自的所有者。在空间不紧张时,绝不会把回收站对象使用的空间自动回收。
    这样,你就能在尽可能长的期限内恢复回收站对象。
     
    将删除的表“移动”到回收站时,将使用系统生成的名称对该表及其关联对象和约束条件进行重命名。重命名惯例如下:BIN$unique_id$version。
     
    其中,unique_id是该对象的全局唯一标识符,包含26 个字符,用于在所有数据库之间唯一地标识回收站名称,而version是数据库分配的版本号。
     
     
    回收站本身是一个数据字典表,用于维护已删除对象的原始名称与各自系统生成名称之间的关系。可使用DBA_RECYCLEBIN视图查询回收站。
     
     
    以上说明了这种行为:
    1.你已经在表空间中创建了一个名为EMPLOYEES的表。
    2.删除EMPLOYEES表。
    3.此时,EMPLOYEES占用的区被视为空闲空间。
    4.EMPLOYEES被重命名且新名称将记录到回收站中。
     
    • 从回收站还原表
    • 还原删除的表和从属对象。
    • 如果多个回收站条目具有相同原始名称,则:
    – 使用系统生成的唯一名称来还原特定版本
    – 使用原始名称时,还原的表遵循后进先出(LIFO) 的规则
    • 重命名原始名称(如果当前正在使用该名称)。
     
    FLASHBACK TABLE <table_name> TO BEFORE DROP [RENAME TO <new_name>];
     
     
    从回收站还原表
     
    使用FLASHBACK TABLE ... TO BEFORE DROP命令从回收站恢复表及其所有可能的从属对象。可以指定表的原始名称或删除对象时分配给对象的系统生成名称。
     
    如果指定原始名称,且回收站包含多个具有该名称的对象,则最先恢复最晚移动到回收站的对象(LIFO:后进先出)。如果需要检索表的较早版本,则可以指定要检索的表的系统生成名称,或发出其它FLASHBACK TABLE ... TO BEFORE DROP语句,直到检索到所需的表。
     
     
    如果删除原始表后又在同一方案中创建了同名的新表,则会返回错误,除非还指定了RENAME TO子句。
     
    注:闪回删除的表时,恢复的索引、触发器和约束条件将保留各自的回收站名称。因此,建议在闪回删除的表前查询回收站和DBA_CONSTRAINTS。使用这种方法,可以将恢复的索引、触发器和约束条件重命名为更实用的名称。
     
    • 回收站:自动回收空间
    只要回收站对象使用的空间没有被回收,就可以使用闪回删除功能恢复这些对象。下面是回收站对象的回收策略:
    • 显式发出PURGE命令时执行手动清除
    • 空间不足时执行自动清除:对象在回收站中时,DBA_FREE_SPACE也会报告其对应空间,因为这些空间是可以自动回收的。
     
    然后按以下顺序使用特定表空间中的空闲空间:
    1.与回收站对象不对应的空闲空间。
    2.与回收站对象对应的空闲空间。在这种情况下,将使用先进先出(FIFO) 算法自动将回收站对象从回收站中清除。
    3.自动分配的空闲空间(如果表空间是可以自动扩展的)假设在TBS1表空间内创建一个新表。如果向此表空间分配了与回收站对象不对应的空闲空间,则首先使
    用此空闲空间。如果该空间不够,则使用与TBS1内驻留的回收站对象对应的空闲空间。如果使用了某些回收站对象的空闲空间,则会从回收站中自动清除这些
    对象。此时,将无法再使用闪回删除功能恢复这些对象。如果仍未满足空间要求,则作为最后的方法,会在可能的情况下扩展TBS1表空间。
     
    • 回收站:手动回收空间
    PURGE {TABLE <table_name>|INDEX <index_name>}
    PURGE TABLESPACE <ts_name> [USER <user_name>]
    PURGE [USER_|DBA_]RECYCLEBIN
     
     
    使用PURGE命令可从回收站中永久地删除对象。从回收站中清除某个对象时,会从数据库中永久地删除该对象及其从属对象。因此,将无法再使用闪回删除功能恢复从回收站中清除的对象。
     
    下面是可能使用的一些PURGE命令:
    • PURGE TABLE用于清除指定表。
    • PURGE INDEX用于清除指定索引。
    • PURGE TABLESPACE用于清除驻留在指定表空间中的所有对象。此外,也可能清除从属的、驻留在其它表空间中的对象。
    • PURGE RECYCLEBIN用于清除属于当前用户的所有对象。RECYCLEBIN和USER_RECYCLEBIN同义。
     
    • PURGE DBA_RECYCLEBIN用于清除所有对象。要发出此命令,必须具有足够的系统权限或SYSDBA系统权限。
     
    还可以使用Oracle Enterprise Manager 从回收站中清除表。在“Schema folder(方案文件夹)”选项卡中,单击“Tables(表)”,选择删除的对象所在的方案,然后单击“Recycle Bin(回收站)”按钮。从结果列表中选择表并单击“Purge(清除)”按钮。
     
    注:对于PURGE TABLE和PURGE INDEX命令,如果指定原始名称且回收站包含多个具有该名称的对象,则首先清除在回收站中的时间最长的对象(FIFO)。
     
     
    • 不使用回收站
     
    DROP TABLE <table_name> [PURGE];
    DROP TABLESPACE <ts_name> [INCLUDING CONTENTS] ;
    DROP USER <user_name> [CASCADE] ;
     
    回收站的安全注意事项:
    ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=SPFILE;
     
    使用DROP TABLE PURGE命令可从数据库中永久地删除表及其从属对象。使用此命令时,对应的对象不会移到回收站中。此命令提供的功能与以前版本中DROP TABLE命令的功能相同。
     
    发出DROP TABLESPACE ... INCLUDING CONTENTS命令后,表空间中的对象不会移到回收站中。而且,回收站中属于该表空间的对象也会被清除。发出不带INCLUDING CONTENTS子句的以上命令时,表空间必须为空,之后才能成功执行命令。但回收站中可以有属于该表空间的对象。这种情况下,会清除这些对象。
     
     
    发出DROP USER ... CASCADE命令后,将从数据库中永久地删除该用户及其拥有的所有对象。回收站中属于已删除用户的所有对象都将被清除。
    为增加安全性,你可以决定禁用回收站。
     
    以SYSDBA身份连接,你可以:
    • 使用以下命令查看回收站状态:
    SHOW PARAMETER RECYCLEBIN
    • 使用以下命令禁用回收站:
    ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=SPFILE;
    发出此命令后,你需要重新启动数据库。
     
    • 查询回收站
    SELECT owner, original_name, object_name, type, ts_name, droptime, related, space
    FROM dba_recyclebin
    WHERE can_undrop = 'YES';
     
     
    SQL> SELECT original_name, object_name, ts_name, droptime
    FROM user_recyclebin WHERE can_undrop = 'YES';
    ORIGINAL_NAME OBJECT_NAME TS_NAM DROPTIME
    ------------- ----------------------- ------ -------------------
    EMPLOYEES2 BIN$NE4Rk64w...gbpQ==$0 USERS 2007-07-02:15:45:13
     
     
    SQL> SHOW RECYCLEBIN
     
     
    通过查询user_recyclebin或RECYCLEBIN可查看所有已删除的对象。为便于使用,它具有同义词RECYCLEBIN。
    dba_recyclebin视图可显示所有用户删除的且仍在回收站中的所有对象。
    还可以使用SQL*Plus SHOW RECYCLEBIN命令。此命令只显示可“取消删除”的那些对象。
     
    以下示例显示了如何从回收站中提取重要信息:
    • original_name是删除对象前的对象名称。
    • object_name是删除对象后系统生成的对象名称。
    • type是对象的类型。
    • ts_name是对象所属表空间的名称。
    • droptime是删除对象的日期。
    • related是删除对象的对象标识符。
    • space是对象当前使用的块数。
    还可以使用Database Control 查看回收站的内容。

    来源:http://blog.csdn.net/rlhua/article/details/12407737

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/gispf/p/3770794.html
Copyright © 2011-2022 走看看