oracle10g数据库,之前在window XP2003上使用,后来系统崩溃,又换成window7系统,可是发现数据结构不兼容,现在想在XP系统另一个oracle数据库上恢复不知道能不能恢复?有controlfile、 datafile和onlinelog文件(没有备份),不知道要具体怎样恢复,越详细越好,谢谢各位大虾了。

解决方案 »

  1.   

    你原系统崩溃以后,按道理说数据库也应该就不能用了,不明白你换成WIN7后原数据库还能用?如果不能用,你是怎么发现数据结构不兼容的
      

  2.   

    不好意思,我没说清楚,系统崩溃就是中毒了数据库打不开了,然后到window7上也是打不开,同一个oracle数据库在window xp上和windows7上确实不能兼容(可能有点片面),现在我就想知道能不能恢复,具体要怎么恢复,谢谢,即使是数据库有问题了,我也想知道恢复方法或者步骤、谢谢嘞!
      

  3.   

    应该可以吧,不过你新装的数据库目录最好原来的一样,然后把controlfile、 datafile和onlinelog拷到相应的目录下,具体没试过。
      

  4.   

    归档日志文件和日志文件都没有?
    你的datafile 文件是最新的吗,你这种情况应该可以跑起来数据库,但是如果要完全恢复光有这么点文件有难度。
      

  5.   

    按原ORACLE安装环境重新装下,然后将这些文件复制回去,修改一下控制文件,就差不多了。
      

  6.   

    在原来的机子上面重新装下WINDOWS 2003然后重新安装数据库,目录要和之前的目录一样,但是要不之前的oracle目录复制下以免被覆盖。装好后把新安装的oracle目录改个名字,比如ORACLE_NEW,然后把之前的目录改回来(既改成oracle)然后应该就可以了,要是想换系统的话把库先导出来。也就是传说中的冷备份
      

  7.   

    问题解决了,一个牛人告诉我的,我贴出来希望对大家有用:rem 只有相关数据库文件的恢复.恢复环境:oracle 10.2.0.1.0,windows xp,有一个控制文件,相应的数据文件和重做日志文件我已经先创建好了一个数据库,sid=shan,下面模拟一下恢复的环境。sqlplus /nolog
    conn /as sysdba
    shutdown immediate;(先关闭数据库)
    下面移动一下一个数据文件和日志文件的位置
    alter database mount;
    select file#,name from v$datafile;
    select group#,member from v$logfile;
    在操作系统里把E:\ORACLE\PRODUCT\10.2.0\ORADATA\SHAN\REDO03.LOG 剪切到'C:\REDO03.LOG'
    在操作系统里把E:\ORACLE\PRODUCT\10.2.0\ORADATA\SHAN\USERS01.DBF 剪切到'C:\USERS01.DBF'
    alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\SHAN\REDO03.LOG' to 'C:\REDO03.LOG';
    alter database rename file 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\SHAN\USERS01.DBF' to 'C:\USERS01.DBF';alter database open;(正常打开)shutdown immediate;(关闭数据库),这里将所有的数据文件,控制文件,
    在开始菜单里>用dbca删除该数据库.下面开始恢复1 windows下设置相关的环境变量,为复制数据库创建所有的必要路径
    set ORACLE_SID=shan
    set ORACLE_BASE=E:\oracle\product\10.2.0
    set ORACLE_HOME=%ORACLE_BASE%\db_1
    set ORACLE_DATA=%ORACLE_BASE%\oradata\%ORACLE_SID%
    set ORACLE_ADMIN=%ORACLE_BASE%\admin\%ORACLE_SID%
    mkdir %ORACLE_ADMIN%
    mkdir %ORACLE_ADMIN%\pfile
    mkdir %ORACLE_ADMIN%\adump
    mkdir %ORACLE_ADMIN%\bdump
    mkdir %ORACLE_ADMIN%\cdump
    mkdir %ORACLE_ADMIN%\dpdump
    mkdir %ORACLE_ADMIN%\udump
    mkdir %ORACLE_DATA%
    2  创建口令文件
    orapwd file=%ORACLE_HOME%\database\PWDshan.ora password=shan entries=43  为要恢复的数据库创建一个数据库服务oradim -new -sid SHAN -intpwd shan4 从一个相同版本的数据库中取得一个参数文件,这个参数文件在startup nomount时要用
      用命令create pfile from spfile;在windows下,这个参数文件在%ORACLE_HOME%\database下,文件名:INIT%ORACLE_SID%.ORA
      修改这个文件名INIT%ORACLE_SID%.ORA.(例如:INITshan.ORA)
      打开这个文件:修改以下几个参数
      *.db_name='xx';
      *.audit_file_dest='e:\oracle\product\10.2.0/admin/xx/adump'
      *.background_dump_dest='e:\oracle\product\10.2.0/admin/xx/bdump'
      *.core_dump_dest='e:\oracle\product\10.2.0/admin/xx/cdump'
      *.user_dump_dest='e:\oracle\product\10.2.0/admin/xx/udump'
      *.control_files='e:\oracle\product\10.2.0/oradata/xx/\control01.ctl','e:\oracle\product\10.2.0/oradata/xx/\control02.ctl','e:\oracle\product\10.2.0/oradata/xx/\control03.ctl'
         
      将其中的xx换个你要恢复的数据库的sid(你的控制文件只有一份,拷贝同样的三份,替代上面的*.control_files参数里面的control01.ctl,control02.ctl,control03.ctl)
      
      之后把这个修改后的文件放到%ORACLE_HOME%\database下
      
    5 这里因为原来有一个控制文件,所以没有重新创建控制文件,只是又复制了两份,并设置了和参数文件里面*.control_files一样的名字
        
    6 把数据文件和重做日志文件和控制文件都拷贝到%ORACLE_DATA%下面。(注意:这些数据库文件的USERS01.DBF,REDO03.LOG位置是不对的,它们应该是在C:\下)
      sqlplus /nolog
      conn /as sysdba
      startup  mount;(启动数据库)
      col name for a60;
      col member for a60;
      select file#,name from v$datafile;(查看数据文件位置)
      select group#,member from v$logfile;(查看日志文件位置)
      
      按上面的显示把数据文件和日志文件拷贝到相应的位置。
    7 打开数据库 
      alter database open;
      select instance_name,status from v$instance;
      显示instance_name为shan,状态为open;
    8 ok,全部结束
      

  8.   

    建议楼主Google一下冷备份恢复的条件和步骤.
    有些情况,缺少必要条件是无法恢复D.
    不必太纠结于此,巧妇难为无米之炊.平时多做练习就知道了.