在对指定表做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:表示要杀死的进程属于的实例名
Session1创建测试表:
Table created.
SQL desc test;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(10)
SQL insert into test values(001,'tom');
①. row created.
查看test表信息
SQL update test set name='xue' where name='joy';
①. row updated.
SQL commit;
Commit complete.
SQL select * from test updata;
ID NAME
---------- --------------------
①. tom
SQL select * from test;
update模拟锁表
SQL update test set name='da' where name='tom';
注:不提交
查看哪个表被锁
SQL select b.owner,b.object_name,a.session_id,a.locked_mode from v$locked_object a,dba_objects b where b.object_id = a.object_id;
OWNER
------------------------------
OBJECT_NAME
--------------------------------------------------------------------------------
SESSION_ID LOCKED_MODE
---------- -----------
SYS
TEST
查看是哪个session引起的
SQL select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time;
USERNAME SID SERIAL# LOGON_TIM
------------------------------ ---------- ---------- ---------
杀掉对应进程
System altered.
no rows selected
session 1查询:
SQL select * from test;
select * from test
*
ERROR at line 1:
重新连接SQL
Connected to:
With the Partitioning, OLAP, Data Mining and Real Application Testing options