救命啊!!有完整的控制文件和表空间文件如何恢复其中的表及自定义函数事情是这样的,我单位用的是oracle 10g, 有一天同事不知道改了什么配置,据说是什么也没动,然后就莫名奇妙登陆不了数据库了,另一同事就把这个数据库data目录复制了一份,里面的控制文件和表空间文件都是完整的,但是没有备份数据库初始化文件SPFILE,然后删除了原来的数据库,然后新建同名数据库,把复制的目录复制回去,发现不能用了.表空里除了表还有大量自己写的函数啊,快要郁闷死了,能恢复吗?

解决方案 »

  1.   

    谢谢!发现oracle 真是难用,不过性能真是没的说,一个字快!
    要是像ms sql server 一样好用就好了
      

  2.   

    没了,只有database目录下的东东
      

  3.   

    可以手动恢复,不过过程比较复杂。简单的说,
    1、安装 oracle,不要创建数据库;2、将控制文件和数据文件复制到指定位置;如果有日志文件和归档日志文件,也需要复制;3、编辑文本参数文件,
    设置 DB_NAME 参数指定数据库名(应该与原数据库一致),
    设置 CONTROL_FILES 参数指定控制文件的位置(当然还有其它必要的参数),
    设置 LOG_ARCHIVE_DEST 参数指定归档日志文件的位置;
    (当然还有其它参数,不过以上参数必须要设置正确)4、通过文本参数文件启动 oracle 实例,并安装数据库(startup mount pfile=...);5、如果数据文件和日志文件存储的位置与原位置不同,使用 alter database rename file ... to ... 语句修改;6、执行媒体恢复,如果有完整的日志文件,则使用 RECOVER AUTOMATIC DATABASE 命令;否则,使用 RECOVER UNTIL CANCEL 命令;7、打开数据库,如果媒体恢复过程可以成功执行,则使用 ALTER DATABASE OPEN; 语句;否则,使用 ALTER DATABASE OPEN RESETLOGS; 语句。说起来简单,但是如果不了解 ORACLE 数据库的基本架构和还原机制,也会不太容易处理。建议找一个专业的 ORACLE DBA 来做。
      

  4.   

    用默认的pfile拷贝一份出来,指定里面的control file的路径
    先用 startup pfile='' nomount 保证pfile正确。
    没错的话alter database mount正好确定你库文件都放在正确路径。
    接下来alter database open, 出错的话recovery until cancel...