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 相关视图

1v$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已使用大小,和预计大小闪回区大小

2v$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),所需的闪回去大小

3v$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住了

4v$sgastat

select * from v$sgastat where name like 'flashback%';

--查看sga中分配的闪回空间大小

3.  使用flashback database闪回数据库

步骤(前提归档日志可用)

关闭数据库

启动数据库到mount状态(exclusive模式)

闪回至某个时间点,SCNlog 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进行闪回数据库的几种常用办法

aRMAN> flashback database to scn=918987;

bRMAN> flashback database to sequence=85 thread=1;

4.  flashback database使用注意事项

1)闪回区没有空间会导致数据库hung

--闪回目录中可存放:归档的日志文件,controlfile spfile 的备份文件,闪回日志,和rman的备份集。(且归档和备份集默认放在闪回区中)

2Flashback Database 不能解决Media Failure

3)一旦关闭闪回数据库,flashback recovery area中的闪回日志将自动全部删除

4)如果闪回数据库的时间点之间进行了控制文件的恢复或重建,数据文件的收缩,或删除了某个表空间,则闪回将失败

5)即便以闪回后resetlogs打开数据库,当前闪回日志里的内容仍然保留,仍然可以继续进行闪回到其他的scnrestlogs方式打开数据库。之所以考虑以read only方式打开数据库,主要是因为以resetlog方式打开数据库后,用户即可操作数据库,无法保证校验闪回的准确性。另外,当闪回数据库与DATA GUARD结合后,当主库发生逻辑损坏,我们可以闪回备库,然后以read only方式打开备库,将数据从备库中导出后导入到主库中,这样将对数据和业务的影响减小到最小。

6)闪回日志在出现空间压力的情况下,oracle会自动删除闪回日志,则有可能导致无法闪回到指定的时间点。如果希望闪回到指定的时间点,可进行如下操作

SQL> create restore point must_to_flashback guarantee flashback database;

这样我们就给当前时间点取must_to_flashback这个名字,确保能闪回到该时间点上