<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ZyHui &#187; 闪回恢复区</title>
	<atom:link href="http://blog.onecheng.com/archives/tag/%e9%97%aa%e5%9b%9e%e6%81%a2%e5%a4%8d%e5%8c%ba/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.onecheng.com</link>
	<description>技术不是问题，关键是做人要厚道！</description>
	<lastBuildDate>Fri, 13 Aug 2010 08:20:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>oracle10g新特性：闪回恢复区(Flash recovery area)</title>
		<link>http://blog.onecheng.com/archives/328</link>
		<comments>http://blog.onecheng.com/archives/328#comments</comments>
		<pubDate>Fri, 28 Mar 2008 03:07:08 +0000</pubDate>
		<dc:creator>zyhui</dc:creator>
				<category><![CDATA[数据库]]></category>
		<category><![CDATA[Flash recovery area]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[闪回恢复区]]></category>

		<guid isPermaLink="false">http://blog.onecheng.com/archives/328</guid>
		<description><![CDATA[<p>Oracle9i开始提供闪回查询，以便能在需要的时候查到过去某个时刻的一致性数据，这是通过Undo实现的。这个功能有很大的限制，就是相关事务的undo不能被覆盖，否则就无力回天了。oracle10g大大的增强了闪回查询的功能，并且提供了将整个数据库回退到过去某个时刻的能力，这是通过引入一种新的flashback log实现的。flashback log有点类似redo log，只不过redo log将数据库往前滚，flashback log则将数据库往后滚。为了保存管理和备份恢复相关的文件，oracle10g提供了一个叫做闪回恢复区(Flashback recovery area)的新特性，可以将所有恢复相关的文件，比如flashback log,archive log,backup set等，放到这个区域集中管理。</p>
<p></p>
<p>环境
<p>SQL&#62; select * from v$version;
<p>BANNER&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 &#8211; ProdPL/SQL Release 10.2.0.1.0 &#8211; ProductionCORE 10.2.0.1.0 ProductionTNS for 32-bit Windows: Version 10.2.0.1.0 &#8211; ProductionNLSRTL Version 10.2.0.1.0 &#8211; Production
<p>1.设置闪回恢复区
<p>闪回恢复区主要通过3个初始化参数来设置和管理

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

<p>2.启动flashback database
<p>设置了闪回恢复区后，可以启动闪回数据库功能。
<p>首先，数据库必须已经处于归档模式
<p>SQL&#62; archive log list数据库日志模式 存档模式自动存档 启用存档终点 USE_DB_RECOVERY_FILE_DEST最早的联机日志序列 245下一个存档日志序列 247当前日志序列 247
<p>然后，启动数据库到mount状态SQL&#62; shutdown immediate;数据库已经关闭。已经卸载数据库。ORACLE 例程已经关闭。
<p>SQL&#62; startup [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle9i开始提供闪回查询，以便能在需要的时候查到过去某个时刻的一致性数据，这是通过Undo实现的。这个功能有很大的限制，就是相关事务的undo不能被覆盖，否则就无力回天了。oracle10g大大的增强了闪回查询的功能，并且提供了将整个数据库回退到过去某个时刻的能力，这是通过引入一种新的flashback log实现的。flashback log有点类似redo log，只不过redo log将数据库往前滚，flashback log则将数据库往后滚。为了保存管理和备份恢复相关的文件，oracle10g提供了一个叫做闪回恢复区(Flashback recovery area)的新特性，可以将所有恢复相关的文件，比如flashback log,archive log,backup set等，放到这个区域集中管理。</p>
<p><span id="more-328"></span></p>
<p><strong>环境</strong>
<p>SQL&gt; select * from v$version;
<p>BANNER<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 &#8211; Prod<br />PL/SQL Release 10.2.0.1.0 &#8211; Production<br />CORE 10.2.0.1.0 Production<br />TNS for 32-bit Windows: Version 10.2.0.1.0 &#8211; Production<br />NLSRTL Version 10.2.0.1.0 &#8211; Production
<p><strong>1.设置闪回恢复区</strong>
<p>闪回恢复区主要通过3个初始化参数来设置和管理
<ul>
<li>db_recovery_file_dest：指定闪回恢复区的位置
<li>db_recovery_file_dest_size：指定闪回恢复区的可用空间大小
<li>db_flashback_retention_target：指定数据库可以回退的时间，单位为分钟，默认1440分钟，也就是一天。当然，实际上可回退的时间还决定于闪回恢复区的大小，因为里面保存了回退所需要的flash log。所以这个参数要和db_recovery_file_dest_size配合修改。</li>
</ul>
<p><strong>2.启动flashback database</strong>
<p>设置了闪回恢复区后，可以启动闪回数据库功能。
<p>首先，数据库必须已经处于归档模式
<p>SQL&gt; archive log list<br />数据库日志模式 存档模式<br />自动存档 启用<br />存档终点 USE_DB_RECOVERY_FILE_DEST<br />最早的联机日志序列 245<br />下一个存档日志序列 247<br />当前日志序列 247
<p>然后，启动数据库到mount状态<br />SQL&gt; shutdown immediate;<br />数据库已经关闭。<br />已经卸载数据库。<br />ORACLE 例程已经关闭。
<p>SQL&gt; startup mount;<br />ORACLE 例程已经启动。
<p>Total System Global Area 142606336 bytes<br />Fixed Size 1247732 bytes<br />Variable Size 83887628 bytes<br />Database Buffers 50331648 bytes<br />Redo Buffers 7139328 bytes<br />数据库装载完毕。
<p>SQL&gt; alter database flashback on;
<p>数据库已更改。
<p>SQL&gt; alter database open;
<p>数据库已更改。
<p>SQL&gt; select FLASHBACK_ON from v$database;
<p>FLASHBACK_ON<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />YES
<p>关于flashback database的功能，这里就不继续深入了。
<p><strong>3.取消闪回恢复区</strong>
<p>将db_recovery_file_dest参数设置为空，可以停用闪回恢复区。
<p>如果已经启用flashback database，则不能取消闪回恢复区。<br />SQL&gt; alter system set db_recovery_file_dest=&#8221;;<br />alter system set db_recovery_file_dest=&#8221;<br />*<br />第 1 行出现错误:<br />ORA-02097: 无法修改参数, 因为指定的值无效<br />ORA-38775: 无法禁用快速恢复区 &#8211; 闪回数据库已启用
<p>所以，必须先禁用flashback database，才能取消闪回恢复区<br />SQL&gt; shutdown immediate;<br />数据库已经关闭。<br />已经卸载数据库。<br />ORACLE 例程已经关闭。<br />SQL&gt; startup mount;<br />ORACLE 例程已经启动。
<p>Total System Global Area 142606336 bytes<br />Fixed Size 1247732 bytes<br />Variable Size 83887628 bytes<br />Database Buffers 50331648 bytes<br />Redo Buffers 7139328 bytes<br />数据库装载完毕。<br />SQL&gt; alter database flashback off;
<p>数据库已更改。
<p>SQL&gt; alter database open;
<p>数据库已更改。
<p>SQL&gt; alter system set db_recovery_file_dest=&#8221;;
<p>系统已更改。
<p><strong>4.闪回恢复区的内容</strong>
<p>所有和恢复相关的文件都可以存放到闪回恢复区<br />SQL&gt; select file_type from v$flash_recovery_area_usage;
<p>FILE_TYPE<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />CONTROLFILE<br />ONLINELOG<br />ARCHIVELOG<br />BACKUPPIECE<br />IMAGECOPY<br />FLASHBACKLOG
<p>已选择6行。
<p>上面的视图中可以看出，包括controfile,online redo logfile,archive logfile,rman backup
<p>piece,rman image copy, flashback log等，都可以利用闪回恢复区来存放、管理。
<p><strong>5.闪回恢复区的一些限制</strong>
<p>如果设置了闪回恢复区，则log_archive_dest和log_archive_duplex_dest将不可用<br />alter system set log_archive_dest=&#8217;e:/&#8217;<br />*<br />第 1 行出现错误:<br />ORA-02097: 无法修改参数, 因为指定的值无效<br />ORA-16018: 无法将 LOG_ARCHIVE_DEST 与 LOG_ARCHIVE_DEST_n 或<br />DB_RECOVERY_FILE_DEST 一起使用
<p>SQL&gt; alter system set log_archive_duplex_dest=&#8217;e:/&#8217;;<br />alter system set log_archive_duplex_dest=&#8217;e:/&#8217;<br />*<br />第 1 行出现错误:<br />ORA-02097: 无法修改参数, 因为指定的值无效<br />ORA-16018: 无法将 LOG_ARCHIVE_DUPLEX_DEST 与 LOG_ARCHIVE_DEST_n 或<br />DB_RECOVERY_FILE_DEST 一起使用
<p>设置闪回恢复区后，如果没有设置过log_archive_dest_n参数，则归档日志默认是保存到该区域的<br />SQL&gt; archive log list<br />数据库日志模式 存档模式<br />自动存档 启用<br />存档终点 USE_DB_RECOVERY_FILE_DEST<br />最早的联机日志序列 245<br />下一个存档日志序列 247<br />当前日志序列 247
<p>实际上，oracle是通过隐式的设置log_archive_dest_10=&#8217;location=USE_DB_RECOVERY_FILE_DEST&#8217;来实现的。所以，如果之后你修改过log_archive_dest_n将归档日志保存到其他位置，也可以修改该参数继续使用闪回恢复区。
<p>多个数据库的闪回恢复区可以指定到同一个位置，但是db_name不能一样，或者db_unique_name不一样。
<p>RAC的闪回恢复区必须位于共享磁盘上，能被所有实例访问。
<p><strong>6.闪回恢复区的空间管理</strong>
<p>当闪回恢复区空间不足(超过85%)时，alert中会有警告记录
<p>Tue Dec 19 10:45:41 2006<br />Errors in file e:/oracle/ora10/admin/ning/bdump/ning_rvwr_31968.trc:<br />ORA-19815: 警告: db_recovery_file_dest_size 字节 (共 52428800 字节) 已使用 87.29%, 尚有6665216 字节可用。
<p>同时，oracle在alert中还会给出解决该问题的建议<br />Tue Dec 19 10:45:41 2006<br />************************************************************************<br />You have following choices to free up space from flash recovery area:<br />1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,<br />then consider changing RMAN ARCHIVELOG DELETION POLICY.<br />2. Back up files to tertiary device such as tape using RMAN<br />BACKUP RECOVERY AREA command.<br />3. Add disk space and increase db_recovery_file_dest_size parameter to<br />reflect the new space.<br />4. Delete unnecessary files using RMAN DELETE command. If an operating<br />system command was used to delete files, then use RMAN CROSSCHECK and<br />DELETE EXPIRED commands.<br />************************************************************************
<p>如果闪回恢复区空间耗尽，且归档路径设置到了闪回恢复区中，则由于日志无法归档，数据库会hang住。<br />Tue Dec 19 10:45:57 2006<br />Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:<br />ORA-19815: 警告: db_recovery_file_dest_size 字节 (共 52428800 字节) 已使用 100.00%, 尚有 0 字节可用。
<p>Tue Dec 19 10:45:57 2006<br />Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:<br />ORA-19809: 超出了恢复文件数的限制<br />ORA-19804: 无法回收 6836224 字节磁盘空间 (从 52428800 限制中)
<p>ARC0: Error 19809 Creating archive log file to
<p>&#8216;E:/ORACLE/ORA10/FLASH_RECOVERY_AREA/NING/ARCHIVELOG/2006_12_19/O1_MF_1_250_U_.ARC&#8217;<br />ARC0: Failed to archive thread 1 sequence 250 (19809)<br />ARCH: Archival stopped, error occurred. Will continue retrying<br />Tue Dec 19 10:45:58 2006<br />Errors in file e:/oracle/ora10/admin/ning/bdump/ning_arc0_32372.trc:<br />ORA-16038: 日志 1 序列号 250 无法归档<br />ORA-19809: 超出了恢复文件数的限制<br />ORA-00312: 联机日志 1 线程 1: &#8216;E:/ORACLE/ORA10/ORADATA/NING/REDO01.LOG&#8217;
<p>所以，对于生产库，如果将归档放到闪回恢复区中，需要密切关注闪回恢复区的空间使用情况，否则一旦闪回恢复区的空间用尽，将导致数据库无法提供服务。
<p>通过查询视图v$flash_recovery_area_usage，可以获得当前闪回恢复区的空间使用情况，并且可以知道
<p>是哪些文件占中了空间，据此可以做出相应的处理，或者加大闪回恢复区，或者移走相应的文件。
<p>SQL&gt; select * from v$flash_recovery_area_usage;
<p>FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;<br />CONTROLFILE 0 0 0<br />ONLINELOG 0 0 0<br />ARCHIVELOG 91 0 16<br />BACKUPPIECE 0 0 0<br />IMAGECOPY 0 0 0<br />FLASHBACKLOG 8 4 2
<p>已选择6行。
<p>另外，v$recovery_file_dest视图也提供了闪回恢复区的概要信息。<br />SQL&gt; select * from v$recovery_file_dest;
<p>NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;<br />E:oracleora10flash_recovery_area 104857600 101835264 0 17
<p>转自：<a title="http://ningoo.itpub.net/post/2149/242078" href="http://ningoo.itpub.net/post/2149/242078">http://ningoo.itpub.net/post/2149/242078</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.onecheng.com/archives/328/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
