Õï¶ÏOracleÊý¾Ý¿âHangingÎÊÌâ ÏÂÔØ±¾ÎÄ

Õï¶Ï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 = or perhaps

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 = order by q.piece;

²éѯ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= order by sid;

²éѯµ±Ç°¹ÒÆðÊý¾Ý¿âµÄSQLÓï¾äÖеÄlockwaitÉèÖõÄÊǶàÉÙ£¬Èç¹û·Ç¿Õ£¬ÄÇô¿´¿´Ê²Ã´Ëø×¡Á˵±Ç°¶ÔÏó£¬ÊÇʲôÀàÐ͵ÄËø¡£

SELECT lockwait FROM v$session WHERE sid = ; col Username format A15 col Sid format 9990 heading 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 = ;SELECT latchwait

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