ORA-14450: attempt to access a transactional temp table already in use
在ORACLE数据中修改会话级临时表时,有可能会遇到ORA-14550错误,那么为什么会话级全局临时表会报ORA-14450错误呢,如下所示,我们先从一个小小案例入手:
案例1:
- SQL> CREATE GLOBAL TEMPORARY TABLE TEMP_TEST
- 2 (
- 3 NAME VARCHAR2(12)
- 4 ) ON COMMIT PRESERVE ROWS;
- Table created.
- SQL> INSERT INTO TEMP_TEST VALUES('kerry');
- 1 row created.
- SQL> COMMIT;
- Commit complete.
- SQL> ALTER TABLE TEMP_TEST ADD SEX NUMBER(1) ;
- ALTER TABLE TEMP_TEST ADD SEX NUMBER(1)
- *
- ERROR at line 1:
- ORA-14450: attempt to access a transactional temp table already in use
如上所示,修改会话级临时表时遇到了ORA-14450错误,那么有哪些解决方法呢? 这时需要断开会话或执行TRUNCATE语句:
- SQL> TRUNCATE TABLE TEMP_TEST;
- Table truncated.
- SQL> ALTER TABLE TEMP_TEST ADD SEX NUMBER(1) ;
- Table altered.
- SQL>
如下所示,我们模拟一个会话在操作临时表TEMP_TEST, 另外一个会话准备修改它,如下所示(实际场景可能更复杂,可能涉及多个会话而不是仅仅两个会话)
会话1:
- SQL> SET SQLPROMPT "SQLSESSION 1 >"
- SQLSESSION 1 >CREATE GLOBAL TEMPORARY TABLE TEMP_TEST
- 2 (
- 3 NAME VARCHAR2(12)
- 4 ) ON COMMIT PRESERVE ROWS;
- Table created.
- SQLSESSION 1 >INSERT INTO TEMP_TEST VALUES('kerry');
- 1 row created.
- SQLSESSION 1 >COMMIT;
- Commit complete.
- SQLSESSION 1 >
会话2::
- SQL> SET SQLPROMPT "SESSION 2 >"
- SESSION 2 >ALTER TABLE TEMP_TEST ADD SEX NUMBER(1) ;
- ALTER TABLE TEMP_TEST ADD SEX NUMBER(1)
- *
- ERROR at line 1:
- ORA-14450: attempt to access a transactional temp table already in use
- SESSION 2 >
那么此时,会话1是其它用户登录的。比如应用程序等,你不可能要求所有会话都去执行TRUNCATE操作,这个时候该怎么处理呢?
此时你可以使用下面步骤解决这个问题。
Step 1、以sys或system登录数据库,先从DBA_OBJECTS中查询到该表的OBJECT_ID:
- SELECT OWNER, OBJECT_ID,OBJECT_TYPE
- FROM DBA_OBJECTS
- WHERE OBJECT_NAME=&OBJECT_NAME AND OBJECT_TYPE ='TABLE';
Step 2、根据查到的OBJECT_ID知道使用该表的SESSION:
- SELECT ADDR, KADDR, SID,LMODE FROM V$LOCK WHERE ID1=&OBJECT_ID;
Step 3、通过下面SQL找到对应的会话并生成KILL SESSION的执行语句
- SET COL kill_session FOR A80;
- select a.sid, a.serial#,a.status,
- a.paddr, 'alter system kill session '''
- || a.sid || ',' || a.serial#
- || ''' immediate;' AS kill_session
- FROM v$session a
- WHERE a.sid in (select sid from v$enqueue_lock t where t.type='TO')
- and a.sid=&sid;
Step 4、查看会话状态,并执行ALTER SYSTEM KILL SESSION语句杀掉这些进程:
具体操作步骤,如下截图所示:
原因: 查看ORA-14450的错误,你可以看到如下信息:
[oracle@oracle-server ~]$ oerr ora 14450
14450, 00000, "attempt to access a transactional temp table already in use"
// *Cause: An attempt was made to access a transactional temporary table that
// has been already populated by a concurrent transaction of the same
// session.
// *Action: do not attempt to access the temporary table until the
// concurrent transaction has committed or aborted.
ORA-14450: attempt to access a transactional temp table already in use的更多相关文章
- cannot access the system temp folder
cannot access the system temp folder. please, make sure your application have full control rights on ...
- Access to the temp directory is denied. Identity 'NT AUTHORITY\NETWORK SERVICE' under which XmlSerializer is running does not have sufficient permiss
造成错误的原因是用bat代码清理系统垃圾时造成的权限丢失而引起的 错误描述 1.An error occurred creating the configuration section handler ...
- Oracle temp table
Tow kinds of temp table data keep method. One is delete when commit Anothe one is preseve when commi ...
- temp table
在Oracle8i或以上版本中,可以创建以下两种临时表: 1.会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column spec ...
- [ DB ] [ SQL ] [ SQL Server ] MS SQL 建立暫存表格 temp table - 轉載
範例 SQL: IF OBJECT_ID(N'tempdb.dbo.#tmp_checkStatusCount', N'U') IS NOT NULL DROP TABLE #tmp_checkSta ...
- Deploying Customizations in Oracle E-Business Suite Release 12.2
DeployingCustomizations in Oracle E-Business Suite Release 12.2 This documentdescribes how to deploy ...
- ORACLE 博客文章目录(2015-05-27更新)
从接触ORACLE到深入学习,已有好几年了,虽然写的博客不多,质量也参差不齐,但是,它却是成长的历程的点点滴滴的一个见证,见证了我在这条路上的寻寻觅觅,朝圣的心路历程,现在将ORACLE方面的博客整理 ...
- Oracle 临时事务表 全局临时表_global temporary table
所有的操作都在一个事务里,事务提交后,此表清空,特别适合做插入删除频率特别高的临时表操作,比如插入完数据就开始查询,查询完就删掉等,用完就扔! 临时表分事务级临时表和会话级临时表. 事务级临时表只对当 ...
- ORA-14450
ORA-14450 attempt to access a transactional temp table already in use Cause: An attempt was made to ...
随机推荐
- 原生JS实现jquery的链式编程。
这是我根据之前遇到的一个面试题,题目:用原生JS实现$("#ct").on("click",fn).attr("id"). 然后看了篇jqu ...
- [linux]ssh(转载)
ssh登陆问题 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则su ...
- 如何将MyEclipse项目导入eclipse
我们经常会在网上下载一些开源项目,或者从别的地方迁移一些项目进来,但经常会发现导入后各种报错.这是初学java肯定会遇到的问题,本文对一些常见的处理方案做一个总结.(本文将MyEclipse项目导入e ...
- Nop中的Cache浅析
Nop中定义了ICacheManger接口,它有几个实现,其中MemoryCacheManager是内存缓存的一个实现. MemoryCacheManager: using System; using ...
- membership与成员资格
membership成员资格是ASP.NET 成员资格为您提供了一种验证和存储用户凭据的内置方法.因此,ASP.NET 成员资格可帮助您管理网站中的用户身份验证.它包含以下功能 创建新用户和密码. 将 ...
- C#无限极分类树-创建-排序-读取 用Asp.Net Core+EF实现之方法二:加入缓存机制
在上一篇文章中我用递归方法实现了管理菜单,在上一节我也提到要考虑用缓存,也算是学习一下.Net Core的缓存机制. 关于.Net Core的缓存,官方有三种实现: 1.In Memory Cachi ...
- 转载:《TypeScript 中文入门教程》 3、接口
版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 TypeScript的核心原则之一是对值所具有的shape进行类型检查. 它有时 ...
- php和js中json的编码和解码
php中 1)编码 $jsonStr = json_encode($array) 2)解码 $arr = json_decode($jsonStr) <?php echo json_encode ...
- Tomcat问题,不能正确访问http://localhost:8080/
最近在学Struts2框架部分的内容,但是eclipse中配置tomcat遇到了很大的问题,当辛辛苦苦的配置完了之后,竟让连小猫的首页都不能访问,http://localhost:8080/输入了之后 ...
- php实现设计模式之 访问者模式
<?php /** * 访问者模式 * 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. * 行为类模式 */ /** 抽象访问者:抽象类或 ...