zoukankan      html  css  js  c++  java
  • ORA-01033: 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:oracleproduct10.2.0adminorcldump下告警日志,发现了下面一些错误,仅仅贴出部分日志信息(太多了,不好贴)

    复制代码
    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,到此问题被解决了。 

  • 相关阅读:
    Github 上热门的 Spring Boot 项目实战推荐
    深入理解建造者模式 ——组装复杂的实例
    别死写代码,这 25 条比涨工资都重要
    Spring Boot 使用 JWT 进行身份和权限验证
    秋招打怪升级之路:十面阿里,终获offer!
    一问带你区分清楚Authentication,Authorization以及Cookie、Session、Token
    适合新手入门Spring Security With JWT的Demo
    面试官:“谈谈Spring中都用到了那些设计模式?”。
    春夏秋冬又一春之Redis持久化
    Mysql锁机制简单了解一下
  • 原文地址:https://www.cnblogs.com/zhangyingai/p/7082440.html
Copyright © 2011-2022 走看看