oracle 12c undo,Oracle 12C新特性-临时UNDO段(Temporary Undo Segments) | 信春哥,系统稳,闭眼上线不回滚!...
在12C版本,为了减少UNDO表空间的使用率及减少REDO和归档日志的产生量,ORACLE推出了临时UNDO段(Temporary Undo Segments)新特性。这个新特性把临时表产生的UNDO信息从UNDO表空间挪到了临时表空间,这样就减少了UNDO表空间的使用。临时表的DML操作不会产生REDO日志,但是UNDO表空间的数据会写入REDO日志中,这样将临时表产生的UNDO数据从UNDO表空间挪到临时表空间,就不会把临时表产生的UNDO信息写入REDO日志中,这样就减少了REDO日志的产生量,也就减少了归档日志的生成量。
ORACLE通过temp_undo_enabled参数来控制临时UNDO段新特性的启用,默认是FALSE关闭状态。
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ----------
temp_undo_enabled boolean FALSE
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
下面测试一下在启用和禁用临时UNDO段特性时,产生的REDO信息对比,先创建测试表。
SQL> create global temporary table t_test_temp as select * from T_TEST where 1=2;
Table created.
重新打开一个会话,查询当前产生的REDO信息。
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 4
redo size 1324
在默认情况下也就是禁用临时UNDO段特性的情况下,向一张临时表插入数据。
SQL> insert into t_test_temp select * from t_test;
6136934 rows created.
再次查看这个会话的REDO产生量。
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 60964
redo size 21357176
可见,在禁用临时UNDO段特性的情况下,向临时表中插入数据会产生很多的REDO数据,这是因为临时表产生的UNDO数据当前保存在UNDO表空间中,而UNDO表空间的数据也会写入到REDO日志。
下面在开一个新会话,并且启用临时UNDO段特性。
SQL> alter session set temp_undo_enabled=true;
Session altered.
查看这个会话的当前REDO产生量。
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 2
redo size 744
然后向临时表中插入同样的数据。
SQL> insert into t_test_temp select * from t_test;
6136934 rows created.
再次查看这个会话的REDO产生量。
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 3
redo size 1024
可见,在启用临时UNDO段的情况下,对临时表进行插入操作,REDO的产生非常少,这些应该都是数据字典变更产生的REDO。
大家应该知道,COMMIT和ROLLBACK操作是一个事务的终止,COMMIT操作只是打个标记,并不会修改数据,而ROLLBACK操作,是要根据UNDO数据去还原数据的,也就是ROLLBACK操作会修改数据,那么就意味着ROLLBACK操作是会产生REDO和UNDO的,如果是临时表的ROLLBACK操作,因为临时表本身不产生REDO,但是会产生UNDO。
下面分别对上面测试的两个会话进行ROLLBACK操作,再看一下REDO的产生量。
禁用临时UNDO段的情况下回滚后REDO产生量:
SQL> rollback;
Rollback complete.
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 121794
redo size 27432588
回滚禁用临时UNDO段的情况下的INSERT操作产生的REDO,基本上等于插入时的REDO产生量。
在看一下启用临时UNDO段的情况下回滚后REDO产生量:
SQL> rollback;
Rollback complete.
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 4
redo size 1156
回滚启用临时UNDO段的情况下的INSERT操作产生的REDO,基本上不产生REDO。这是因为临时表的DML操作本身就不生成REDO,而临时表的UNDO数据被保存到的临时表空间,临时表空间的数据也不会写入REDO文件。
本实验只是模拟了INSERT操作,有较真的朋友可以测试下DELETE和UPDATE操作。
最后再吐一下槽,貌似这个功能启用之后,在这个会话中并不能关闭,我的测试数据库版本是12.2.0.1.0版本,下面是测试过程。
[oracle@hm-oradb-01 ~]$ sqlplus dbdream/dbdream@localhost/pdb1
SQL*Plus: Release 12.2.0.1.0 Production on Thu Aug 30 12:27:34 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Last Successful login time: Thu Aug 30 2018 10:46:41 +08:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> alter session set temp_undo_enabled=true;
Session altered.
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 2
redo size 744
SQL> insert into t_test_temp select * from t_test;
6136934 rows created.
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 3
redo size 1024
SQL> insert into t_test_temp select * from t_test;
6136934 rows created.
SQL> select name, value from v$mystat natural join v$statname where name in ('redo entries','redo size');
NAME VALUE
---------------------------------------------------------------- ----------
redo entries 5
redo size 1436
在启用临时UNDO段的会话中,禁用临时UNDO段之后,这个禁用操作明显没有生效。
oracle 12c undo,Oracle 12C新特性-临时UNDO段(Temporary Undo Segments) | 信春哥,系统稳,闭眼上线不回滚!...相关推荐
- oracle12c 新增维护时间窗口,ORACLE 12C新特性-自动维护全局索引 | 信春哥,系统稳,闭眼上线不回滚!...
今天在网上看了一篇关于12C新特性-自动维护全局索引的帖子,经测试,貌似根本不是那么回事呀.如果对分区表进行分区DDL操作,如果不加update index字句,全局索引就会失效,下面先看一下是11. ...
- oracle+12c+大表,ORACLE 12C新特性-在线迁移表或分区 | 信春哥,系统稳,闭眼上线不回滚!...
今天测试一下ORACLE 12C的一个新功能-在线移动表或分区,这其实在10g版本就已经支持了,难道是官方文档写错了,先不按照文档描述的去测试,看看是否堆表也可以在线迁移.以下是实验过程: 下面先看下 ...
- oracle desc能看约束,ORACLE 12C新特性-DESC显示不可见字段 | 信春哥,系统稳,闭眼上线不回滚!...
之前写过一篇关于12C新特性-不可见字段的文章,详见http://www.dbdream.com.cn/2014/01/19/oracle-12c%E6%96%B0%E7%89%B9%E6%80%A7 ...
- oracle 回滚 drop的表,使用ODU恢复被DROP的表 | 信春哥,系统稳,闭眼上线不回滚!...
本实验模拟使用ODU恢复被DROP掉的表的恢复,有关ODU软件的下载和使用说明详见老熊的BLOG http://www.laoxiong.net 本实验以上一篇文章<使用ODU恢复被TRUNCA ...
- oracle数据泵导入提示00972,oracle数据库使用expdp指定FLASHBACK_TIME遇到ORA-39150错误 | 信春哥,系统稳,闭眼上线不回滚!...
目前正在做一个数据库合并的项目,有一套系统使用分库分表并且读写分离的架构,订单系统和用户系统都是6个写库和6个读库,目前订单系统已经由6个写库合并为3个写库,马上要做用户系统的数据库合并工作,用户系统 ...
- oracle服务未启动失败,windows服务未启动导致 ORA-12560和RMAN-00554错误 | 信春哥,系统稳,闭眼上线不回滚!...
今天,有人在群里问RMAN-00554.RMAN-04005.ORA-12560错误,如下: C:Usersstream>rman target / 恢复管理器: Release 11.2.0. ...
- linux oracle目录权限不够,Linux 目录权限不足导致ORA-39070错误 | 信春哥,系统稳,闭眼上线不回滚!...
同事要做数据迁移测试,需要服务器权限,就在操作系统上给他创建了一个用户wzs,给分了dba组,拥有dba组的用户就可以正常操作数据库,而且可以使用最高权限(SYS). [root@SL010A-IVD ...
- 安装oracle不动了,windows2008安装ORACLE到2%不动的问题 | 信春哥,系统稳,闭眼上线不回滚!...
最近又有网友遇到在windows2008服务器上安装ORACLE软件时到2%就卡住不动的问题,下面是该网友的描述: oralce 11g r2 windows server 2008 R2 安装到最后 ...
- oracle 设置输出显示中文乱码,修改oracle当前会话的语言环境,解决oracle显示中文乱码的问题 | 信春哥,系统稳,闭眼上线不回滚!...
对于数据库ORACLE有时操作时,提示的是一串串???,不能起到提示的作用,这是由于语言环境的设置问题,下面是实际操作中要用到的. 查看当前会话的语言环境: SQL> select useren ...
最新文章
- linux下svn客户端安装及环境配置(转)
- RTT的IPC机制篇——IPC通信总结
- Eclipse添加git插件上传项目到github
- 用python画四叶草-python turtle工具绘制四叶草的实例分享
- Linux宝库名人轶事栏目 | 感恩每一天
- 战斗部毁伤效能评估软件系统
- 已知三点坐标,求圆心坐标 (外接圆)python实现
- python图片水印_用python来给图片加水印
- 抽签抽奖小程序小工具(jquery+html)只需浏览器运行xlsx.core.min.js
- 五光十色变色龙的制作
- w3c怎么检测html5,HTML5教程:html标签属性通过w3c验证
- Fxfactory插件:复古电影调色插件Sheffield Softworks Vintage
- 面试云计算工程师岗位经常被问到的40个问题
- 笨方法学python 习题14
- 区块链概念股2019:躁动与尴尬 |链捕手
- 讲一个故事:Redis的默认端口是6379
- 画出有3个节点的树和有3个结点的二叉树的所有不同的形态
- 三星android 8升级包,三星G930K官方安卓8.0固件rom升级更新包:KTC-G930KKKU2ESI3
- 互联网软件行业术语,非常全
- 安卓逆向学习——多开原理和实验