在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的更多相关文章

  1. cannot access the system temp folder

    cannot access the system temp folder. please, make sure your application have full control rights on ...

  2. 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 ...

  3. Oracle temp table

    Tow kinds of temp table data keep method. One is delete when commit Anothe one is preseve when commi ...

  4. temp table

    在Oracle8i或以上版本中,可以创建以下两种临时表: 1.会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column spec ...

  5. [ 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 ...

  6. Deploying Customizations in Oracle E-Business Suite Release 12.2

    DeployingCustomizations in Oracle E-Business Suite Release 12.2 This documentdescribes how to deploy ...

  7. ORACLE 博客文章目录(2015-05-27更新)

    从接触ORACLE到深入学习,已有好几年了,虽然写的博客不多,质量也参差不齐,但是,它却是成长的历程的点点滴滴的一个见证,见证了我在这条路上的寻寻觅觅,朝圣的心路历程,现在将ORACLE方面的博客整理 ...

  8. Oracle 临时事务表 全局临时表_global temporary table

    所有的操作都在一个事务里,事务提交后,此表清空,特别适合做插入删除频率特别高的临时表操作,比如插入完数据就开始查询,查询完就删掉等,用完就扔! 临时表分事务级临时表和会话级临时表. 事务级临时表只对当 ...

  9. ORA-14450

    ORA-14450 attempt to access a transactional temp table already in use Cause: An attempt was made to ...

随机推荐

  1. Android ViewPager切换之PageTransformer接口中transformPage方法解析

    今天让我们了解一下,Android3.0之后ViewPager切换时候的一个动画.Google给我们展示了两个动画例子:DepthPageTransformer和ZoomOutPageTransfor ...

  2. 真正解决问题:maven eclipse tomcat java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener--转

    原文地址:http://www.cnblogs.com/amosli/p/4067665.html 在使用eclipse进行整合springmvc时经常会碰到这样的异常: java.lang.Clas ...

  3. [ES] 基础概念

    Elasticsearch是基于Luence实现的一款搜索引擎,支持分布式和集群,并且搜索近实时,主要用于搜索和数据分析 索引 index 可以理解为数据库中的database,存储的是实际数据,因为 ...

  4. 【Java心得总结四】Java泛型下——万恶的擦除

    一.万恶的擦除 我在自己总结的[Java心得总结三]Java泛型上——初识泛型这篇博文中提到了Java中对泛型擦除的问题,考虑下面代码: import java.util.*; public clas ...

  5. 解决CHROME中画布中无法显示图片的方法

    最终效果图如下 我按照W3SCHOOL里面的方法,代码如下 <!DOCTYPE html> <html> <body> <script type=" ...

  6. SQL SERVER 通用分页存储过程,两种用法任你选

    写在前面 从SQLSERVER 2005开始,提供了Row_Number()函数,利用函数生成的Index来处理分页,按照正常的逻辑思维都是传pageIndex和pageSize来完成分页,昨天前端和 ...

  7. 【Android】[转] Android Codec默认profile使用的是Baseline

    关于Android默认Codec使用的Profile找了半天没发现,还是Google的时候发现了开源中国有网友写的这边博客,相关的内容很少,便贴了过来做个笔记. 以下内容转自Android Media ...

  8. Spring加载xsd引起的问题小记

    前言 最近要把之前写好的监控系统加上报警功能,就是通过rpc调用发短信发邮件的服务发送报警信息.发短信发邮件的功能是通过dubbo管理提供的.自然使用这些服务就难免用到spring.而我这又是一个st ...

  9. Rafy 领域实体框架 - 领域模型设计器(建模工具)设计方案

    去年4月,我们为 Rafy 框架添加了领域模型设计器组件.时隔一年,谨以本文,简要说明该领域模型设计器的设计思想. 设计目标 Rafy 实体框架中以领域驱动设计作为指导思想.所以在开发时,以领域建模为 ...

  10. C#播放wav文件

    C#使用HWQPlayer类播放wav文件 类的代码: using System.IO; using System.Runtime.InteropServices; namespace HoverTr ...