flashback database
1. 配置flashback database
1)查看数据库的归档模式以及闪回是否启用
SQL> select log_mode,open_mode,flashback_on from v$database;
LOG_MODEOPEN_MODEFLASHBACK_ON
------------ -------------------- ------------------
NOARCHIVELOG READ WRITENO
--flashback database要求数据库必须处于归档模式,且闪回之后必须使用resetlogs打开数据库
2)数据库开归档
alter system set log_archive_dest_2='location=/archive';
alter system set log_archive_format='orcl_%t_%s_%r.arc' scope=spfile;
3)置闪回目录、闪回目录空间大小
SQL> show parameter db_recover
NAMETYPEVALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_deststring/u01/app/oracle/fast_recovery_
area
db_recovery_file_dest_sizebig integer 4977M
alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';
--可以用该命令来给恢复目录设置新路径(闪回目录中可存放:归档的日志文件,controlfile 和spfile 的备份文件,闪回日志,和rman的备份集。)
alter system set db_recovery_file_dest_size=4977m;
--用该命令来指定恢复目录的的大小
4) 设置闪回保留目标生存期
show parameter db_flashback
alter system set db_flashback_retention_target=60;--设置保留时间为1小时
5) 在mount状态下来启用flashback database如在open状态下则出现下列错误提示ORA-38759
SQL> startup mount;
ORACLE instance started.
Total System Global Area839282688 bytes
Fixed Size2233000 bytes
Variable Size478154072 bytes
Database Buffers356515840 bytes
Redo Buffers2379776 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
--开归档
SQL> alter database flashback on;
Database altered.
--开flashback database
2. flashback database 相关视图
1)v$flashback_database_log;
select oldest_flashback_scn old_flhbck_scn,oldest_flashback_time old_flhbck_tim,
retention_target rete_trgt,flashback_size/1024/1024 flhbck_siz,
estimated_flashback_size/1024/1024 est_flhbck_size
from v$flashback_database_log;
OLDEST_FLASHBACK_SCN 保留的最低系统改变号
LDEST_FLASHBACK_TIME 最低系统改变号的时间
RETENTION_TARGET 闪回日志保留时间(单位:时间)
FLASHBACK_SIZE 当前闪回日志的大小(单位:字节)
ESTIMATED_FLASHBACK_SIZE 预估满足保留时间所需要的空间大小(单位:字节)
--查看数据库可以恢复到的最早时间点或scn,查看flashback_size已使用大小,和预计大小闪回区大小
2)v$flashback_database_stat
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select *from v$flashback_database_stat;
BEGIN_TIME 一个时间间隔的开始
END_TIME 一个时间间隔的结束
FLASHBACK_DATA 在此时间间隔内写闪回日志大小(单位:字节)
DB_DATA 在此时间间隔内数据库读写大小(单位:字节)
REDO_DATA 在此时间间隔内输出在线日志的大小(单位:字节)
ESTIMATED_FLASHBACK_SIZE 在时间间隔的结束时预估满足保留时间所需要的空间大小(单位:字节)
--说简单点就是根据间隔时间(1小时)内数据库的活动情况,来估计保证预估满足你设定的保留时间(db_flashback_retention_target),所需的闪回去大小
3)v$recovery_file_dest;
col name format a50;
select name,space_limit/1024/1024 sp_limt,
space_used/1024/1024 sp_usd,space_reclaimable/1024/1024 sp_recl,
number_of_files num_fils from v$recovery_file_dest;
--查看闪回区的实际使用情况(闪回去空间不足会导致数据库hung住)
在数据库运行过程中,oracle 自动向该区域写入文件,当剩余空间不足15%的时候,它就会在alert 中增加警告,提示你空间不足。但此时不会影响数据库的正常运转,直到所有空间统统被用掉之后,oracle 首先尝试删除寻些过期的文件,冗余文件(备份策略之外的备份集或归档等)以及闪回日志,如果这些做完了,还是没有空闲空间的话,数据库就被hang住了
4)v$sgastat
select * from v$sgastat where name like 'flashback%';
--查看sga中分配的闪回空间大小
3. 使用flashback database闪回数据库
步骤(前提归档日志可用)
关闭数据库
启动数据库到mount状态(exclusive模式)
闪回至某个时间点,SCN或log sequence number
使用resetlogs打开数据库
1)使用sqlplus实现闪回
可以接受一个时间标记或一个系统改变号实参
sqlplus几种常用的闪回数据库方法
FLASHBACK [STANDBY] DATABASE [<database_name>]TO [BEFORE] SCN <system_change_number> --基于SCN闪回
FLASHBACK [STANDBY] DATABASE [<database_name>] TO [BEFORE] TIMESTMP <system_timestamp_value>--基于时间戳闪回
FLASHBACK [STANDBY] DATABASE [<database_name>] TO [BEFORE] RESTORE POINT <restore_point_name>--基于时点闪回
如下面的示例:
a.基于时间戳闪回
SQL> flashback database to timestamp('2010-10-24 13:04:30','yyyy-mm-dd hh24:mi:ss');
b.基于scn
SQL> flashback database to scn 918987;
c.基于闪回点
SQL> flashback database to restore point b1_load;
2)使用RMAN进行flashback database
使用RMAN进行闪回数据库的几种常用办法
a.RMAN> flashback database to scn=918987;
b.RMAN> flashback database to sequence=85 thread=1;
4. flashback database使用注意事项
1)闪回区没有空间会导致数据库hung住
--闪回目录中可存放:归档的日志文件,controlfile 和spfile 的备份文件,闪回日志,和rman的备份集。(且归档和备份集默认放在闪回区中)
2)Flashback Database 不能解决Media Failure
3)一旦关闭闪回数据库,flashback recovery area中的闪回日志将自动全部删除
4)如果闪回数据库的时间点之间进行了控制文件的恢复或重建,数据文件的收缩,或删除了某个表空间,则闪回将失败
5)即便以闪回后resetlogs打开数据库,当前闪回日志里的内容仍然保留,仍然可以继续进行闪回到其他的scn以restlogs方式打开数据库。之所以考虑以read only方式打开数据库,主要是因为以resetlog方式打开数据库后,用户即可操作数据库,无法保证校验闪回的准确性。另外,当闪回数据库与DATA GUARD结合后,当主库发生逻辑损坏,我们可以闪回备库,然后以read only方式打开备库,将数据从备库中导出后导入到主库中,这样将对数据和业务的影响减小到最小。
6)闪回日志在出现空间压力的情况下,oracle会自动删除闪回日志,则有可能导致无法闪回到指定的时间点。如果希望闪回到指定的时间点,可进行如下操作
SQL> create restore point must_to_flashback guarantee flashback database;
这样我们就给当前时间点取must_to_flashback这个名字,确保能闪回到该时间点上
本文出自 “技术” 博客,请务必保留此出处http://589985.blog.51cto.com/1609992/1361829