Flashback Recovery Area(FRA)相关介绍(一)
有些时候很多刚入门的朋友把Oracle的闪回特性和闪回恢复区混淆,误以为这俩是同样的东西或者包含关系。其实,他们是完全不同的概念,并不能说他们之间毫无关系,因为10g的FLASHBACK DATABASE开启之后定期将发生变化的数据块前镜像写入到闪回恢复区中的闪回日志中。 那看到下面这张图,大家可能会想到闪回恢复区了吧! 本次重点要说的是闪回恢复区,我会理论结合实验说明,我的环境为Oracle 11g R2 RAC,所以结合ASM做所需实验。至于单实例文件系统环境操作类似,在这里不做操作。 闪回恢复区是什么?闪回恢复区是一个默认放置所有和备份恢复操作相关文件的地方。 我们在闪回恢复区里能存放什么?可存放的文件很多,比如控制文件和联机重做日志副本、归档日志、闪回日志等等,具体在下面列出。 为启用Automatic Disk-Based Backup and Recovery,必须为闪回恢复区指定足够的容量,此容量大小被作为闪回恢复区的上限,我们还可以指示Oracle保留与备份有关的信息多长时间。有了这些条件,Oracle将会自动管理备份,DBA基本不用操心目录结构和文件命名,而且Oracle会自动删除数据库不需要的文件。因此,DBA所需做的就是为闪回恢复区提供足够的空间并选择保留文件的适当时间,当然还要监控其使用情况。 Oracle的闪回恢复区自动管理,也就是自动删除不想要的文件,是基于Oracle数据库的OMF(Oracle Managed Files)特性,OMF有关键的两个参数DB_CREATE_FILE_DEST? 和? DB_CREATE_ONLINE_LOG_DEST_n,它们在闪回恢复区的使用上也起着重要的作用。 看一下我的一套RAC的OMF相关几个参数: SQL> SELECT INSTANCE_NAME, STATUS FROM GV$INSTANCE; INSTANCE_NAME STATUS -------------------------------- ------------------------ luocs1 OPEN luocs2 OPEN SQL> SET LINE 150 SQL> SHOW PARAMETER DB_CREATE NAME TYPE VALUE ------------------------------------ ---------------------- ------------------------------ db_create_file_dest string +SVDATA db_create_online_log_dest_1 string db_create_online_log_dest_2 string db_create_online_log_dest_3 string db_create_online_log_dest_4 string db_create_online_log_dest_5 -- 从这里可以看出我目前只配置了DB_CREATE_FILE_DEST参数,所以我的数据文件、日志文件、控制文件目前都只在
+SVDATA磁盘组下。
SQL> SELECT NAME FROM V$DATAFILE 2 UNION ALL 3 SELECT NAME FROM V$CONTROLFILE 4 UNION ALL 5 SELECT MEMBER FROM V$LOGFILE 6 / NAME ------------------------------------------------------------------------------------ /luocs/datafile/system.259.792420101 /sysaux260.792420153 /undotbs1261.792420195 /undotbs2263.792420225 /users264.792420239 /controlfile/current256.792420091 /onlinelog/group_1257.792420093 /group_2258.792420097 /group_3265.792421909 /group_4266.792421913 10 rows selected.
闪回恢复区的优点
? 下面看闪回恢复区所能存放的文件:
? 设置闪回恢复区的大小 在设置闪回恢复区大小时,数据库的大小是主要的因素。其他影响闪回恢复区大小的因素为:
创建闪回恢复区的方法
闪回恢复区也有两个关键参数,它们是:
注意:DB_CREATE_FILE_DEST 、DB_CREATE_ONLINE_LOG_DEST_n和DB_RECOVERY_FILE_DEST强烈不建议指定相同的位置。 创建闪回恢复区操作我们可以通过初始化参数文件,里面添加 初始化参数文件设置方法比较麻烦,DBA应该更多采取动态修改方法。 设置闪回恢复区参数 我将会做一个这样的例子: 这些参数说明如下:
下面是我创建闪回恢复区的示例: [root@rac1 ~]# su - oracle [oracle@rac1 ~]$ sqlplus / as sysdba SQL> archive log list Database log mode No Archive Mode Automatic archival Disabled Archive destination /u01/app/oracle/product/11.20/dbhome_1/dbs/arch Oldest online log sequence 43 Current log sequence 44 从上面的信息可以发现,我的这套RAC目前并没有开启归档,也没有创建闪回恢复区。 节点1: # su - grid [grid@rac1 as sysasm SQL> set pagesize 9999 SQLset line > col NAME for a15 SQL> col FAILGROUP for a30 SQL> col PATH for a40 SQLselect name failgroup path disk_number from v$asm_disk; NAME FAILGROUP PATH DISK_NUMBER --------------- ------------------------------ ---------------------------------------- ----------- ORCL:SVARCH 0 ORCL:SVRECOVERY 1 SVCRS1 SVCRS1 ORCL:SVCRS1 0 SVCRS2 SVCRS2 ORCL:SVCRS2 1 SVCRS3 SVCRS3 ORCL:SVCRS3 2 SVDATA SVDATA ORCL:SVDATA 0 6 rows selected. SQLtypestatetotal_mbfree_mb from v$asm_diskgroup; NAME TYPE STATE TOTAL_MB FREE_MB ------------ ---------- ---------- SVCRS NORMAL MOUNTED 3042 2116 SVARCH DISMOUNTED 0 SVDATA EXTERN MOUNTED 5962 3691 从上面的信息可以看出,我已经创建好了归档日志存放ASM磁盘组,但却没有创建用于闪回恢复区的ASM磁盘组, 却已经创建了RECOVERY ASM磁盘。 下面我创建用于闪回恢复区的ASM磁盘组 SQL> create diskgroup SVRECOVERY external redundancy disk 'ORCL:SVRECOVERY'; Diskgroup created3691 SVRECOVERY EXTERN MOUNTED 5581 5531 2: SQL2116 SVDATA EXTERN MOUNTED 3691 SVARCH DISMOUNTED 0 SVRECOVERY DISMOUNTED 0 SQL> ALTER DISKGROUP SVRECOVERY MOUNTDiskgroup altered0 SVRECOVERY EXTERN MOUNTED 5468 DB_CREATE_FILE_DEST参数在DBCA建库的时候已经设置,不做改动。 SQL> SHOW PARAMETER DB_CREATE_FILE_DEST NAME TYPE VALUE +SVDATA 设置闪回恢复区相关两个参数: SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 5GSystem altered> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST = '+SVRECOVERY'for a20 SQL> SELECT * FROM V$RECOVERY_FILE_DEST; NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES -------------------- ----------- ----------------- +SVRECOVERY 5368709120 0 查看闪回恢复区的当前位置、磁盘限额、在用空间、可删除文件回收的空间和总的文件数目 SQL* FROM V$FLASH_RECOVERY_AREA_USAGE; FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES ------------------ ------------------------- --------------- CONTROL FILE 0 REDO LOG 0 ARCHIVED LOG 0 BACKUP PIECE 0 IMAGE COPY 0 FLASHBACK LOG 0 FOREIGN ARCHIVED LOG 7 rows selected. 查看不同类型文件的使用空间,以及对于某种文类型的文件 SQLfor a50 SQL> SELECT NAME IS_RECOVERY_DEST_FILE FROM V$CONTROLFILE; NAME IS_REC -------------------------------------------------- ------ /bbk256.792420091 NO SQL> COL MEMBER FOR A50 SQL> SELECT MEMBER IS_RECOVERY_DEST_FILE FROM V$LOGFILE; MEMBER IS_REC 257.792420093 NO 258.792420097 NO 265.792421909 NO 266.792421913 NO SQL IS_RECOVERY_DEST_FILE FROM V$ARCHIVED_LOG; no rows selected SQL IS_RECOVERY_DEST_FILE FROM V$DATAFILE_COPY> SELECT PIECE#,IS_RECOVERY_DEST_FILE FROM V$BACKUP_PIECE; no rows selected 从上面几个视图中可以看出目前闪回恢复区中没有任何文件。 RMAN配置中我们开启自动备份控制文件: RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ONnew RMAN configuration parameters: CONFIGURE CONTROLFILE AUTOBACKUP ONnew RMAN configuration parameters are successfully stored 备份一个参数文件: RMAN> BACKUP SPFILE TAG='BackupSpfile'Starting backup at 30-OCT-2012 10:2442 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=45 instance=bbk1 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set including current SPFILE : starting piece 1 at 43 channel ORA_DISK_1: finished piece 44 piece handle=+SVRECOVERY/backupset2012_10_30/nnsnf0_backupspfile_0256.798027883 tag=BACKUPSPFILE comment=NONE channel ORA_DISK_1: backup set complete elapsed time: 0001 Finished backup at 44 Starting Control File and SPFILE Autobackup at /autobackup/s_798027884257.798027887 comment=NONE Finished 47 SQL0 BACKUP PIECE 37 02 2 IMAGE COPY 这时候发现备份片已经有所变化。 好,下面我们让数据库运行于归档模式: 首先,我不指定单独的归档目录+SVARCH,数据库重启到mount模式 ~]$ srvctl stop database -d luocs ~]$ srvctl start database -o mount > alter database archivelogDatabase altered> alter database open[root@rac2 [oracle@rac2 > ARCHIVE LOG LIST Enabled Archive destination USE_DB_RECOVERY_FILE_DEST 9 Next log sequence to archive 10 10 可以看出开启归档之后归档日志默认存放目标位置为闪回恢复区了。 那USE_DB_RECOVERY_FILE_DEST被哪个参数指定了呢?10g中,LOG_ARCHIVE_DEST_10参数被隐含地设置为闪回恢复区,而11g中有点变化 我从告警日志里发现被指定到LOG_ARCHIVE_DEST_1: Using LOG_ARCHIVE_DEST_1 parameter default value as USE_DB_RECOVERY_FILE_DEST 然后我指定单独的归档目录+SVARCH SQL> ALTER SYSTEM SET log_archive_dest_1 'LOCATION=+SVARCH'+SVARCH 44 SQL> COL NAME FOR A80 SQL-------------------------------------------------------------------------------- +SVARCH/archivelog/thread_1_seq_44256.798031261 NO /thread_1_seq_45257.798031265 NO /thread_2_seq_10258.798031265 NO /thread_2_seq_11259.798031271 NO 大家看到这里,可能误以为闪回恢复区被禁用了,其实不是(上面只是归档日志文件不放在闪回恢复区了),通过下 面的方式验证: RMAN> BACKUP AS COPY DATAFILE 5112727 using target database control file instead of recovery catalog allocated channel55 instance: starting datafile copy input datafile file number00005 name=+SVDATA264.792420239 output file name258.798031649 tag=TAG20121030T112728 RECID1 STAMP798031649 channel ORA_DISK_1: datafile copy complete30 30 piece handle/s_798031650259.798031651 comment33 SQL72 37 3 IMAGE COPY 12 1 FLASHBACK LOG . OK,我们重新让归档日志文件放进闪回恢复区,指定log_archive_dest_2参数: SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_2 'LOCATION=USE_DB_RECOVERY_FILE_DEST'> ALTER SYSTEM SWITCH LOGFILE/thread_1_seq_48264.798032041 NO +SVRECOVERY260.798032039 YES 上面用到了几个和闪回恢复区相关的视图,这里介绍下: – SPACE_LIMIT列包含分配的闪回恢复区容量。 v$FLASH_RECOVERY_AREA_USAGE,查看不同类型文件的使用空间,以及对于某种文类型的文件 V$LOGFILE,V$CONTROLFILE,V$ARCHIED_LOG,V$DATAFILE_COPY,V$BACKUP_PIECE等视图都有IS_RECOVERY_DEST_FILE列,如果值为YES表示文件在闪回恢复区中,NO表示不在。 禁用当前闪回恢复区方法也很简单,将DB_RECOVERY_FILE_DEST设置为空格('')即可,这样将清除闪回恢复区文件的目标位置。 使用闪回恢复区
即使一个文件符合删除条件,Oracle也只在闪回恢复区满时才删除它。 这里提到保留策略,文件在闪回恢复区中保留的时间长度是由RMAN的保留策略决定的,RMAN通过RMAN CONFIGURE RETENTION POLICY命令规定保留备份的天数。超过RMAN保留策略或废弃的文件将从闪回恢复区中删除。
在Data?Guard环境中,当已归档的重建日志文件可以从闪回恢复区中删除的时候,可以应用归档的重建日志删除策略来进行自动删除(在恢复管理器中CONFIGURE?ARCHIVELOG?DELETION?POLICY?TO...) 如果闪回恢复区满了,而且不能删除任何文件,将会出现一个85%满的警告(warning),或者出现一个97%满的严重警告。 在闪回恢复区填满时,数据库发布下面的错误: 下面两个ORA错误是闪回恢复区容量用完时候常看到的: 在归档日志存放于闪回恢复区的情况可能会看到下面ORA错误: 如果以上情况发生,可采取如下措施:
? 为闪回恢复区指定新的位置: --本篇文章转自:http://www.luocs.com/archives/299.html?,并做了一丁点的改动。黄色阴影部分是从另一篇文章转的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |