oracle10g 数据库还原问题(紧急)请各位高手帮忙!!!

时间:2021-03-20 20:44:30
1.前几天装有ORACLE数据库的机子瘫痪重装了系统,里面有一些正在使用的数据.

2.之前在关掉服务的情况下拷贝ORADATA下的数据,但丢失了表空间文件(不知道为啥,我把表空间放在E盘我的名字下,

找不到了).原有的数据库安装在E盘,在恢复过程中  alter database open; log出现以下问题:

*** SERVICE NAME:() 2009-06-09 18:23:19.913
*** SESSION ID:(167.1) 2009-06-09 18:23:19.913
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 21) 设备未就绪。
ORA-01157: cannot identify/lock data file 2 - see DBWR trace file
ORA-01110: data file 2: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 21) 设备未就绪。
ORA-01157: cannot identify/lock data file 3 - see DBWR trace file
ORA-01110: data file 3: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 21) 设备未就绪。
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 21) 设备未就绪。
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 21) 设备未就绪。
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: 'E:\ZHANGMICHUAN\ORACL_TABLESPACE\QTY_TSPACE.ORA'
ORA-27047: unable to read the header block of file
OSD-04006: ReadFile() 失败, 无法读取文件

dbf 文件在E盘\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\ 目录下,能有办法将G盘改为E盘吗?还有办法恢复吗?

7 个解决方案

#1


直接通过alter tablespace rename datefile 来重新指定每个datafile的文件路径,

首先是到mount状态
SQL>startup mount;  
如果不能到mount状态,就先修复spfile和control file,不够根据你的信息,很幸运你没有中招,这两个你都没有问题。

不知道你的归档是否完善和正确,最好还是基于非归档的模式吧
SQL>alter database noarchivelog;

修改datafile路径
例如如果现在的备份路径在E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\的话
SQL>alter database rename file 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF' to 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF';

依次对所有的datefile做以上处理

启动到open模式
SQL> alter database open;

检查datefile路径
SQL> select name from v$datafile;


==================================================================
Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理

如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
电子邮件:dba@Inthirties.com
网站: http://www.inthirties.com




#2


引用 1 楼 inthirties 的回复:
直接通过alter tablespace rename datefile 来重新指定每个datafile的文件路径, 

首先是到mount状态 
SQL>startup mount;  
如果不能到mount状态,就先修复spfile和control file,不够根据你的信息,很幸运你没有中招,这两个你都没有问题。 

不知道你的归档是否完善和正确,最好还是基于非归档的模式吧 
SQL>alter database noarchivelog; 

修改datafile路径 
例如如果现在的备份路径在E:\ORACLE\PRODUCT\10.2.0\ORADATA\O…


以上这样的恢复方法,是确认你的E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORADATA下有原来的datafile的备份哟,如果不是的话,就要用别的方法。

注意操作前,一定要冷备份好你原来数据库。

#3


嗯,楼上对于恢复的理解非常精确。

同意。

#4


表空间文件找不到了,咋办?

#5


如果没有备份的话,那就恢复不了了。

#6


没有数据文件的备份,如果有完整的归档和日志文件的话,可以尝试这做完全恢复或者是不完全恢复。

#7


引用 6 楼 inthirties 的回复:
没有数据文件的备份,如果有完整的归档和日志文件的话,可以尝试这做完全恢复或者是不完全恢复。


补充一下,不过这还是需要和归档对应上的全冷备的基点。

#1


直接通过alter tablespace rename datefile 来重新指定每个datafile的文件路径,

首先是到mount状态
SQL>startup mount;  
如果不能到mount状态,就先修复spfile和control file,不够根据你的信息,很幸运你没有中招,这两个你都没有问题。

不知道你的归档是否完善和正确,最好还是基于非归档的模式吧
SQL>alter database noarchivelog;

修改datafile路径
例如如果现在的备份路径在E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\的话
SQL>alter database rename file 'G:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF' to 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF';

依次对所有的datefile做以上处理

启动到open模式
SQL> alter database open;

检查datefile路径
SQL> select name from v$datafile;


==================================================================
Inthirties关注Oracle数据库 维护 优化,安全,备份,恢复,迁移,故障处理

如果你需要帮助或想和我一起学习的请联系
联系方式QQ:370140387
电子邮件:dba@Inthirties.com
网站: http://www.inthirties.com




#2


引用 1 楼 inthirties 的回复:
直接通过alter tablespace rename datefile 来重新指定每个datafile的文件路径, 

首先是到mount状态 
SQL>startup mount;  
如果不能到mount状态,就先修复spfile和control file,不够根据你的信息,很幸运你没有中招,这两个你都没有问题。 

不知道你的归档是否完善和正确,最好还是基于非归档的模式吧 
SQL>alter database noarchivelog; 

修改datafile路径 
例如如果现在的备份路径在E:\ORACLE\PRODUCT\10.2.0\ORADATA\O…


以上这样的恢复方法,是确认你的E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORADATA下有原来的datafile的备份哟,如果不是的话,就要用别的方法。

注意操作前,一定要冷备份好你原来数据库。

#3


嗯,楼上对于恢复的理解非常精确。

同意。

#4


表空间文件找不到了,咋办?

#5


如果没有备份的话,那就恢复不了了。

#6


没有数据文件的备份,如果有完整的归档和日志文件的话,可以尝试这做完全恢复或者是不完全恢复。

#7


引用 6 楼 inthirties 的回复:
没有数据文件的备份,如果有完整的归档和日志文件的话,可以尝试这做完全恢复或者是不完全恢复。


补充一下,不过这还是需要和归档对应上的全冷备的基点。