ORA-14452的出现原因解析及解决方法
在删除临时表时遇到了ORA-14452错误:ORA-14452: attempt to create , alert or drop an index on temporary table already in use。第一次碰到这种情况,问题解决过后,为了加深理解,特意参考网上资料,做了下面实验重现错误出现的场景,以及应该如何解决.
会话级临时表
由于实验需要两个或多个会话配合,所以使用SET SQLPROMPT来标识会话,如下所示,SESSION 1与SESSION 2:
Step 1:在会话1中创建了会话级的临时表TMP_TEST
SQL> SET SQLPROMPT "SESSION 1 >"
SESSION 1 >CREATE GLOBAL TEMPORARY TABLE TMP_TEST
2 ( NAME VARCHAR2(12) ) ON COMMIT PRESERVE ROWS; Table created. SESSION 1 >INSERT INTO TMP_TEST VALUES('Kerry'); 1 row created. SESSION 1 >COMMIT; Commit complete. SESSION 1 >SELECT * FROM TMP_TEST; NAME
------------
Kerry
Step 2:打开另外一个会话2,在这个会话里面操作临时表TMP_TEST,插入数据。
SQL> SET SQLPROMPT "SESSION 2 >"
SESSION 2 >SELECT * FROM TMP_TEST; no rows selected SESSION 2 >INSERT INTO TMP_TEST VALUES('Jimmy'); 1 row created. SESSION 2 >SELECT * FROM TMP_TEST; NAME
------------
Jimmy
Step 3: 在会话1中删除临时表时,就会出现ORA-14452错误。
SESSION 1 >TRUNCATE TABLE TMP_TEST; Table truncated. SESSION 1 >DROP TABLE TMP_TEST;
DROP TABLE TMP_TEST
*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
Step 4: 如果在会话2中先清空数据,然后去会话1中删除表则可顺利完成
SESSION 2 >TRUNCATE TABLE TMP_TEST; Table truncated. SESSION 1 >DROP TABLE TMP_TEST; Table dropped.
事务级临时表
Step 1: 在会话1中创建事务级全局临时表。
SESSION 1 >CREATE GLOBAL TEMPORARY TABLE TMP_TEST
2 ( NAME VARCHAR2(12) ) ON COMMIT DELETE ROWS; Table created. SESSION 1 >INSERT INTO TMP_TEST
2 VALUES('Kerry'); 1 row created. SESSION 1 >SELECT * FROM TMP_TEST; NAME
------------
Kerry SESSION 1 >COMMIT;
Step 2:在会话2中插入一条记录。
SESSION 2 >INSERT INTO TMP_TEST VALUES('Jimmy'); 1 row created. SESSION 2 >SELECT * FROM TMP_TEST; NAME
------------
Jimmy
Step 3: 在会话3中删除全局临时表时就会报错
SESSION 1 >SELECT * FROM TMP_TEST; no rows selected SESSION 1 >TRUNCATE TABLE TMP_TEST; Table truncated. SESSION 1 >DROP TABLE TMP_TEST;
DROP TABLE TMP_TEST
*
ERROR at line 1:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
Step 4: 在会话2中提交后,即可在会话1中删除全局临时表。
SESSION 2 >COMMIT;
Commit complete.
总结:不管事务级还是会话级的临时表,都需要所有会话解除绑定,才能DROP,解除绑定的办法就是清空每个会话的数据.清空数据的办法:事务级别的临时表:COMMIT/TRUNCATE TABLE;会话级的临时表:TRUNCATE TABLE ;但是很多时候,如果出现了这种错误,但是我们不知道是那个用户的那个会话没有解除绑定,那么此时要如何解决呢?你可以用下面SQL语句来查询那个会话没有解除绑定,然后杀掉会话进程。
SELECT SID, SERIAL# FROM V$SESSION V
WHERE SID IN (SELECT SID FROM V$LOCK L, DBA_OBJECTS O
WHERE L.ID1 = O.OBJECT_ID AND O.OBJECT_NAME =UPPER('TMP_TEST') ); ALTER SYSTEM KILL SESSION 'SID, SERIAL#';
或者你使用下面步骤一步一步的去定位那个会话没有解除绑定。
Step 1、先从DBA_OBJECTS/ALL_OBJECTS /USER_OBJECTS中查询到该表的OBJECT_ID:
SELECT OBJECT_ID FROM USER_OBJECTS WHERE OBJECT_NAME='TMP_TEST'
Step 2、根据查到的OBJECT_ID知道使用该表的SESSION:
SELECT * FROM V$LOCK WHERE ID1=&OBJECT_ID;
Step 3、在从v$session视图中查到该session的SID和SERIAL#:
SELECT * FROM V$SESSION WHERE SID=&SID;
Step 4、杀掉这些进程:
ALTER SYSTEM KILL SESSION 'SID, SERIAL#';
参考资料:
http://blog.itpub.net/70612/viewspace-1034301/
ORA-14452的出现原因解析及解决方法的更多相关文章
- Code:Blocks 中文乱码问题原因分析和解决方法
下面说说修改的地方. 1.修改源文件保存编码在:settings->Editor->gernal settings 看到右边的Encoding group Box了吗?如下图所示: Use ...
- 【FAQ】接入HMS Core推送服务,服务端下发消息常见错误码原因分析及解决方法
HMS Core推送服务支持开发者使用HTTPS协议接入Push服务端,可以从服务器发送下行消息给终端设备.这篇文章汇总了服务端下发消息最常见的6个错误码,并提供了原因分析和解决方法,有遇到类似问题的 ...
- 二层安全之MAC Flooding解析与解决方法
一.了解MAC Flooding原理 1.1 如图所示,网络中有3个PC和一个交换机,在正常情况下,如果PC A向PC B发送信息,PC C是不会知道的,过程都通过中间的交换机进行透明的处理,并且会记 ...
- MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法
MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DETER ...
- 出现“unrecognized selector sent to instance”问题原因之一及解决方法。
对于iPhone开发初学者来说,很想实现自己在iPhone上的第一个小程序,准备工作就绪侯就信心满满的开始了!一般来说大家可能都是从Hello World做起吧. 反正我是的,:),如果按照文 ...
- Hive数据倾斜的原因及主要解决方法
数据倾斜产生的原因 数据倾斜的原因很大部分是join倾斜和聚合倾斜两大类 Hive倾斜之group by聚合倾斜 原因: 分组的维度过少,每个维度的值过多,导致处理某值的reduce耗时很久: 对一些 ...
- 安卓移动端line-height垂直居中出现偏移的原因,及解决方法
目前在移动端安卓手机上使用line-height属性,让它的值等于height,结果发现是不居中的.出现了一定位置的偏移情况,如果略微只有两三个像素差距是看不出来的. 左图中的字号是12px,右图中的 ...
- Linux 动态库 undefined symbol 原因定位与解决方法
在使用动态库开发部署时,遇到最多的问题可能就是 undefined symbol 了,导致这个出现这个问题的原因有多种多样,快速找到原因,采用对应的方法解决是本文写作的目的. 可能的原因 依赖库未找到 ...
- 【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法
很多开发者在接入华为帐号服务时,经常会出现907135701的报错.根据官网文档说明,错误码907135701表示: 这个错误码在安卓和鸿蒙上都会出现,导致该报错的原因有很多,开发者可以按照下面几点进 ...
随机推荐
- 【原创】新手入门一篇就够:从零开发移动端IM
一.前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和沟通代价,对各种应用形态产生了深远影响. 做为IM开发者或即将成为IM开发者的技术人员 ...
- js正则表达式语法
1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...
- 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段
创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...
- [译] Paxos算法详解
1. 概述 Paxos算法被用来实现一个容错的分布式系统,一直以来以晦涩难懂著称.这可能是因为该算法最开始使用希腊文表述的.事实上,它是所有分布式算法中最简单易懂的.Paxos算法的本质其实就是一个共 ...
- html的留言板制作(js)
这次留言板运用到了最基础的localstorage的本地存储,展现的效果主要有: 1.编写留言2.留言前可以编辑自己的留言昵称.不足之处: 1.未能做出我喜欢的类似于网易的叠楼功能. 2.未能显示评论 ...
- Redis 学习笔记(C#)
Redis安装及简单操作 Windows下安装步骤: 1. 第一步当然是先下载咯~ 地址:https://github.com/dmajkic/redis/downloads (根据自己实际情况选择 ...
- 芒果TV招聘研发工程师(JAVA PYTHON),地点长沙
长沙芒果TV招聘高级 JAVA Python 工程师,工作地点:湖南广电 有兴趣的邮件0xmalloc@gmail.com; zealotyin@qq.com 公司有一大批从北京上海一线互联网企业 ...
- disabled="true" 的标签元素不可提交
把jsp页面的input 标签设置成不可编辑: <input name="Id" value="${order.Id}" readOnly=&qu ...
- Hibernate 小阶段总结
(一)Hibernate入门 通俗的话来说:Hibernate是用于面向对象操控数据库,对JDBC进行轻量级封装.(在java世界中传统的来说是JDBC访问数据库.) 1)Hibernate定性:对象 ...
- 浅入浅出dubbo
1. Dubbo是什么? 只是一个框架 Hibernate是持久层框架,SpringMVC是MVC的框架,而Dubbo是分布式服务框架. 是框架而不是服务 所以不是像Tomcat或Memcached可 ...