杀死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)
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)
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
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)
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
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
SADDR          SID    SERIAL# USERNAME
-------- ---------- ---------- ------------------------------
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
SADDR          SID    SERIAL# USERNAME
-------- ---------- ---------- ------------------------------
343462F4        165          1
343475BC        166          1
34348884        167          1
34349B4C        168          1
34327AA4        139      50431 SYS
3433DF7C        158      2697 NX
已选择17行。
3.可以看到当前的连接用户有SYSNX,用户可以选择杀死自己SYS(但是在lunuxwinNT环境下是不允许杀死自己的,unix环境中是可以的)还是NX.
这时我们真正目的就来了,我们就是要杀死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: 无法终止当前会话
杀死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

  “xargs kill -9”中的xargs命令是用来把前面命令的输出结果(PID)作为“kill -9”命令的参数,并执行该命令。“kill -9”会强行杀掉指
定进程,这样就成功清除了oracle的所有远程连接进程。其它类似的任务,只需要修改“grep LOCAL=NO”中的关键字部分就可以了。
杀死Oracle数据库死锁进程的具体方法
杀死 Oracle 死锁进程的具体步骤: .查哪个过程被锁 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小时内删除。