• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 理解redo(11)truncate和select的redo

理解redo(11)truncate和select的redo

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了理解,redo,truncate,select,很多,系统,等相关知识,希望本文的分享对您有所帮助

很多系统,在作删除操作时,都只是做一个标志位,并不会去做磁盘置0那样昂贵的操作。truncate也如是,更改的只是segment header和i-node表。truncate 会产生redo,是修改数据字典产生的,不是删除数据来的。truncate降低HWM,释放extent,重新生成data_object

很多系统,在作删除操作时,都只是做一个标志位,并不会去做磁盘置0那样昂贵的操作。truncate也如是,更改的只是segment header和i-node表。truncate 会产生redo,是修改数据字典产生的,不是删除数据来的。truncate降低HWM,释放extent,重新生成data_object_id。之所以比delete快,是因为它根本不需要删除数据,redo只是记录这个操作本身而不会有大量数据的redo记录。因此,对于truncate操作,如果我们知道以前的data_object_id,并且空间未被重用,我们仍然可以找回数据。

什么情况下select会产生redo ?

1`)快速块清除或者叫commit clean out。事务提交的时候,Oracle针对内存里的块:

a)把数据块ITL ENTRY里flag的标记为U

b)设置commit scn在Scn/Fsc列

有了这两个标记就可以告诉全世界这个事务已经提交。但ITL ENTRY 的Lck标志和每个数据行头的lb(锁定位信息)并不会清除。Oracle 做commit clean out并不会产生日志,这个你可能会感到比较奇怪,修改了块,但是却没产生日志。其实这个产生日志的过程在后面的完整的块清除的时候才做。也就是我们下一次select到这个数据块的时候。

2)延迟块清除。事务提交的时候,事务修改的块已经不在内存里了,这个时候,Oracle不会再从磁盘把块读取到内存里做块清除,而是在下一次读取数据块的时候,做块清除的动作。这个块清除的动作会产生Redo。

另外,因为存在递归等操作,若是对某个事务产生的redo进行会话级的丈量,可能有失偏颇,合理的是,基于实例级的测量:

select name,value from v$sysstat where name='redo size';
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 深入Mysql字符集设置 图文版
  • 深入Mysql字符集设置[精华结合]
  • 深入Mysql字符集设置分析
  • 如何理解MySQL中的IN,OUT,INOUT类型
  • 深入理解SQL中的Null
  • 10分钟学会理解和解决MySQL乱码问题
  • 理解和使用Oracle 8i分析工具LogMiner
  • 深刻理解Oracle数据库的启动和关闭
  • 理解redo(9)10g R2后oracle对redo写的增强
  • 理解redo(11)truncate和select的redo

相关文章

  • 2018-12-05ORACLE数据库事务隔离级别介绍
  • 2017-08-17ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
  • 2018-12-05oracle使用sql脚本生成csv文件案例学习
  • 2018-12-05mysql进阶(二十一)删除表数据
  • 2017-05-11在MySQLDump中使用-w语句进行备份的方法
  • 2018-12-05三种SQL分页查询的存储过程代码
  • 2018-12-05Oracle存储过程for语句用法
  • 2018-12-05JDBC连接MySQL出现的问题
  • 2018-12-05ubuntu linux下使用Qt连接MySQL数据库的方法
  • 2018-12-05关于共享代码注意点总结

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql database manual(mysql数据库手册)
    • MySQL中MIN()函数的使用教程
    • 十个Mysql中基本语句优化的原则
    • RocksDB上锁机制的实例详解
    • mysql中重置密码与新用户权限分配的方法介绍
    • MySQL中对于not in和minus使用的优化
    • Oracle用户密码含有特殊字符导致无法登陆解决方法
    • linux下讲解MySQL安装与登录方法
    • Mysql数据库名和表名在不同系统下的大小写敏感问题
    • MySQL高级十五——表的分区

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有