Oracle數(shù)據(jù)庫查詢會話及死鎖的解決

–查看會話數(shù) select count(*) from v$session; –查看進程數(shù) select count(*) from v$process; –查看數(shù)據(jù)庫的并發(fā)連接數(shù) select * from v$session where status=ACTIVE; – –查看當(dāng)前數(shù)據(jù)庫建立的會話 SELECT SID,SERIAL#,USERNAME,PROGRAM,MACHINE,STATUS

–查看會話數(shù)??
select count(*) from v$session;??
?
–查看進程數(shù)??
select count(*) from v$process;??
?
–查看數(shù)據(jù)庫的并發(fā)連接數(shù)??
select * from v$session where status=’ACTIVE’;?? –

?
–查看當(dāng)前數(shù)據(jù)庫建立的會話??
SELECT SID,SERIAL#,USERNAME,PROGRAM,MACHINE,STATUS FROM V$SESSION;??
?
–查看數(shù)據(jù)庫允許的最大連接數(shù)??
SELECT value FROM V$PARAMETER WHERE NAME=’processes’?
?
–查看數(shù)據(jù)庫允許的最大會話數(shù)??
SELECT value FROM V$PARAMETER WHERE NAME=’sessions’?
?
?
–查看后臺正在運行著的sql語句??
select a.program,b.spid,c.sql_text from v$session a,v$process b,v$sqlarea c where a.paddr=b.addr and a.sql_hashvalue=c.hash_value and a.username is not null;?
三、死鎖的定位方法??
通過檢查數(shù)據(jù)庫表,能夠檢查出是哪一條語句被死鎖,產(chǎn)生死鎖的機器是哪一臺。??
1)用dba用戶執(zhí)行以下語句??
select username,lockwait,status,machine,program from v$session where sid in?
(select session_id from v$locked_object)??
如果有輸出的結(jié)果,則說明有死鎖,且能看到死鎖的機器是哪一臺。字段說明:??
Username:死鎖語句所用的數(shù)據(jù)庫用戶;??
Lockwait:死鎖的狀態(tài),如果有內(nèi)容表示被死鎖。??
Status: 狀態(tài),active表示被死鎖??
Machine: 死鎖語句所在的機器。??
Program: 產(chǎn)生死鎖的語句主要來自哪個應(yīng)用程序。??
2)用dba用戶執(zhí)行以下語句,可以查看到被死鎖的語句。??
select sql_text from v$sql where hash_value in???
(select sql_hash_value from v$session where sid in?
(select session_id from v$locked_object))??
?
四、死鎖的解決方法??
一般情況下,只要將產(chǎn)生死鎖的語句提交就可以了,但是在實際的執(zhí)行過程中。用戶可能不知道產(chǎn)生死鎖的語句是哪一句。可以將程序關(guān)閉并重新啟動就可以了。?

?

經(jīng)常在oracle的使用過程中碰到這個問題,所以也總結(jié)了一點解決方法。???
?
  1)查找死鎖的進程:???
?
sqlplus “/as sysdba” (sys/change_on_install)??
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,??
l.Oracle_USERNAME,l.OS_USER_NAME,l.PROCESS???
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;??
?
  2)kill掉這個死鎖的進程:???
?
  alter system kill session ‘sid,serial#’; (其中sid=l.session_id)???
?
  3)如果還不能解決:???
?
select pro.spid from v$session ses,??
v$process pro where ses.sid=XX and???
ses.paddr=pro.addr;??
?
  其中sid用死鎖的sid替換:???
?
exit??
ps -ef|grep spid??
?
  其中spid是這個進程的進程號,kill掉這個Oracle進程。?

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊12 分享