请通过浏览器功能收藏网页

Oracle数据库控制文件丢失 重建方法 数据库问题

发布时间:2018-06-21 11:10:20  作者:本站编辑  来源:本站原创  浏览次数:
www.javainfo.com.cn 上干货 欢迎收藏

ORACLE数据库应该避免重启 服务器频繁重启会导致  数据库异常  丢失控制文件(*.ctl)


目前11.2以上的数据库基本上 在DATA目录下 会存在一个控制文件


现在分两种情况来处理:

1  若数据库的控制文件没有损毁

   直接拷贝本库的可以使用的那个控制文件或备份数据库的控制文件  复制两份,此时拥有三个控制文件  名称修改为 01.ctl  02.ctl 03.ctl 

   启动服务即可

   sql>connect / as sysdba [;]  数据库版本不同 后面的这个分号 需要区别对待 

   sql>startup

   sql>select status from v$instance;

   注意:不要使用别的数据的控制文件 是不能恢复数据库的,原因 控制文件里的 实例ID不是一个 ,数据文件无法挂载

2  若控制文件完全丢失 则需要我们重新创建控制文件后 才可以启动数据服务

   过程稍微复杂一些:

   第一步:登录数据库服务 

   第二步:切换到管理员 dba权限  connection / as sysdba;

   第三步:获取默认字符集  获取 数据库名(若没有更改过 一般默认为 'ORCL')           

            获取字符集

          sql> startup nomount;

          sql>  select userenv('language') from dual;

               ==》 SIMPLIFIED CHINESE_CHINA.US7ASCII

            获取数据库名称:

         sql>create pfile from spfile;   

        创建文件存在 默认的初始化位置: D:\app\Administrator\product\11.2.0\dbhome_1\dbs\ 下 init.ora文件  里面存储了 dbname

   第四步:关闭数据库  shutdown immediate;  根据 orapath\data的文件列表 创建控制文件创建脚本  ctl.sql

        内容如下:           

        STARTUP NOMOUNT

        CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG

            MAXLOGFILES 4

            MAXLOGMEMBERS 3

            MAXDATAFILES 100

            MAXINSTANCES 1

            MAXLOGHISTORY 300

        LOGFILE

          GROUP 1 'D:\app\Administrator\oradata\orcl\redo01.log' SIZE 50M,

          GROUP 2 'D:\app\Administrator\oradata\orcl\redo02.log' SIZE 50M,

          GROUP 3 'D:\app\Administrator\oradata\orcl\redo03.log' SIZE 50M

        DATAFILE

          'D:\app\Administrator\oradata\orcl\system01.dbf',

          'D:\app\Administrator\oradata\orcl\sysaux01.dbf',

          'D:\app\Administrator\oradata\orcl\undotbs01.dbf',

          'D:\app\Administrator\oradata\orcl\users01.dbf',

        CHARACTER SET US7ASCII;   --》默认字符

      

     说明:example01.dbf 不是必须的  temp01.dbf 不是必须的


     sql>@d:\orapath\data\ctl.sql;  如此就重新创建了控制文件

   第五步:启动数据库实例   sql>alter database open;    -->修改数据库实例状态                                 

           检查实例状态     sql>select status from v$instance;   -->open 表示数据服务正常启动     

   

   注意点:若启动出现错误,则表示数据文件需要介质恢复  恢复后在重启  

            恢复命令: sql> set autorecovery on;

                       sql>recover database;   //等待一会   若恢复某个dbfile sql>revover datafile 'd:\orapath\data\xx.dbf';


   到此,数据库的恢复就完成了 已经可以正常提供数据查询服务了。      


如有疑问 请留言 欢迎提供建议

评论已有 0