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>
    

    四、小结

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

  • 相关阅读:
    将u8BF7字符串转换为汉字
    ubuntu扩容
    python面试题
    OCR开源项目
    58到家数据库30条军规解读
    dvwa sql盲注教程
    python time模块详解,时间格式转换
    python正则表达式
    tr命令详解
    腐烂
  • 原文地址:https://www.cnblogs.com/alexy/p/ora_01102.html
Copyright © 2011-2022 走看看