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

 1 SQL> SET SQLPROMPT "SESSION 1 >"
 2 SESSION 1 >CREATE GLOBAL TEMPORARY TABLE TMP_TEST
 3   2        (  NAME VARCHAR2(12) ) ON COMMIT PRESERVE ROWS;
 4
 5 Table created.
 6
 7 SESSION 1 >INSERT INTO TMP_TEST VALUES(‘Kerry‘);
 8
 9 1 row created.
10
11 SESSION 1 >COMMIT;
12
13 Commit complete.
14
15 SESSION 1 >SELECT * FROM TMP_TEST;
16
17 NAME
18 ------------
19 Kerry

Step 2:打开另外一个会话2,在这个会话里面操作临时表TMP_TEST,插入数据。

 1 SQL> SET SQLPROMPT "SESSION 2 >"
 2 SESSION 2 >SELECT * FROM TMP_TEST;
 3
 4 no rows selected
 5
 6 SESSION 2 >INSERT INTO TMP_TEST VALUES(‘Jimmy‘);
 7
 8 1 row created.
 9
10 SESSION 2 >SELECT * FROM TMP_TEST;
11
12 NAME
13 ------------
14 Jimmy

Step 3: 在会话1中删除临时表时,就会出现ORA-14452错误。

1 SESSION 1 >TRUNCATE TABLE TMP_TEST;
2
3 Table truncated.
4
5 SESSION 1 >DROP TABLE TMP_TEST;
6 DROP TABLE TMP_TEST
7            *
8 ERROR at line 1:
9 ORA-14452: attempt to create, alter or drop an index on temporary table already in use

Step 4: 如果在会话2中先清空数据,然后去会话1中删除表则可顺利完成

1 SESSION 2 >TRUNCATE TABLE TMP_TEST;
2
3 Table truncated.
4
5
6 SESSION 1 >DROP TABLE TMP_TEST;
7
8 Table dropped.

事务级临时表

Step 1:  在会话1中创建事务级全局临时表。

 1 SESSION 1 >CREATE GLOBAL TEMPORARY TABLE TMP_TEST
 2   2        (  NAME VARCHAR2(12) ) ON COMMIT DELETE ROWS;
 3
 4 Table created.
 5
 6 SESSION 1 >INSERT INTO TMP_TEST
 7   2  VALUES(‘Kerry‘);
 8
 9 1 row created.
10
11 SESSION 1 >SELECT * FROM TMP_TEST;
12
13 NAME
14 ------------
15 Kerry
16
17 SESSION 1 >COMMIT; 

Step 2:在会话2中插入一条记录。

1 SESSION 2 >INSERT INTO TMP_TEST VALUES(‘Jimmy‘);
2
3 1 row created.
4
5 SESSION 2 >SELECT * FROM TMP_TEST;
6
7 NAME
8 ------------
9 Jimmy

Step 3: 在会话3中删除全局临时表时就会报错

 1 SESSION 1 >SELECT * FROM TMP_TEST;
 2
 3 no rows selected
 4
 5 SESSION 1 >TRUNCATE TABLE TMP_TEST;
 6
 7 Table truncated.
 8
 9 SESSION 1 >DROP TABLE TMP_TEST;
10 DROP TABLE TMP_TEST
11            *
12 ERROR at line 1:
13 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语句来查询那个会话没有解除绑定,然后杀掉会话进程。

1 SELECT SID, SERIAL# FROM V$SESSION V
2   WHERE SID IN (SELECT SID FROM V$LOCK  L, DBA_OBJECTS O
3             WHERE L.ID1 = O.OBJECT_ID AND O.OBJECT_NAME =UPPER(‘TMP_TEST‘)   );
4
5 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#‘;

时间: 2024-10-13 12:59:12

ORA-14452的出现原因解析及解决方法(转)的相关文章

Windows变慢原因分析及解决方法

<p>Windows变慢原因分析及解决方法  <br/> <br/> <br/> <br/> 谁都希望计算机一开机就可以立即进入Windows 系统而不用等待,或者是系统在使用的时候不会越来越慢,但由于种种原因常常使这些愿望不能实现,甚至一开机就死机或者用着用着就越来越慢的情况也经常发生.其实有些时候Windows 启动速度缓慢并不是它本身的问题,而是一些设备或软件造成的.本文就是软件.硬件和病毒三大方面来分析系统速度变慢的原因,并且提供了针对系

