数据库的闪回
‘壹’ 如何在多租户环境下使用数据库的闪回功能
利用闪回恢复数据必须要开启归档
一、闪回查询
语法: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数据库闪回查询
可按以下步骤配置闪回数据库:(确保数据库处于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.
‘肆’ 怎么利用闪回数据库特性恢复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;
‘伍’ 求教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的信息进行归档,这个功能对于一些比较重要的表,
‘陆’ 求助如何闪回到数据库某一时间点
如果开启闪回可以使用闪回表。
select log_mode,flashback_on from v$database;
如果是下面结果则开了闪回
‘柒’ oracle中的闪回恢复区和闪回技术,应该是两码事吧谁能详细讲解一下呢谢谢
闪回恢复区只是一个目录,默认的备份目录以及默认的归档目录是在闪回恢复区db_recovery_file_dest,比较方便管理。
闪回技术分好多种。
flashback query :
根据undo的内容可以查看最近的某个时间点的数据
flashback drop :
一个回收站的功能,drop table不加purge的时候,其实没有真正删除表,只是将表重命名了一下,相当于放进了回收站里。
下面这两个不太常用,有兴趣可以研究一下。
flashback data archive :
闪回特定对象
flashback database :
闪回数据库
‘捌’ 什么是oracle10g数据库中的闪回
oracle10g中专门开辟了一个闪回区,初始大小是2G左右。这个区域的作用和windows中的回收站差不多,可以在段时间内快速恢复数据。
‘玖’ rman备份为什么要设置闪回数据库
在不开归档日志的情况下,Oracle数据库的备份只能依赖exp命令(逻辑备份)导出数据文件(注意:不包括日志文件以及控制文件等),导出的所有数据仅仅以一个大文件的方式来存放,但是这种备份容易导致丢失数据。举个例子:如果5号晚上进行了exp数据导出,但是在6号的运行过程中发生宕机,数据丢失,这个时候从5号备份后一直到6号宕机前的数据将全部丢失(即使将日志文件和控制文件拷出来都无法恢复,因为exp导出的数据无法与这些日志文件一一对应起来恢复)。所以采用exp方式备份数据还是存在很大风险的。
另一种方式就是使用Oracle自带的备份工具rman。一次rman备份(物理备份)的全过程如下:
因为使用rman备份不会产生数据丢失的情况,所以必须有一个全备份的文件,使用rman需要先进行一次全备份,相当于将当前数据库里面的所有文件以及日志都全盘拷贝一份到备份介质中,然后通过归档日志(实时更新的)的记录看每个进程都对数据库做了哪些修改,只要保留了一份物理备份以及物理备份之后的所有归档日志,就能够将数据库恢复到宕机前一刻的状态,将数据丢失降到最低。(每个redo log写满之后就开始写到achive log里面进行归档,这个里面还是有个时间段的,不能做到完全的实时)
‘拾’ oracle数据库中闪回和回收站不是一个意思吗
这里说点自己的理解,不写那些名词解释了。
闪回功能和回收站并不一样。
举例来说,闪回一般操作就是短时间内的恢复(DML操作,个人感觉类似于win的ctrl+z(不过没有win的好用))。比如说你刚刚删除了数据,那么利用闪回功能可以回到删除之前。但是如果表的交易量很大,或者时间过长,那么就不能回到你需要的时间(比如你想回到一天前,那闪回是基本不可能实现的)
回收站则不同,它主要是删除段的放置空间。和windows的回收站一个意思(什么见过回收站能还原一段在word中删除的内容的),就是将删除的段放置在这里。oracle中drop的段(主要是表),如果不加purge(加了就是彻底删除),那么就会放置在回收站中,就好像我们在win系统中的删除,如果直接删除一个文件,那么在回收站中,如果是shift+del那么就是彻底删除,不可恢复。
其实回收站的表是可以看到的,就是那些一堆乱码(BIN$开头的字符串)表名的表。可以用show recyclebin查到,也可以zairecyclebin的视图中看到。