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 i Database 推出了闪回查询选项的概念 以便检索过去某个时间点的数据 但它不能闪回 DDL *** 作 如删除表的 *** 作 唯一的恢复方法是在另一个数据库中使用表空间的时间点恢复 然后使用导出/导入或其他方法 在当前数据库中重新创建表 这一过程需要 DBA 进行大量工作并且耗费宝贵的时间 更不用说还要使用另一个数据库进行克隆 使用 Oracle Database g 中的闪回表特性 它使得被删除表的恢复过程如同执行几条语句一样简单 让我们来看该特性是如何工作的
删除那个表!
首先 让我们查看当前模式中的表
SQL>select * from tabTNAMETABTYPE CLUSTERID
RECYCLETEST TABLE
现在 我们意外地删除了该表
SQL>drop table recycletestTable dropped
现在让我们来查看该表的状态
SQL>select * from tabTNAME TABTYPE CLUSTERID BIN$ LhcpndanfgMAAAAAANPw==$ TABLE
表RECYCLETEST 已不存在 但是请注意出现新表BIN$ LhcpndanfgMAAAAAANPw==$ 这就是所发生的事情 被删除的表 RECYCLETEST 并没有完全消失 而是重命名为一个由系统定义的名称 它存在于同一个表空间中 具有与原始表相同的结构 如果在该表上定义了索引或触发器 则它们也被重命名 使用与表相同的命名规则 任何相关源(如过程)都失效 原始表的触发器和索引被改为放置在重命名的表 BIN$ LhcpndanfgMAAAAAANPw==$ 上 保持被删除表的完整对象结构
表及其相关对象被放置在一个称为 回收站 的逻辑容器中 它类似于您 PC 机中的回收站 但是 对象并没有从它们原先所在的表空间中删除 它们仍然占用那里的空间 回收站只是一个列出被删除对象目录的逻辑结构 在 SQL*Plus 提示符处使用以下命令来查看其内容(您需要使用 SQL*Plus 来进行此 *** 作)
SQL>show recyclebinORIGINAL NAME RECYCLEBIN NAMEOBJECT TYPE DROP TIME RECYCLETESTBIN$ LhcpndanfgMAAAAAANPw==$ TABLE : : :
结果显示了表的原始名称 RECYCLETEST 并显示了回收站中的新名称 该名称与我们看到的删除后所创建的新表名称相同 (注意 确切的名称可能因平台不同而不同 )为恢复该表 您所需要做的就是使用 FLASHBACK TABLE 命令
SQL>FLASHBACK TABLE RECYCLETEST TO BEFORE DROPFLASHBACK PLETE SQL>SELECT * FROM TABTNAME TABTYPE CLUSTERID RECYCLETESTTABLE
瞧!表毫不费力地恢复了 如果现在查看回收站 它将是空的 记住 将表放在回收站里并不在原始表空间中释放空间 要释放空间 您需要使用以下命令清空回收站
PURGE RECYCLEBIN
但是如果您希望完全删除该表而不需要使用闪回特性 该怎么办?在这种情况下 可以使用以下命令永久删除该表
DROP TABLE RECYCLETEST PURGE
此命令不会将表重命名为回收站中的名称 而是永久删除该表 就象 g 之前的版本一样
管理回收站
如果在该过程中没有实际删除表 — 因而没有释放表空间 — 那么当被删除的对象占用了所有空间时 会发生什么事?
答案很简单 这种情况根本不会出现 当表空间被回收站数据完全占满 以至于必须扩展数据文件来容纳更多数据时 可以说表空间处于 空间压力 情况下 此时 对象以先进先出的方式从回收站中自动清除 在删除表之前 相关对象(如索引)被删除
同样 空间压力可能由特定表空间定义的用户限额而引起 表空间可能有足够的空余空间 但用户可能将其在该表空间中所分配的部分用完了 在这种情况下 Oracle 自动清除该表空间中属于该用户的对象
此外 有几种方法可以手动控制回收站 如果在删除名为 TEST 的特定表之后需要从回收站中清除它 可以执行
PURGE TABLE TEST
或者使用其回收站中的名称
PURGE TABLE BIN$ LhcpndanfgMAAAAAANPw==$
此命令将从回收站中删除表 TEST 及所有相关对象 如索引 约束等 从而节省了空间 但是 如果要从回收站中永久删除索引 则可以使用以下命令来完成工作
purge index in_test _
此命令将仅仅删除索引 而将表的拷贝留在回收站中 有时在更高级别上进行清除可能会有用 例如 您可能希望清除表空间 USERS 的回收站中的所有对象 可以执行
PURGE TABLESPACE USERS
您也许希望只为该表空间中特定用户清空回收站 在数据仓库类型的环境中 用户创建和删除许多临时表 此时这种方法可能会有用 您可以更改上述命令 限定只清除特定的用户
PURGE TABLESPACE USERS USER SCOTT
诸如 SCOTT 等用户可以使用以下命令来清空自己的回收站
PURGE RECYCLEBIN
DBA 可以使用以下命令清除任何表空间中的所有对象
PURGE DBA_RECYCLEBIN
可以看到 可以通过多种不同方法来管理回收站 以满足特定的需要
表版本和闪回功能
用户可能会经常多次创建和删除同一个表 如
CREATE TABLE TEST (COL NUMBER)INSERT INTO TEST VALUES ( )mitDROP TABLE TESTCREATE TABLE TEST (COL NUMBER)INSERT INTO TEST VALUES ( )mitDROP TABLE TESTCREATE TABLE TEST (COL NUMBER)INSERT INTO TEST VALUES ( )mitDROP TABLE TEST
此时 如果您要对表 TEST 执行闪回 *** 作 那么列 COL 的值应该是什么?常规想法可能认为从回收站取回表的第一个版本 列 COL 的值是 实际上 取回的是表的第三个版本 而不是第一个 因此列 COL 的值为 而不是
此时您还可以取回被删除表的其他版本 但是 表 TEST 的存在不允许出现这种情况 您有两种选择
使用重命名选项
FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST FLASHBACK TABLE TEST TO BEFORE DROP RENAME TO TEST
这些语句将表的第一个版本恢复到 TEST 将第二个版本恢复到 TEST TEST 和 TEST 中的列 COL 的值将分别是 和 或者 使用表的特定回收站名称进行恢复 为此 首先要识别表的回收站名称 然后执行
FLASHBACK TABLE BIN$ LhcpnoanfgMAAAAAANPw==$ TO BEFORE DROP RENAME TO TEST FLASHBACK TABLE BIN$ LhcpnqanfgMAAAAAANPw==$ TO BEFORE DROP RENAME TO TEST
这些语句将恢复被删除表的两个版本
警告
取消删除特性使表恢复其原始名称 但是索引和触发器等相关对象并没有恢复原始名称 它们仍然使用回收站的名称 在表上定义的源(如视图和过程)没有重新编译 仍然保持无效状态 必须手动得到这些原有名称并应用到闪回表
信息保留在名为 USER_RECYCLEBIN 的视图中 在对表进行闪回 *** 作前 请使用以下查询来检索原有名称
SELECT OBJECT_NAME ORIGINAL_NAME TYPEFROM USER_RECYCLEBINWHERE BASE_OBJECT = (SELECT BASE_OBJECT FROM USER_RECYCLEBINWHERE ORIGINAL_NAME = RECYCLETEST )AND ORIGINAL_NAME != RECYCLETEST
OBJECT_NAMEORIGINAL_N TYPE BIN$ LhcpnianfgMAAAAAANPw==$ IN_RT_ INDEXBIN$ LhcpnganfgMAAAAAANPw==$ TR_RT TRIGGER
在表进行闪回 *** 作后 表 RECYCLETEST 上的索引和触发器将按照 OBJECT_NAME 列中所示进行命名 根据以上查询 可以使用原始名称重新命名对象 如下所示
ALTER INDEX BIN$ LhcpnianfgMAAAAAANPw==$ RENAME TO IN_RT_ ALTER TRIGGER BIN$ LhcpnganfgMAAAAAANPw==$ RENAME TO TR_RT
lishixinzhi/Article/program/Oracle/201311/17794
为了使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
闪回删除就像是为一个表及其相关对象安装了一个撤消按钮。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)