数据文件恢复
open状态下恢复关闭后意外丢失的数据文件
除了 system表空间的数据文件(mount)之外, 其它数据文件可以在open(mount也可以)状态下恢复。open状态下恢复数据文件可以减少数据库停用的时间,所以应该在open状态下恢复这些数据文件。
示例一 数据文件被误删除
数据库关闭状态下删除非系统表空间数据文件。
启动数据库到mount状态。
脱机丢失的数据文件,alter database datafile n offline。
打开数据库,alter database open。
转储数据文件,restore datafile n。
使用recover datafile n 应用归档日志。
数据库关闭状态下删除非系统表空间数据文件。
启动数据库到mount状态。
脱机丢失的数据文件,alter database datafile n offline。
打开数据库,alter database open。
在restore database之前,执行set newname为数据文件指定新的位置。
在restore database之后,执行switch datafile改变控制文件中数据文件位置和名称。
之后通过执行recover database应用归档日志。
联机数据文件,alter database datafile n online。
除了system表空间的数据文件(mount)之外,其它数据文件可以在open(mount也可以)状态下恢复。open状态下恢复数据文件可以减少数据库停用的时间,所以应该在open状态下恢复这些数据文件。
示例一 数据文件被误删除
数据库open状态下删除非系统表空间数据文件。
脱机丢失的数据文件,alter database datafile n offline。
转储数据文件,restore datafile n。
使用recover datafile n 应用归档日志。
联机数据文件,alter database datafile n online。
示例二 数据文件所在磁盘出现损坏
数据库open状态下删除非系统表空间数据文件。
脱机丢失的数据文件,alter database datafile n offline。
在restore database之前,执行set newname为数据文件指定新的位置。
在restore database之后,执行switch datafile改变控制文件中数据文件位置和名称。
之后通过执行recover database应用归档日志。
联机数据文件,alter database datafile n online。
open状态下恢复未备份的数据文件
恢复方式与以上两种相同,因为数据文件没有备份,在转储数据文件时,会自动创建数据文件。
恢复非系统表空间
示例一 表空间的数据文件被误删除
open状态下删除表空间对应的所有数据文件。
在open状态下使用alter tablespace ... offline for recover 脱机表空间。
使用restore tablespace ...转储表空间所有的数据文件。
使用recover tablespace ...应用归档日志。
最后使用alter tablespace ... online使表空间联机。
open状态下删除表空间对应的所有数据文件。
在open状态下使用alter tablespace ... offline for recover 脱机表空间。
执行set newname为数据文件指定新的位置。
使用restore tablespace ...转储表空间所有的数据文件。
执行switch datafile改变控制文件中数据文件位置和名称。
使用recover tablespace ...应用归档日志。
open状态下恢复关闭后意外丢失的数据文件
除了 system表空间的数据文件(mount)之外, 其它数据文件可以在open(mount也可以)状态下恢复。open状态下恢复数据文件可以减少数据库停用的时间,所以应该在open状态下恢复这些数据文件。
示例一 数据文件被误删除
数据库关闭状态下删除非系统表空间数据文件。
启动数据库到mount状态。
脱机丢失的数据文件,alter database datafile n offline。
打开数据库,alter database open。
转储数据文件,restore datafile n。
使用recover datafile n 应用归档日志。
联机数据文件,alter database datafile n online。
--数据库关闭状态下删除非系统表空间数据文件。
[oracle@localhost ~]$ rm $ORACLE_BASE/product/10.2.0/oradatabak/example01.dbf;
SQL> select file#,error from v$recover_file;
FILE# ERROR
---------- -----------------------------------------------------------------
5 FILE NOT FOUND
SQL> select file#,name from v$datafile where file#=5;
FILE# NAME
---------- --------------------------------------------------------------------------------
5 /oracle/10g/oracle/product/10.2.0/oradatabak/example01.dbf
--恢复数据文件
RMAN> run {
startup force mount;
sql 'alter database datafile 5 offline';
sql 'alter database open';
restore datafile 5;
recover datafile 5;
sql 'alter database datafile 5 online';
8> }
示例二
数据文件所在磁盘出现损坏
数据库关闭状态下删除非系统表空间数据文件。
启动数据库到mount状态。
脱机丢失的数据文件,alter database datafile n offline。
打开数据库,alter database open。
在restore database之前,执行set newname为数据文件指定新的位置。
在restore database之后,执行switch datafile改变控制文件中数据文件位置和名称。
之后通过执行recover database应用归档日志。
联机数据文件,alter database datafile n online。
--数据库关闭状态下删除非系统表空间数据文件。
[oracle@localhost ~]$ rm $ORACLE_BASE/product/10.2.0/oradatabak/example01.dbf;
SQL> select file#,error from v$recover_file;
FILE# ERROR
---------- -----------------------------------------------------------------
5 FILE NOT FOUND
SQL> select file#,name from v$datafile where file#=5;
FILE# NAME
---------- --------------------------------------------------------------------------------
5 /oracle/10g/oracle/product/10.2.0/oradatabak/example01.dbf
--恢复数据文件
[oracle@localhost ~]$ rman target sys/oracle@oralife nocatalog
RMAN> run {
2> startup force mount;
3> sql 'alter database datafile 5 offline';
4> sql 'alter database open';
5> set newname for datafile 5 to '$ORACLE_BASE/product/10.2.0/oradata/oralife/example01.dbf';
6> restore datafile 5;
7> switch datafile 5;
8> recover datafile 5;
9> sql 'alter database datafile 5 online';
10> }
SQL> select file#,name from v$datafile where file#=5;
FILE# NAME
---------- --------------------------------------------------------------------------------
5 /oracle/10g/oracle/product/10.2.0/oradata/oralife/example01.dbf
SQL> select file#,error from v$recover_file;
no rows selected
open状态下恢复打开后意外丢失的数据文件
除了system表空间的数据文件(mount)之外,其它数据文件可以在open(mount也可以)状态下恢复。open状态下恢复数据文件可以减少数据库停用的时间,所以应该在open状态下恢复这些数据文件。
示例一 数据文件被误删除
数据库open状态下删除非系统表空间数据文件。
脱机丢失的数据文件,alter database datafile n offline。
转储数据文件,restore datafile n。
使用recover datafile n 应用归档日志。
联机数据文件,alter database datafile n online。
示例二 数据文件所在磁盘出现损坏
数据库open状态下删除非系统表空间数据文件。
脱机丢失的数据文件,alter database datafile n offline。
在restore database之前,执行set newname为数据文件指定新的位置。
在restore database之后,执行switch datafile改变控制文件中数据文件位置和名称。
之后通过执行recover database应用归档日志。
联机数据文件,alter database datafile n online。
open状态下恢复未备份的数据文件
恢复方式与以上两种相同,因为数据文件没有备份,在转储数据文件时,会自动创建数据文件。
恢复非系统表空间
示例一 表空间的数据文件被误删除
open状态下删除表空间对应的所有数据文件。
在open状态下使用alter tablespace ... offline for recover 脱机表空间。
使用restore tablespace ...转储表空间所有的数据文件。
使用recover tablespace ...应用归档日志。
最后使用alter tablespace ... online使表空间联机。
--open状态下删除表空间对应的所有数据文件。
[oracle@localhost ~]$ rm /oracle/10g/oracle/product/10.2.0/oradatabak/users01.dbf;
--恢复表空间
[oracle@localhost ~]$ rman target sys/oracle@oralife nocatalog
RMAN> run {
2> sql 'alter tablespace users offline for recover';
3> restore tablespace users;
4> recover tablespace users;
5> sql 'alter tablespace users online';
6> }
示例二
表空间的数据文件所在磁盘出现故障
open状态下删除表空间对应的所有数据文件。
在open状态下使用alter tablespace ... offline for recover 脱机表空间。
执行set newname为数据文件指定新的位置。
使用restore tablespace ...转储表空间所有的数据文件。
执行switch datafile改变控制文件中数据文件位置和名称。
使用recover tablespace ...应用归档日志。
最后使用alter tablespace ... online使表空间联机。
--open状态下删除表空间对应的所有数据文件。
[oracle@localhost ~]$ rm /oracle/10g/oracle/product/10.2.0/oradatabak/users01.dbf;
SQL> select * from t_user;
select * from t_user
*
ERROR at line 1:
ORA-00376: file 4 cannot be read at this time
ORA-01110: data file 4:
'/oracle/10g/oracle/product/10.2.0/oradatabak/users01.dbf'
SQL> select file#,error from v$recover_file;
FILE# ERROR
---------- -----------------------------------------------------------------
4 FILE NOT FOUND
--恢复表空间
[oracle@localhost ~]$ rman target sys/oracle@oralife nocatalog
run {
sql 'alter tablespace users offline for recover';
set newname for datafile 4 to '$ORACLE_BASE/product/10.2.0/oradata/oralife/user01.dbf';
restore tablespace users;
switch datafile all;
recover tablespace users;
sql 'alter tablespace users online';
}
--已恢复
SQL> select * from t_user;
TEXT
--------------------
java_
SQL> select name from v$datafile where file# = 4;
NAME
--------------------------------------------------------------------------------
/oracle/10g/oracle/product/10.2.0/oradata/oralife/user01.dbf
数据块介质恢复
如果数据文件部分数据块出现损坏,可以使用blockrecover 命令恢复损坏数据块。
如:
RMAN> blockrecover device type disk
2>datafile 5 block 2,7,88;