杀死Oracle数据库中客户端用户连接进程
分类: 数据库管理2009-12-19 14:28 315人阅读 评论(0) 收藏 举报
<一>实现杀死某个用户的客户端连接进程
1.以管理员身份登录后查看V$SESSION的视图结构
SQL> desc v$session;
名称 是否为空? 类型
----------------------------------------- -------- -------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
AUDSID NUMBER
PADDR RAW(4)
USER# NUMBER
USERNAME VARCHAR2(30)
1.以管理员身份登录后查看V$SESSION的视图结构
SQL> desc v$session;
名称 是否为空? 类型
----------------------------------------- -------- -------------
SADDR RAW(4)
SID NUMBER
SERIAL# NUMBER
AUDSID NUMBER
PADDR RAW(4)
USER# NUMBER
USERNAME VARCHAR2(30)
COMMAND NUMBER
OWNERID NUMBER
TADDR VARCHAR2(8)
LOCKWAIT VARCHAR2(8)
STATUS VARCHAR2(8)
SERVER VARCHAR2(9)
SCHEMA# NUMBER
SCHEMANAME VARCHAR2(30)
OSUSER VARCHAR2(30)
PROCESS VARCHAR2(12)
MACHINE VARCHAR2(64)
TERMINAL VARCHAR2(16)
PROGRAM VARCHAR2(64)
TYPE VARCHAR2(10)
SQL_ADDRESS RAW(4)
OWNERID NUMBER
TADDR VARCHAR2(8)
LOCKWAIT VARCHAR2(8)
STATUS VARCHAR2(8)
SERVER VARCHAR2(9)
SCHEMA# NUMBER
SCHEMANAME VARCHAR2(30)
OSUSER VARCHAR2(30)
PROCESS VARCHAR2(12)
MACHINE VARCHAR2(64)
TERMINAL VARCHAR2(16)
PROGRAM VARCHAR2(64)
TYPE VARCHAR2(10)
SQL_ADDRESS RAW(4)
SQL_HASH_VALUE NUMBER
SQL_ID VARCHAR2(13)
SQL_CHILD_NUMBER NUMBER
PREV_SQL_ADDR RAW(4)
PREV_HASH_VALUE NUMBER
PREV_SQL_ID VARCHAR2(13)
PREV_CHILD_NUMBER NUMBER
MODULE VARCHAR2(48)
MODULE_HASH NUMBER
ACTION VARCHAR2(32)
ACTION_HASH NUMBER
CLIENT_INFO VARCHAR2(64)
FIXED_TABLE_SEQUENCE NUMBER
ROW_WAIT_OBJ# NUMBER
ROW_WAIT_FILE# NUMBER
SQL_ID VARCHAR2(13)
SQL_CHILD_NUMBER NUMBER
PREV_SQL_ADDR RAW(4)
PREV_HASH_VALUE NUMBER
PREV_SQL_ID VARCHAR2(13)
PREV_CHILD_NUMBER NUMBER
MODULE VARCHAR2(48)
MODULE_HASH NUMBER
ACTION VARCHAR2(32)
ACTION_HASH NUMBER
CLIENT_INFO VARCHAR2(64)
FIXED_TABLE_SEQUENCE NUMBER
ROW_WAIT_OBJ# NUMBER
ROW_WAIT_FILE# NUMBER
ROW_WAIT_BLOCK# NUMBER
ROW_WAIT_ROW# NUMBER
LOGON_TIME DATE
LAST_CALL_ET NUMBER
PDML_ENABLED VARCHAR2(3)
FAILOVER_TYPE VARCHAR2(13)
FAILOVER_METHOD VARCHAR2(10)
FAILED_OVER VARCHAR2(3)
RESOURCE_CONSUMER_GROUP VARCHAR2(32)
PDML_STATUS VARCHAR2(8)
PDDL_STATUS VARCHAR2(8)
PQ_STATUS VARCHAR2(8)
CURRENT_QUEUE_DURATION NUMBER
CLIENT_IDENTIFIER VARCHAR2(64)
BLOCKING_SESSION_STATUS VARCHAR2(11)
ROW_WAIT_ROW# NUMBER
LOGON_TIME DATE
LAST_CALL_ET NUMBER
PDML_ENABLED VARCHAR2(3)
FAILOVER_TYPE VARCHAR2(13)
FAILOVER_METHOD VARCHAR2(10)
FAILED_OVER VARCHAR2(3)
RESOURCE_CONSUMER_GROUP VARCHAR2(32)
PDML_STATUS VARCHAR2(8)
PDDL_STATUS VARCHAR2(8)
PQ_STATUS VARCHAR2(8)
CURRENT_QUEUE_DURATION NUMBER
CLIENT_IDENTIFIER VARCHAR2(64)
BLOCKING_SESSION_STATUS VARCHAR2(11)
BLOCKING_INSTANCE NUMBER
BLOCKING_SESSION NUMBER
SEQ# NUMBER
EVENT# NUMBER
EVENT VARCHAR2(64)
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAW RAW(4)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAW RAW(4)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAW RAW(4)
WAIT_CLASS_ID NUMBER
BLOCKING_SESSION NUMBER
SEQ# NUMBER
EVENT# NUMBER
EVENT VARCHAR2(64)
P1TEXT VARCHAR2(64)
P1 NUMBER
P1RAW RAW(4)
P2TEXT VARCHAR2(64)
P2 NUMBER
P2RAW RAW(4)
P3TEXT VARCHAR2(64)
P3 NUMBER
P3RAW RAW(4)
WAIT_CLASS_ID NUMBER
WAIT_CLASS# NUMBER
WAIT_CLASS VARCHAR2(64)
WAIT_TIME NUMBER
SECONDS_IN_WAIT NUMBER
STATE VARCHAR2(19)
SERVICE_NAME VARCHAR2(64)
SQL_TRACE VARCHAR2(8)
SQL_TRACE_WAITS VARCHAR2(5)
SQL_TRACE_BINDS VARCHAR2(5)
2.查看当前数据库下的所有会话;
--SELECT SADDR,SID,SERIAL#,USERNAME FROM V$SESSION;
SQL> select saddr,sid,serial#,username from v$session order by username des
WAIT_CLASS VARCHAR2(64)
WAIT_TIME NUMBER
SECONDS_IN_WAIT NUMBER
STATE VARCHAR2(19)
SERVICE_NAME VARCHAR2(64)
SQL_TRACE VARCHAR2(8)
SQL_TRACE_WAITS VARCHAR2(5)
SQL_TRACE_BINDS VARCHAR2(5)
2.查看当前数据库下的所有会话;
--SELECT SADDR,SID,SERIAL#,USERNAME FROM V$SESSION;
SQL> select saddr,sid,serial#,username from v$session order by username des
SADDR SID SERIAL# USERNAME
-------- ---------- ---------- ------------------------------
34321CBC 134 20
-------- ---------- ---------- ------------------------------
34321CBC 134 20
3434C0DC 170 1
3432424C 136 39226
3434AE14 169 1
3433493C 150 25
3433945C 154 1
3434050C 160 1
343417D4 161 1
34342A9C 162 1
34343D64 163 1
3434502C 164 1
3432424C 136 39226
3434AE14 169 1
3433493C 150 25
3433945C 154 1
3434050C 160 1
343417D4 161 1
34342A9C 162 1
34343D64 163 1
3434502C 164 1
SADDR SID SERIAL# USERNAME
-------- ---------- ---------- ------------------------------
343462F4 165 1
343475BC 166 1
34348884 167 1
-------- ---------- ---------- ------------------------------
343462F4 165 1
343475BC 166 1
34348884 167 1
34349B4C 168 1
34327AA4 139 50431 SYS
3433DF7C 158 2697 NX
34327AA4 139 50431 SYS
3433DF7C 158 2697 NX
已选择17行。
3.可以看到当前的连接用户有SYS和NX,用户可以选择杀死自己SYS(但是在lunux和winNT环境下是不允许杀死自己的,在unix环境中是可以的)还是NX.
这时我们真正目的就来了,我们就是要杀死NX,但是如何操作呢,告诉你这么来操作
ALTER SYSTEM KILL SESSION '158,2697';
执行完此语句之后,原来登录到系统中的oracle登录命令NX用户在进行相关操作时就会报出这样的错误.
select * from dual
*
第 1 行出现错误:
ORA-00028: 您的会话己被终止,
这时我们真正目的就来了,我们就是要杀死NX,但是如何操作呢,告诉你这么来操作
ALTER SYSTEM KILL SESSION '158,2697';
执行完此语句之后,原来登录到系统中的oracle登录命令NX用户在进行相关操作时就会报出这样的错误.
select * from dual
*
第 1 行出现错误:
ORA-00028: 您的会话己被终止,
在windows环境中如果用户尝试杀死自己会报错的.
SQL> alter system kill session '139,50431';
alter system kill session '139,50431'
*
第 1 行出现错误:
ORA-00027: 无法终止当前会话
alter system kill session '139,50431'
*
第 1 行出现错误:
ORA-00027: 无法终止当前会话
杀死Oracle数据库死锁进程的具体方法
工作中经常需要Kill多个进程,如果这些进程有共同的特点,就可以用一条命令Kill掉它们。 比如清除Oracle数据库的所有远程连接进程:
ps -efww|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令:
ps -efww|grep LOCAL=NO|grep -v grep|cut -c 9-15|xargs kill -9
管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。下面说说用管道符联接起来的几个命令:
“ps -efww”是Red Hat 7.0里查看所有进程的命令。这时检索出的进程将作为下一条命令“grep LOCAL=NO”的输入。
“grep LOCAL=NO”的输出结果是,所有含有关键字“LOCAL=NO”的进程,这是Oracle数据库中远程连接进程的共同特点。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“grep -v grep”是在列出的进程中去除含有关键字“grep”的进程。
“cut -c 9-15”是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
“xargs kill -9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -9”命令的参数,并执行该命令。“kill -9”会强行杀掉指
定进程,这样就成功清除了oracle的所有远程连接进程。其它类似的任务,只需要修改“grep LOCAL=NO”中的关键字部分就可以了。
杀死Oracle数据库死锁进程的具体方法
杀死 Oracle 死锁进程的具体步骤: 1.查哪个过程被锁 查V$DB_OBJECT_CACHE视图: SELECT * FROM V$DB_OBJECT_CACHE WHERE OWNER='过程的所属用户' AND CLOCKS!='0'; 2. 查是哪一个SID,通过SID可知道是哪个SESSION. 查V$ACCESS视图: SELECT * FROM V$ACCESS WHERE OWNER=
杀死"Oracle"死锁进程的具体步骤:
1.查哪个过程被锁
查V$DB_OBJECT_CACHE视图:
SELECT * FROM V$DB_OBJECT_CACHE
WHERE OWNER='过程的所属用户' AND CLOCKS!='0';
2. 查是哪一个SID,通过SID可知道是哪个SESSION.
查V$ACCESS视图:
SELECT * FROM V$ACCESS WHERE
OWNER='过程的所属用户' AND NAME='刚才查到的过程名';
3. 查出SID和SERIAL#
查V$SESSION视图:
SELECT SID,SERIAL#,PADDR FROM
V$SESSION WHERE SID='刚才查到的SID'
查V$PROCESS视图:
SELECT SPID FROM V$PROCESS
WHERE ADDR='刚才查到的PADDR';
4. 杀进程
(1).先杀Oracle进程:
ALTER SYSTEM KILL SESSION '查出的SID,查出的SERIAL#';
(2).再杀操作系统进程:
KILL -9 刚才查出的SPID
或
ORAKILL 刚才查出的SID 刚才查出的SPID。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论