lk的探究

關於lk《SID》的問題,自己懶得總結寫了,就轉了一篇
一、出現的現象
 
SQL> conn /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area  276824064 bytes
Fixed Size                   778736 bytes
Variable Size             137371152 bytes
Database Buffers          138412032 bytes
Redo Buffers                 262144 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
 
二、解決的方法:
解決方法一:重啓機器,能夠解決(注意,需要察看環境變量中SID和自己創建數據庫的SID是否一致)
解決方法二:位於ORALCE_HOME下的dbs目錄下,發現是lk<SID>文件造成的。
                          使用fuser -k lk <sid>就解決。
 
三、產生原因分析:
由於我在創建數據庫的時候,環境變量中的設置的SID和我實際創建數據庫的SID不一致,所以造成了數據庫誤認爲,我同時運行兩個實例。lk<sid>實際就是防止兩個實例同時併發運行。
 
四、解決此類錯誤的流程:
 
 當發生1102錯誤時,可以按照以下流程檢查、排錯:
1.如果是HA系統,檢查其他節點是否已經啓動實例;
2.檢查Oracle進程是否存在,如果存在則殺掉進程;
3.檢查信號量是否存在,如果存在,則清除信號量;
4.檢查共享內存段是否存在,如果存在,則清除共享內存段;
5.檢查鎖內存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,則刪除。


下面附上官方描述:
Problem Explanation: 
====================  
A database is started in EXCLUSIVE mode by default.  Therefore, the  
ORA-01102 error is misleading and may have occurred due to one of the  
following reasons: 
  - there is still an "sgadef<sid>.dbf" file in the "ORACLE_HOME/dbs" 
    directory  
  - the processes for Oracle (pmon, smon, lgwr and dbwr) still exist 
  - shared memory segments and semaphores still exist even though the  
    database has been shutdown 
  - there is a "ORACLE_HOME/dbs/lk<db_name>" file 


Solution Description: 
===================== 
Verify that the database was shutdown cleanly by doing the following: 
1. Verify that there is not a "sgadef<sid>.dbf" file in the directory 
   "ORACLE_HOME/dbs".   
   % ls $ORACLE_HOME/dbs/sgadef<sid>.dbf 
   If this file does exist, remove it. 
   % rm $ORACLE_HOME/dbs/sgadef<sid>.dbf 
2. Verify that there are no background processes owned by "oracle"  
   % ps -ef | grep ora_ | grep $ORACLE_SID 
   If background processes exist, remove them by using the Unix  
   command "kill".  For example: 
   % kill -9 <Process_ID_Number> 
3. Verify that no shared memory segments and semaphores that are owned  
   by "oracle" still exist 
   % ipcs -a 
   If there are shared memory segments and semaphores owned by "oracle",
   remove the shared memory segments  
   % ipcrm -m <Shared_Memory_ID_Number> 
   and remove the semaphores  
   % ipcrm -s <Semaphore_ID_Number> 
 
NOTE:  The example shown above assumes that you only have one  
       database on this machine.  If you have more than one 
       database, you will need to shutdown all other databases 
       before proceeding with Step 4. 
4. Verify that the "$ORACLE_HOME/dbs/lk<db_name>" file does not exist 
   if exit,remove it use ‘rm’ command.
5. Startup the instance 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章