Sqlplus在归档全的情况下,能搞定一部份的数据文件的恢复,但真正要做备份恢复,RMAN才是专业的。
下面列了一些数据文件损坏情况下的恢复做法.
1. 表空间的数据文件损坏,但存放盘没坏。
2. 表空间单个数据文件所在存放盘坏。
3. close状态下,所有表空间数据文件存放盘都坏了。
4. 在数据库open状态下,有数据文件损坏,报ORA-00376:此时无法读取文件xxx
1. 表空间的数据文件损坏,但存放盘没坏。
通过恢复表空间即可解决问题。
以SYSTEM表空间为例:
2. 表空间单个数据文件所在存放盘坏。
这种情况下,只能另找地方恢复和存放数据文件了。
以SYSTEM表空间为例:
但RMAN可以处理任意(包含SYSTEM)表空间的数据文件恢复。
3. close状态下,所有表空间数据文件存放盘都坏了。
这种技巧不只可用在这种情况下,在异机重定向恢复或单实例与RAC互转时也有用。
4. 在数据库open状态下,有数据文件损坏,报ORA-00376:此时无法读取文件xxx
a.磁盘没坏,但某个数据文件坏了。
参考上面,只需加上set newname与switch datafile即可。
上面几种情况中,不管数据库open状态下的恢复与close状态下,差别就是,open状态下,在恢复前,数据文件要设为离线状态。
恢复后在设为在线,还有一点要注意SYSTEM这类特殊的表空间需在mount状态下才能恢复。
下面列了一些数据文件损坏情况下的恢复做法.
1. 表空间的数据文件损坏,但存放盘没坏。
2. 表空间单个数据文件所在存放盘坏。
3. close状态下,所有表空间数据文件存放盘都坏了。
4. 在数据库open状态下,有数据文件损坏,报ORA-00376:此时无法读取文件xxx
1. 表空间的数据文件损坏,但存放盘没坏。
通过恢复表空间即可解决问题。
以SYSTEM表空间为例:
run{
startup force mount;
restore tablespace system;
recover tablespace system;
alter database open;
}
2. 表空间单个数据文件所在存放盘坏。
这种情况下,只能另找地方恢复和存放数据文件了。
以SYSTEM表空间为例:
run{
startup force mount;
set newname for datafile 1 to '/u01/app/oracle/oradata/xcldb/system01.dbf';
restore datafile 1;
switch datafile 1;
recover datafile 1;
alter database open;
}
这种方法与Sqlplus采用的alter database create datafile与rename file方法差不多,
但RMAN可以处理任意(包含SYSTEM)表空间的数据文件恢复。
3. close状态下,所有表空间数据文件存放盘都坏了。
run{
startup force mount;
set newname for datafile 1 to '/u01/app/oracle/oradata/xcldb/system01.dbf';
...... --列出要更改存放路径并恢复的所有数据文件
restore database;
switch datafile all;
recover database;
alter database open;
}
小提醒:
这种技巧不只可用在这种情况下,在异机重定向恢复或单实例与RAC互转时也有用。
4. 在数据库open状态下,有数据文件损坏,报ORA-00376:此时无法读取文件xxx
a.磁盘没坏,但某个数据文件坏了。
run{
sql 'alter database datafile xxx offline';
restore datafile xxx;
recover datafile xxx;
sql 'alter database datafile xxx online';
}
b. 数据文件所在磁盘都坏了。
参考上面,只需加上set newname与switch datafile即可。
上面几种情况中,不管数据库open状态下的恢复与close状态下,差别就是,open状态下,在恢复前,数据文件要设为离线状态。
恢复后在设为在线,还有一点要注意SYSTEM这类特殊的表空间需在mount状态下才能恢复。
另外,只要归档齐全,上面几种情况都可以恢复。这种不需要太在意损坏前这个数据文件有没有做RMAN备份,日志都可以重演出来。
MAIL: xcl_168@aliyun.com
BLOG: http://blog.csdn.net/xcl168