ORA-14450: attempt to access a transactional temp table alre

php中文网
发布: 2016-06-07 17:34:03
原创
1934人浏览过

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

开发人员告诉我在使用基于事物的临时表的时候报了下面错误:
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

猫眼课题宝
猫眼课题宝

5分钟定创新选题,3步生成高质量标书!

猫眼课题宝 262
查看详情 猫眼课题宝


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 归档日志过大导致无法存储的解决办法

linux

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号