Ⅰ 什么是闪回技术啊主要内容有哪些啊
为了使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;
闪回删除就像是为一个表及其相关对象安装了一个撤消按钮。
Ⅱ 怎么利用闪回数据库特性恢复failover 后的dataguard 环境
-----主库defer 日志传输
alter system set log_archive_dest_2=defer;
---enable 日志传输:
alter system set log_archive_dest_2=enable;
-----备库(mount)配置 flashback database:
STANDBY DATABASE: Stop redo apply, configure flashback retention,
start flashback database, open the database and start redo apply (Is active DG).
---检查备库是否启用flashback database:
select flashback_on from v$database;
注意这里需要确认下备库打开模式: mount?readonly with apply?
在11g 环境下备库可能启用了 ADG 特性 备库日志处于实时应用,数据库模式为 readonly with apply
这时需要重启数据库到mount状态修改flashback database 模式;
如果备库处于mount 状态,可以先取消日志apply ,直接打开闪回数据库特性;
---取消备库日志应用:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
---需要配置一下两个参数来打开flashback database 特性:
ALTER SYSTEM SET db_recover_file_dest='/lixora/lixora/lixora/';
ALTER SYSTEM SET db_recover_file_dest_size=100G;
ALTER SYSTEM SET DB_FLASHBACK_RETENTION_TARGET=240; ---4hours
ALTER DATABASE FLASHBACK ON;
--手工创建还原点(该步骤没有测试过):
Creating Restore point in Physical Standby:
CREATE RESTORE POINT before_damage GUARANTEE FLASHBACK DATABASE
-------备库failover to primary db 应急切换步骤:
(注:模拟主库由于故障无法正常switchover,需要执行failover,强制备库->pridb并接管业务)
1.备库:
由于是failover,所以理解主库这时候已经无法正常使用,只需备库切换至pridb
【前提主库还是可用的:可选】查询没有应用的日志:
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
select distinct thread#,max(sequence#) over(partition by thread#) a from v$archived_log;
该语句取得当前数据库各线程已归档文件最大序号,如果primary 与standby 最大序号不相同,
必须将多出的序号对应的归档文件复制到待转换的standby服务器。
Cp过来并register
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1'
停止应用恢复模式
alter database recover managed standby database finish;
or
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
转换standbydb为primary db
alter database commit to switchover to primary;
重启数据库,恢复正常业务
alter database open;
数据库角色查看:
select open_mode,database_role from v$database;
OPEN_MODE DATABASE_ROLE
---------- ----------------
OPEN PRIMARY
------恢复failover 的备库:
C. Using SQL*PLUS
Step 1 Determine the Standby Became Primary SCN.
Step 2 Flashback the Failed Primary Database.
Step 3 Convert to physical standby database.
Step 4 Restart Redo Transport.
Step 5 Start Redo Apply.
Step 1 Determine the SCN at which the old standby database became the primary database.
SQL> SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
Step 2 Flashback the Failed Primary Database to SCN standby_became_primary_scn.
SQL> SHUTDOWN IMMEDIATE;
SQL> startup mount
SQL> FLASHBACK DATABASE TO SCN ;
Step 3 Convert the database to a physical standby database and Restart database in mount stage.
SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
Step 4 Restart Redo Transport to the New Physical Standby Database.
1. If you have not set the remote archive destination on current primary then set remote archive destination:
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 = 'SERVICE=lixora VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=lixora' SCOPE=BOTH;
2. Enable the destination
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
3. Perform a log switch to ensure that standby database begins receiving redo data from the new primary database
SQL> ALTER SYSTEM SWITCH LOGFILE;
SQL> SELECT DEST_ID, STATUS, ERROR FROM V$ARCHIVE_DEST WHERE DEST_ID=2;
Ⅲ 如何在多租户环境下使用数据库的闪回功能
利用闪回恢复数据必须要开启归档
一、闪回查询
语法: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 怎样利用闪回功能恢复数据
1,只需要执行以下个脚本即可。
7,查看日志信息,就可以了。
Ⅳ Oracle 使用Flashback方式数据恢复,但是表中有CLOB字段,提示:快照旧了
使用闪回数据库,闪回后以read only模式打开,导出该表,然后重启数据库,做recover,打开,再导入;
使用基于时间点的恢复,和1差不多;
如果是11g版本以上,考虑以后用闪回数据归档。
Ⅵ oracle闪回闪回一般多久的表
利用闪回恢复数据必须要开启归档
一、闪回查询
语法:select * from 表名 as of timestamp
to_timestamp('2016-08-01 01:00:00','-mm-dd hh24:mi:ss');
二、闪回表
语法:
alter table 表名 enable row movement; 允许行移动
flashback table 表名 to timestamp to_timestamp('2016-08-01
01:00:00','-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','-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;
Ⅶ alter system set DB_RECOVERY_FILE_DEST_SIZE=10g 这个语句是不是及时生效的 还需不需要重启数据库
DB_RECOVERY_FILE_DEST_SIZE这个是session级的命令,不用重启;
Ⅷ 求教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闪回默认是关闭的,为什么在数据库打开后不能启用闪回功能
要在oracle数据库处于mount状态的时候才能启用或者关闭archivelog功能。
先
startup monut;
再
alter database archivelog;
然后
alter database open;