原因是系統存在僵死的程序,促使session處於啟用狀態.
首先檢視alert.log檔案
接著檢視oracle程序
$ ps -ef|grep oracle
終止與oracle_sid有關的所有oracle過程:
$ ps -ef|grep $oracle_sid| grep -v grep|awk ''|xargs -i kill -9 {}
$ ipcs -mp
------ shared memory creator/last-op --------
shmid owner cpid lpid
4947969 oracle 26474 26488
$ ipcrm shm 4947969
也可以用下面的方法.
先找到該oracle session對應的spid通過作業系統檢查有沒有僵死程序
下面的語句用來查詢哪些物件被鎖::
select do.object_name,
ss.sid,
ss.serial#,
lo.process,
lo.locked_mode,
ps.spid,
sql.sql_text
from v$locked_object lo,
dba_objects do,
v$session ss,
v$process ps,
v$sql sql
where lo.object_id = do.object_id
and session_id = ss.sid
and ps.addr = ss.paddr
and ss.sql_address = sql.address
and ss.sql_hash_value = sql.hash_value;
查到後可以看到他們的sid, serial#,然後用
alter system kill session '237,12574';
語句把這個sid結束掉.要是結束不掉,出現ora-00031: session marked for kill錯誤後.也就是說程序狀態被置為"killed",但是鎖定的資源很長時間沒有被釋放,這個時候怎麼辦呢,既然kill不掉sid,那我們試試把它的spid kill掉,執行下面的語句獲得程序(執行緒)號
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=237
然後再在作業系統上把這個spid kill掉.
登入oracle資料庫提示 無監聽
一般情況,先看一下服務管理中oracleoradb10g home1tnslistener,這個服務啟用了沒有,如果沒有啟用先手機啟動,再登入看是否能行,不行,再參考下面步驟檢查排除。我的啟動服務就ok了,鑑於這種問題遇到很多次了,貼出來記錄一下!首先執行cmdc users hp sqlplus ...
登入mysql資料庫 登入mysql資料庫
二 登入mysql 1 以 windowns 命令方式登入 首先 在 cmd命令裡 切換到mysql的bin目錄下 c program files mysql mysql server 8.0 bin cd c program files mysql mysql server 8.0 bin c p...
Oracle資料庫的sysdba許可權登入問題總結
oracle資料庫的sysdba許可權登入問題 資料庫用sysdba登入的驗證有兩種方式,一種是通過os認證,一種是通過密碼檔案驗證 登入方式有兩種,一種是在資料庫主機直接登入 用os認證的方式 一種是通過網路遠端登入 需要設定的引數有兩個,乙個是sqlnet.authentication serv...