`
missall
  • 浏览: 127274 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle数据库的闪回恢复区

阅读更多

Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的。这个功能有很大的限制,就是相关事 务的undo不能被覆盖,否则就无力回天了。oracle10g大大的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过 引入一种新的flashback log实现的。flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将数据库往后滚。为了保存管理和备份恢复相关的文件,oracle10g提供了一个叫做闪回恢复区(Flashback recovery area)的新特性,可以将所有恢复相关的文件,比如flashback log,archive log,backup set等,放到这个区域集中管理。

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
设置了闪回恢复区后,可以启动闪回数据库功能。

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

那么如何设置归档呢?很简单的步骤
1.关闭数据库
SQL> shutdown immediate;
2.启动数据库为mount模式
SQL> startup mount
3.显示和修改归档模式
SQL> archive log list
SQL> alter database archivelog;
SQL> alter database open

4.设置归档日志的格式
SQL>alter system set log_archive_format='ARC%s%t%r.log' scope=spfile;
5.设置归档日志的存放路径
SQL>alter system set log_archive_dest='+data/arcl' scope=spfile;
SQL>shutdown immediate
SQL>startup

6.强制切换归档日至
SQL>alter system switch logfile;
7.取消归档
SQL>alter database noarchivelog;
 
参数
1.格式参数
%s 日志序列号
%S 日志序列号(带前导的0)
%t 重做线程编号
%a 活动的ID号
%d 数据库ID号
%r RESELOGS的iD值

SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     156
Next log sequence to archive   158
Current log sequence           158

然后,启动数据库到mount状态
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount
ORACLE instance started.

Total System Global Area 285212672 bytes
Fixed Size                  1218992 bytes
Variable Size              75499088 bytes
Database Buffers          205520896 bytes
Redo Buffers                2973696 bytes
Database mounted.

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

3.取消闪回恢复区
将db_recovery_file_dest参数设置为空,可以停用闪回恢复区。
如果已经启用flashback database,则不能取消闪回恢复区。
SQL> alter system set db_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='';
系统已更改。

4.闪回恢复区的内容
所有和恢复相关的文件都可以存放到闪回恢复区
SQL>select file_type from v$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将不可用

alter system set log_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.闪回恢复区的空间管理
当闪回恢复区空间不足(使用超过85%)时,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,可以获得当前闪回恢复区的空间使用情况,并且可以知道
是哪些文件占中了空间,据此可以做出相应的处理,或者加大闪回恢复区,或者移走相应的文件。
PHP code:--------------------------------------------------------------------------------
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 * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----------------------------------- ----------- ---------- ----------------- ---------------
Eracleora10flash_recovery_area 104857600 101835264 0 17

分享到:
评论

相关推荐

    oracle数据库执行闪回恢复数据

    oracle数据库执行闪回恢复数据 很不错的

    oracle数据库恢复技术:RMAN与闪回技术

    RMAN和闪回技术是Oracle数据库恢复策略中的两个关键组成部分。RMAN适用于广泛的恢复场景,特别是当需要进行大规模数据恢复或灾难恢复时。而闪回技术则在处理小范围的数据错误或丢失时更为高效。结合使用这两种技术,...

    Oracle数据库闪回专题.doc

    Oracle数据库闪回技术是Oracle 10g及后续版本引入的一种强大特性,主要用于应对逻辑错误,比如用户误删除表、管理员误操作等。它允许数据库快速恢复到错误发生前的状态,而无需进行复杂的不完全恢复操作。闪回技术...

    oracle数据库闪回

    ### Oracle数据库闪回 #### 一、闪回的基础概念 Oracle数据库的闪回功能允许用户恢复到过去某个时间点的状态。这种特性在遇到意外的数据丢失或错误时非常有用。闪回功能主要依赖于以下几点: 1. **SCN (System ...

    ORACLE数据库闪回

    ### ORACLE数据库闪回 #### 一、概述 在Oracle数据库管理中,有时因为误操作导致数据丢失,比如错误地执行了`DELETE`语句并提交(commit)后,如何恢复这些数据成为了一个重要的问题。Oracle提供了强大的闪回技术来...

    ORACLE数据库回闪

    Oracle数据库回闪是一种强大的功能,它允许用户恢复到数据库的某个历史状态,从而撤销错误的操作,如意外删除重要数据。这一特性是Oracle数据库系统的核心优势之一,尤其在数据安全性要求极高的环境中,回闪功能显得...

    oracle数据库闪回3模式

    根据提供的文件信息,本文将详细解释Oracle数据库中的闪回功能及其三种主要操作模式:使用回退段闪回到不同版本、使用回收站闪回已被删除的表以及利用快速恢复区进行闪回。 ### 一、使用回退段闪回到不同版本 在...

    ORACLE数据库备份与恢复测试

    此外,Oracle的闪回技术(Flashback Technology)也是恢复策略的一部分,包括闪回查询、闪回事务、闪回数据库等,它们允许用户在不依赖备份的情况下,恢复到过去的某个时间点。 在实践中,我们还需要关注备份的策略...

    ORACLE数据库备份和恢复.doc

    闪回恢复区是 Oracle 数据库中的一个统一的存储位置,为数据库中的所有与恢复相关的文件和活动提供存储空间。包括存档重做日志文件、控制文件、由恢复管理器(RMAN)创建的备份、闪回日志和修改跟踪文件。Oracle ...

    Oracle数据库逻辑损坏恢复方法探讨.pdf

    本文将探讨Oracle数据库逻辑损坏的恢复方法,包括时 间点恢复技术、日志挖掘技术和数据库闪回技术。这些方法可以帮助恢复Oracle数据库中的逻辑损坏,例如误删数据、误修改数据、提交错误的事务或表被误删等情况。 ...

    Oracle数据库备份与恢复之完全攻略

    本资源“Oracle数据库备份与恢复之完全攻略”提供了一份详尽的指导,涵盖了Oracle数据库的备份、还原过程及注意事项。 一、Oracle数据库备份类型 1. **完整备份**:包括数据库的所有数据文件、控制文件、参数文件...

    oracle闪回数据库

    在Oracle数据库中,闪回数据库功能依赖于闪回日志(Flashback Logs),这些日志存储了数据库自某个时间点以来的所有更改。闪回日志位于快速恢复区(Flash Recovery Area)内,这是一个特殊的空间,用于存储备份、...

    Oracle数据库闪回技术详解.pdf

    Oracle数据库的闪回技术是一种强大的数据恢复机制,主要用于纠正逻辑错误,而不适用于物理损坏或介质丢失的恢复。这一技术依赖于撤销段(UNDO SEGMENT),撤销段存储了事务对数据进行修改前的原始信息,使得在事务...

    Oracle数据库备份与恢复

    总的来说,Oracle数据库备份与恢复是一门深奥且实践性强的学问,涵盖了许多复杂的概念和技术,包括RMAN、Data Guard、闪回技术和各种恢复策略。理解并掌握这些知识,对于确保企业数据安全,预防和应对可能的数据灾难...

    Oracle数据库闪回技术详解.docx

    Oracle数据库的闪回技术是一种强大的数据恢复机制,主要用于处理逻辑错误,而非物理损坏或介质丢失。这一技术的核心在于撤销段,它是保存事务修改数据前原始信息的地方,为闪回操作提供必要的历史数据。 撤销段...

    Oracle数据库进阶 高可用性、性能优化和备份恢复

    Oracle数据库的高可用性体现在多个层面,如RAC(Real Application Clusters)、Data Guard、闪回技术等。RAC允许多台服务器共享同一数据库,提供故障切换和负载均衡能力,确保服务不间断。Data Guard通过创建物理或...

    oracle数据库备份与恢复.doc

    ### Oracle数据库备份与恢复知识点详解 #### 一、备份与恢复基础 在Oracle数据库的运维过程中,备份与恢复是至关重要的环节,它们确保了数据的安全性和业务的连续性。备份通常指的是将数据库中的数据和控制信息...

    Oracle数据库体系结构( 中文详细版)

    13. **备份与恢复**:Oracle支持多种备份策略,如物理备份、逻辑备份、RMAN备份等,并提供了闪回技术、归档模式和增量备份等恢复选项,以应对各种故障情况。 以上是对Oracle数据库体系结构的基本介绍,深入学习还...

Global site tag (gtag.js) - Google Analytics