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语句来查询那个会话没
有解除绑定,然后杀掉会话进程。

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#';

时间: 2025-01-25 12:23:36

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

win7蓝屏的原因分析及解决方法

蓝屏很多时候都是突然发生的,大多数是发生在你玩游戏的时候.很多时候是由于CPU一下子处理不过来,或者电脑脑脾气了.像中毒.中木马之类的蓝屏现在已经很好很好了,当然除非你的电脑是裸机,这才有可能. 1 如果是在玩游戏或者电脑弄很多东西的时候,蓝屏而且只有一.两次,当然你如果下次还开那么多东西,那么肯定是再次蓝屏了. 一般情况下都是由于CPU超频,或者内存不足,你可以买条大的内存装上去,基本上就没问题了.也有的时候是你电脑太热了导致CPU一直超频,然后蓝屏了. 2 有的时候也有可能是一些软件的不兼容

电脑中无法打开网页并提示堆栈溢出的原因分析及解决方法

  电脑中无法打开网页并提示堆栈溢出的原因分析及解决方法 1.函数调用层次过深,每调用一次,函数的参数.局部变量等信息就压一次栈; 2.局部静态变量体积太大. 解决方法: 1.按win+r打开运行,输入cmd,并按回车; 2.打开命令提示符后,分别输入并执行以下命令: regsvr32 atl.dll regsvr32 shdocvw.dll regsvr32 urlmon.dll regsvr32 browseui.dll regsvr32 oleaut32.dll regsvr32 shel

Win7蓝牙驱动安装失败的原因分析与解决方法

  蓝牙是一种支持设备短距离通信的无线电技术,现在不管是手机还是电脑都已经普遍的使用蓝牙功能了.如果Win7系统电脑没有安装蓝牙驱动的话,是需要安装后才能使用的.最近,有用户在安装蓝牙驱动的时候,发现安装失败.怎么办?出现这样的问题要怎么解决?现在就和大家说一下Win7蓝牙驱动安装失败的原因分析与解决方法. 步骤如下: 一.原因分析: 优化软件将系统INF文件夹自带文件误删了. 二.解决方法: 1.进入C盘系统分区的Windowsinf目录,查看是否有"bth.inf"文件,备注:如果

笔记本电脑电源灯不亮/一直闪烁的原因分析及解决方法

笔记本电脑电源灯不亮/一直闪烁的原因分析及解决方法          一.电源灯不亮 首先说说笔记本电源灯不亮,有两种情形: 对于笔记本外部电源(适配器)上的指示灯不亮,那么可能是适配器没有连接到插座,或者插座处没有电,也有可能是适配器坏了. 如果是笔记本上的电源指示灯不亮,那么则可能是: 1.检查外接适配器是否与笔记本正确连接,外接适配器是否工作正常; 2.如果只用电池为电源,检查电池型号是否为原配电池.电池是否充满电.电池安装的是否正确等; 3.排除前面两种情况后,则可能是笔记本主板电源模块

注册表被修改的原因分析和解决方法

注册表被修改的原因分析和解决方法: 其实,该恶意网页是含有有害代码的ActiveX网页文件,这些广告信息的出现是因为浏览者的注册表被恶意更改的结果. 1.IE默认连接首页被修改 IE浏览器上方的标题栏被改成"欢迎访问******网站"的样式,这是最常见的篡改手段,受害者众多. 受到更改的注册表项目为: HKEY_LOCAL_MACHINESOFTWAREMicrosoftInternet ExplorerMainStart Page HKEY_CURRENT_USERSoftwareM

装系统提示:invalid switch fmount原因分析和解决方法

我发现很多人在装系统的时候,遇到提示"invalid switch fmount",就没有办法解决了.在这边我会跟大家分析下出现这个问题的原因和解决方法. 1 装系统提示:invalid switch fmount原因 invalid switch fmount的意思是:你在操作时的命令无效.会产生这个问题的原因是 1:你下载的系统本身就存在问题 2:你电脑存在点问题,没办法进行格式化分区 3:你要装的是双系统,但是2个系统其中有一个不是ghost系统也会导致这样的问题. 2 刚刚遇到

U盘插到电脑上不显示图标的原因分析和解决方法

U盘现在已经是人手必备的工具了,但是好像也不能这样说了,因为现在手机很多时候就是一个移动U盘.但是很多时候U盘插到电脑上不管计算机还是右下角小图标都没显示U盘,这就让我们很郁闷了.下面小编跟你分享下解决这些问题的方法吧! 1 使用量产工具造成的没图标 解决方法:解决的方法是在安国的量产工具中就有一个卸载的小工具,点击"卸载". 2 看下是不是系统问题 在其他电脑看下U盘能不能使用,如果能使用那么就是系统问题了,基本上要靠重装才能解决了.这问题小编还没想到哪里出错. 3 U盘驱动有问题

接口-SSl加密webservice后访问延时特长,求原因,求解决方法

问题描述 SSl加密webservice后访问延时特长,求原因,求解决方法 刚学了使用SSL加密,试着给之前的项目WebService接口增加了SSL机制, 但测试后本机上时间代价很短只有几百ms, 一旦两台电脑上客户端访问服务端,时间代价大概会有10,000ms. 求解答,求原因.

Ajax向后台传json格式的数据出现415错误的原因分析及解决方法_AJAX相关

问题描述: ajax往后台传json格式数据报415错误,如下图所示 页面代码 function saveUser(){ var uuId = document.getElementById("uuid").value; var idCard = document.getElementById("idCard").value; alert(uuId+idCard); // var result = new Object(); // result.uuId = uuI