当前位置:  数据库>oracle

ORA-14450: attempt to access a transactional temp table already in use

    来源: 互联网  发布时间:2017-05-29

    本文导语: 开发人员告诉我在使用基于事物的临时表的时候报了下面错误:ORA-14450: attempt to access a transactional temp table already in use 下面根据实验模拟了2种临时表使用不当报ORA-1445O的原因:1)基于事物的临时表SQL> create global temporary table temp_t...

开发人员告诉我在使用基于事物的临时表的时候报了下面错误:
ORA-14450: attempt to access a transactional temp table already in use

下面根据实验模拟了2种临时表使用不当报ORA-1445O的原因:
1)基于事物的临时表
SQL> create global temporary table temp_tab on commit delete rows as select 'a' as a1 from dual;


Table created.


SQL> select sid from v$mystat where rownum=1;


      SID
----------
      191


SQL> insert into temp_tab values ('b');


1 row created.


SQL>


在191回话不做commit,打开另外一个session 执行ddl(如果在同一会话可以成功执行ddl语句)

 


SQL> alter table temp_tab add b1 varchar2(10);
alter table temp_tab add b1 varchar2(10)
*
ERROR at line 1:
ORA-14450: attempt to access a transactional temp table already in use

 


SQL> select sid from v$mystat where rownum=1;


      SID
----------
      40


SQL>


返回session 191 执行自定义事物
SQL> declare
 2  pragma autonomous_transaction;
 3  begin
 4    insert into temp_tab values ('c');
 5    commit;
 6  end;
 7  /
declare
*
ERROR at line 1:
ORA-14450: attempt to access a transactional temp table already in use
ORA-06512: at line 4


2)基于session 的临时表
SQL> drop table temp_tab purge;


Table dropped.


SQL> create global temporary table temp_tab on commit preserve rows as select 'a' as a1 from dual;


Table created.


SQL> select sid from v$mystat where rownum=1;


      SID
----------
      191


SQL> insert into temp_tab values ('a');


1 row created.


SQL> alter table temp_tab add b1 varchar2(10);   
alter table temp_tab add b1 varchar2(10)
*
ERROR at line 1:
ORA-14450: attempt to access a transactional temp table already in use

 


SQL> select * from temp_tab;


A
-
a
a


SQL> commit;


Commit complete.


SQL> alter table temp_tab add b1 varchar2(10);
alter table temp_tab add b1 varchar2(10)
*
ERROR at line 1:
ORA-14450: attempt to access a transactional temp table already in use


上面实验可以看出基于session 的临时表在同一个session内运行一个事物,无论是提交还是未提交都不能做ddl操作

 


再运行一个事物,不提交到另外一个session做ddl报错同样错误
SQL> delete from  temp_tab;


2 rows deleted.

 

 


SQL> select sid from v$mystat where rownum=1;


      SID
----------
      40


SQL> alter table temp_tab add b1 varchar2(10);
alter table temp_tab add b1 varchar2(10)
*
ERROR at line 1:
ORA-14450: attempt to access a transactional temp table already in use


提交之后,在另外session测试发现还是无法ddl
SQL> commit;


Commit complete.


退出session,仅有一个会话做ddl


SQL> alter table temp_tab add b1 varchar2(10);


Table altered.


总结:
a, 基于transaction的临时表在同一个session里面不允许做自定义事物,并且若在一个session里面运行了一条事物未做提交,在另外一个session无法做ddl操作
b, 基于session的临时表若在某一个sesson里面运行了事物,任何session都不运行做ddl包括运行该事物的session

相关阅读:

Oracle ORA-01555 快照过旧 说明

ORA-01078 和 LRM-00109 报错解决方法

ORA-01555超长的Query Duration时间

ORA-00471 处理方法笔记

ORA-00314,redolog 损坏,或丢失处理方法

ORA-00257 归档日志过大导致无法存储的解决办法


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 出现ORA-01401和ORA-01008错误?
  • Eclipse连接Oracle数据库的ORA-00604 ORA-12705错误
  • oracle ORA-01114、ORA-27067错误解决方法
  • Oracle不能删除表 ORA-00604 ORA-01422 错误
  • 如何得到带有ora的行的下一行
  • ORA-12514及ORA-28547错误解决方案
  • 如何配置 linux 下 oracle 的 listener .ora 和
  • 浅析如何在tnsnames.ora中配置监听
  • Orcle的package中访问其它Schema的表报错ORA-00942解决方法
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • [Oracle] 浅析令人抓狂的ORA-01555问题
  • 解决报错ora-32035的方法分析
  • aq.executeQuery: ORA-00020: maximum number of processes (59) exceeded
  • Oracle 数据库闪回功能设置出现ORA-19809和ORA-19804错误
  • ORA-00947:Not enough values (没有足够的值)的深入分析
  • solaris10 安装 ora9.2.0.1 时报错
  • 在UNIX下,我的ORA817该怎么样才可以自己启动呀?
  • 基于ORA-12170 TNS 连接超时解决办法详解
  • plsql连接oracle数据库报ora 12154错误解决方法
  • 安装oracle出现error:ora-01031:insufficient privilleges的解决


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,