• 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 查看回收站的内容。
  • 相关阅读:
    SDL 开发实战(三):使用 SDL 绘制基本图形
    SDL 开发实战(二):SDL 2.0 核心 API 解析
    SDL 开发实战(一):SDL介绍及开发环境配置
    开源播放器 ijkplayer (六) :Android 下使用 ijkplayer 异常处理思路
    音视频编解码技术(二):AAC 音频编码技术
    FFmpeg开发实战(五):FFmpeg 抽取音视频的视频数据
    FFmpeg开发实战(四):FFmpeg 抽取音视频的音频数据
    FFmpeg开发实战(三):FFmpeg 打印音视频Meta信息
    FFmpeg开发实战(二):FFmpeg 文件操作
    FFmpeg开发实战(一):FFmpeg 打印日志
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317053.html
Copyright © 2020-2023  润新知