您的位置:首页 > 数据库 > Oracle

oracle10g新特性:闪回恢复区(Flash recovery area)

2012-05-13 16:57 337 查看
1.设置闪回恢复区

闪回恢复区主要通过3个初始化参数来设置和管理

· db_recovery_file_dest:指定闪回恢复区的位置。

· db_recovery_file_dest_size:指定闪回恢复区的可用空间大小。

· db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是一天。当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的flash
log。所以这个参数要和db_recovery_file_dest_size配合修改。

2.启动flashback database

设置了闪回恢复区后,可以启动闪回数据库功能。

首先,数据库必须已经处于归档模式:

SQL>archive log list

数据库日志模式存档模式

自动存档启用

存档终点USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列245

下一个存档日志序列247

当前日志序列247
然后,启动数据库到mount状态:

SQL> shutdown immediate;
数据库已经关闭。

已经卸载数据库。

ORACLE例程已经关闭。


SQL> startup mount;

ORACLE例程已经启动。
Total System Global Area 142606336 bytes

Fixed Size 1247732 bytes

Variable Size 83887628 bytes

Database Buffers 50331648 bytes

Redo Buffers 7139328 bytes

数据库装载完毕。
SQL>alter database flashback on;

数据库已更改。
SQL> alter database open;
数据库已更改。SQL> selectFLASHBACK_ONfrom v$database;
FLASHBACK_ON

------------------------------------

YES
关于flashback database的功能,这里就不继续深入了。
3.取消闪回恢复区

将db_recovery_file_dest参数设置为空,可以停用闪回恢复区。如果已经启用flashback database,则不能取消闪回恢复区。

SQL> alter system setdb_recovery_file_dest='';
alter system set db_recovery_file_dest=''

*

第1行出现错误:

ORA-02097:无法修改参数,因为指定的值无效

ORA-38775:无法禁用快速恢复区-闪回数据库已启用所以,必须先禁用flashback database,才能取消闪回恢复区
SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE例程已经关闭。

SQL> startup mount;

ORACLE例程已经启动。
Total System Global Area 142606336 bytes

Fixed Size 1247732 bytes

Variable Size 83887628 bytes

Database Buffers 50331648 bytes

Redo Buffers 7139328 bytes

数据库装载完毕。

SQL>alter database flashback off;
数据库已更改。SQL> alter database open;
数据库已更改。
SQL> alter system set db_recovery_file_dest='';
系统已更改。
注意;闪回恢复的开启和关闭都必须在mount状态下。

4.闪回恢复区的内容

所有和恢复相关的文件都可以存放到闪回恢复区:

SQL> select file_type fromv$flash_recovery_area_usage;

FILE_TYPE

------------------------

CONTROLFILE

ONLINELOG

ARCHIVELOG

BACKUPPIECE

IMAGECOPY

FLASHBACKLOG已选择6行。

上面的视图中可以看出,包括controfile,online redo logfile,archive logfile,rman backup piece,rman image copy, flashback log等,都可以利用闪回恢复区来存放、管理。

5.闪回恢复区的一些限制

如果设置了闪回恢复区,则log_archive_dest和log_archive_duplex_dest将不可用:

SQL> alter system setlog_archive_dest='e:/'

*

第1行出现错误:

ORA-02097:无法修改参数,因为指定的值无效

ORA-16018:无法将LOG_ARCHIVE_DEST与LOG_ARCHIVE_DEST_n或

DB_RECOVERY_FILE_DEST一起使用


SQL> alter system set log_archive_duplex_dest='e:/';

alter system set log_archive_duplex_dest='e:/'

*

第1行出现错误:

ORA-02097:无法修改参数,因为指定的值无效

ORA-16018:无法将LOG_ARCHIVE_DUPLEX_DEST与LOG_ARCHIVE_DEST_n或

DB_RECOVERY_FILE_DEST一起使用
设置闪回恢复区后,如果没有设置过log_archive_dest_n参数,则归档日志默认是保存到该区域的:

SQL> archive log list

数据库日志模式存档模式

自动存档启用

存档终点USE_DB_RECOVERY_FILE_DEST

最早的联机日志序列245

下一个存档日志序列247

当前日志序列247


实际上,oracle是通过隐式的设置log_archive_dest_10='location=USE_DB_RECOVERY_FILE_DEST'来实现的。所以,如果之后你修改过log_archive_dest_n将归档日志保存到其他位置,也可以修改该参数继续使用闪回恢复区。多个数据库的闪回恢复区可以指定到同一个位置,但是db_name不能一样,或者db_unique_name不一样。RAC的闪回恢复区必须位于共享磁盘上,能被所有实例访问。
6.闪回恢复区的空间管理

当闪回恢复区空间不足时,alert中会有警告记录:

Tue Dec 19 10:45:41 2006

Errors in file e:/oracle/ora10/admin/ning/bdump/ning_rvwr_31968.trc:

ORA-19815:警告: db_recovery_file_dest_size字节(共52428800字节)已使用87.29%,尚有6665216字节可用。
同时,oracle在alert中还会给出解决该问题的建议:

Tue Dec 19 10:45:41 2006

************************************************************************

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 RMAN

BACKUP 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.

************************************************************************
如果闪回恢复区空间耗尽,且归档路径设置到了闪回恢复区中,则由于日志无法归档,数据库会hang住。

Tue Dec 19 10:45:57 2006

Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:

ORA-19815:警告: db_recovery_file_dest_size字节(共52428800字节)已使用100.00%,尚有0字节可用。
Tue Dec 19 10:45:57 2006

Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:

ORA-19809:超出了恢复文件数的限制

ORA-19804:无法回收6836224字节磁盘空间(从52428800限制中)ARC0:
Error 19809 Creating archive log file to'E:/ORACLE/ORA10/FLASH_RECOVERY_AREA/NING/ARCHIVELOG/2006_12_19/O1_MF_1_250_U_.ARC'

ARC0: Failed to archive thread 1 sequence 250 (19809)

ARCH: Archival stopped, error occurred. Will continue retrying

Tue Dec 19 10:45:58 2006

Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:

ORA-16038:日志1序列号250无法归档

ORA-19809:超出了恢复文件数的限制

ORA-00312:联机日志1线程1: 'E:/ORACLE/ORA10/ORADATA/NING/REDO01.LOG'

所以,对于生产库,如果将归档放到闪回恢复区中,需要密切关注闪回恢复区的空间使用情况,否则一旦闪回恢复区的空间用尽,将导致数据库无法提供服务。

通过查询视图v$flash_recovery_area_usage,可以获得当前闪回恢复区的空间使用情况,并且可以知道是哪些文件占中了空间,据此可以做出相应的处理,或者加大闪回恢复区,或者移走相应的文件。

SQL> 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 91 0 16

BACKUPPIECE 0 0 0

IMAGECOPY 0 0 0

FLASHBACKLOG 8 4 2
已选择6行。
另外,v$recovery_file_dest视图也提供了闪回恢复区的概要信息。

SQL> select * fromv$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES

----------------------------------- ----------- ---------- ----------------- ---------------

E:oracleora10flash_recovery_area 104857600 101835264 0 17

转自:http://blog.csdn.net/ningoo/archive/2006/12/19/1448668.aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: