ora-01190:控制文件或数据文件9来自于最后一个RESETLOGS之前...
被派出差解决oracle故障,原因是数据库表空间A里面有三个数据文件,用户发现三个文件已满,于是就新建了一个表空间文件,此时数据库访问正常,接着他们把数据库shutdown immediate,又startup mount,通过alter database datafile 9 offline drop操作,将原来三个数据文件从表空间中删掉,又把三个文件剪切到了操作系统其他地方,再alter database open,数据库打开了,系统不正常了,不能读取数据库数据了,于是又把三个文件拷回来,还是访问不了数据(其实这时只需要将三个文件online就可以了)。用户一着急,上网搜各种方法试,后来根据网上帖子做了不完全恢复,用alter database open resetlogs,结果再alter database datafile 9 online,就提示:ora-01190:控制文件或数据文件9来自于最后一个RESETLOGS之前。我到了这里后,把oradata文件夹做了拷贝,再另一台计算机上重新建了库,用oradata备份做了覆盖,试了各种方法,原来三个文件怎么也导不进数据库。
目前有这三个数据文件(未损坏,数据还在里面,证明:我用试用版的PRM-DUL读了一点数据出来),oradata文件夹,还有09年的一个dmp备份。
求各方高人指点,还有没有办法把这三个文件导入到数据库?
网上很多解决方法都是drop掉表空间文件,删掉表空间,再新建,基本是止于数据能启动,如果这样我们系统里的表就都没有了,数据也没有了。
环境:oracle 9i + win server 2003
非归档模式,从09年至今,没有冷热备份。
这该如何是好!!!
还有其他的方法吗?重建控制文件,对我这种非DBA来说还是挺难的。
bbed是不是只有linux上有?win上没有吧?
确实重建不了控制文件,我在另一个数据库上做了试验。
另外我在试验库上重新imp了先前的dmp文件,再替换目前的数据文件,启动数据库时,会报ora-01203错误,文件原型错误,创建scn错误。
不好意思,这么久了,终于有时间把过程整理一下,虽然还是不太懂里面的原理。
大致过程如下:
1、在SQLPLUS中,通过如下语句查询当前SCN值,我的是2.34586:
select dbms_flashback.get_system_change_number()/(1024*1024*1024) from dual;
2、修改$ORA_HOME\admin\SID\pfile\init.ora启动配置文件,增加如下参数:
_allow_resetlogs_corruption=TRUE // 此参数允许数据库在不一致的情况下打开使数据库
_corrupted_rollback_segments=(SYSSMU12$) // 屏蔽出错的事务回滚段
_minimum_giga_scn=3 // 向前推进SCN值,此值需大于上步查询出的SCN值
修改如下参数:
undo_management=MANUAL // 由AUTO改为MANUAL,让UNDO表空间由自动管理变手动管理,使用回滚段
3、通过startup mount pfile=’ 上步修改的init.ora’; 打开数据库
4、使用recover database until cancel; 执行数据库不完全恢复
5、使用alter database datafile '*.ORA(数据文件路径)' online; 联机数据文件,文件联机成功
6、使用alter database open resetlogs; 打开数据库,数据库打开成功
7、恢复$ORA_HOME\admin\SID\pfile\init.ora文件为修改前的值
8、使用create spfile from pfile=’ $ORA_HOME\admin\SID\pfile\init.ora’; 重建spfile
9、重新启动数据库,对数据库做备份。
页:
[1]