问:您好,希望您能够针对Oracle回滚这一话题来谈一谈自己的看法。就拿SHUTDOWN IMMEDIATE来举个例子,比如一个DML更新命令要更新10000条记录。DBA之后发出SHUTDOWN IMMEDIATE命令,这可以阻止额外的会话连接并对未提交的事务进行回滚。 现在问题就来了,Oracle回滚的究竟是什么?如果变更未提交、没有写入硬盘、没有写入datafile或者只影响了内存块,那么Oracle实际上回滚的什么呢? 答:你的问题是假设变更没有提交: 1、变更没有写入硬盘; 2、变更没有写入datafile。
其实你的这种想法是不正确的。对于未提交的事务也是有可能……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
问:您好,希望您能够针对Oracle回滚这一话题来谈一谈自己的看法。就拿SHUTDOWN IMMEDIATE来举个例子,比如一个DML更新命令要更新10000条记录。DBA之后发出SHUTDOWN IMMEDIATE命令,这可以阻止额外的会话连接并对未提交的事务进行回滚。
现在问题就来了,Oracle回滚的究竟是什么?如果变更未提交、没有写入硬盘、没有写入datafile或者只影响了内存块,那么Oracle实际上回滚的什么呢?
答:你的问题是假设变更没有提交:
1、变更没有写入硬盘;
2、变更没有写入datafile。
其实你的这种想法是不正确的。对于未提交的事务也是有可能将变更写入在线redo日志和表空间datafile的。你可以这样想,你的LOG BUFFER大小为1MB,但是你要向表中插入10MB的数据。一旦日志缓冲区已满,那其他的9MB变更在提交之前要存储在什么地方呢?日志缓冲区会将变更向量写入到在线redo日志。同样地,假设你的DB_BUFFER_CACHE大小为1MB(非实际,仅做参考),当缓冲区缓存被变更块填满时,在新的变更块可以修改之前,它们就需要被写入到数据库的datafile中。Datafile和在线redo日志可以包含未提交的变更。因此,当执行SHUTDOWN IMMEDIATE命令时,Oracle在关闭之前将回滚任何未提交的变更。
作者
Techtarget旗下Searchoracle网站的资深专家,有16年IT行业经验、计算机科学硕士、专攻数据库方向,曾担任系统管理员等职。此外,他还获Oracle 7.3、8和8i的OCP数据库管理员证书,目前为SGT Inc.公司首席DBA。
翻译
相关推荐
-
Collaborate 18大会:了解甲骨文云数据库和应用的进展
在Collaborate 18大会即将举行时,我们会发现,甲骨文用户社区的技术变化会略高于平常水平。 由独立甲 […]
-
甲骨文自治数据库亮相 带来云计算新希望
早前甲骨文还不在云计算公司之列,而现在该公司正在迅速弥补其失去的时间。甲骨文的云计算核心是甲骨文自治数据库(O […]
-
Oracle TNS 错误:管理员旷日持久的战斗
TNS经常给IT管理员带来麻烦,而且很难定位。尤其是在Oracle数据库中。本文将介绍如何避免这些常见错误。
-
DBA支招:如何实现Oracle EBS 12.2.5升级
那些对于是否要将EBS进行升级持观望态度的Oracle数据库管理员们可以从一家研究公司获得一些启示。