【背景】一个TEMP表的字段设置短了,开发要进行修改,
alter table SALE_TEMP modify CODE VARCHAR2(2000);
就报了一个错误ORA-14450:试图访问已经在使用的事务处理临时表;
【原因】当前的表正在被访问,所以修改不了;
【处理方法】其实也很简单,就是找到使用这个表的所有session,然后kill或者让他们退出,然后再执行alter语句;
点击(此处)折叠或打开
- 第一步查找对象的object id
- select * from dba_objects where object_name='SALE_TEMP'
- 第二步找到对象的相应session
- select 'alter system kill session '''||SID||','||SERIAL#||''';' from V$session where SID in ( select sid from v$enqueue_lock t where t.type='TO' and id1='12345' )
-
- 第三步进行kill的操作
- alter system kill session '''||SID||','||SERIAL#||';
操作完成后,直接进行alter的操作,避免表再次被占用;
v$enqueue_lock的视图信息查看
http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1147.htm#REFRN30121
ID1里面的定义请看
http://blog.itpub.net/519536/viewspace-693689/
v$enqueue_lock的视图信息查看
http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_1147.htm#REFRN30121
ID1里面的定义请看
http://blog.itpub.net/519536/viewspace-693689/