会话临时表 ORA-14452
需要使用Oracle的临时表,向其中插入记录,用完后再删除。但是后来发现临时表的删除总是失败,返回错误:
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
这个错误是Oracle的临时表设计原理造成。在Oracle中,临时表是同session绑定在一起的,准确的说,是表中的数据及相关的事物是同 session绑定的,这个绑定是从session首次向表中插入数据开始的。不同的session可以向同一个临时表中插入记录,提交事务,但是即使在 提交事务之后,不同的session从同一个临时表中选出的数据也是不一样的——一个session只能选出自己插入的数据。
临时表在会话结束后会被truncate,当然,truncate也不会影响其它的会话。这个操作解除了临时表同当前会话之间的关系,只有这样,才能使用drop语句删除临时表。不过如果此时还有其它会话在使用这个临时表,那么drop操作自然也会失败。
上面所说的情况是针对使用 CREATE GLOBAL TEMPORARY TABLE XXXX (......) on commit preserve rows 语句创建的临时表。
--------------------------------------------------------------------------------------------------------------------------------
1、数据库中的所有会话均可以访问同一临时表,但只有插入数据到临时表中的会话才能看到它本身插入的数据。
2、可以把临时表指定为事务相关(默认)或者是会话相关:
3、如果临时表中有记录的话,是无法删除表的。即无法drop table。
4、虽然临时表不产生 "REDO" ,但却是要产生 "UNDO" 的
-----------------------------------------------------------------------------------------------------------------------------------------
1、删除会话特有的临时表
想快速删除此类临时表,必须先truncate表中的数据,然后drop表结构。如果使用DELETE命令先删除表中记录的话,还无法直接删除表。只有等当前会话退出后,在其它会话或新的会话中删除表结构。
使用DELTETE后DROP表报错:
SQL> DELETE tmp_test;
8 rows deleted
SQL> commit;
Commit complete
SQL> drop table tmp_test;
ORA-14452: attempt to create, alter or drop an index on temporary table already in use
这是因为用“ON COMMIT PRESERVE ROWS”子句时,会加行锁(ROW-X).
TYPE=TO
TO Lock "Temporary Table Object Enqueue"
具体请看DOC ID:186854.1
2、删除事务特有的临时表
用ON COMMIT DELETE ROWS 子句就不会有那么多限制。COMMIT以后,记录自动清除,可以直接就删除表。
临时表的表空间的分配
临时表在创建的时候,是不分配表空间的。当用户使用临时表存储数据时,从该用户默认的临时表空间来分配存储空间。
会话临时表 ORA-14452的更多相关文章
- Oracle 学习系列之二(会话与事务级临时表和dual表 )
一. 会话临时表 --创建会话临时表create global temporary table tmp_user_session(user_id int, user_name varchar2(20) ...
- 小记sql server临时表与表变量的区别
临时表与表变量都可以起到“临时”的作用,那么两者主要的区别是什么呢? 这里不讨论创建方式,以及全局临时表.会话临时表这些,主要记录一下个人对两者的主要区别以及适用情况的看法,有什么不对或补充的地方,欢 ...
- Oracle临时表GLOBAL TEMPORARY TABLE
临时表:像普通表一样,有结构,但是对数据的管理上不一样,临时表存储事务或会话的中间结果集,临时表中保存的数据只对当前 会话可见,所有会话都看不到其他会话的数据,即使其他会话提交了,也看不到.临时表不存 ...
- sql server 表变量、表类型、临时表
sql server 中临时表分为会话临时表和永久临时表.会话临时表在会话结束后自动被删除,永久临时表与基本表的使用上基本无差异,需要显示调用drop将其删除. 创建临时表 创建会话临时表 creat ...
- Oracle临时表和SQL Server临时表的不同点对比
文章来源:http://www.codesky.net/article/201109/141401.html 1.简介 Oracle数据库除了可以保存永久表外,还可以建立临时表temporary ta ...
- SqlServer——临时表
1.表的类型: SqlServer数据库中分为两个表:永久表.临时表:通过表名的前缀区分. 永久表:与物理文件.C# 中的静态类 类似,任何用户均可对其执行操作并且相互影响: 临时表:简单的说就是使用 ...
- Oracle两种临时表的创建与使用详解
ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据.当会话退出或者用户提交comm ...
- SQL基本操作——select into与临时表
SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中,常用于创建表的备份复件或者用于对记录进行存档. --制作 "Persons" 表的备份复件: SELECT ...
- Temporary Tables临时表
1简介 ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据, 或者保存在一个事务中需要的数据.当会话退出或者用户提 ...
随机推荐
- <轻量算法>根据核密度估计检测波峰算法 ---基于有限状态自动机和递归实现
原创博客,转载请联系博主! 希望我思考问题的思路,也可以给大家一些启发或者反思! 问题背景: 现在我们的手上有一组没有明确规律,但是分布有明显聚簇现象的样本点,如下图所示: 图中数据集是显然是个3维的 ...
- Serblet 过滤器(Filter)
Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 过滤器的作用: 1.身份验证过滤器 2.日志记录和审核过滤器 3.触发资源访问事件过滤器. 等等等... Ser ...
- 2013面试C++小结
2013年我在厦门c++求职小结 1.一般公司出的面试题目中的找错误,都是出自平常公司内部使用过程中出现的真实错误. 比如stl 中erase的使用:详细请见 :http://blog.csdn.ne ...
- Eclipse_插件_01_tomcat插件的安装
1.Eclipse的tomcat插件下载地址: (1)https://sourceforge.net/projects/tomcatplugin/files/updatesite/plugins/ ( ...
- Activity间数据传输
当对Android有一些了解后,不难发现,Android程序UI框架接近于Web页面的概念.每一个用于呈现页面的组件,Activity,都是彼此独立的,它们通过系统核心来调度整合,彼此之间的通过Int ...
- 【二叉查找树】04根据升序数组构造二叉查找树【Convert Sorted Array to Binary Search Tree】
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 给定一个升序的数组,把他转换成一个 ...
- Hexo 版本
Mac hexo s 启动Hexo服务报错如下: Error: The module '/usr/local/lib/node_modules/hexo-cli/node_modules/.0.8.0 ...
- Cot
题目大意 两种操作 给坐标上一个直角三角形中每个整点权值$+1$ 求坐标上一个直角三角形中每个整点权值之和 题解 一顿分析思考加推导之后,发现并不存在这样的数据结构(大概是有,只是我不知道),于是考虑 ...
- 9th
2017-2018-2 20179212<网络攻防实践>第9周作业 视频学习 KaliSecurity压力测试工具 压力测试通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能够提供的 ...
- diea破解
选择菜单Help->Register->License server,填上http://idea.iteblog.com/key.php,如图所示: 点击Activate,然后就搞定了.