利用v$enqueue_lock解决ORA-14450的错误

简介: 【背景】一个TEMP表的字段设置短了,开发要进行修改, alter table SALE_TEMP modify CODE VARCHAR2(2000); 就报了一个错误ORA-14450:试图访问已经在使用的事务处理临时表; ...
【背景】一个TEMP表的字段设置短了,开发要进行修改,  alter table SALE_TEMP modify CODE VARCHAR2(2000);
就报了一个错误ORA-14450:试图访问已经在使用的事务处理临时表;

 
【原因】当前的表正在被访问,所以修改不了;

【处理方法】其实也很简单,就是找到使用这个表的所有session,然后kill或者让他们退出,然后再执行alter语句;

点击(此处)折叠或打开

  1. 第一步查找对象的object id
  2. select * from dba_objects where object_name='SALE_TEMP'
  3. 第二步找到对象的相应session
  4. 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' )
  5.  
  6. 第三步进行kill的操作
  7. 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/

相关文章
|
SQL 关系型数据库 MySQL
Deadlock found when trying to get lock; try restarting transaction
Deadlock found when trying to get lock; try restarting transaction
334 1
|
NoSQL 关系型数据库 MySQL
如何查找到底是谁执行了FTWL导致Waiting for global read lock
在MySQL · 特性分析 · 到底是谁执行了FTWL中 文章中,分析了为何出现大量Waiting for global read lock的连接。但是实际操作起来很多gdb版本不支持pset操作,而且连接过多,导致不可能手动打印每一个THD的state,所以笔者写了一个gdb的脚本供大家使用: 首先,先保存下面脚本到/tmp/getlockconn MySQL8.
2696 0
|
Oracle 关系型数据库 数据库
PMON failed to acquire latch, see PMON dump
前几天,一台Oracle数据库(Oracle Database 10g Release 10.2.0.4.0 - 64bit Production)监控出现"PMON failed to acquire latch, see PMON dump"错误,连接数据库出现短暂异常,告警日志中具体错误如下所...
1145 0
|
关系型数据库 Oracle 数据库管理
|
SQL 关系型数据库 Oracle