临时表 DML 产生redo 问题说明
关于Oracle 临时表,参考我的Blog:
Oracle 临时表
http://blog.csdn.net/tianlesoftware/archive/2009/10/20/4705283.aspx
对Oracle 临时表的操作,会产生redo 和undo。
先看一个示例:
SYS@anqing1(rac1)> CREATE GLOBAL TEMPORARY TABLE dave_test (id number,name varchar2(20)) ON COMMIT DELETE ROWS;
Table created.
SYS@anqing1(rac1)> set autotrace on
SYS@anqing1(rac1)> insert into dave_test values(1,'dave');
1 row created.
Execution Plan
----------------------------------------------------------
-------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | 1 | 100 | 1 (0)| 00:00:01 |
-------------------------------------------------------------------------
Statistics
----------------------------------------------------------
2 recursive calls
8 db block gets
1 consistent gets
0 physical reads
284 redo size
662 bytes sent via SQL*Net to client
571 bytes received via SQL*Net from client
3 SQL*Net roundtrips to/from client
1 sorts (memory)
0 sorts (disk)
1 rows processed
SYS@anqing1(rac1)>
关于这些统计数据的分析,参考我的Blog:
Oracle Explain Plan
http://blog.csdn.net/tianlesoftware/archive/2010/08/20/5827245.aspx
在看下为什么对临时表操作会产生redo。
因为我们可以对临时表的操作进行回滚,即会产生undo数据; 但是所有undo都受到redo的保护,就是说假设此时数据库崩溃了,下次启动会利用redo把这些undo再次还原出来,然后利用这些undo进行反操作,撤销上次那个崩溃的事务。
这些undo里面可能有普通表的,也有临时表的, redo都会把它们恢复出来。
这个就是我们的一个数据库roll forward和 roll back的顺序问题, 在Crash recover 的时候必须先前滚,用redo 恢复出undo 之后,在用undo 回滚相关事务操作信息。简单点说REDO的作用就是记录所有的数据库更改,包括UNDO表空间在内。
Oracle 实例恢复时 前滚(roll forward) 后滚(roll back) 问题
http://blog.csdn.net/tianlesoftware/archive/2011/03/29/6286330.aspx
-------------------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
Email: dvd.dba@gmail.com
DBA1 群:62697716(满); DBA2 群:62697977(满) DBA3 群:62697850(满)
DBA 超级群:63306533(满); DBA4 群: 83829929 DBA5群: 142216823
DBA6 群:158654907 聊天 群:40132017 聊天2群:69087192
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请
临时表 DML 产生redo 问题说明相关推荐
- oracle 5632,Oracle系统默认临时表空间以及redo日志文件问题处理
本人现在要把Oracle的数据同步到MySQL,运用的ETL工具,由于数据量很大,而且有子查询要用到临时表空间,导致原来的该临时表空间 问题:本人现在要把Oracle的数据同步到MySQL,运用的ET ...
- Oracle——redo+undo总结
<Oracle------redo> 重做日志文件(redo log file)对数据库来说至关重要,他们是数据库的事务日志: Oracle数据库维护着两类重做日志文件:在线重做日志文件( ...
- redo和undo 详解
通常对undo有一个误解,认为undo用于数据库物理地恢复到执行语句或事务之前的样子,但实际上并非如此.数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可 ...
- oracle查询数据放入临时表,ORACLE Temporary Tables临时表更适合做插入和查询操作
1简介 ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables.这些临时表用来保存一个会话SESSION的数据,或者保存在一个事务中需要的数据.当会话退出或者用户提交 ...
- oracle简单序列,oracle序列生成器(sequence)使用的一点小注意
oracle序列生成器(sequence)使用的一点小注意 有人遇到这么一个问题,访问一个序列怎么出错了,错误如下: ORA-08002: 序列 SEQ_GX.CURRVAL 尚未在此会话中定义 这是 ...
- Oracle 9i与MS SQL Server 2000之比较连载五.zz
http://kb.cnblogs.com/a/1153156 Oracle 9i与MS SQL Server 2000之比较连载五 2008-04-14 18:13 四.Oracle中新的数据库对象 ...
- Oracle优化培训笔记-第一节
Oracle Architectural components 第0章:分析过程 资源,CPU,内存,磁盘 1. 讲解 dell亚太区数据库迁移的工作,跨版本,跨操作系统迁移,大数据量迁移 goteg ...
- oracle怎么使用触发器,Oracle触发器的使用
Oracle触发器的使用 触发器是指存放在数据库中,并被隐藏执行的存储过程.在Oracle8i之前,只允许基于表或视图的DML操作(insert,update,delete)建立触发器,在oracle ...
- 《收获,不止Oracle》表的设计之五朵金花
表设计主要强调什么场合该选择什么技术,没有最高级的技术,只有最适合的技术. 1.表的特性 普通堆表的不足之处 1.查看产生多少日志 [oracle@oracle-db-19c ~]$ sqlplus ...
最新文章
- shell脚本替换文件中字符
- SQL Cache Invalidation
- html的选择器使用
- Partition Array by Odd and Even
- redis 公网 安全_请务必注意 Redis 安全配置,否则将导致轻松被入侵
- 第一次用Axure~
- 如何向Mac Dictionary App添加其他语言
- 疯狂ios讲义疯狂连载之图像控件(UIImageView)
- WebStorm设置px转换rem,亲测有效!
- 有哪些产品适合做引流?什么样的产品才适合做引流款
- 零基础转行到软件测试如何拿到所谓的高薪?
- 分享一个网站,英文名称随机生成,随机生成英文名称
- 留学生论文essay写作字数不够怎么办?
- C语言自定义函数的声明
- react本地储存_如何在React项目中利用本地存储
- Tomcat基本使用以及项目部署。
- 苹果a12_苹果扛起性价比大旗,A12+512GB,大降5000元
- n用matlab怎么表示什么意思,matlab中n=[0:1:N-1];是什么意思
- 开漏极、开集电极输出
- MySQL数据库,如何批量的将字段的字符集由utf8改为utf8mb4