zoukankan      html  css  js  c++  java
  • ORA-01102

    一、解决问题

    此问题因为lk<sid>文件造成。

    [oracle@ocp dbs]$ fuser -u lkOCPTEST 
    lkOCPTEST:           14158(oracle) 14160(oracle) 14162(oracle) 14164(oracle) 14166(oracle) 14168(oracle) 14170(oracle) 14172(oracle) 14174(oracle) 14176(oracle) 14178(oracle) 14186(oracle) 14367(oracle) 14369(oracle) 18196(oracle)
    [oracle@ocp dbs]$ fuser -k lkOCPTEST 
    lkOCPTEST:           14158 14160 14162 14164 14166 14168 14170 14172 14174 14176 14178 14186 14367 14369
    [oracle@ocp dbs]$ 
    

     然后启动数据库就ok了。

    [oracle@ocp dbs]$ fuser -u lkOCPTEST 
    lkOCPTEST:           14158(oracle) 14160(oracle) 14162(oracle) 14164(oracle) 14166(oracle) 14168(oracle) 14170(oracle) 14172(oracle) 14174(oracle) 14176(oracle) 14178(oracle) 14186(oracle) 14367(oracle) 14369(oracle) 18196(oracle)
    [oracle@ocp dbs]$ fuser -k lkOCPTEST 
    lkOCPTEST:           14158 14160 14162 14164 14166 14168 14170 14172 14174 14176 14178 14186 14367 14369
    [oracle@ocp dbs]$ 
    

    二、问题分析  

    1、查看日志错误信息

    SQL> ! oerr ora 01102
    01102, 00000, "cannot mount database in EXCLUSIVE mode"
    // *Cause:  Some other instance has the database mounted exclusive or shared.
    // *Action: Shutdown other instance or mount in a compatible mode.
    
    SQL> 
    

    2、当你启动数据库遇到1102报错时,之前的数据库的down操作一般都不是正常完成的,或由于一些异常使Oracle在操作系统中残留一些内存结构,Pmon等一几个进程依然存在等原因使Oracle误认为Instance依然在运行着,所以库就没有启动,具体说来大体原因有如下几个:

    1、pmon、smon、lwgw及dbwr这些后台进程依然存在着
    2、Oracle开辟的共享内存没有释放掉
    3、"lk<sid>" and "sgadef<sid>.dbf"这两个用于锁内存的文件存在着。

    三、进一步方法

    1、看一下"lk<sid>" and "sgadef<sid>.dbf"这两个文件是不是存在着,如果存在将其删掉。
    oracle$cd $ORACLE_HOME/dbs
    oracle$ls -l sgadef<sid>.dbf
    
    如果存在删掉它
    oracle$rm sgadef<sid>.dbf
    oracle$ls -l lk<sid>
    
    如果存在删掉它
    oracle$rm lk<sid>
    
    2、看是不是有后台进程存在了
    oracle$ps -ef | grep ora_ | grep $ORACLE_SID
    
    如果有pmon这些后台进程的残留,kill -9掉它
    oracle$kill -9 pid
    
    3、看一下oracle的共享内存段及信号集(semaphores)是不是还存在着
    1)清共享内存段
    oracle$ipcs -m   --显示一下,看owner是Oracle用户的
    oracle$ipcrm -m <Shared_Memory_ID>
    
    2)清信号集
    oracle$ipcs -s   --显示一下,看owner是Oracle用户的
    oracle$ipcrm -s <Semaphore_ID>
    

    四、小结

      此问题不复杂,但了解其业务逻辑关系处理起来就方便了。

  • 相关阅读:
    Sql Server 2008 为开发带来的新特性
    MSMQ 与ESB
    面向服务架构(SOA)和企业服务总线(ESB)
    IBM网站 构建您的SOA 系列文章
    Visual Studio 2008 和 .NET Framework 3.5 Training Kit
    模式与实践 系列发布WCF Security Guidance 1.0
    跟NHibernate之夏一起学习NHibernate
    ORACLE一些不常用的脚本
    ORACLE已建表能否创建分区
    Access数据库问题锦集
  • 原文地址:https://www.cnblogs.com/alexy/p/ora_01102.html
Copyright © 2011-2022 走看看