怎么挂进程oracle 如何杀进程

oracle数据库经常会出现占用cpu100%的进程,然后系统就挂了,怎么找出引起这种故障的sql语句

在故障发生时,尝试用下面的语句抓取数据库引起故障的点。

目前成都创新互联公司已为上1000+的企业提供了网站建设、域名、网络空间、网站改版维护、企业网站设计、阜新网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

/*********************************************************************************************/

在oracle中监控死锁

/*********************************************************************************************/

SELECT sn.username,

m.SID,

sn.SERIAL#,

m.TYPE,

DECODE(m.lmode,

0,

'None',

1,

'Null',

2,

'Row Share',

3,

'Row Excl.',

4,

'Share',

5,

'S/Row Excl.',

6,

'Exclusive',

lmode,

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',

request,

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;

/*********************************************************************************************/

定位引起oracle死锁的sql

/*********************************************************************************************/

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))

/*********************************************************************************************/

下面的SQL查询可以用于确定锁住数据库对象的锁:

/*********************************************************************************************/

select

c.owner,

c.object_name,

c.object_type,

b.sid,

b.serial#,

b.status,

b.osuser,

b.machine

from

v$locked_object a ,

v$session b,

dba_objects c

where

b.sid = a.session_id

and

a.object_id = c.object_id;

/*********************************************************************************************/

显示哪些会话被锁住

/*********************************************************************************************/

/* showlock.sql */

COLUMN o_name format a10

COLUMN lock_type format a20

COLUMN object_name format a15

SELECT RPAD (oracle_username, 10) o_name, session_id SID,

DECODE (locked_mode,

0, 'None',

1, 'Null',

2, 'Row share',

3, 'Row Execlusive',

4, 'Share',

5, 'Share Row Exclusive',

6, 'Exclusive'

) lock_type,

object_name, xidusn, xidslot, xidsqn

FROM v$locked_object, all_objects

WHERE v$locked_object.object_id = all_objects.object_id;

/*********************************************************************************************/

显示所有的TM和TX锁

/*********************************************************************************************/

/* showalllock.sql */

SELECT SID, TYPE, id1, id2,

DECODE (lmode,

0, 'None',

1, 'Null',

2, 'Row share',

3, 'Row Exclusive',

4, 'Share',

5, 'Share Row Exclusive',

6, 'Exclusive'

) lock_type,

request, ctime, BLOCK

FROM v$lock

WHERE TYPE IN ('TX', 'TM');

/*********************************************************************************************/

在Oracle数据库中,可以通过kill session的方式来终止一个进程,其基本语法结构为:

被kill掉的session,状态会被标记为killed,Oracle会在该用户下一次touch时清除该进程.

我们发现当一个session被kill掉以后,该session的paddr被修改,如果有多个session被kill,那么多个session

的paddr都被更改为相同的进程地址:

/*********************************************************************************************/

alter system kill session 'sid,serial#' ;

/*********************************************************************************************/

在oracle中kill掉的进程有时还需要等待pmon回滚数据库已经占有的资源

有时候我们需要使用下面的脚本找出那些已经在oracle中kill掉的进程,在操作系统中在kill一次

/*********************************************************************************************/

select p.addr from v$process p where pid 1

minus

select s.paddr from v$session s;

$ kill -9 paddr

如何有效杀掉在linux环境下的oracle进程

一、工具

pl/sql数据库

二、操作步骤

首先通过pl/sql查询到目前长时间活动的进程:

2.选择sessions,得到界面:

3.得到某个SID和serialId.

然后切换到超级用户下面,执行下面下面:select c.spid from v$process c where c.addr=(select b.paddr from v$session b

where b.sid= '15' and b.serial#= '16985') 得到spid. 然后登录到数据库的机器,执行如下命令即完成杀掉oracle进程:

三、注意事项:如果是生产环境,要尽量减少停机时间,让数据库尽快恢复使用。

关闭oralce的进程oracle.exe,怎么再重新打开进程oracle.exe

打开 管理工具--服务,在里面找你oracle的服务(名字一般为OracleServiceSID),启动就是

关闭Oracle死锁进程的具体步骤

有效关闭Oracle死锁进程的具体步骤

查哪个过程被锁

查V$DB_OBJECT_CACHE视图:

SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER= 过程的所属用户 AND CLOCKS!= ;

查是哪一个SID 通过SID可知道是哪个SESSION

查V$ACCESS视图:

SELECT * FROM V$ACCESS WHERE OWNER= 过程的所属用户 AND NAME= 刚才查到的过程名 ;

查出SID和SERIAL#

查V$SESSION视图:

SELECT SID SERIAL# PADDR FROM V$SESSION WHERE SID= 刚才查到的SID

查V$PROCESS视图:

SELECT SPID FROM V$PROCESS WHERE ADDR= 刚才查到的PADDR ;

杀进程

( ) 先杀Oracle进程:

ALTER SYSTEM KILL SESSION 查出的SID 查出的SERIAL# ;

IXDBA NET社区论坛

( ) 再杀操作系统进程:

KILL 刚才查出的SPID

lishixinzhi/Article/program/Oracle/201311/19080


文章名称:怎么挂进程oracle 如何杀进程
文章转载:http://azwzsj.com/article/hgishs.html