zoukankan      html  css  js  c++  java
  • ORA01033: ORACLE initialization or shutdown in progress

    这阵子折腾ORACLE数据库,今天还真给我“折腾”出问题来了,清理磁盘里面文件时,把D:\KERRY.MDF这个数据库文件删除了(呵呵,事后才想起来的,当时以为是SQL SERVER 05 数据库实验时创建的),结果今天启动ORACLE服务后,PL/SQL连接过去时报错:ORA-01033: ORACLE initialization or shutdown in progress。查看D:\oracle\product\10.2.0\admin\orcl\bdump下告警日志,发现了下面一些错误,仅仅贴出部分日志信息(太多了,不好贴)

    OSD-04002: 无法打开文件
    O/S-Error: (OS 2) 系统找不到指定的文件。
    *** 2011-05-25 23:44:51.765
    ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
    ORA-01110: data file 6: 'D:\KERRY.MDF'
    ORA-27041: unable to open file
    OSD-04002: 无法打开文件
    O/S-Error: (OS 2) 系统找不到指定的文件。
    ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
    ORA-01110: data file 7: 'D:\KERRY1.DBF'
    ORA-27041: unable to open file

    百度了下,在这篇帖子里面http://hi.baidu.com/nknow/blog/item/c33db8002f5d178de950cdd8.html有提供解决方法,有兴趣的可以看看。

    首先用SYSDBA账号登陆数据库,当然你可以用SQL*PLUS,也可以用PL/SQL工具,我首先在命令窗口尝试输入如下命令:

    SQL> SHUTDOWN NORMAL;

    SHUTDOWN NORMAL

    ORA
    -00900: 无效 SQL 语句

    SQL
    > STARTUP MOUNT;

    STARTUP MOUNT

    ORA
    -00900: 无效 SQL 语句

    SQL
    > ALTER DATABASE OPEN;

    ALTER DATABASE OPEN

    ORA
    -01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
    ORA
    -01110: 数据文件 6: 'D:\KERRY.MDF'

    到这里我才模糊的记得好像是清理磁盘时,删除了这个数据文件。接下来只能修改数据库,把它离线处理

    SQL> ALTER DATABASE DATAFILE 6 OFFLINE DROP;

    Database altered

    关于OFFLINE 与 OFFLINE DROP的区别,我查了下资料,区别大体如下:

    1、对一个datafile执行offline或offline drop本质上是一回事,但对一个datafile执行offline只能在归档模式下;而对一个datafile执行offline drop则既可以在归档模式也可以在非归档模式下;

     

    2、对一个datafile无论是执行offline还是offline drop,都是只改写了control文件,不会更新file$和ts$,这就是为什么可以在mount状态下对某个datafile执行offline/offline drop的本质原因;

     

    3、只有当对datafile所在的表空间执行offline normal的时候,才会既改写control文件,又更新ts$和seg$,oracle这里会把ts$的online$字段的值由1改为2,但依然不会去更新file$;

     

    4、只有当对datafile所在的表空间执行drop操作的时候,oracle才会去更新ts$和file$,oracle这里会把ts$的online$字段的值由1改为3,会把file$的status$字段由2改为1;

    注意,无论是file$file#还是ts$ts#,它们都是连续的!并且oracle会重用file$的file#,但是不会重用ts$里的ts#,这本质上是因为ts$里会记录tablespace的名字,而file$里并没有记录datafile的名字,所以file$里的记录可以重用而ts$则不能

     

    5、只要你对一个datafile执行了offline或者offline drop操作,则oracle在open的时候就不会去存储上(无论是文件系统、裸设备还是ASM)校验这个文件了,所以即使这个文件已经在存储上被删掉了,此时库依然可以open。

     

    6、无论你是在归档模式还是在非归档模式,且无论你对某个datafile是执行了offline还是offline drop操作,只要归档日志还在(对应于归档模式)或者相关的online redo log没有被logfile switch覆盖(对应于非归档模式),则这个datafile始终是可以online的,里面的数据都还在。当然,即使归档日志不在了,online redo log被logfile switch覆盖了,这个datafile也是可以online的,只是里面的数据可能会不一致。

    接下来打开数据库,结果还有一个数据文件被我干掉了(一点印象都没啊),依葫芦画瓢处理掉它,如下所示

    SQL> ALTER DATABASE DATAFILE 7 OFFLINE DROP;

    Database altered

    SQL
    > ALTER DATABASE OPEN;

    Database altered
    OK,到此问题被解决了。
    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    FreeCAD框架解析
    Python源码的编译与加密
    centos 8及以上安装mysql 8.0
    浮点数运算丢失精度
    使用 Nginx 代理内网 GitLab 并确保 SSH / HTTP 克隆地址正确
    如何实现一个简易版的 Spring
    Spring 是如何造出一个 Bean 的
    从CPU缓存看缓存的套路
    Java 集合类 List 的那些坑
    react 项目中使用antd框架,对导航多层渲染
  • 原文地址:https://www.cnblogs.com/kerrycode/p/2057533.html
Copyright © 2011-2022 走看看