Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141152
  • 博文数量: 43
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 501
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-24 15:28
文章分类

全部博文(43)

文章存档

2015年(18)

2014年(25)

我的朋友

分类: Oracle

2014-11-26 09:17:20

Oracle(未进行备份)控制文件损坏后导出数据方案

 

1:首先如果控制文件未损坏或者部分损坏,又没有DMP文件,只有data文件,则可以参照如下方案

1.1:将原来的date文件夹备份出来

1.2:完全卸载删除原来的oracle,新安装一个oracle,新安装的oracle路径,实例名最好都和原来的一样,安装成功后停止服务,然后把新oracledate文件夹拷贝出来,将备份的数据文件拷贝进去,直接启动oracle服务,如果运气好,数据文件控制文件都没损坏,则oracle恢复成功,直接可以使用

1.3:如果以上步骤失败,则可进行如下操作,一般都是控制文件损坏,但是oracle3个数据控制文件,一般不会都损坏,先把3个数据文件都备份下,然后把control02数据文件拷贝3个,分别命名为01,02,03,然后,再次启动oracle服务,如果02控制文件没有损坏,则oracle可以正常使用,如果替换为02后还不能用,可以试试都换成03,如果全部换过来一遍还不能用则进入第二大步操作比较麻烦了

 

2:如果方案一不能解决你的问题,则需要参照如下步骤进行操作了

 

2.1:同上边1.2的操作,新安装一个oracle,并且路径以及实例名都和原来的保持一致,安装成功后启动服务

 

2.2:在命令行进行如下操作:sqlplus /nolog  conn sys/sys as sysdba

 

2.3:执行如下命令alter database backup controlfile to trace; 备份当前数据库控制文件,控制文件一般备份到D:/oracle/product/10.2.0/admin/bstest/udump下,请注意最新一个就是了(这个是系统自动备份的,路径不用管,oracle回自动给你存下来,ps:这一步一定要执行,我们第一次就是忘记执行这个了,导致后来往下执行的反工操作,不要以为这个没用,恢复时候要用现在备份的这个)

 

2.4:停止oracle服务,删除刚刚安装过的date文件夹下的所有文件

 

2.5:拷贝原来备份的date文件夹下的数据文件,日志文件(日志文件也需要,不然后边会执行不过去)

 

2.6删除原控制文件,重新创建一个控制文件,命令行执行

sqlplus /nolog  ;conn sys/sys as sysdba

hutdown immediate;

startup nomount;启动到nomount状态

请注意修改各个路径的位置

然后执行以上控制文件重建语句 

CREATE CONTROLFILE SET DATABASE "hr" RESETLOGS  NOARCHIVELOG

    MAXLOGFILES 16

    MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE

  GROUP 1 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/BSTEST/REDO01.LOG'  SIZE 50M,

  GROUP 2 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/BSTEST/REDO02.LOG'  SIZE 50M,

  GROUP 3 'D:/ORACLE/PRODUCT/10.2.0/ORADATA/BSTEST/REDO03.LOG'  SIZE 50M

-- STANDBY LOGFILE

DATAFILE

  'D:/ORACLE/PRODUCT/10.2.0/ORADATA/BSTEST/SYSTEM01.DBF',

  'D:/ORACLE/PRODUCT/10.2.0/ORADATA/BSTEST/UNDOTBS01.DBF',

  'D:/ORACLE/PRODUCT/10.2.0/ORADATA/BSTEST/SYSAUX01.DBF',

  'D:/ORACLE/PRODUCT/10.2.0/ORADATA/BSTEST/USERS01.DBF', 

  'D:/ORACLE/PRODUCT/10.2.0/ORADATA/BSTEST/TEST.DAT'

CHARACTER SET ZHS16GBK;

注意修改数据文件的路径,如果是原数据文件,加上你原来所有的数据文件路径,如绿色则是我原来的数据文件(特别是最后一个一定要加,因为可能大家主要用的就是这个数据文件,有的可能有多个)

 

2.7执行控制文件恢复(这时候就用到了第三步的备份了)

recover database using backup controlfile until cancel;

输入cancel回车

这个时候系统会报错,不用理会

 

2.8 继续恢复重做日志文件:

alter database open resetlogs;

 

执行后出现以下错误。

ORA-01194:文件1需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'D:/ORACLE/ORADATA/ZQKH/SYSTEM01.DBF'

(出现这个错误淡定,不要紧)

 

2.9#系统文件出错,看到一致性自然想到 _allow_resetlogs_corruption的隐含命令
 

执行这个命令:alter system set "_allow_resetlogs_corruption"=true scope=spfile;

 

2.10:再次恢复重做日志文件:

 

 执行如下命令:  alter database open RESETLOGS;(这个指令执行过程会比较漫长,大家可以多等会,没问题),漫长等待后,系统会自动断开

ORA-01092: ORACLE 例程终止。强行断开连接

 

2.11  再次连接修改undo 日志为手动模式:

执行如下命令: alter system set undo_management='manual' scope=spfile;

 

2.12: 重启oracle服务,再次登录 执行如下命令:

     startup mount;(启动到monunt状态)

     recover database;(恢复数据库),成功后执行如下

     alter database open;,到这为止,oracle控制文件以及重做日志文件已经成功恢复,用qlsql可以正常登录了

 

2.13:登录后,oracle基本上能用了,安全起见建议执行数据库备份操作,当用户执行备份时候可能会遇到如下错误,用plsql工具导出表,可以正常导出,建议大家用工具导出,手动写命令导出可能会遇到如下问题:

 

Oracle错误:提示临时表空间为空。

 

 select name from v$tempfile;查看,确实为空,则:

temp01.dbf已存在,则如下:

alter tablespace temp add tempfile 'D:/oracle/product/10.2.0/oradata/bstest/temp01.dbf'

否则:

alter tablespace temp add tempfile 'D:/oracle/product/10.2.0/oradata/bstest/temp01.dbf' size 10M;(这个我没有测试,但是应该这样处理)

 

2.14:经过以上处理后,可以正常导出库了,导出后,建议把原来oracle干掉,然后重新装一下,把刚刚导出的库再倒入进去,至此问题得到完美解决

 

 

以上步骤操作过程中如果遇到失败,或者和上边不一样的情况,建议反复操作,可以解决oracle控制文件损坏的情况(保证数据文件和日志文件未损坏)

 

 

 

     

 

阅读(2192) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~