Oracle临时表undo生成解析

临时表的redo生成要比普通表少的多,但是undo的产生并不比普通表少。

通过一个简单的例子说明:

SQL> create global temporary table t_temp

2  (id number, name varchar2(30))

3  on commit preserve rows;

表已创建。

SQL> create table t_normal

2  (id number, name varchar2(30));

表已创建。

SQL> select sid

2  from v$mystat

3  where rownum = 1;

SID

----------

133

SQL> select value

2  from v$statname a, v$sesstat b

3  where a.statistic# = b.statistic#

4  and a.name = 'undo change vector size '

5  and b.sid = 133;

未选定行

SQL> select value

2  from v$statname a, v$sesstat b

3  where a.statistic# = b.statistic#

4  and a.name = 'undo change vector size'

5  and b.sid = 133;

VALUE

----------

3988

SQL> insert into t_normal

2  select rownum, object_name

3  from dba_objects;

已创建49081行。

SQL> commit;

提交完成。

SQL> select value

2  from v$statname a, v$sesstat b

3  where a.statistic# = b.statistic#

4  and a.name = 'undo change vector size'

5  and b.sid = 133;

VALUE

----------

135232

SQL> insert into t_temp

2  select rownum, object_name

3  from dba_objects;

已创建49081行。

SQL> commit;

提交完成。

SQL> select value

2  from v$statname a, v$sesstat b

3  where a.statistic# = b.statistic#

4  and a.name = 'undo change vector size'

5  and b.sid = 133;

VALUE

----------

254240

SQL> select 254240 - 135232 temp_table, 135232 - 3988 normal_table from dual;

TEMP_TABLE NORMAL_TABLE

---------- ------------

119008       131244

本栏目更多精彩内容:http://www.bianceng.cn/database/Oracle/

可以看到,临时表和普通表产生的undo数据没有太多的差别,而实际上临时表的插入产生的redo信息也是undo信息对应的redo。

SQL> insert /*+ append */ into t_temp

2  select *

3  from t_temp;

已创建49081行。

SQL> commit;

提交完成。

SQL> select value

2  from v$statname a, v$sesstat b

3  where a.statistic# = b.statistic#

4  and a.name = 'undo change vector size'

5  and b.sid = 133;

VALUE

----------

254408

SQL> insert /*+ append */ into t_normal

2  select *

3  from t_normal;

已创建49081行。

SQL> commit;

提交完成。

SQL> select value

2  from v$statname a, v$sesstat b

3  where a.statistic# = b.statistic#

4  and a.name = 'undo change vector size'

5  and b.sid = 133;

VALUE

----------

256468

SQL> select 254408 - 254240 temp_table, 256468 - 254408 normal_table from dual;

TEMP_TABLE NORMAL_TABLE

---------- ------------

168         2060

对于append方式插入,普通表和临时表都会产生少量的undo,而临时表相对会更少一些。

时间: 2024-12-31 01:00:44

Oracle临时表undo生成解析的相关文章

Oracle SQL的硬解析和软解析

我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.在Oracle中存在两种类型的SQL语句,一类为 DDL语句(数据定义语言),他们是从来不会共享使用的,也就是每次执行都需要进行硬解析.还有一类就是DML语句(数据操纵语言),他们会根据情况选择要么进行硬解析,要么进行软解析. DML:INSERT,UPDATE,DELETE,SELECT DDL:CREATE,DROP,ALTER 一.QL 解析过程 Oracle对此SQL将进行几个步骤的处理过程:

ORACLE临时表总结

临时表概念    临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对当前会话或事务可见.每个会话只能查看和修改自己的数据.   临时表语法       临时表分类   ORACLE临时表有两种类型:会话级的临时表和事务级的临时表. 1)ON COMMIT DELETE ROWS 它是临时表的默认参数,表示临时表中的数据仅在事物过程(Transaction)中有

对比Oracle临时表和SQL Server临时表的不同点_oracle

Oracle数据库创建临时表的过程以及和SQL Server临时表的不同点的对比的相关知识是本文我们主要要介绍的内容,接下来就让我们一起来了解一下这部分内容吧,希望能够对您有所帮助. 1.简介 Oracle数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据.当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空,但是临时表的结构以及元数据还存储在用户的数据字

记一次ORACLE的UNDO表空间爆满分析过程

  这篇文章是记录一次ORACLE数据库UNDO表空间爆满的分析过程,主要整理.梳理了同事分析的思路.具体过程如下所示: 早上收到一数据库服务器的UNDO表空间的告警邮件,最早一封是7:55发出的(监控作业是15分钟一次),从告警邮件分析,好像是UNDO表空间突然一下子被耗尽了.   DB Tablespace Allocated Free Used % Free % Used 192.168.xxx.xxx:1521 UNDOTBS1 16384 190.25 16193.75 1.16 99

ORACLE 临时表空间TEMP 满了怎么办?

oracle|临时表         最近遇到这样一个问题:前一段时间网页查询ORACLE表正常,可最近一直页面无法显示.打印出SQL放到PL/SQL Devoloper 执行,报"无法通过8(在表空间XXX中)扩展 temp 段",还有一个页面,可以查询出记录,但无法统计数据!       经过分析产生原因可能是:ORACLE临时段表空间不足,因为ORACLE总是尽量分配连续空间,一但没有足够的可分配空间或者分配不连续就会出现上述的现象.  解决方法:知道由于ORACLE将表空间作为

没有SQl2000或者Oracle 8i怎么生成XML?

oracle|sql|xml|生成xml     当然你可以自己把Recordset编码为XML,不过挺麻烦的,效率也不高.这里介绍一种新的方法:VB Code:Dim objConn As New ADODB.ConnectionDim objRS As New ADODB.RecordsetDim objStream As New ADODB.Stream objConn.Open "Provider=SQLOLEDB.1;Password=;Persist Security Info=Tr

Oracle 临时表空间使用注意

oracle|临时表 临时表空间使用注意:1.临时表空间 是用于在进行排序操作(如大型查询,创建索引和联合查询期间存储临时数据)每个用户都有一个临时表空间2.对于大型操作频繁,(大型查询,大型分类查询,大型统计分析等),应指定单独的临时表空间,以方便管理 3.分配用户单独临时表空间,一般是针对 大型产品数据库,OLTP数据库,数据库仓库对于小型产品不需要单独制定临时表空间,使用默认临时表空间

Oracle临时表 优化查询速度

oracle|临时表|速度|优化 1.前言    目前所有使用Oracle作为数据库支撑平台的应用,大部分数据量比较庞大的系统,即表的数据量一般情况下都是在百万级以上的数据量.当然在Oracle中创建分区是一种不错的选择,但是当你发现你的应用有多张表关联的时候,并且这些表大部分都是比较庞大,而你关联的时候发现其中的某一张或者某几张表关联之后得到的结果集非常小并且查询得到这个结果集的速度非常快,那么这个时候我考虑在Oracle中创建"临时表".    我对临时表的理解:在Oracle中创

Oracle临时表 使用补充

oracle|临时表 1.当指定临时表为on commit preserve rows得时候(会话级),在当前SESSION中像要将该表进行drop得时候,oracle提示:drop table student            * ERROR at line 1: ORA-14452: attempt to create, alter or drop an index on temporary table already in use   如果你要删除这样表,方法有两个:一是退出这个SES