json 解析乱码解决方法

1. 字符编码的的规律: 字符串的在存入txt文档文档有自身的编码方式,如utf-8,ansi等,但当 存入txt文档时,其编码方式就会和txt文档本身的编码方式保持一致. 比如字符之前的编码方式为ansi,txt文档的编码方式为utf-8,则存入的字符编码方式也会 变为utf-8编码方式.  当从txt文档读出该字符串时,其编码方式也应该是 utf-8. 2. 当前json解析乱码的解决方式 当前json数据的传输方式分为两种: 1). 通信放直接将自身拿到的字符串传输给另一端,在这个过程,无

网站内容不被百度收录的原因反思及解决方法!

大发迹创业项目网有个网站百度已经没有一个月收录,站长也是着急,于是想着应该怎么解决这个问题.其实网站出了问题,站长应该是最清楚的,所以不要急,仔细回想一下最近操作了什么,然后一个一个去排查就可以找出问题所在,对症下药就ok了. 比如我的这个网站,想要找出问题所在就很简单.回想一下网站也没有做什么优化,建成之后就是单纯的发布内容,网站主要是推荐一些小项目,围绕着项目写文章. 网站几乎是天天更新,终于没有灵感,不知道怎么写了,就开始犯愁了.某一天灵机一动,想着以项目推项目,利用其它的项目来推荐自己操

IIS7报500.23错误的原因分析及解决方法

这篇文章主要介绍了IIS7报500.23错误的原因分析及解决方法的相关资料,需要的朋友可以参考下背景:今天公司终端上有一个功能打开异常,报500错误,我用Fiddler找到链接,然后在IE里打开,报500.23错误:检测到在集成的托管管道模式下不适用的ASP.NET设置.后台是一个IIS7和tomcat7集成的环境,此处记录一下. HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置. 为什么会出现以上错误? 在

出现“unrecognized selector sent to instance”问题原因之一及解决方法。

? 对于iPhone开发初学者来说,很想实现自己在iPhone上的第一个小程序,准备工作就绪侯就信心满满的开始了!一般来说大家可能都是从Hello World做起吧. 反正我是的,:),如果按照文档上的说明去做,一般也不会出现什么问题.也建议初学者这样开始,毕竟会增强我们自己的信心. 但是当我们自己独立去做一个Button实现响应事件的小程序的时候,有时候确给我们出现了一点点小问题.也就是我题目所说的.下边我就列出出现此问题的 错误代码以及解决方式. code: [cpp] view plain

ORACLE EXP不能导出空表的原因分析及解决方法

一.不能导出空表的原因 1.Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出. 2.设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment. 在sqlplus中,执行如下命令: SQL>alter system set deferred_segment_creation=false; 查看: SQL>show parameter deferred_segment_creat

MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法

MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL,or READS SQL DATA in its declaration and binary logging is enabled(you *might* want to use the less safe log_bin_trust_function_creat

Hive数据倾斜的原因及主要解决方法

数据倾斜产生的原因 数据倾斜的原因很大部分是join倾斜和聚合倾斜两大类 Hive倾斜之group by聚合倾斜 原因: 分组的维度过少,每个维度的值过多,导致处理某值的reduce耗时很久: 对一些类型统计的时候某种类型的数据量特别多,其他的数据类型特别少.当按照类型进行group by的时候,会将相同的group by字段的reduce任务需要的数据拉取到同一个节点进行聚合,而当其中每一组的数据量过大时,会出现其他组的计算已经完成而这个reduce还没有计算完成,其他的节点一直等待这个节点的

Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法

catalog 0. 引言 1. Linux平台上涉及的File IO操作 2. Windows平台上涉及的File IO操作 0. 引言 本文试图讨论在windows.linux操作系统上基于C库进行文件IO操作时,可能遇到的错误,及其解决方法,主机安全攻防产品除了需要将安全攻防上的领域知识固化到程序实现上之外,还极度依赖关联系统本身.编程语言库的特性,原则上,并不是所有的安全需求都能100%地落实到程序设计中,这需要我们对操作系统.编程语言本身具有较深的理解 Relevant Link: h