一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不掉的,在OS一级再杀.
①下面的语句用来查询哪些对象被锁:
select object_name,machine,s.sid,s.serial#
from v$locked_object l,dba_objects o ,v$session s
where l.object_id = o.object_id and l.session_id=s.sid;
【注】以上两步,可以通过Oracle的管理控制台来执行.
select spid, osuser, s.program
from v$session s,v$process p
①.)在unix上,用root身份执行命令:
orakill sid thread
其中:
sid:表示要杀死的进程属于的实例名
①.、查看环境变量ORACLE_SID的设置情况:
windows:
echo
%ORACLE_SID%
linux:
$ORACLE_SID
设置环境变量ORACLE_SID的值为你想登录的oracle实例的SID:
set
ORACLE_SID=orcl
键入命令:sqlplus
/
as
sysdba
就可以以sysdba的身份登录到oracle了!
linux系统下,如果找不到sqlplus命令的话,请切换到oracle用户.
在sqlplus窗口执行命令:
alter
user
you_username
identified
by
you_password;
就可以修改你的用户的密码了~
如果此时用户被锁定,没关系:
既然是被锁住了,那就通过解锁system用户.
SQL
system
account
unlock;
User
altered.
select
username,account_status
from
dba_users
where
username='SYSTEM';
USERNAME
ACCOUNT_STATUS
----------
--------------------------------
SYSTEM
OPEN
第一段:问题
使用system账号登录oracle,系统提示
如何解除Oracle wbr帐号锁定(the wbraccount wbris wbrlocked)
第二段:解决办法
①.、使用oracle用户登录系统
Connected.
第三段:锁定账号方法
①.、SQL alter user system account lock;
User altered.
第四段:修改帐号口令
①.、SQL ALTER USER system IDENTIFIED BY sysPasswd;
①.、生成Kill Session语句
select?'alter?system?kill?session?'''?||?SID?||','?||?SERIAL#?||?''';'?from
(
select?distinct?a.sid,?a.Serial#,?status,?machine,?LOCKWAIT,?logon_time
from?v$session?a,?v$locked_object?b
where?(a.status?=?'ACTIVE'?or?a.status?=?'INACTIVE')
and?a.sid?=?b.session_id
and?b.ORACLE_USERNAME='XYHISTEST'--加上用户名是避免把其他系统的会话也关闭,以免伤及无辜
)
alter?system?kill?session?'sid,serial#';
SELECT?l.session_id?sid,?s.serial#,?l.locked_mode,l.oracle_username,
l.os_user_name,s.machine,?s.terminal,?o.object_name,?s.logon_time
FROM?v$locked_object?l,?all_objects?o,?v$session?s
WHERE?l.object_id?=?o.object_id
AND?l.session_id?=?s.sid
ORDER?BY?sid,?s.serial#?;
/*或者
select?s.SID,?s.OSUSER,?p.spid?as?OSPID,?s.MACHINE,?s.TERMINAL,?s.PROGRAM
from?v$session?s,?v$process?p
and?s.paddr?=?p.addr;
*/
select?b.sql_text
from?v$session?a,?v$sql?b
and?a.SQL_ADDRESS?=?b.ADDRESS(+);
/*--或者
SELECT?l.session_id?sid,?s.serial#,?l.locked_mode,?l.oracle_username,?s.user#,
l.os_user_name,s.machine,?s.terminal,a.sql_text,?a.action
FROM?v$sqlarea?a,v$session?s,?v$locked_object?l
WHERE?l.session_id?=?s.sid
AND?s.prev_sql_addr?=?a.address
ORDER?BY?sid,?s.serial#;