1 闪回的方法
使用闪回方法的目的:修正用户错误。
1.1 FLASHBACK DATABASE
flashback data1base闪回到过去的某一时刻
闪回点之后的所有工作都将丢失
必须使用resetlogs创建新的场景并打开数据库(一旦resetlogs之后,将不能再闪回至resetlogs之前的时间点)
常用的场合:
。Truncate a table
。删除了一个用户
。删除了一个表空间
Flashback Database不能闪回物理讹误,只能闪回由用户错误导致的逻辑讹误。
1.2 FLASHBACK QUERY(VERSION,TRANSACTION,TABLE)
Flashback query基于撤销段的使用。
其方法有三:
。Flashback version:能够选择某条记录在一段时期内的所有版本,并且能够显示一个包括针对指定记录的操作、进行操作的时间、执行操作的用户和发生变化的事务的标识符等的历史记录。
。flashback transaction:标志导致问题的事务,并自动修复这个事务。
。flashback table:能够倒退从指定时间点以来对某个表进行的所有变化,同时使其他表停留在当前状态。
Flashback drop:允许在不丢失任何数据的前提下,将指定的表恢复至其被删除的时间点,同时使数据库保持为当前状态。
无法FLASHBACK DROP被truncated 的表,只能flashback drop 被drop的表。
2 flashback database的体系结构
闪回缓冲区(flashback buffer):已变化数据块的映像会从数据库高速缓冲区中复制到闪回缓冲区。
恢复写入器(recovery writer,RVWR):将闪回缓冲区的内容转储到磁盘上的闪回日志。
闪回日志(flashback log):不是变化的日志,而是完整数据块映像的日志。闪回日志不能被复用和归档。闪回日志是自动创建和管理的。
Flashback database要求数据库位于archivelog模式中,并且还需要使用alter database open resetlogs命令创建数据库一个新场景。
与不完全恢复相比,flashback database的优点在flashback database能够更便捷地将数据库返回至早先的时间点。
3 配置flashback database
配置flashback database需要数据库在加载模式中配置。
步骤:
(1) 确保数据库位于archivelog模式中
Select log_mode from v$database;
(2) 建立一个闪回恢复区
Alter system set db_recovery_file_dest=’c:\fash_recovery_area’;
Alter system set db_recovery_file_dest_size=8g;
(3) 为闪回保留目标设置生成期
Alter system set db_flashback_retention_target=240;
其中240的单位为分钟,即240分钟=4小时。
(4) 干净地关闭和加载数据库
Shutdown immediate;
Startup mount;
(5) 启用闪回日志记录
Alter database flashback on;
(6) 打开数据库
Alter database open;
4 监视flashback database
。确认是否启动了flashback
Select flashback_on from v$database;
。使用v$flashback_database_log视图查看当前的闪回性能和估计闪回日志满足指定目标所需的空间。
。v$flashback_database_stat视图查看用于数据文件、联机重做日志文件以及闪回日志文件的磁盘I/O的历史信息。
sys@ORCL>select retention_target, flashback_size, estimated_flashback_size 2 from v$flashback_database_log; RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE ---------------- -------------- ------------------------ 1440 8192000 0 ---此查询以分钟形式显示了实例参数db_flashback_retention_target所设置的闪回保留目标,同时还显示了估计的满足该目标所需的空间大小以及闪回日志数据实际占用的空间大小。 sys@ORCL>select oldest_flashback_scn,oldest_flashback_time from 2 v$flashback_database_log; OLDEST_FLASHBACK_SCN OLDEST_FLASHBA -------------------- -------------- 2340341 11-5月 -12 ---此查询显示了闪回日志能够将数据库闪回到的确定SCN和时间点。 sys@ORCL>select end_time, flashback_data, db_data, redo_data 2 from v$flashback_database_stat; END_TIME FLASHBACK_DATA DB_DATA REDO_DATA -------------- -------------- ---------- ---------- 11-5月 -12 1482752 65536 486912 ---此查询通过每小时必要的I/O字节数显示了启用flashback database的代价。 |
闪回缓冲区大小不受dba控制,但可以通过v$sgastat视图可以获知闪回缓冲区的当前大小。
Select * from v$sgastat where name like ‘flashback%’;
5 使用flashback database
Sqlplus, rman和database control都可以使用flashback database。其使用的方法都相同:
(1) 关闭数据库
(2) 加载数据库
(3) 闪回至某个时间点、scn或日志切换序列号
(4) 使用resetlogs打开
5.1 使用sqlplus进行flashback database
Sqlplus可以接受一个时间标记(to_timestamp)或一个系统改变号(scn)实参,与rman不同的是sqlplus不接受日期(to_date)或日志切换序列号(sequence)实参。
下面模拟一个使用sqlpus的场景。
在2012-5-11的10:00左右,删除了某个重要模式。十分钟后对其进行闪回操作。
1 关闭数据库
Shutdown abort;
2 将数据库闪回至10:00
Startup mount;
Flashback database to timestamp to_timestamp(‘2012-05-11 10:00:00’,’yyyy-mm-dd hh24:mi:ss’);
Alter database open read only;
3 查询一下是否存在这个模式。如果是,则再恢复一些数据
Shutdown abort;
Startup mount;
Flashback database to timestamp to_timestamp(‘2012-05-11 10:02:00’,’yyyy-mm-dd hh24:mi:ss’);
Alter database open read only;
4 再次查询,如果发现不存在,则恢复至10:01
Shutdown abort;
Startup mount;
Flashback database to timestamp to_timestamp(‘2012-05-11 10:01:00’,’yyyy-mm-dd hh24:mi:ss’);
Alter database open read only;
5 如果这个时间点满足要求,则进行最终关闭,使用resetlogs命令重新打开数据库
Shutdown abort;
Alter database open resetlogs;
这个方法能够最小化数据的损失,并且可能只花费几分钟。
5.2 使用rman进行flashback database
使用方法与sqlplus基本相同
Rman>flashback database to time=to_date(‘2012-05-11 10:01:00’,’yyyy-mm-dd hh24:mi:ss’);
Rman>flashback database to scn=2728667;
Rman>flashback database to sequence=2123 thread=1;
5.3 使用database control进行flashback database
可以使用database control进行flashback database至某个时间点,scn和sequence.
但有一点限制:使用database control进行基于时间的闪回粒度只能达到分钟,而rman的闪回粒度为秒,sqlplus的闪回粒度为百万分之秒。
6 管理闪回恢复区
闪回恢复区是用于所有与恢复相关的文件的默认位置。
6.1 闪回恢复区内的空间使用
Db_recovery_file_dest_size参数现在了闪回恢复区能够增长的最大容量。
如果闪回恢复区被填满,则对数据库的影响取决于闪回恢复区的使用方式:
。如果归档日志被写入闪回恢复区,那么由于不可能再进行归档,因此所有的DML命令都将停止。
。如果只有RMAN备份被写入闪回恢复区,则数据库不会受到任何影响,但RMAN备份会失败。
。如果启用flashback database,则数据库不会受到影响,但是闪回性能将受到影响。
6.2 备份闪回恢复区
闪回恢复区不提供长期的备份,所以需要对其进行备份。
闪回日志必须要在数据库关闭的时候才能进行备份。
使用sqlplus,rman和database control都可以闪回恢复区的恢复文件。
Rman>backup recovery area;
可以备份闪回恢复区的所有恢复文件,包括:
。完整和增量备份集
。数据文件和归档日志文件映像副本
。控制文件自动备份
。归档日志
不可以备份的:
。闪回日志
。当前的控制文件
。联机重做日志文件
Rman>backup recovery files delete all input;
这条命令包含了所有恢复文件(无论是否位于闪回恢复区内),delete all input用于释放磁盘空间。
7 限制所生成的闪回数据量
为了使flashback database对联机性能产生的影响达到最小,我们可能需要限制所生成的闪回数据量。
7.1 将表空间排除在闪回之外
命令为:
Alter tablespace users flashback off;
在加载模式下
Alter tablespace users flashback on;
查看表空间闪回的状态
Slect tablespace_name,flashback_on from v$tablespace;
表空间闪回相关信息不显示在dba_tablespaces中,原因是闪回是通过控制文件被启用的。
7.2 在某些表空间没有生成闪回数据时进行闪回
在执行闪回前,对这些表空间的文件脱机。
如果没有删除组成脱机表空间的数据文件或者将这些还原或恢复至闪回的相同时间点,那么使用resetlogs命令将无法打开数据库。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9537053/viewspace-723557/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9537053/viewspace-723557/