Õï¶ÏOracleÊý¾Ý¿âHangingÎÊÌâ
Completed: ALTER DATABASE OPEN
Èç¹ûÕý³£µÄ¹Ø±Õ»òÕßimmediate¹Ø±Õ¹ÒÆð£¬ÄÇôÒâζ×ÅOracleÕýÔڵȴý¼¤»îµÄ»á»°Í˳ö¡£ ÔÚUnixϵͳÉÏ£¬»¹¿ÉÒÔѰÕÒÕýÔÚ¹ÒÆðµÄÆô¶¯»òÕ߹رղÙ×÷£¬È»ºótrace pid¡£ ѰÕÒ´íÎó£º
1) ¼ì²éAlertSID.log¸æ¾¯ÈÕÖ¾Îļþ¿´¿´ÊÇ·ñ´æÔÚ´íÎóÐÅÏ¢£¬´Ë¸æ¾¯ÈÕÖ¾ÎļþµÄ¾ßÌå·¾¶Î»ÖÿÉÒÔÓɳõʼ»¯²ÎÊýÖеÄbackground_dump_destÖлñµÃ»òÕßÔÚsqlplusÖÐÖ´ÐÐshow parameter dest»ñµÃ¡£ 2) ¼ì²éÉÏÊöĿ¼ÖеÄÔÚÊý¾Ý¿â¹ÒÆðʱ¼äÉú³ÉµÄ¸ú×ÙÎļþ¡£²é¿´ÀïÃæµÄ´íÎóÐÅÏ¢£¬²»ÓÃËÑË÷Õû¸ö¸ú×ÙÎļþ£¬Ïà¹ØµÄ´íÎóÐÅÏ¢Ò»°ã¶¼ÊÇÔÚÎļþµÄ×ʼ³öÏÖ¡£
3) Èç¹ûÊÇÔ¶³Ì·ÃÎʵÄÎÊÌ⣬ÄÇô»¹ÐèÒª¼ì²ésql*net¸ú×ÙĿ¼Ïµĸú×ÙÎļþ¡£ 4) ¼ì²éϵͳÐÅÏ¢µÄ´íÎóÈÕÖ¾£¬ÔÚ´ó¶àÊýµÄUnix϶¼ÊÇÔÚ/var/admĿ¼Ï¡£ Êä³ö²é¿´Ïà¹ØµÄV$ÊÓͼ:
µ±Êý¾Ý¿â¹ÒÆðµÄʱºò£¬Ö´ÐÐÏÂÃæµÄ²éѯ£º
SPOOL v_views.log;
SELECT * FROM v$parameter; SELECT class, value, name
FROM v$sysstat;
SELECT sid, id1, id2, type, lmode, request
FROM v$lock;
SELECT l.latch#, n.name, h.pid, l.gets, l.misses, l.immediate_gets, l.immediate_misses, l.sleeps FROM v$latchname n, v$latchholder h, v$latch l
WHERE l.latch# = n.latch# AND l.addr = h.laddr(+);
SELECT *
FROM v$session_wait
ORDER BY sid;
/* ÖØ¸´×îºóÒ»¸ö²éѯ×îÉÙÈý±é£¬ÒÔÈ·¶¨ÄĸöÔÚÖØ¸´µÈ´ý*/
SPOOL OFF
Èç¹ûÊÇÖ¸¶¨µÄ²éѯ±»¹ÒÆðÁË£¬¿ÉÒÔʹÓÃÏÂÃæµÄ²éѯÕÒ³öÏàÓ¦µÄ²éѯSQLÓï¾ä£º ͨ¹ý²Ù×÷ϵͳÉϵÄPIDÕÒ³öÏàÓ¦µÄSQLÓï¾äµÄSID£º
5 / 10
Õï¶ÏOracleÊý¾Ý¿âHangingÎÊÌâ
SELECT s.sid, p.spid FROM v$session s, v$process p
WHERE s.paddr = p.addr
AND ... < p.spid =
s.sid =
È»ºóͨ¹ýSIDÕÒ³öÏàÓ¦µÄSQLÓï¾äµÄ¾ßÌåÄÚÈÝ£º
SELECT s.sid, s.status, q.sql_text FROM v$session s, v$sqltext q WHERE s.sql_hash_value = q.hash_value
AND s.sql_address = q.address
AND s.sid =
²éѯV$SESSION_WAITÊÓͼ¿´¿´µ±Ç°µÄµÈ´ýʼþ
column sid format 990 column seq# format 99990
column wait_time heading 'WTime' format 99990
column event format a30 column p1 format 9999999990 column p2 format 9999999990
column p3 format 9990
select sid,event,seq#,p1,p2,p3,wait_time from V$session_wait
where sid=
²éѯµ±Ç°¹ÒÆðÊý¾Ý¿âµÄSQLÓï¾äÖеÄlockwaitÉèÖõÄÊǶàÉÙ£¬Èç¹û·Ç¿Õ£¬ÄÇô¿´¿´Ê²Ã´Ëø×¡Á˵±Ç°¶ÔÏó£¬ÊÇʲôÀàÐ͵ÄËø¡£
SELECT lockwait FROM v$session WHERE sid =
col Type format A4
col Lmode format 990 heading 'HELD' col Request format 990 heading 'REQ'
col Id1 format 9999990 col Id2 format 9999990
select SN.Username, M.Sid, M.Type,
DECODE(M.Lmode, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row
6 / 10
Õï¶ÏOracleÊý¾Ý¿âHangingÎÊÌâ
Excl.', 4, 'Share', 5, 'S/Row Excl.', 6, 'Exclusive',
LTRIM(TO_CHAR(Lmode,'990'))) Lmode,
DECODE(M.Request, 0, 'None', 1, 'Null', 2, 'Row Share', 3, 'Row
Excl.', 4, 'Share', 5, 'S/Row Excl.', 6, 'Exclusive', LTRIM(TO_CHAR(M.Request, '990'))) Request, M.Id1, M.Id2 from V$SESSION SN, V$LOCK M WHERE (SN.Sid = M.Sid and M.Request ! = 0)
or (SN.Sid = M.Sid and M.Request = 0 and Lmode != 4 and (id1, id2) in (select S.Id1, S.Id2 from V$LOCK S where Request != 0 and S.Id1
= M.Id1 and S.Id2 = M.Id2) ) order by Id1, Id2, M.Request
²éѯv$processÊÓͼÖеÄLATCHWAITÉèÖÃÊǶàÉÙ?Èç¹ûÕâ¸öÖµ·Ç¿Õ£¬ÄÇô¼ÌÐø²éÊÇ˱£´æÁËÕâ¸ölatch¡£
SELECT latchwait FROM v$process
WHERE spid =
FROM v$process WHERE spid =
column name format a32 heading 'LATCH NAME'
column pid heading 'HOLDER PID'
select c.name,a.addr,a.gets,a.misses,a.sleeps, a.immediate_gets,a.immediate_misses,b.pid from v$latch a, v$latchholder b, v$latchname c where a.addr = b.laddr(+) and a.latch# = c.latch# and c.name like '&latch_name%' order by a.latch#;
ÉÏÊöÕâЩ±£´æÁËËøºÍlatchµÄ»á»°ÊÇ·ñ¹Ø±ÕÁËÖն˵«ÊÇûÓÐÍ˳ö£¬Õâ¿ÉÄܻᵼÖÂÒ»¸öÓ°×Ó½ø³Ì¼ÌÐø±£´æÄÇЩ×ÊÔ´£¬ÕâÑù¾ÍÐèҪɱµôÏàÓ¦µÄ½ø³Ì£¬¿ÉÒÔʹÓÃÈçÏÂÓï¾ä£º
alter system kill session ''
Èç¹û»á»°Ã»Óб»¹ÒÆð¶øÖ»ÊÇÔËÐлºÂý£¬ÄÇôÐèÒª²é¿´»á»°µÄ¾ßÌåÐÅÏ¢:
SELECT s.sid, s.value, t.name FROM v$sesstat s, v$statname t WHERE s.statistic# = t.statistic#
AND s.sid =
Èç¹û»á»°¼«¶ÈµÄ»ºÂý»òÕßÊDZ»¹ÒÆðÁË£¬ÄÇôÐèÒª²é¿´»á»°µÄµÈ´ýÐÅÏ¢£º
SELECT *
FROM v$session_wait
7 / 10
Õï¶ÏOracleÊý¾Ý¿âHangingÎÊÌâ
where sid =
Èç¹ûÊǸö·Ö²¼Ê½ÊÂÎñ£¬ÄÇôÐèÒªÔÚ¸÷¸ö½ÚµãÉ϶¼ÔËÐÐÈçÏÂSQLÓï¾ä£º
SELECT * FROM dba_2pc_pending; SELECT * FROM pending_sessions$; SELECT * FROM pending_sub_sessions$; SELECT * FROM dba_2pc_neighbors;
Èç¹ûÊÇMTS·þÎñÆ÷£¬ÄÇô¿ÉÒԲ鿴һϵ±Ç°µÄdispatcherµÄ·±Ã¦³Ì¶È£º
select name,network,status,
(busy /(busy + idle)) * 100 \
from v$dispatchers£»
»¹¿ÉÒԲ鿴V$SHARED_SERVERSÊÓͼ»ñÈ¡ÏàÓ¦µÄÐÅÏ¢£º
select name,status,requests, (busy /(busy + idle)) * 100 \
from v$shared_servers
ÊÕ¼¯²Ù×÷ϵͳµÄÏà¹ØÐÅÏ¢£º
1) ¼ò¶ÌµÄÃèÊöÄãµÄ¼Ü¹¹£¬°üÀ¨CPUµÄÊýÁ¿£¬´ÅÅ̵ÄÊýÁ¿¡£ÊÇ·ñʹÓÃÁËÂãÉ豸£¬Ê¹ÓÃÁËNFSÎļþϵͳ£¬¹²Ïí´ÅÅÌ¡£¡£¡£¡£ÊÇ·ñ¾µÏñÁËÕâЩ?
2) ²âÁ¿²»Í¬²Ù×÷ϵͳ¼¶±ðµÄ»î¶¯£º¹ýÁ¿µÄCPU»òÕßI/O£¬Ò³Ã棬½»»»ÇøµÈ¡£ÓÐÐí¶àµÄ¹¤¾ß¿ÉÒÔ¼à²âÕâЩ£¬ÀýÈçTOP¡£
UnixÉϵŤ¾ß£ºSAR,VMSTAT,NETSTAT,TOP,TRUSSµÈ VmsÉϵŤ¾ß£ºMONITOR,ANALYZE,PROCESSµÈ
WindowsÉϵŤ¾ß£ºPerformance Monitor, Event Monitor, Dr. Watson£¬qsliceµÈ 3) ¼ì²éϵͳµÄÈÕÖ¾Îļþ£¬ÔÚ´ó¶àÊýUnixƽ̨ÉÏÈÕÖ¾Îļþ¶¼´æÔÚÓÚ/var/admĿ¼Ï¡£ »ñÈ¡SYSTEMSTATEºÍHANGANALYZEµÄdump
ÕâÁ½¸öÃüÁÔÚuser_dump_destĿ¼Ï´´½¨Ò»¸ö·Ç³£´óµÄ¸ú×ÙÎļþ£¬³õʼ»¯²ÎÊýÎļþÖеÄ
MAX_DUMP_²ÎÊýÈ·¶¨ÁËÄܹ»ÈÝÄɵÄ×î´ó¸ú×ÙÎļþµÄ´óС¡£Ê¹ÓÃOradebugÃüÁîÉèÖÃunlimit½«ÄÜÔÊÐíÖ´ÐÐÒ»¸öÍêÈ«µÄdump¡£ÇëÈ·ÈÏÕû¸öÊý¾Ý¿âÒѾ¹ÒÆð»òÕß¼´½«¹ÒÆð£¬²¢ÇÒÔÚAlert¸æ¾¯ÈÕÖ¾ÎļþÖÐûÓÐÈκι鵵µÄ´íÎóµÄʱºò²Å¿ÉÒÔ×ö´Ë²Ù×÷¡£
8 / 10