❶ oracle 系统表能闪回查询吗
一、时间查询闪回
用户store登录,查询customers表
select * from customers;
然后update customers set LAST_NAME=LAST_NAME || 's' ;
commit;
可以看到LAST_NAME被修改了,现在如何查看修改前的数据呢?
使用sqlplus store登录,执行如下语句,就可以查看修改之前LAST_NAME 没有加“s”
DBMS_FLASHBACK.ENABLE_AT_TIME() 该过程将数据库状态闪回到一个特定的时间值。
DBMS_FLASHBACK.ENABLE_AT_TIME(SYSDATE-10/1440 ) 也就是闪存到10分钟之前。
现在执行任何查询就将显示10分钟之前的状态。但是在pl/sql中查询的话 还是现在现在的状态。
所以可以从这里查看之前数据,然后在pl/sql修改回原来的值。
禁用闪回 EXECUTE DBMS_FLASHBACK.DISABLE();
这些命令只能在sqlplus 中使用,在pl/sql中不能使用。
二、系统变更号查询闪回
根据SCN进行闪回操作比根据时间进行要更精确,因为数据库就是使用SCN来跟踪数据库的变化。
获得当前SCN命令:
通过下面语句可以闪回到这个SCN的状态
EXECUTE DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(:CURRENT_SCN);
禁用闪回操作
EXECUTE DBMS_FLASHBACK.DISABLE();
❷ 如何执行Oracle数据库闪回查询
可按以下步骤配置闪回数据库:(确保数据库处于ARCHIVELOG 模式。)
1. 配置快速恢复区。
2. 使用初始化参数DB_FLASHBACK_RETENTION_TARGET 设置保留目标。可指定
一个上限(以分钟为单位),指示数据库能够闪回到多长时间以前。本示例使用
了 2880 分钟,相当于两天。此参数只是一个目标,并不提供任何保证。闪回时间
间隔取决于快速恢复区中保留的闪回数据量的大小。
3. 使用以下命令启用闪回数据库:
ALTER DATABASE FLASHBACK ON;
必须先配置数据库以进行归档,且必须在 MOUNT EXCLUSIVE 模式下启动数据库
后,才能发出此命令来启用闪回数据库。
可以使用以下查询来确定是否已启用闪回数据库:
SELECT flashback_on FROM v$database;
可以使用ALTER DATABASE FLASHBACK OFF 命令禁用闪回数据库。这样,会自动删
除所有现有的闪回数据库日志。
注:仅当在独占模式下装载(而不是打开)数据库时才能启用闪回数据库。
1.确认当前模式
SYS AS SYSDBA on 29-MAR-05 >select flashback_on from v$database;
FLA
---
NO
2.检查/修改恢复区设置
SYS AS SYSDBA on 29-MAR-05 >show parameter db_recovery_file_dest
NAME TYPEVALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_deststring /u01/app/oracle/flash_recovery_areadb_recovery_file_dest_size big integer 10G
SYS AS SYSDBA on 29-MAR-05 >alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area';
SYS AS SYSDBA on 29-MAR-05 >alter system set db_recovery_file_dest_size=15G;
3.检查/修改闪回时间设置
SYS AS SYSDBA on 29-MAR-05 >show parameter db_flashback_retention_target
NAME TYPEVALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_targetinteger 60
SYS AS SYSDBA on 29-MAR-05 >alter system set db_flashback_retention_target=1440;--分钟
System altered.
如何设置flash recovery area
(1).db_recovery_file_dest:指定闪回恢复区的位置
(2).db_recovery_file_dest_size:指定闪回恢复区的可用空间大小
(3).db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是一天。当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的 flash log。所以这个参数要和db_recovery_file_dest_size配合修改。
alter system set db_flashback_retention_target=1440;
alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area';
alter system set db_recovery_size=15G;
4.重新启动数据库到Mount状态
启动flashback database选项。
SYS AS SYSDBA on 29-MAR-05 >shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS AS SYSDBA on 29-MAR-05 >startup mount exclusive;
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1301704 bytes
Variable Size 261890872 bytes
Database Buffers 50331648 bytes
Redo Buffers1048576 bytes
Database mounted.
SYS AS SYSDBA on 29-MAR-05 >alter database flashback on;
Database altered.
SYS AS SYSDBA on 29-MAR-05 >alter database open;
Database altered.
❸ oracle在没有闪回的情况下怎样找回以删了的表
多项研究表明,40% 的应用程序故障都是由操作员或用户的错误造成的。人非圣贤,孰能无过?但是,这些错误很难避免,而且在没有事先规划和使用正确技术的情况下尤其难以恢复。这样的错误会导致“逻辑”数据损坏,或者导致 IT 基础架构的一个或多个组件停止运行。纠正个别组件的错误相对来说简单,而检测并纠正逻辑数据的损坏,例如意外删除了有价值的数据时,所耗费的操作将导致业务产出的巨大损失。典型的用户错误可能包括意外删除了有价值的数据,错误删除了数据和错误删除了表。避免人为错误 Oracle 数据库体系结构利用了人为错误数据库恢复领域独有的技术进展。Oracle 闪回技术提供了一组新特性,可及时查看数据并在时间上前后滚动数据。使用闪回特性,可以查询历史数据、执行更改分析,以及执行自助修复,以便在数据库联机时从逻辑损坏中恢复。利用 Oracle 闪回技术,您完全可以撤销过去的操作!Oracle9i 引入了闪回查询,从而提供了可从人为错误中恢复的简单、强大和全面的非破坏性机制。它允许用户查看过去某个时间点的数据状态,而无需更改任何数据库结构。 Oracle 数据库 10g 扩展了闪回技术,提供了基于数据库、表、行和事务级别的快速、方便的恢复。闪回技术使恢复过程实现了革命性变化,您只需对更改的数据进行操作。现在,错误恢复所需的时间就相当于错误发生的时间。Oracle 10g 闪回技术包括闪回数据库、闪回表、闪回删除、闪回版本查询以及闪回事务查询。 可以轻松地利用闪回技术进行非修复性操作,如使用闪回查询进行历史审计、利用闪回数据库撤销测试更改。Oracle 数据库 11g 引进了一个创新的方法,使用闪回数据存档来管理和查询长期的历史数据。该版本还提供了简单的一步式事务撤销操作,实现了新的闪回事务功能。 Oracle 数据库 11g 中的新特性 闪回数据存档 闪回数据存档能够以高度的应用程序透明性、安全性及高效的方式自动跟踪和维护对所有 Oracle 数据的历史更改。作为 Oracle Total Recall 选件的组成部分,闪回数据存档为企业提供了快速、集中和极其高效的解决方案,以满足管理所有历史数据的需要。闪回数据存档自动跟踪对数据库中所存储数据的每个更改,同时维护一个安全、高效和易于访问的历史数据存档。捕获的历史数据可以根据业务需要保存任意长的时间,并且可以使用闪回 SQL 查询方便地进行访问。在现有表和新建表上均可立即启用历史数据跟踪,更重要的是,以一种完全应用程序透明的方式进行跟踪。 闪回数据存档提供了一个高性能的、存储优化的、具有集中管理界面的解决方案,可以满足组织对数据保留和更改控制的需求。使用闪回数据存档进行历史数据跟踪的主要好处包括: 应用程序透明: 在应用程序没有更改或更改很小的情况下,可以在一个或多个表上立即启用历史数据捕获。因此,客户可以使用该特性捕获打包应用程序以及自行开发的应用程序的历史数据。 无缝访问: 可以使用熟悉的闪回 SQL 结构轻松访问历史数据。闪回数据存档包括对闪回查询的支持。应用程序可以及时无缝地查询不同时间点的表历史数据。无需拍摄特殊快照既可利用该特性。 安全性: 历史数据一旦生成,任何用户都不能进行修改。这就实现了即取即用,而无需特殊或额外的设置。对内部历史表的访问限制为只读。不允许用户(包括管理员)进行 DML 操作。由于通过闪回查询机制提供了无缝访问,因此应用程序无需直接查询内部历史表。 最小的性能开销: 常规用户事务几乎没有影响。闪回数据存档采用轻型机制来标记要存档的跟踪表上的 DML 操作。通过稍后介绍的后台进程异步生成实际历史记录并进行存档。 存储优化: 在内部对历史数据进行分区和高度压缩,以减少占用的存储空间。闪回数据存档采用高效的压缩模式来压缩内部历史表。此外,它还依据范围分区模式对内部历史表进行自动分区。闪回数据存档中的压缩和分区都是自动管理的,无需特殊管理。 集中管理: 闪回数据存档提供了一个基于策略的集中管理界面,实现了大量正在进行中的管理任务自动化。使用闪回数据存档,可以方便地对表进行分组并设置常规保留策略。新表将从所在的闪回数据存档中自动继承保留参数。Oracle 将根据指定的保留策略自动清除所有跟踪表中过期的历史数据。这就可以将管理员从重复的历史数据管理中解放出来,避免了与人工维护有关的成本高昂的错误(如,错误清除了历史数据)。 闪回事务 大型数据库应用程序依赖复杂的事务序列,以确保一组插入、更新或删除的原子性和一致性。如果出现一个“问题”事务,管理员必须向前追溯,了解哪些更改受该事务的影响并确定任何依赖关系(例如,“问题”事务之后修改了相同数据的事务),从而确保撤销该事务,保留原始的、好的数据状态和任何相关数据。执行这种事务分析可能很费力,尤其对非常复杂的应用程序。通过闪回事务,使用一个 PL/SQL 操作即可实现单个事务(还可以包含它依赖的所有事务)的闪回,或者使用直观的 EM 向导来识别并闪回有问题的事务。闪回事务依赖于给定事务及其相关事务的撤销数据和存档重做日志的可用性,以便撤销更改。Oracle 数据库 10g 第 2 版中的新特性恢复点 当需要进行 Oracle 数据库时间点恢复操作时,DBA 必须确定数据必须回滚到的时间或 SCN。Oracle 数据库 10g 第 2 版用恢复点简化了时间点恢复。恢复点是用户定义的一个名称,与闪回数据库、闪回表和恢复管理器 (RMAN) 结合使用时可以代替 SCN 或时钟时间,可以通过企业管理器或者用 SQL*Plus 或 RMAN 以命令行方式创建。使用恢复点,无需调查事务的 SCN 或时间,使用户能够收藏数据库事务事件。有保证的恢复点确保了始终维护足够的闪回日志,以便返回到恢复点。这意味着快速恢复区将不删除闪回日志,除非当前的保证恢复点不再需要这些日志。可在进行主要数据库更改(如数据库批处理作业或模式升级)之前创建这些特殊恢复点,从而可在需要撤销更改时使用这些恢复点进行闪回。通过RESETLOGS 闪回数据库 通过RESETLOGS 闪回数据库使 RESETLOGS 操作之前创建的闪回日志可用于闪回数据库操作。在 Oracle 数据库 10g 第 2 版中,使用 RESETLOGS 打开数据库后即保留闪回日志。如果直到执行了 RESETLOGS 之后才发现长期存在的逻辑错误,这种情况下该特性非常有用,需要在 RESETLOGS 之前进行闪回。在 Oracle Data Guard 环境中,该功能允许物理备用数据库以读写方式打开,以便稍后闪回更改并将更改转换回物理备用数据库。如果切换操作后发现逻辑错误,可以将主数据库和备用数据库闪回到切换操作前的 SCN 或时间点。Oracle 数据库 10g 第 1 版中的新特性闪回数据库 闪回数据库可快速地将 Oracle 数据库倒回至以前的某个时间,以便纠正由逻辑数据损坏或用户错误造成的任何问题。闪回数据库就像数据库的“倒退按钮”。它提供数据库的时间点恢复,而无需先恢复数据库备份。当您希望消除从磁带恢复数据库备份所花的时间时,数据库时间点恢复是一种快速方法。 闪回数据库功能(可使用 FLASHBACK DATABASE 命令从 RMAN 和 SQL*Plus 启用)与传统的时间点恢复的效果类似。它允许您将数据库返回到其近期的状态。若要启用闪回数据库功能,用 DBA 配置闪回恢复区。快速恢复区是 Oracle 数据库 10g 的一个新特性,它为 Oracle 数据库中所有与恢复相关的文件和操作提供了统一的存储位置。除了闪回数据库日志外,恢复区还包含存档重做日志和 RMAN 备份。有关快速恢复区的详细信息,请参考 Oracle 备份和恢复文档。 Oracle 在快速恢复区内自动创建和管理闪回日志。因为快速恢复区配置了空间定额,闪回日志要受制于这些磁盘空间限制。闪回日志的大小区别很大,这取决于在给定的闪回日志间隔期间数据库更改的读/写速度。旧程序块版本的副本被写入到闪回日志中。如果一天之内更新了 10% 的数据库程序块,则 24 小时闪回日志的大小约为您数据库大小的十分之一。如果将数据库恢复到过去较早时期可能要求更多的磁盘空间,则 DBA 可能会动态地更改此磁盘定额。 闪回为 Data Guard 提供了易于使用的方法来纠正用户错误。闪回数据库既可用在主数据库上又可用在备份数据库上,可快速地将数据库恢复到较早的时间点,从而避免用户错误。同时,如果管理员决定故障切换到备用数据库,但那些用户错误已被应用于备用数据库(例如,由于启用了实时应用特性),则管理员只需将备用数据库闪回到某个安全的时间点。启用闪回数据库的性能开销不到 2%。您可能不希望牺牲任何生产数据库的性能开销,而是实现一种平衡。如果能在数分钟而不是数小时内恢复数据库,则可避免公司上百万美元的收益损失,您愿意将 2% 的资源用于闪回数据库吗?启用闪回数据库功能有以下几方面好处: 免去了恢复备份的时间。当数据库因遇到灾难性故障而关闭时,公司因无法做生意而导致大量收入损失。 消除了备用数据库重做应用延迟。 闪回数据库与 Data Guard 无缝集成。备用数据库现在可以轻松快速闪回到过去的任意时间点,这样在应用重做过程中就不需要延迟。 意外错误纠正。 闪回数据库提供了 Oracle 数据库的连续快照。数据库可以回退到 SCN 或时间戳。 闪回表 当发生人为错误或应用程序错误时,您可能想将一个或多个表状态恢复至故障发生以前的时间点。使用闪回表,DBA 能够将一个或一组表快速轻松地联机恢复到指定时间点。闪回表可在恢复表的同时自动保留其相关属性(如当前索引、触发器和限制),而无需 DBA 查找和恢复应用程序特有的属性。闪回表缓解了执行更为复杂的时间点恢复操作的需求。以下命令将 ORDERS 和 ORDER_ITEMS 表闪回到 7 月 7 日下午 2:33。 FLASHBACK TABLE orders, order_items TO TIMESTAMP (JUL-07-2003, 02:33:00);和闪回查询一样,闪回表也依靠撤销数据来恢复表。因此撤销数据必须可用,这样闪回表才能成功。自动撤销管理特性允许您使用 UNDO_RETENTION 初始化参数指定保留撤销数据的时间。通过使用此参数并适当地规定撤销表空间大小,DBA 能够控制使用闪回表的情况下可修复表的回退时间长短。 DBA 可以使用闪回表特性快速地从人为错误中恢复,它还可以用作自助式修复工具以便从意外修改或删除中恢复。应用程序开发人员可以将闪回表功能合并到他们定制的应用程序中。凭借基于时间点对象的恢复可用性、快速恢复和易用性,该工具相比于介质恢复提供更多的好处。闪回表联机执行恢复操作 将指定表中的所有数据恢复到时间戳或 SCN 描述的先前的时间点。 自动恢复所有的表属性(如索引、触发器以及应用程序所必需的内容),这些应用程序利用闪回的表才能发挥作用。 在分布式环境中维护任何远程状态。例如,所有应用程序要求的表修改都被闪回。 按照约束规定保持数据完整性。Oracle 保留了所有从属对象和参考的完整性。 即使在闪回操作以后,仍然能够将其恢复到最初状态。 闪回删除 回收站是一个虚拟容器,所有被删除的对象都驻留在这里。在回收站中,这些对象占据与创建它们时所占据的相同空间。如果在 USERS 表空间中创建表 EMP,那么删除的表 EMP 保留在 USERS 表空间中。并不移动删除的表和任一相关对象(如索引、约束、嵌套表和其他相关对象),仅对它们进行重命名,使其前缀为 BIN$$。可以继续访问删除表中的数据,甚至可以依据删除表使用闪回查询。在删除回收站对象前,每个用户对回收站对象都拥有相同的权利和权限。可以通过查询新回收站视图来查看删除表。回收站中的对象将保留在数据库中,直到删除对象的所有者决定使用新清除命令永久性删除这些对象。按用户的定额对回收站中的对象计数。但闪回删除是一种非破坏性特性。如果发生下面的情况,将通过空间恢复过程自动清除回收站中的对象用户创建新表或添加导致其超出定额的数据。 表空间需要扩展其文件大小,以适应创建/插入操作。 错误删除了表?没问题。使用闪回删除快速撤销删除。 闪回查询 闪回查询是随 Oracle9i 一起引入的,它提供了查看存在于以前的数据的能力。默认情况下,数据库上的操作使用最近提交的可用数据。如果希望查询过去某个时间的数据库,那么,可以使用闪回查询特性进行此项操作。此特性可以指定时间或系统更改编号 (SCN),并使用提交的数据从对应时间中进行查询。当使用自动撤销管理时,闪回查询机制最有效。 Oracle 数据库将撤销操作当作第一等级的数据库对象。撤销操作具有持久性,可使数据库系统继续有效,也可导致数据库系统崩溃或关闭。为获取更佳性能,它还与其他数据库对象分享数据库缓冲存储器。Oracle 数据库使用超出事务处理提交范围的撤销操作,提供长期运行查询的读取一致性,并从逻辑损坏中恢复。 Oracle 数据库提供了直接指定为保留而进行的撤销数量的方法。此系统自动回收过期的撤销操作,以便为新事务生成撤销提供空间。撤销保留值的选择取决于长期运行查询的长度以及逻辑损坏的恢复需求。然而,用户可以不选择指定的撤销保留,以及允许系统为指定的撤销空间提供最佳保留。此最佳保留考虑到长期运行查询以及从逻辑损坏中恢复的最佳可能范围。并不保证默认的撤销保留。如果用尽用于现行事务的过期撤销,那么,系统可以使用最早的未过期撤销操作。 如果UNDO_RETENTION 设置为大于 5 天,那么,Oraclee 数据库 10g 第 1 版中的一项新功能是可以查询过去 5 天以前的数据。只要为撤销表空间数据文件分配足够的磁盘空间,那么,Oracle 将维护一段时间内的撤消操作。下面描述了确保数据库可以使用依赖于撤销操作的闪回查询和其他闪回特性所需要的步骤:确保数据库使用一个撤销表空间。将 UNDO_MANAGEMENT 初始化参数设置为自动指定。 将UNDO_RETENTION 初始化参数设置为一个可以使撤销操作保留足够时间的值,从而可以及时成功返回您的最长查询或者从人为错误中恢复。 为了保证未过期的撤销不被覆盖,设置撤销表空间的 RETENTION GUARANTEE 子句。 闪回查询的一个独有特性是可以查看过去的数据,然后正确选择如何处理此信息。您可以进行分析,然后撤销更改,或者捕获更改的数据以供将来处理。闪回查询机制非常灵活,可以用于很多场合。可用于:查询过去存在的数据。 将当前数据与过去的数据进行比较。可以比较单独行或进行更复杂的比较,如查找交集或合并。 恢复已删除或更改的数据。 闪回版本查询 闪回版本查询提供了审计表行以及检索有关更改行事务信息的方法。它检索所有提交的行版本,这些行位于或曾经位于发出查询的时间和过去某一时间点之间。它利用自动撤销管理完成此项操作。 闪回版本查询是 SQL 的扩展,可用于检索指定表中不同行的版本,此表存在于特定时间段内。对于任一指定的表,每次执行 COMMIT 语句时,都会创建一个新行版本。闪回版本查询返回存在于指定时间段内的每个行版本的行。使用 SELECT 语句的 VERSIONS BETWEEN 子句调用闪回版本查询功能。 闪回版本查询提供了新的附加列,这些列提供了有关行数据事务的详细信息,此行数据允许 DBA 查明 Oracle 数据库中数据更改的时间和方式。 VERSIONS_XID — 创建此行版本的事务 id VERSIONS_OPERATION — 创建此行版本的操作(如删除、插入和更新) VERSIONS_STARTSCN — 此行版本首次中出现时的 SCN VERSIONS_ENDSCN — 此行版本首次进行更改时的 SCN。 闪回版本查询是 DBA 运行分析和回答“这是怎么发生的?”问题的强大工具。DBA 不仅可以运行手动分析,而且闪回版本查询还是应用程序开发人员的强大工具。可以构建用于审计目的的自定义应用程序。并不是每个人都能够真正解释他/她的操作。 闪回事务查询 您可能会发现表中的数据不知何故被不正确地更改了。为了研究该更改,可使用多个闪回查询及时查看指定点的行数据。更高效的方法是,使用闪回版本查询特性查看一定时间内对行进行的所有更改以及相关的事务 id。该特性允许将 VERSIONS BETWEEM 子句附加至 SELECT 语句,后者指定 SCN 或希望查看其间行值发生变化的时间戳范围。 一旦确定错误事务,就可使用闪回事务查询特性识别该事务进行的其他更改,并请求撤销 SQL 来冲销这些更改。您可以通过 FLASHBACK_TRANSACTION_QUERY 视图获得事务历史记录和撤消 SQL。 如果需要将错误事务的结果倒退回去,可以手动执行撤销 SQL 语句,从而可以轻松地从用户或应用程序错误中恢复。闪回事务查询可以提高对数据库中问题的联机诊断能力,并利于执行事务分析和审计。总结 人为错误是导致系统故障的主要原因之一。这些错误很难避免,而且在没有事先规划和使用正确技术的情况下尤其难以恢复。“正确”技术是:Oracle 数据库 11g。为什么犯错误只需几秒,而恢复却要花费数小时或数天?不应如此并且现在也不会如此。闪回通过只在更改数据上运行引发了恢复变革。一条命令即可修复人为错误导致的损坏。闪回技术在去除了恢复的复杂性的同时,缩短了从难以预测的人为错误恢复的时间。
❹ 闪回查询~A为什么不要
无论闪回(flashback)还是之前的select from table as scn #
都是从redolog中查询内容
archivelog的作用是当redolog切换时,将最早的一个redolog拷贝到归档文件并复用
而非归档模式时即直接复写最早的redolog
所以说,archivelog模式与闪回没有直接关系,不是实现闪回查询的必要条件
btw,好奇的问问,除了C,你觉得还有要选的么~?
❺ 如何闪回删除的表格oracle
查看回收站中表
selectobject_name,original_name,partition_name,type,ts_name,createtime,droptimefromrecyclebin;
恢复表
SQL>flashbacktabletest_droptobeforedrop;或
SQL>flashbacktable"BIN$b+XkkO1RS5K10uKo9BfmuA==$0"tobeforedrop;
注:必须9i或10g以上版本支持,flashback无法恢复全文索引
以下为参考资料
使用 Oracle Database 10g 中的闪回表特性,可以毫不费力地恢复被意外删除的表
以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表 ― 当然是意外地删除 ― 并需要尽快地恢复。(在某些时候,这个不幸的用户可能就是 DBA!)
Oracle9i Database 推出了闪回查询选项的概念,以便检索过去某个时间点的数据,但它不能闪回 DDL 操作,如删除表的操作。唯一的恢复方法是在另一个数据库中使用表空间的时间点恢复,然后使用导出/导入或其他方法,在当前数据库中重新创建表。这一过程需要 DBA 进行大量工作并且耗费宝贵的时间,更不用说还要使用另一个数据库进行克隆。
请使用 Oracle Database 10g 中的闪回表特性,它使得被删除表的恢复过程如同执行几条语句一样简单。让我们来看该特性是如何工作的。
删除那个表!
首先,让我们查看当前模式中的表。
SQL>select*fromtab;
TNAME
TABTYPE
CLUSTERID
-----------------------------------
RECYCLETEST
TABLE
现在,我们意外地删除了该表:
SQL>droptablerecycletest;
Tabledropped.
现在让我们来查看该表的状态。
SQL>select*fromtab;
TNAME
TABTYPE
CLUSTERID
-----------------------------------------
BIN$04LhcpndanfgMAAAAAANPw==$0TABLE
表 RECYCLETEST 已不存在,但是请注意出现新表 BIN$04LhcpndanfgMAAAAAANPw==$0。这就是所发生的事情:被删除的表 RECYCLETEST 并没有完全消失,而是重命名为一个由系统定义的名称。它存在于同一个表空间中,具有与原始表相同的结构。如果在该表上定义了索引或触发器,则它们也被重命名,使用与表相同的命名规则。任何相关源(如过程)都失效;原始表的触发器和索引被改为放置在重命名的表 BIN$04LhcpndanfgMAAAAAANPw==$0 上,保持被删除表的完整对象结构。
表及其相关对象被放置在一个称为"回收站"的逻辑容器中,它类似于您 PC 机中的回收站。但是,对象并没有从它们原先所在的表空间中删除;它们仍然占用那里的空间。回收站只是一个列出被删除对象目录的逻辑结构。在 SQL*Plus 提示符处使用以下命令来查看其内容(您需要使用 SQL*Plus 10.1 来进行此操作):
SQL>showrecyclebin
ORIGINALNAME
RECYCLEBINNAME
OBJECTTYPE
DROPTIME
----------------------------------------------------------------
RECYCLETEST
BIN$04LhcpndanfgMAAAAAANPw==$0TABLE
2004-02-16:21:13:31
结果显示了表的原始名称 RECYCLETEST,并显示了回收站中的新名称,该名称与我们看到的删除后所创建的新表名称相同。(注意:确切的名称可能因平台不同而不同。)为恢复该表,您所需要做的就是使用 FLASHBACK TABLE 命令:
SQL>;
FLASHBACKCOMPLETE.
SQL>SELECT*FROMTAB;
TNAME
TABTYPE
CLUSTERID
-----------------------------------------
RECYCLETEST
TABLE
瞧!表毫不费力地恢复了。如果现在查看回收站,它将是空的。
记住,将表放在回收站里并不在原始表空间中释放空间。要释放空间,您需要使用以下命令清空回收站:
PURGERECYCLEBIN;
但是如果您希望完全删除该表而不需要使用闪回特性,该怎么办?在这种情况下,可以使用以下命令永久删除该表:
DROPTABLERECYCLETESTPURGE;
此命令不会将表重命名为回收站中的名称,而是永久删除该表,就象 10g 之前的版本一样。
管理回收站
如果在该过程中没有实际删除表 ― 因而没有释放表空间 ― 那么当被删除的对象占用了所有空间时,会发生什么事?
答案很简单:这种情况根本不会出现。当表空间被回收站数据完全占满,以至于必须扩展数据文件来容纳更多数据时,可以说表空间处于"空间压力"情况下。此时,对象以先进先出的方式从回收站中自动清除。在删除表之前,相关对象(如索引)被删除。
同样,空间压力可能由特定表空间定义的用户限额而引起。表空间可能有足够的空余空间,但用户可能将其在该表空间中所分配的部分用完了。在这种情况下,Oracle 自动清除该表空间中属于该用户的对象。
此外,有几种方法可以手动控制回收站。如果在删除名为 TEST 的特定表之后需要从回收站中清除它,可以执行
PURGETABLETEST;
或者使用其回收站中的名称:
PURGETABLE"BIN$04LhcpndanfgMAAAAAANPw==$0";
此命令将从回收站中删除表 TEST 及所有相关对象,如索引、约束等,从而节省了空间。但是,如果要从回收站中永久删除索引,则可以使用以下命令来完成工作:
purgeindexin_test1_01;
此命令将仅仅删除索引,而将表的拷贝留在回收站中。
有时在更高级别上进行清除可能会有用。例如,您可能希望清除表空间 USERS 的回收站中的所有对象。可以执行:
PURGETABLESPACEUSERS;
您也许希望只为该表空间中特定用户清空回收站。在数据仓库类型的环境中,用户创建和删除许多临时表,此时这种方法可能会有用。您可以更改上述命令,限定只清除特定的用户:
PURGETABLESPACEUSERSUSERSCOTT;
诸如 SCOTT 等用户可以使用以下命令来清空自己的回收站
PURGERECYCLEBIN;
DBA 可以使用以下命令清除任何表空间中的所有对象
PURGEDBA_RECYCLEBIN;
可以看到,可以通过多种不同方法来管理回收站,以满足特定的需要。
表版本和闪回功能
用户可能会经常多次创建和删除同一个表,如:
CREATETABLETEST(COL1NUMBER);
INSERTINTOTESTVALUES(1);
commit;
DROPTABLETEST;
CREATETABLETEST(COL1NUMBER);
INSERTINTOTESTVALUES(2);
commit;
DROPTABLETEST;
CREATETABLETEST(COL1NUMBER);
INSERTINTOTESTVALUES(3);
commit;
DROPTABLETEST;
此时,如果您要对表 TEST 执行闪回操作,那么列 COL1 的值应该是什么?常规想法可能认为从回收站取回表的第一个版本,列 COL1 的值是 1。实际上,取回的是表的第三个版本,而不是第一个。因此列 COL1 的值为 3,而不是 1。
此时您还可以取回被删除表的其他版本。但是,表 TEST 的存在不允许出现这种情况。您有两种选择:
使用重命名选项:
;
;
这些语句将表的第一个版本恢复到 TEST1,将第二个版本恢复到 TEST2。 TEST1 和 TEST2 中的列 COL1 的值将分别是 1 和 2。或者,
使用表的特定回收站名称进行恢复。为此,首先要识别表的回收站名称,然后执行:
FLASHBACKTABLE"BIN$04LhcpnoanfgMAAAAAANPw==$0"TOBEFOREDROPRENAMETOTEST2;
FLASHBACKTABLE"BIN$04LhcpnqanfgMAAAAAANPw==$0"TOBEFOREDROPRENAMETOTEST1;
这些语句将恢复被删除表的两个版本。
警告......
取消删除特性使表恢复其原始名称,但是索引和触发器等相关对象并没有恢复原始名称,它们仍然使用回收站的名称。在表上定义的源(如视图和过程)没有重新编译,仍然保持无效状态。必须手动得到这些原有名称并应用到闪回表。
信息保留在名为 USER_RECYCLEBIN 的视图中。在对表进行闪回操作前,请使用以下查询来检索原有名称。
SELECTOBJECT_NAME,ORIGINAL_NAME,TYPE
FROMUSER_RECYCLEBIN
WHEREBASE_OBJECT=(SELECTBASE_OBJECTFROMUSER_RECYCLEBIN
WHEREORIGINAL_NAME='RECYCLETEST')
ANDORIGINAL_NAME!='RECYCLETEST';
OBJECT_NAME
ORIGINAL_NTYPE
----------------------------------------
BIN$04LhcpnianfgMAAAAAANPw==$0IN_RT_01
INDEX
BIN$04LhcpnganfgMAAAAAANPw==$0TR_RT
TRIGGER
在表进行闪回操作后,表 RECYCLETEST 上的索引和触发器将按照 OBJECT_NAME 列中所示进行命名。根据以上查询,可以使用原始名称重新命名对象,如下所示:
ALTERINDEX"BIN$04LhcpnianfgMAAAAAANPw==$0"RENAMETOIN_RT_01;
ALTERTRIGGER"BIN$04LhcpnganfgMAAAAAANPw==$0"RENAMETOTR_RT;
一个值得注意的例外情况是位图索引。当删除位图索引时,它们并不放置在回收站中 ― 因此无法检索它们。约束名称也无法从视图中检索。必须从其他来源对它们进行重命名。
闪回表的其他用途
闪回删除表功能不仅限于恢复表的删除操作。与闪回查询类似,您还可以使用它将表恢复到不同的时间点,形如flashback table tmm2076 TO TIMESTAMP to_timestamp('2007-05-22
12:00:00','yyyy-mm-dd hh24:mi:ss')
弹出ORA-08189错误,需要执行以下命令先:
alter table tmm2076 enable row movement这个命令的作用是,允许oracle修改分配给行的rowid。
然后再flashback,数据被恢复完毕。
❻ oracle 怎样利用闪回功能恢复数据
利用闪回恢复数据必须要开启归档
一、闪回查询
语法:select * from 表名 as of timestamp
to_timestamp('2016-08-01 01:00:00','yyyy-mm-dd hh24:mi:ss');
二、闪回表
语法:
alter table 表名 enable row movement; 允许行移动
flashback table 表名 to timestamp to_timestamp('2016-08-01
01:00:00','yyyy-mm-dd hh24:mi:ss');
三、闪回删除
使用回收站(recyclebin)闪回删除的表
四、闪回数据库
(1)确认数据库处于archive log模式且数据库开启闪回功能;
(2)Flashback Database 实际是对数据库的一个不完全恢复操作,因为需要关闭数据库重启到mount状态
方式一:通过时间戳闪回
语法:flashback database to timestamp to_timestamp('2016-08-02 21:12:46','yyyy-mm-dd
HH24:MI:SS');
方式二:通过SCN闪回
语法:flashback database to scn 13081009;
执行完flashback database之后,oracle提供了两种方式修复数据库
1、通过alter database open
resetlogs打开数据库。当然,指定的scn或者timestamp之后产生的数据统统丢失
2、先执行alter database open
read only以read-only模式打开数据库,确认数据无误后,再以resetlogs的方式打开数据库
五、闪回数据归档
(1)创建闪回表空间
(2)创建闪回归档
语法:create flashback archive [default] name tablespace tbs_name quoto 10g retention 1 year
(3)开启表的闪回归档
语法:alter table tb_name flashback archie;
ps:开启了闪回的表,不能drop,允许truncate。
六、创建还原点
(1)创建保证还原点
create restore point point_name grarantee flashback database;
(2)还原
restore point point_name;
❼ 什么是闪回技术啊主要内容有哪些啊
为了使oracle数据库从任何逻辑误操作中迅速恢复,Oracle 数据库10g 提供了一系列人为错误更正技术,称为闪回。闪回从根本上改变了数据恢复。过去,数据库在几分钟内就可能损坏,但需要几小时才能恢复。利用闪回技术,更正错误的时间与错误发生时间几乎相同。而且它非常易用,使用一条短命令便可恢复整个数据库,而不必执行复杂的程序。闪回技术提供了一个 SQL 界面,能够快速分析和修复人为错误。闪回技术为本地数据损坏提供了细粒度外部分析和修复,如当错误删除客户订单时。闪回技术还支持修复更多广泛的损坏,同时快速避免长时间停机,如当本月的所有客户订单都被删除时。闪回技术是 Oracle 数据库独有的特性,支持各级恢复,包括行、事务、表、表空间和数据库范围。
1 闪回查询
在Oracle 9i之前,如果用户错误操作数据后,除了不完全恢复外,没有好的解决办法。Oracle 9i中提供闪回查询,由一个新的包DBMS_FLASH来实现。用户使用闪回查询可以及时取得误操作DML(Delete、Update、Insert)前某一时间点数据库的映像视图,用户可以利用系统时间或系统改变号(SCN:System Change Number)来指定这个只读视图,并可以针对错误进行相应的恢复措施。闪回查询功能完全依赖于自动回滚段管理(AUM),对于Drop等误操作不能恢复。闪回特性可应用在以下方面:
(1)自我维护过程中的修复:当一些重要的记录被意外删除,用户可以向后移动到一个时间点,查看丢失的行并把它们重新插入现在的表内恢复。
(2)恢复Email和声音Email:当用户意外删除了Email或者声音信息时,可以通过移回到固定时间点来恢复删除。
(3)账号平衡状况:可以查看以前的历史数据。如银行外币管理中用于记录特定时间的汇率。在以前,汇率变更被记录在一个历史表中,现在就可以通过闪回功能进行查询。
(4)用于趋势分析的决策支持系统:决策支持系统和联机分析应用必须执行一个长时间的事务。使用闪回查询,这些应用可以对历史数据执行分析和建模。例如,特定产品如矿泉水随季节变化需求情况的变化。
2 闪回版本查询
闪回版本查询提供了一种查看行级数据库变化的方法。它是 SQL 的扩展,支持以特定时间间隔检索所有不同版本的行。例如:
Select * from EMPLOYEE versions between ‘2:00 PM’ and ‘3:00 PM’ where …
该语句显示出今天下午 2 点至 3 点之间该行的各版本,每个版本都由不同的事务所更改。使用 DBA 可指出数据何时、如何被更改的,并追溯到用户、应用程序或事务。这使得 DBA 可以跟踪数据库中的逻辑破坏并加以更正。它还让应用开发人员能够对其代码进行调试。
3 闪回事务查询
闪回事务查询提供了一种查看事务级数据库变化的方法。它是 SQL 的扩展,能够看到事务带来的所有变化。例如:
Select * from DBA_TRANSACTION_QUERY where xid = ‘000200030000002D’;
该语句显示出该事务引起的结果性变化。此外,返回补充 SQL 语句,并用于撤消由事务引起的各行变化。使用精密工具(如 DBA),应用开发人员可以精确地诊断和更正数据库或应用中的逻辑问题。
4 闪回数据库
要将 Oracle 数据库恢复到以前的时间点,传统方法是进行时间点恢复。然而,时间点恢复需要用数小时甚至几天的时间,因为它需要从备份中恢复整个数据库,并恰好恢复到数据库发生错误前的时间点。由于数据库的大小不断增长,因此需要用数小时甚至几天的时间才能恢复整个数据库。 闪回数据库是进行时间点恢复的新战略。它能够快速将 Oracle 数据库恢复到以前的时间,以正确更正由于逻辑数据损坏或用户错误而引起的任何问题。闪回日志可用于捕获旧版本的变化块。一种方法是不间断备份或存储快照。当需要执行恢复时,可快速重放闪回日志,以将数据库恢复到错误前的时间点,并且只恢复改变的块。这一过程非常快,可将恢复时间从数小时缩短至几分钟。此外,它还非常易用。通过发出以下简单的命令,可将数据库恢复到 2:05 PM。
FLASHBACK DATABASE to ‘2:05 PM’;
它的使用不要求进行磁带恢复,没有冗长的停机时间,没有复杂的恢复过程。您还可以使用闪回,然后以只读方式打开数据库,并检查其内容。如果您确定闪回过远或不足,您可以重新发出闪回命令,以找到数据库损坏前的正确时间点。闪回同时与 Data Guard 相集成,因此您可以一起闪回生产和待机数据库(参见以下数据保护部分)。
闪回数据库就像是为数据库安装了一个倒回或撤消按钮。
5 闪回表
使用该特性,可以确保数据库表能够被恢复到之前的某一个时间点上。注意,该功能与最早的Oracle 9i中的Flashback Query不同,Flashback Query仅是得到了表在之前某个时间点上的快照而已,并不改变当前表的状态;而Falshback Table却能够将表及附属对象一起回到以前的某个时间点。该功能基于撤销数据(undodata)。
6 闪回删除
无意丢弃或删除数据库是人们经常会犯的错误。经常听到 Oracle 支持人员说:“在我删除那个表时,我以为我已经连接到了测试数据库。”用户已认识到他们错了,但已经太晚了,没有办法轻松恢复被删除的表及其索引、约束和触发器。对象一旦被删除就永远被删除了。如果真是重要的表或其它对象(如索引、分区或集簇),DBA 不得不执行时间点恢复,但这非常耗时,而且会导致丢失最近的事务。 闪回删除针对删除 Oracle 数据库 10g 中的对象提供了一个安全网络。当用户删除一个表,Oracle 会将它放到垃圾箱中。垃圾箱中的对象一直会保留,直到用户决定永久删除它们或包含该本的表空间不足。垃圾箱是一个虚拟容器,用于存放所有被删除的对象。用户可以查看垃圾箱,“撤消”被删除的表及其相关的对象。例如,可以发出以下命令来“撤消”雇员信息表及其所有相关对象。
FLASHBACK TABLE employee BEFORE DROP;
闪回删除就像是为一个表及其相关对象安装了一个撤消按钮。
❽ 如何查询 oracle 表中被删除的记录情况
可以定义一个触发器,来把删除的记录写到一个日志表中,方法如下。
测试方法:
创建原始表,插入数据:
createtabletest
(idint,
namevarchar2(10));
insertintotestvalues(1,'张三');
insertintotestvalues(2,'李四');
commit;
创建日志表:
createtabletest_log
(idint,
namevarchar2(10),
deletedatedate);
创建触发器:
createorreplacetriggert_delete_test
beforedeleteontest
foreachrow
begin
insertintotest_log(id,name,deletedate)
values(:old.id,:old.name,sysdate);
end;
执行删除操作:
deletefromtestwhereid=2;
commit;
检测test表,及test_log表:
所以,可以证明,删除成功,并且将删除的数据写入到了日志表中。
❾ 求教Oracle11g中的闪回技术
1、Flashback Database(利用闪回日志恢复)
Oracle Flashback Database特性允许通过SQL语句Flashback Database语句,让数据库前滚到当前的前一个时间点或者SCN,而不需要做时间点的恢复。闪回数据库可以迅速将数据库回到误操作或人为错误的前一个时间点,如Word中的"撤消"操作,可以不利用备份就快速的实现基于时间点的恢复。Oracle通过创建新的Flashback Logs(闪回日志),记录数据库的闪回操作。如果希望能闪回数据库,需要设置如下参数:DB_RECOVER_FILE_DEST日志的存放位置,DB_RECOVER_FILE_DEST_SIZE恢复区的大小。在创建数据库的时候,Oracle将自动创建恢复区,但默认是关闭的,需要执行alter database flashback on命令。
例:执行Flashback Database命令格式。
SQL>flashback database to time to_timestamp(xxx);
SQL>flashback database to scn xxx
2、Flashback Table(利用UNDO保留信息恢复)
Oracle Flashback Table特性允许利用Flashback Table语句,确保闪回到表的前一个时间点。与Oracle 9i中的Flashback Query相似,利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照)。要注意的是,Flashback Table不等于Flashback Query,Flashback Query仅仅是查询以前的一个快照点而已,并不改变当前表的状态,而Flashback Table将改变当前表及附属对象一起回到以前的时间点。
语法:
flashback table tablename to timestamp xxx或
flashback table tablename to scn xxx
注意:如果需要闪回一个表,需要以下条件:
需要有flashback any table的系统权限或者是该表的flashback对象权限;
需要有该表的select,insert,delete,alter权限;
必须保证该表row movement。
例:执行将test表闪回到2011年5月7日下午3点。
SQL>flashback table test to timestamp to_timestamp(’2011-05-07 15:00:00’,’yyyy-mm-dd hh24:mi:ss’);
3、Flashback Drop(利用回收站功能恢复)
注:由于目前的环境为了实现OGG的DDL同步,关闭了回收站功能,故这个功能不可用。
4、Flash Version Query(利用UNDO保留信息恢复)
Oracle Flashback Version Query特性,利用保存的回滚信息,可以看到特定的表在时间段内的任何修改,如电影的回放一样,可以了解表在该期间的任何变化。Flashback version query一样依赖于AUM,提供了一个查看行改变的功能,能找到所有已经提交了的行的记录,分析出过去时间都执行了什么操作。Flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的方法:
·VERSIONS_SCN - 系统改变号
·VERSIONS_TIMESTAMP - 时间
例如:在test表中,时间1插入一条记录,时间2删除了这条记录,对于时间3执行select * from test当然查询不到这条记录,只能看到该表最后的提交记录。这时如果利用Flash Table或者是Flash Query,只能看到过去的某一时间点的一个快照,而利用Flashback Version Query,能够把时间1、时间2的操作给记录下来,并详细的查询出对表进行的任何操作。
基于SCN的闪回查询:
SQL> select count(*) from lm_mtrp_syn_channelinfo as of scn 708000000;
COUNT(*)
----------
21
基于时间段的闪回查询:
SQL>select versions_starttime,versions_endtime, versions_xid,versions_operation,id
from test versions
between timestamp minvalue and maxvalue
order by versions_starttime;
5,Flashback Transaction Query(利用UNDO保留信息恢复)
Oracle Flashback Transaction Query特性确保检查数据库的任何改变在一个事务级别,可以利用此功能进行诊断问题、性能分析和审计事务。它其实是Flashback Version Query查询的一个扩充,Flashback Version Query说明了可以审计一段时间内表的所有改变,但是也仅仅是能发现问题,对于错误的事务,没有好的处理办法。而Flashback Transaction Query提供了从FLASHBACK_TRANSACTION_QUERY视图中获得事务的历史以及Undo_sql(回滚事务对应的sql语句),也就是说审计一个事务到底做了什么,甚至可以回滚一个已经提交的事务。
例:Flashback Transaction Query的操作实例。
(1)在test表中删除记录,获得事务的标识XID,然后提交。
SQL>delete from test where id=2;
SQL>select xid from v$transaction;
XID
----------------
04001200AE010000
SQL>commit;
在测试中方便起见,在事务没有提交的时候,获得事务的XID为04001F0035000000。实际情况下,不可能去跟踪每个事务,想要获得已提交事务的XID,就必须通过上面的Flashback Version Query。
(2)进行Flashback Transaction Query
SQL>select * from FLASHBACK_TRANSACTION_QUERY
where xid=’04001F0035000000’;
UNDO_SQL
insert into "FLASHTEST"."TEST"("ID") values (’2’);
注意:这个删除语句对应的是1个Insert语句,如果想回滚这个事务,执行这个Insert语句即可。
可以看到,Flashback Transaction Query主要用于审计一个事务,并可以回滚一个已经提交的事务。如果确定出错的事务是最后一个事务,我们利用Flashback Table或者Flashback Query就可以解决问题。但是,如果执行了一个错误的事务之后,又执行了一系列正确的事务,那么上面的方法就无能为力,利用Flashback Transaction Query可以查看或回滚这个错误的事务。
另:ORACLE 11G还多了一个闪回数据归档的功能,即可将UNDO的信息进行归档,这个功能对于一些比较重要的表,
❿ oracle 闪回查询问题
用flashback version query
可以查到表变化(DML)时的scn,scn和time是可以互相转换的
select versions_startscn,DECODE(versions_operation,'I','Insert','U','Update','D','Delete', 'Original') "Operation", table.*
from table versions between scn minvalue and maxvalue;
---scn to time
select scn_to_timestamp(versions_startscn) from al;