ORACLE恢复数据

Posted bolang100

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE恢复数据相关的知识,希望对你有一定的参考价值。

ORACLE恢复删除表或表记录  

一:表的恢复      对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的。一般步骤有: 1、从flash back里查询被删除的表     select * from recyclebin 2.执行表的恢复    flashback table  tb  to before drop,这里的tb代表你要恢复的表的名称。

二:表数据恢复     对误删的表记录,只要没有truncate语句,就可以根据事务的提交时间进行选择恢复,一般步骤有:      

1、先从flashback_transaction_query视图里查询,视图提供了供查询用的表名称、事务提交时间、UNDO_SQL等字段。      如:select * from flashback_transaction_query where table_name=\'TEST\';      

2、执行表记录恢复      一般先根据时间进行查询,查询语句模式为select * from tb as of timestamp to_timestamp(time,\'yyyy-mm-dd hh24:mi:ss\'); tb指表名称,time指某个时间点       如select * from scott.test as of timestamp to_timestamp(\'2009-12-11 20:53:57\',\'yyyy-mm-dd hh24:mi:ss\');     若有数据,恢复极为简单了,语句为flashback table tb to timestamp to_timestamp(time,\'yyyy-mm-dd hh24:mi:ss\');    如flashback table scott.test to timestamp to_timestamp(\'2009-12-11 20:47:30\',\'yyyy-mm-dd hh24:mi:ss\');   注意:alter table testvarchar enable row movement;     这个命令的作用是,允许Oracle 修改分配给行的rowid。在Oracle 中,插入一行时就会为它分配一个rowid,而且这一行永远拥有这个rowid。闪回表处理会对EMP 完成DELETE,并且重新插入行,这样就会为这些行分配一个新的rowid。要支持闪回就必须允许Oracle 执行这个操作

1. 表恢复

   对误删的表,只要没有使用 purge 永久删除选项,那么基本上是能从 flashback table 区恢复回来的。

   数据表和其中的数据都是可以恢复回来的,记得 flashback table 是从 Oralce 10g 提供的,一般步骤有:

   a.从 flashback table 里查询被删除的数据表

select * from recyclebin order by droptime desc

   b.执行表的恢复

flashback table \'需要恢复的表名\' to before drop

2. 表数据恢复

   对误删的表记录,只要没有 truncate 语句,就可以根据事务的提交时间进行选择恢复。

   这功能也是  oracle 10g 以上提供的,一般步骤有:

   a. 先从 flashback_transaction_query 视图里查询,视图提供了供查询用的表名称、事务提交时间、undo_sql等字段。

select * from flashback_transaction_query where table_name=\'需要恢复数据的表名(大写)\';

   b.查询删除的时间点

select to_char(sysdate, \'yyyy-mm-dd hh24:mi:ss\') time,
       to_char(dbms_flashback.get_system_change_number) scn
  from dual;

   或者你知道大概记得删除点,你也可以这样试试查询,找出删除前的时间点

select * from \'需要恢复数据的表名\' as of timestamp to_timestamp(\'时间点\', \'yyyy-mm-dd hh24:mi:ss\');【亲测有效】
注意:如果数据库操作频繁,undo段可能被覆盖重写,所以一般时间点不超过3小时。(除非undo段足够大,又或者undo操作很少)

   c.进行数据恢复

   通过第二步找到数据丢失的时间点,恢复极为简单,语句为

flashback table \'需要恢复数据的表名\' to timestamp to_timestamp(\'数据丢失的前一时间点\',\'yyyy-mm-dd hh24:mi:ss\');

   注意:在执行上述操作的时候,需要允许 oracle 修改分配给行的 rowid,这时候 oracle 需要给恢复的数据分配新的物理地址。

alter table table_name enable row movement;

  其实找到数据丢失前的时间点后,恢复数据也可以将需要恢复的数据直接插入到目标表中

insert into \'数据丢失的表\' select * from t of timestamp to_timestamp(\'时间点\', \'yyyy-mm-dd hh24:mi:ss\') where .......

 

一、如果是刚刚删除,那么有两方法:

 

首先用show parameter undo;命令查看当时的数据库参数undo_retention设置。

 

显示如下:

 

复制代码 代码如下:

 


undo_management   string   AUTO

undo_retention  integer 10800

undo_suppress_errors  boolean  FALSE

undo_tablespace   string   UNDOTBS1

 

undo_retention(保持力),10800单位是秒。即3个小时。

 

修改默认的undo_retention参数设置:

 

复制代码 代码如下:

 


ALTER SYSTEM SET undo_retention=10800 SCOPE=BOTH;

 

方法1,通过oracle提供的回闪功能:

 

复制代码 代码如下:

 


exec dbms_flashback.enable_at_time(to_date(\'2007-07-23 10:21:00\',\'yyyy-mm-dd hh24:mi:ss\'));

set serveroutput on

DECLARE r_temp hr.job_history%ROWTYPE;

CURSOR c_temp IS SELECT * FROM hr.job_history;

BEGIN

OPEN c_temp;

dbms_flashback.disable;

LOOP

FETCH c_temp INTO r_temp;

EXIT WHEN c_temp%NOTFOUND;

insert into hr.job_history(EMPLOYEE_ID,JOB_ID,START_DATE,END_DATE) values (r_temp.EMPLOYEE_ID,r_temp.JOB_ID,r_temp.START_DATE,r_temp.END_DATE);

commit;

END LOOP;

CLOSE c_temp;

END;

 

方法2,insert into hr.job_history

 

复制代码 代码如下:

 


select * from hr.job_history as of timestamp to_timestamp(\'2007-07-23 10:20:00\', \'yyyy-mm-dd hh24:mi:ss\');

 

这种方法简单,容易掌握,功能和上面的一样时间为你误操作之前的时间,最好是离误操作比较近的,因为oracle保存在回滚保持段里的数据时间有一定的时间限制由undo_retention 这个参数值决定。

 

二、如果是删除一段时间了,但你有比较新的数据库备份,就通过备份来恢复。新建一个库,把备份还原上去,导出表数据,再导入到现在用的库中去。

 

三、如果删除一段时间了,并且无备份,但是数据在写入表的时候同时会写入其它一些关联表的话,那么就尝试通过写SQL语句从其它表取数据出来insert到被删除的表中。

 

四、恢复到备份表中

 

复制代码 代码如下:


create table tableName_bak
as
select * from tableName as of TIMESTAMP to_timestamp(\'20081126 103435\',\'yyyymmdd hh24miss\');

 

Oracle六大闪回技术

 

Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。

 

要使用flashback 的特性,必须启用自动撤销管理表空间。
在Oracle 11g里又出了一个新特性:Oracle Flashback Data Archive.
FDA通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,
这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。

 

在Oracle 10g中, Flash back家族分为以下成员:
Flashback Database,
Flashback Drop,
Flashback Query(分Flashback Query,Flashback Version Query,
Flashback Transaction Query 三种)
和Flashback Table。

 

Oracle 11g中闪回新特性 :闪回归档

 

 

1 闪回恢复区(Flashback 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等,放到这个区域集中管理。

 

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

 


SQL> ALTER SYSTEM SET db_recovery_file_dest_size=3g SCOPE=BOTH;

 

System altered.

 

SQL> ALTER SYSTEM SET db_recovery_file_dest=\' D:/app/Administrator/flash_recovery_area \' SCOPE=BOTH;

 

System altered.

 

SQL> show parameter db_recovery_file_dest

 

NAME TYPE VALUE
--------------------------- ----------- ------------------------------
db_recovery_file_dest string D:/app/Administrator/flash_recovery_area
db_recovery_file_dest_size big integer 3852M
SQL> show parameter db_flashback

 

NAME TYPE VALUE
---------------------------- -------- ------------------------------
db_flashback_retention_target integer 1440

 

我们看到db_flashback_retention_target 默认是1440分钟,即24 小时,
需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,
举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,
则flash recovery area 的大小至少要是当前数据库实际容量的10%,
如果该初始化参数设置为2880,则flash recovery area 的大小就至少是数据库所占容量的20%。

 

修改该参数:

 

SQL>alter system set db_flashback_retention_target=2880 scope=both;

 

1.2 取消闪回恢复区
将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: 无法禁用恢复区 - 闪回数据库已启用
SQL> shutdown immediate

 

数据库已经关闭。

 

已经卸载数据库。

 

ORACLE 例程已经关闭。

 

SQL> startup mount;

 

ORACLE 例程已经启动。
Total System Global Area 849530880 bytes
Fixed Size 1377896 bytes
Variable Size 637536664 bytes
Database Buffers 205520896 bytes
Redo Buffers 5095424 bytes
数据库装载完毕。

 

SQL> alter database flashback off;

 

数据库已更改。

 

SQL> alter database open;

 

数据库已更改。

 

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

 

系统已更改。

 

SQL> show parameter db_recovery_file_dest

 

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 3852M

 

SQL>

 


注意:
(1)DB_RECOVERY_FILE_DEST_SIZE 只有在 DB_RECOVERY_FILE_DEST 清空之后才可以清空。
(2)初始化参数 db_recovery_file_dest_size 的设定有一点点需要注意的地方:
文件的第0块和操作系统数据块头的空间大小不包含在内,该参数并不代表实际占用的空间大小。
如果空间被压缩、镜像、RAID 的话,该参数的值意义是不一样的

 

1.3 闪回恢复区的内容
所有和恢复相关的文件都可以存放到闪回恢复区
TEST@orcl2> select file_type from v$flash_recovery_area_usage;

 

FILE_TYPE
--------------------
CONTROL FILE
REDO LOG
ARCHIVED LOG
BACKUP PIECE
IMAGE COPY
FLASHBACK LOG
FOREIGN ARCHIVED LOG

 

7 rows selected.

 


上面视图中查询的结果列出的所有类型的文件,都可以利用闪回恢复区来存放、管理。
在一些 10g 的动态视图里( V$CONTROLFILE, V$LOGFILE, V$ARCHIVED_LOG, V$DATAFILE_COPY 等 )
的新的列 IS_RECOVERY_DEST_FILE ,指明相关的文件是否在恢复区内。

 

TEST@orcl2> col is_recovery_dest_file for a25
TEST@orcl2> SELECT recid, blocks, is_recovery_dest_file
FROM v$archived_log
WHERE recid < 5;

 

RECID BLOCKS IS_RECOVERY_DEST_FILE
---------- ---------- -------------------------
1 61856 YES
2 1 YES
3 1 YES
4 87577 YES

 

 

 

1.4 闪回恢复区的一些限制
如果设置了闪回恢复区,则log_archive_dest和log_archive_duplex_dest将不可用。
SQL> alter system set log_archive_dest=\'e:/\' ;

 

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参数,则归档日志默认是保存到该区域的。
实际上,oracle是通过隐式的设置log_archive_dest_10=\'location=USE_DB_RECOVERY_FILE_DEST\'
来实现的。所以,如果修改过log_archive_dest_n将归档日志保存到其他位置,
也可以修改该参数继续使用闪回恢复区。

 

多个数据库的闪回恢复区可以指定到同一个位置,但是db_name不能一样,或者db_unique_name不一样。
RAC的闪回恢复区必须位于共享磁盘上,能被所有实例访问。
上述说明适用于单节点上有多个数据库时的情况。

 

1.5 闪回恢复区的空间管理
闪回恢复区中添加或删除文件等变化都将记录在数据库的 alert 日志中,
Oracle 10g 也针对该新特性提供了一个新的视图, DBA_OUTSTANDING_ALERTS,
通过该视图可以得到相关的信息。
SYS@orcl2> desc dba_outstanding_alerts;
Name Null? Type
----------------------------------------- -------- ----------------------------
SEQUENCE_ID NUMBER
REASON_ID NOT NULL NUMBER
OWNER VARCHAR2(30)
OBJECT_NAME VARCHAR2(513)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_TYPE VARCHAR2(64)
REASON VARCHAR2(4000)
TIME_SUGGESTED TIMESTAMP(6) WITH TIME ZONE
CREATION_TIME TIMESTAMP(6) WITH TIME ZONE
SUGGESTED_ACTION VARCHAR2(4000)
ADVISOR_NAME VARCHAR2(30)
METRIC_VALUE NUMBER
MESSAGE_TYPE VARCHAR2(12)
MESSAGE_GROUP VARCHAR2(64)
MESSAGE_LEVEL NUMBER
HOSTING_CLIENT_ID VARCHAR2(64)
MODULE_ID VARCHAR2(64)
PROCESS_ID VARCHAR2(128)
HOST_ID VARCHAR2(256)
HOST_NW_ADDR VARCHAR2(256)
INSTANCE_NAME VARCHAR2(16)
INSTANCE_NUMBER NUMBER
USER_ID VARCHAR2(30)
EXECUTION_CONTEXT_ID VARCHAR2(128)
ERROR_INSTANCE_ID VARCHAR2(142)

 

在闪回恢复区中的空间使用超过 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@orcl2> desc v$recovery_file_dest;
Name Null? Type
----------------------------------------- -------- ----------------------------
NAME VARCHAR2(513)
SPACE_LIMIT NUMBER
SPACE_USED NUMBER
SPACE_RECLAIMABLE NUMBER
NUMBER_OF_FILES NUMBER

 

SYS@orcl2> col name for a5
SYS@orcl2> select * from v$recovery_file_dest;

 

NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
----- ----------- ---------- ----------------- ---------------
+FRA 4621074432 620756992 0 33

 

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

 

FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
CONTROL FILE .41 0
1

 

REDO LOG 4.63 0
4

 

ARCHIVED LOG 3.72 0
24

 


FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
BACKUP PIECE 0 0
0

 

IMAGE COPY 0 0
0

 

FLASHBACK LOG 4.63 0
4

 


FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE
-------------------- ------------------ -------------------------
NUMBER_OF_FILES
---------------
FOREIGN ARCHIVED LOG 0 0
0

 


7 rows selected.

 


如果闪回恢复区空间耗尽,且归档路径设置到了闪回恢复区中,则由于日志无法归档,
数据库会hang住。所以,对于生产库,如果将归档放到闪回恢复区中,
需要密切关注闪回恢复区的空间使用情况,否则一旦闪回恢复区的空间用尽,
将导致数据库无法提供服务。
因此,应该将闪回区的使用情况列入dba日常巡检工作中。

 

1.6 Flash Recovery Area空间不足导致DB不能打开或hang住处理方法
在上面讲到,当归档目录设置在闪回恢复区,并且闪回恢复区又满了的情况下,
DB 就会无法归档而hang住或者无法打开。

 


这种情况下打开数据库会遇到如下错误信息:
SQL> select status from v$instance;

 

STATUS
------------
MOUNTED

 

SQL> alter database open;

 

alter database open

 

*

 

第 1 行出现错误:

 

ORA-16014: 日志 2 的序列号 27 未归档, 没有可用的目的地
ORA-00312: 联机日志 2 线程 1:
\'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG\'

 


SQL> show parameter db_recovery_file

 

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string D:/oracle/product/10.2.0/flash_recovery_area
db_recovery_file_dest_size big integer 2G

 

SQL> alter system archive log current;

 

alter system archive log current

 

*

 

第 1 行出现错误:
ORA-01109: 数据库未打开

 

SQL> alter system switch logfile;

 

alter system switch logfile

 

*

 

第 1 行出现错误:
ORA-01109: 数据库未打开

 

 

 

SQL> shutdown immediate;

 

ORA-01109: 数据库未打开

 

已经卸载数据库。
ORACLE 例程已经关闭。

 

SQL> startup
ORACLE 例程已经启动。
Total System Global Area 201326592 bytes
Fixed Size 1248092 bytes
Variable Size 88081572 bytes
Database Buffers 109051904 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。

 

ORA-16038: 日志 2 序列号 27 无法归档
ORA-19809: 超出了恢复文件数的限制
ORA-00312: 联机日志 2 线程 1:
\'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG\'

 

SQL> alter database open;

 

alter database open

 

*

 

第 1 行出现错误:
ORA-16014: 日志 2 的序列号 27 未归档, 没有可用的目的地
ORA-00312: 联机日志 2 线程 1:
\'D:/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG\'

 


通过增加闪回恢复区大小,我们可以正常打开数据库

 

SQL> show parameter db_recovery

 

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string D:/oracle/product/10.2.0/flash_recovery_area
db_recovery_file_dest_size big integer 2G

 

SQL> alter system set db_recovery_file_dest_size=3G scope=both;

 

系统已更改。

 

SQL> alter database open;

 

数据库已更改。

 

 

 

检查一下flash recovery area的使用情况:

 

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 6.36 0 4
BACKUPPIECE .22 0 1
IMAGECOPY 63.68 0 5
FLASHBACKLOG .51 .25 2

 

已选择6行。

 

SQL>

 


计算flash recovery area已经占用的空间:

 

SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

 

SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
2.1231
--在11.2以后,v$flash_recovery_area_usage已经被v$recovery_area_usage取代。

 

可以看到,这里已经有2.1231G使用了,这说明我们刚开始设置的db_recovery_file_dest_size=2G不足,
导致online redo log无法归档,在这里,我们通过设置db_recovery_file_dest_size参数,
增大了flash recovery area来解决这个问题。
增加Flash recovery area 是一种解决方法,也可以将归档指定到其他的目录来解决这个问题。
或者删除备份中的obsolete备份,都可以解决问题。

 


1.7 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 1og等等。
这个区域默认创建在oracle_base目录下。
在其中可以存放备份集、镜像拷贝、归档日志、自动备份的控制文件以及spfile和flashback logs。
存放位置和大小由参数db_recovery_file_dest和db_recovery_file_dest_size决定。

 

默认情况数据库的flashback database是关闭,可以在mount exclusive状态下打开。

 


看一下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: ==================

以上是关于ORACLE恢复数据的主要内容,如果未能解决你的问题,请参考以下文章

恢复片段后android地图停止响应

为啥片段恢复后再次调用onLoadFinished?

sql Oracle代码片段

重新附加时片段创建/恢复重复视图

ViewPager 片段重新创建,已恢复但不可见

保存以编程方式为片段创建的视图并在 onresume 中恢复