一般先查询并找到被锁定的表,解锁代码如下:
--释放SESSION?SQL:?
--alter?system?kill?session?'sid,?serial#';?
在对指定表做append操作,其他再做truncate时候,会产生锁表,如下验证步骤,
①.、创建测试表,
select b.object_name, t.*
from v$locked_object t, user_objects b
where t.object_id = b.object_id
一些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:表示要杀死的进程属于的实例名
① 先通过top命令查看产用资源较多的spid号
select sid,serial#,machine,username,program,sql_hash_value,sql_id,
select sql_text
from v$sqltext_with_newlines
where hash_value = hash_value
order by piece;
也可直接使用:
select a.*,b.SQL_TEXT from (
) a,v$sql b
where a.sql_id? = b.SQL_ID(◆)
Alter system kill session 'SID,SERIAL#'
解锁:
①查询哪些对象被锁:
? 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;
? select spid, osuser, s.program
? from v$session s,v$process p
查询锁表: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#;
解锁:ALTER system KILL session 'sid,serial#';
查询锁住原因:SELECT b.sid oracleID,b.username 登录Oracle用户名,b.serial#,spid 操作系统ID,paddr,?
sql_text 正在执行的SQL,b.machine 计算机名 FROM v$process a, v$session b, v$sqlarea c?