Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。要使用flashback 的特性,必须启用自动管理表空间。在10g中, Flashback主要可以实现-- Flashback Database, Flashback Drop,Flashback Table,Flashback Query,其中Flashback query又可以分为Flashback Query,Flashback Version Query, Flashback Transaction Query 三种。在11g里又出了一个新特性:Oracle Flashback Data Archive. FDA通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。
在oracle 9i中引入flashback查询,以便能在需要的时候查到过去某个时刻的一致性数据,依赖于undo表空间存储的信息来闪回查询以前的版本,当然这个受限于undo表空间的大小,以及保留策略。如果undo 被覆盖了就不能进行查询。oracle10g中增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的。flashback log有点类似redo log,只不过redo log将数据库往前滚,Flashback log则将数据库往后滚。为了保存管理和备份恢复相关的文件,oracle10g提供了一个叫做闪回恢复区(Flashback recovery area),这个区域默认创建在oracle_base目录下。 可以将所有恢复相关的文件,比如flashback log,archive log,backup set等,放到这个区域集中管理。
二、闪回恢复区的设置和撤销
闪回恢复区主要通过3个初始化参数来设置和管理。
db_recovery_file_dest:指定闪回恢复区的位置
db_recovery_file_dest_size:指定闪回恢复区的可用空间大小
db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是一天。
当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的flashback log。
所以这个参数要和db_recovery_file_dest_size配合修改。
说明:
如果设置了闪回恢复区,则log_archive_dest和log_archive_duplex_dest将不可用。
设置闪回恢复区后,如果没有设置过log_archive_dest_n参数,则归档日志默认是保存到该区域的。实际上,oracle是通过隐式的设置log_archive_dest_10='location=USE_DB_RECOVERY_FILE_DEST'来实现的。所以,如果修改过log_archive_dest_n将归档日志保存到其他位置,也可以修改该参数继续使用闪回恢复区。
多个数据库的闪回恢复区可以指定到同一个位置,但是db_name不能一样,或者db_unique_name不一样。RAC的闪回恢复区必须位于共享磁盘上,能被所有实例访问。
撤销闪回恢复区
将db_recovery_file_dest参数设置为空,可以停用闪回恢复区。如果已经启用flashback database,则不能取消闪回恢复区。需要先关闭flashback database才能关闭闪回恢复区。
注意:
(1)DB_RECOVERY_FILE_DEST_SIZE 只有在 DB_RECOVERY_FILE_DEST 清空之后才可以清空。
(2)初始化参数 db_recovery_file_dest_size 的设定有一点点需要注意的地方:
文件的第0块和操作系统数据块头的空间大小不包含在内,该参数并不代表实际占用的空间大小。如果空间被压缩、镜像、RAID 的话,该参数的值意义是不一样的
三、闪回恢复区保存的内容
所有和恢复相关的文件都可以存放到闪回恢复区
四、闪回恢复区空间管理
闪回恢复区中添加或删除文件等变化都将记录在数据库的 alert 日志中,Oracle 10g 也针对该新特性提供了一个新的视图, DBA_OUTSTANDING_ALERTS,通过该视图可以得到相关的信息。
在闪回恢复区中的空间使用超过 85% 的时候,数据库将会向 alert 文件中写入告警信息。而当超过 97% 的时候将会写入严重告警信息。当闪回恢复区空间不够的时候,Oracle将报告如下类似的错误:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 52428800 bytes disk space from 1258291200 limit
如果闪回恢复区空间耗尽,且归档路径设置到了闪回恢复区中,则由于日志无法归档,数据库会hang住。所以,对于生产库,如果将归档放到闪回恢复区中,需要密切关注闪回恢复区的空间使用情况,否则一旦闪回恢复区的空间用尽,将导致数据库无法提供服务。
五、Flash recovery area的备份
备份命令是Flash recovery Area,该命令是Oracle 10g以后才有的。10g引进了flash recovery area,同时在rman备份中支持对该区域的备份。
在9i中oracle引入flashback查询,依赖于undo表空间存储的信息来闪回查询以前的版本,当然这个受限于undo表空间的大小,以及保留策略。
在10g中oracle又引入了新的flashback功能,使用了flash recovery area来存储flashback log等等。这个区域默认创建在oracle_base目录下。在其中可以存放备份集、镜像拷贝、归档日志、自动备份的控制文件以及spfile和flashback logs。存放位置和大小由参数db_recovery_file_dest和db_recovery_file_dest_size决定。
看一下Oracle 官方文档上的几段文字:
To free space in the FRA we could do take a backup of the Flash Recovery Area using the command BACKUP RECOVERY AREA.This command will take the backup of all the files in the FRA to tape only. After this the space occupied by the files in the FRA will be marked as reclaimable。
the larger the fast recovery area, the more useful it is. Ideally, the fast recovery area should be large enough for copies of the data files, control files, online redo log files, and archived redo log files needed to recover the database, and also the copies of these backup files that are kept based on the retention policy.
The Flash Recovery Area is a unified storage location for all recovery-related files and activities in an Oracle Database. It includes Control File, Archived Log Files, Flashback Logs, Control File Autobackups, Data Files, and RMAN files.
从上面的几段话,我们可以得到一下信息:
1、BACKUP RECOVERY AREA 命令只能备份到磁带上。 在磁盘上备份会报如下错误:
RMAN> BACKUP RECOVERY AREA;
启动 backup 于 12-8月 -10
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=15 设备类型=DISK
说明与资料档案库中的任何归档日志都不匹配
说明与资料档案库中的任何数据文件副本都不匹配
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: backup 命令 (在 08/12/2010 13:50:10 上) 失败
RMAN-06603: 必须在磁盘设备上使用 RECOVERY AREA, RECOVERY FILES 或 DB_RECOVERY_FILE_DEST 指定 TO DESTINATION 选项
2、Flash recovery area 包含内容:控制文件,归档文件,flashback logs, 控制文件,自动备份的控制文件,数据文件,数据文件拷贝,RMAN 文件(包括备份集,镜像备份)。
3、BACKUP RECOVERY AREA 将备份所有Flash recovery area中的内容。
以上资料整理自网络。
在oracle 9i中引入flashback查询,以便能在需要的时候查到过去某个时刻的一致性数据,依赖于undo表空间存储的信息来闪回查询以前的版本,当然这个受限于undo表空间的大小,以及保留策略。如果undo 被覆盖了就不能进行查询。oracle10g中增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的。flashback log有点类似redo log,只不过redo log将数据库往前滚,Flashback log则将数据库往后滚。为了保存管理和备份恢复相关的文件,oracle10g提供了一个叫做闪回恢复区(Flashback recovery area),这个区域默认创建在oracle_base目录下。 可以将所有恢复相关的文件,比如flashback log,archive log,backup set等,放到这个区域集中管理。
默认情况下,Flashback是没有开启的,开启Flashback请参看我的blog的 oracle-flashback的开启(http://blog.csdn.net/ora01555/article/details/22899413)。
一、实验环境
tempapp@ora10g[#/home/ora10g]uname -a
HP-UX tempapp B.11.31 U 9000/800 970419909 unlimited-user license
SYS@testdb>select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for HPUX: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - Production
二、闪回恢复区的设置和撤销
闪回恢复区主要通过3个初始化参数来设置和管理。
db_recovery_file_dest:指定闪回恢复区的位置
db_recovery_file_dest_size:指定闪回恢复区的可用空间大小
db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是一天。
当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的flashback log。
所以这个参数要和db_recovery_file_dest_size配合修改。
-->查询
SYS@testdb>show parameter recover
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string /ora_data/flash_area
db_recovery_file_dest_size big integer 10M
recovery_parallelism integer 0
SYS@testdb>show parameter flashback
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target integer 1440
SYS@testdb>show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS
-->配置
SYS@testdb>alter system set db_recovery_file_dest_size=2g scope=both;
System altered.
说明:
如果设置了闪回恢复区,则log_archive_dest和log_archive_duplex_dest将不可用。
设置闪回恢复区后,如果没有设置过log_archive_dest_n参数,则归档日志默认是保存到该区域的。实际上,oracle是通过隐式的设置log_archive_dest_10='location=USE_DB_RECOVERY_FILE_DEST'来实现的。所以,如果修改过log_archive_dest_n将归档日志保存到其他位置,也可以修改该参数继续使用闪回恢复区。
多个数据库的闪回恢复区可以指定到同一个位置,但是db_name不能一样,或者db_unique_name不一样。RAC的闪回恢复区必须位于共享磁盘上,能被所有实例访问。
撤销闪回恢复区
将db_recovery_file_dest参数设置为空,可以停用闪回恢复区。如果已经启用flashback database,则不能取消闪回恢复区。需要先关闭flashback database才能关闭闪回恢复区。
注意:
(1)DB_RECOVERY_FILE_DEST_SIZE 只有在 DB_RECOVERY_FILE_DEST 清空之后才可以清空。
(2)初始化参数 db_recovery_file_dest_size 的设定有一点点需要注意的地方:
文件的第0块和操作系统数据块头的空间大小不包含在内,该参数并不代表实际占用的空间大小。如果空间被压缩、镜像、RAID 的话,该参数的值意义是不一样的
三、闪回恢复区保存的内容
所有和恢复相关的文件都可以存放到闪回恢复区
SYS@testdb>col file_type for a30
SYS@testdb>set linesize 200
SYS@testdb>select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 13.73 0 9
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
6 rows selected.
-->在一些 10g 的动态视图里( V$CONTROLFILE, V$LOGFILE, V$ARCHIVED_LOG, V$DATAFILE_COPY 等 )的新的列 IS_RECOVERY_DEST_FILE ,指明相关的文件是否在恢复区内。
SYS@testdb>col name for a50
SYS@testdb>select name,is_recovery_dest_file from v$archived_log;
四、闪回恢复区空间管理
闪回恢复区中添加或删除文件等变化都将记录在数据库的 alert 日志中,Oracle 10g 也针对该新特性提供了一个新的视图, DBA_OUTSTANDING_ALERTS,通过该视图可以得到相关的信息。
在闪回恢复区中的空间使用超过 85% 的时候,数据库将会向 alert 文件中写入告警信息。而当超过 97% 的时候将会写入严重告警信息。当闪回恢复区空间不够的时候,Oracle将报告如下类似的错误:
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 52428800 bytes disk space from 1258291200 limit
-->这个时候查询 dba_outstanding_alerts:
SQL> select reason,object_type,suggested_action from dba_outstanding_alerts;
REASON OBJECT_TYPE SUGGESTED_ACTION
------------------------------ -------------------- ----------------------------------------
db_recovery_file_dest_size of RECOVERY AREA Add disk space and increase db_recovery_
1258291200 bytes is 88.20% use file_dest_size, backup files to tertiary
d and has 148509184 remaining device, delete files from recovery area
bytes available. using RMAN, consider changing RMAN rete
ntion policy or consider changing RMAN a
rchivelog deletion policy.
-->同时,oracle在alert中还会给出解决该问题的建议
************************************************************************
You have following choices to free up space from flash recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMANB ACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating system command was used to delete files, then use RMAN CROSSCHECK and DELETE EXPIRED commands.
************************************************************************
-->V$RECOVERY_FILE_DEST视图 包含闪回恢复区的相关信息:
SYS@testdb>select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------------------------------------- ----------- ---------- ----------------- ---------------
/ora_data/flash_area 2147483648 294861824 0 9
-->通过查询视图v$flash_recovery_area_usage,可以获得当前闪回恢复区的空间使用情况,并且可以知道是哪些文件占中了空间,据此可以做出相应的处理,或者加大闪回恢复区,或者移走相应的文件。
SYS@testdb>select * from v$flash_recovery_area_usage;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------ ------------------ ------------------------- ---------------
CONTROLFILE 0 0 0
ONLINELOG 0 0 0
ARCHIVELOG 13.73 0 9
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
6 rows selected.
如果闪回恢复区空间耗尽,且归档路径设置到了闪回恢复区中,则由于日志无法归档,数据库会hang住。所以,对于生产库,如果将归档放到闪回恢复区中,需要密切关注闪回恢复区的空间使用情况,否则一旦闪回恢复区的空间用尽,将导致数据库无法提供服务。
五、Flash recovery area的备份
备份命令是Flash recovery Area,该命令是Oracle 10g以后才有的。10g引进了flash recovery area,同时在rman备份中支持对该区域的备份。
在9i中oracle引入flashback查询,依赖于undo表空间存储的信息来闪回查询以前的版本,当然这个受限于undo表空间的大小,以及保留策略。
在10g中oracle又引入了新的flashback功能,使用了flash recovery area来存储flashback log等等。这个区域默认创建在oracle_base目录下。在其中可以存放备份集、镜像拷贝、归档日志、自动备份的控制文件以及spfile和flashback logs。存放位置和大小由参数db_recovery_file_dest和db_recovery_file_dest_size决定。
看一下Oracle 官方文档上的几段文字:
To free space in the FRA we could do take a backup of the Flash Recovery Area using the command BACKUP RECOVERY AREA.This command will take the backup of all the files in the FRA to tape only. After this the space occupied by the files in the FRA will be marked as reclaimable。
the larger the fast recovery area, the more useful it is. Ideally, the fast recovery area should be large enough for copies of the data files, control files, online redo log files, and archived redo log files needed to recover the database, and also the copies of these backup files that are kept based on the retention policy.
The Flash Recovery Area is a unified storage location for all recovery-related files and activities in an Oracle Database. It includes Control File, Archived Log Files, Flashback Logs, Control File Autobackups, Data Files, and RMAN files.
从上面的几段话,我们可以得到一下信息:
1、BACKUP RECOVERY AREA 命令只能备份到磁带上。 在磁盘上备份会报如下错误:
RMAN> BACKUP RECOVERY AREA;
启动 backup 于 12-8月 -10
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=15 设备类型=DISK
说明与资料档案库中的任何归档日志都不匹配
说明与资料档案库中的任何数据文件副本都不匹配
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: backup 命令 (在 08/12/2010 13:50:10 上) 失败
RMAN-06603: 必须在磁盘设备上使用 RECOVERY AREA, RECOVERY FILES 或 DB_RECOVERY_FILE_DEST 指定 TO DESTINATION 选项
2、Flash recovery area 包含内容:控制文件,归档文件,flashback logs, 控制文件,自动备份的控制文件,数据文件,数据文件拷贝,RMAN 文件(包括备份集,镜像备份)。
3、BACKUP RECOVERY AREA 将备份所有Flash recovery area中的内容。
以上资料整理自网络。