手上有一台很早的机器了,想把里面的数据拿出来。
OS:Windows NT Server 4.0 SP6
DB:Oracle 8.1.7
找到了这个数据库的完全备份,就是oracle文件夹下的所有东西。机器目前操作系统(NT Server 4.0)和Oracke(8.1.7)软件安装正常,但是没有实例。
将数据文件、日志文件、控制文件、参数文件、密码文件、network/ADMIN都拷贝至相应的位置。根据listener.ora文件更改机器名。
使用
oradim -new -sid mis
建立实例。可以看到监听器和实例的服务均已启动。
设置了ORACLE_SID、ORACLE_HOME环境变量,在注册表中也设置了ORACLE_SID的键值。
sqlplus /nolog
conn / as sysdba
报ORA-12560: TNS: 协议适配器错误。
conn sys/123@mis as sysdba
报ORA-12500:TNS:监听程序无法启动专用服务器进程。查看alert文件,发现没有任何新加内容,最后的一条记录还是2007年的,内容是:"Completed: alter database open"。推断在做这个备份的时候数据库并没有正常关闭。将监听器服务停下,再进行
sqlplus /nolog
conn / as sysdba
同样报ORA-12560: TNS: 协议适配器错误。
conn sys/123@mis as sysdba
报监听器没有启动。请教各位,我该如何恢复它啊?

解决方案 »

  1.   

    所有文件都要COPY到原库所在的目录1)ORACLE_SID要设置跟以前的一样才行。oradim -new -sid mismis跟原库的SID是一样的么?2)进入SQLPLUS前,先设置SID,这样试试
    c:\>set ORACLE_SID=mis
    c:\>sqlplus /nolog
    sql>connect / as sysdba
    ---这个时候,应该提示连接到空闲进程才行
      

  2.   

    环境变量是设了的,监听程序也启动了,而且在注册表里面也写了一个ORACLE_SID的。
    mis就是原来的SID,这一点可以从listener.ora等文件中看到。
    connect / as sysdba
    之后应该是显示连接到空闲例程,但是却报了ORA-12560。而同时用set确实可以看到ORACLE_SID这个环境变量的。这一点令我比较郁闷……
    是不是因为之前的备份没有正常关闭(这个从alert文件中可以看到)的原因?
      

  3.   

    connect / as sysdba连接到空闲例程,这个时候还没有执行STARTUP,这时也会报ORA-12560?
      

  4.   

    你的当前用户是位于组ORA_DBA当中吗?如果不是,添加创建一下。
      

  5.   

    顶一下
      oracle QQ群:54775466
             欢迎大家进群一起探讨
      

  6.   


    只要用oradim 创建了服务,然后设置好环境变量,即便不创建监听、不还原数据文件之类的,也是可以连接到空闲进程的
      

  7.   

    感谢大家的帮助。
    今天又试了一下:
    由于手上有完整的oracle文件夹,今天索性就把D盘(Oracle是装在D:\oracle)下的oracle改名为oracle_bak,将备份的完整oracle\文件夹贴上,再次启动Oracle,这样就完全正常了!监听和实例都正常了,而且应用也连上了。也就是说只使用了新装Oracle所建立的C盘里和注册表里的一些东西。
    难道说除了数据文件、日志文件、控制文件、密码文件和参数文件之外还需要拷贝一些别的东西,才能实现冷备份的恢复?
      

  8.   


    应该不是的吧,个人感觉,要和原来的oracle环境一抹一样,才能直接启动成功,否则还需要需要改配置文件以及注册表的。
      

  9.   


    没错,对于windows环境,理论上来说,你有了数据文件、日志文件、控制文件、密码文件和参数文件等冷备份后,还需要当前注册表里的oracle信息+oracle程序本身才能实现恢复。 不过这两点显然是可以通过重装安装一下oracle以及安装时的设置就可以实现,所以并不是一定要备份。