Oracle无法删除当前连接用户,以及killed的处理
来源:互联网 发布:上海行知小学对口中学 编辑:程序博客网 时间:2024/05/21 03:55
v$process视图包含当前系统oracle运行的所有进程信息
每一个连接到数据库实例中的session都拥有一条记录。包括用户session及后台进程如DBWR,LGWR,arcchiver等等。
V$SESSION中的常用列
V$SESSION是基础信息视图,用于找寻用户SID或SADDR。
(1)查看用户的连接状况
select username,sid,serial# from v$session
或者
select saddr,sid,serial#,paddr,username,status from v$session where username is not null
----------------------------------------
如下结果:
username sid serial#
----------------------------------------
NETBNEW 513 22974
NETBNEW 514 18183
NETBNEW 516 21573
NETBNEW 531 9
WUZHQ 532 4562
(2)找到要删除用户的sid,和serial,并删除
------------------------------------------
如:你要删除用户'WUZHQ',可以这样做:
alter system kill session'532,4562'
(3)删除用户
--------------------------------------------
drop user username cascade
Kiled的处理:
方法1:
首先通过下面sql查找在v$process中存在而不在v$session中存在的进程:
select p.addr from v$process p where pid <> 1
minus
select s.paddr from v$session s;
查询显示结果如下:
ADDR
----------------
C0000005C32975D8
C0000005C3297AE0
C0000005C3297FE8
确认这些进程是否为重要的后台进程:
select spid, username, terminal, program, background from v$process where addr in ('C0000005C32975D8', 'C0000005C3297AE0', 'C0000005C3297FE8');
查询结果:
SPID USERNAME TERMINAL PROGRAM BACKGROUND
------------ -------- ------------------------------ ----------------------------------- ---------------------
6857 oracle UNKNOWN oracle@mgdev (S000)
6859 oracle UNKNOWN oracle@mgdev (D000)
9370 oracle UNKNOWN oracle@mgdev (TNS V1-V3)
可以看到都不是重要的后台进程,前两个是和共享服务器相关的进程,第3个就是要找的进程了,它正好也是通过TNS连上的,执行:
kill -9 9370,然后查询:对手
select sid, username, program, machine, status from v$session where status='KILLED';
方法2:
--下面这个sql语句,可以列出来各个脚本,需要录入sid,这个sid可以从pl/sql developer的session中查到。
SELECT 'alter system kill session ''' || ta.sid || ',' || ta.serial# || ''';',
'alter system disconnect session ''' || ta.sid || ',' || ta.serial# || ''' immediate;',
'host orakill ' || tc.instance_name || ' ' || tb.spid,
'kill -9 ' || tb.spid,
tb.spid,
ta.osuser,
tb.program,
ta.terminal,
ta.program
FROM v$session ta, v$process tb, v$instance tc
WHERE tb.addr = ta.paddr
AND ta.sid = &yoursid;
-- 也可以用这个Metalink提供的脚本,其中的os thread就是在orakill 时写的spid
select p.spid "OS Thread", b.name "Name-User", s.osuser, s.program
from v$process p, v$session s, v$bgprocess b
where p.addr = s.paddr
and p.addr = b.paddr UNION ALL
select p.spid "OS Thread", s.username "Name-User", s.osuser, s.program
from v$process p, v$session s
where p.addr = s.paddr
and s.username is not null;
然后执行c:/>orakill oracle_sid os_thread,就可以杀掉killed的进程了。注意要避免杀系统进程,避免数据库宕机。
- Oracle无法删除当前连接用户,以及killed的处理
- "无法删除当前已连接的用户"处理办法
- 无法删除当前已连接的用户处理办法
- oracle无法删除当前已连接用户
- ORACLE无法删除当前连接用户
- Oracle 无法删除当前已连接的用户
- oracle中“无法删除当前已连接的用户”
- ORACLE-01940 无法删除当前已连接的用户
- oracle无法删除当前已连接的用户
- Oracle 无法删除当前已连接的用户
- Oracle中 无法删除当前已经连接的用户 解决方法
- Oracle 无法删除当前已连接的用户
- oracle中用户删除不了,提示“无法删除当前已连接的用户”
- oracle中用户删除不了,提示“无法删除当前已连接的用户”
- oracle中用户删除不了,提示“无法删除当前已连接的用户”
- oracle 删除用户,提示“无法删除当前已连接的用户”
- oracle删除不了用户,提示“无法删除当前已连接的用户”
- oracle删除用户时,提示“无法删除当前已连接的用户”
- ROS Navigation-----发布传感器数据
- thinkphp四种url访问方式详解
- java-字符串中的字符进行排序
- 虚函数、纯虚函数、虚函数与析构函数
- C++动态库中调用sqlcipherbd.dll
- Oracle无法删除当前连接用户,以及killed的处理
- Activity启动过程
- 为什么要将一个父类的析构函数写成一个虚函数,和内存泄漏有关,怎么理解?
- 《Java150道面试题全集》
- 循环再体验
- 开启ESXi Shell或SSH后ESXi出现警告的解决方法
- c和c++的区别
- Javascript基础知识
- Spring-boot JDBC with multiple DataSources sample