commit提交,数据库做了什么-oracle

commit是提交事务,那么commit到底做了什么?

其实commit做的并不多,它出发LGWR进程,将重做的记录写入联机日志,并且将修改的数据的数据库头部标记为已提交。提交后,undo快可以被其他 事务调用覆盖,只有到达一定条件后出发ckpt进程才会把SGA中的数据写入数据文件。其他的一些操作在commit之前已经操作完成,所以,即使很大的 数据量修改在commit的时候也不会消耗很多的时间。

在commit之前,加入执行一个update操作,首先会在share pool里解析生成执行计划,然后根据执行计划找到相关数据文件的数据块,调入buffcache,并在里面找到一个可以用的undo数据块,如果没有则从undo表空间里找并且调入buff cache。把修改之前的值放在undo数据块,修改后的值放在相关数据的数据块。在数据块发生过程中记录两次重做记录,并且记录重做记录号。在没有 commit或者rollback之前不会释放DML锁。

需要注意的是,由于在commit之前数据库做了很多操作,所以rollback会很消耗资源(对于相当大量的DML操作)

commit提交,数据库做了什么-oracle,布布扣,bubuko.com

时间: 2024-10-12 13:04:18

commit提交,数据库做了什么-oracle的相关文章

数据库基本概念及Oracle基本语句

一.数据库分类 通常是按照数据模型的特点将传统数据库系统分成网状数据库.层次数据库和关系数据库三种. 1.网状数据库 顾名思义,网状数据库采用的是以记录类型为结点的网状数据模型,是一种导航式(Navigation)的数据库--用户在操作数据库时不但要指明要访问的对象(数据),还要规定其存取路径. 网状数据库模型对于层次和非层次结构的信息都能比较自然的模拟,在关系数据库出现之前网状DBMS要比层次DBMS用得普遍.在数据库发展史上,网状数据库占有重要地位. 2.层次型数据库 紧随网络型数据库之后出

DB2数据库迁移数据到Oracle数据库

刚到公司后,领导交给我个任务:把DB2数据库中的数据导入到Oracle数据库,本人尝试以下方法,挺快的.还要导入db2jcc.jar.db2jcc_license_cu.jar.ojdbc14.jar三个相应的jar包. 数据迁移:1.在DB2数据库中通过以下表查询出表的结构SELECTTABNAME TAB, --表英文名称COLNAME COL, --列名称CASE WHEN TYPENAME='VARCHAR' THEN 'VARCHAR2'WHEN TYPENAME LIKE 'SMAL

commit后数据库干的工作

用户提交commit后,数据库干的工作有: 1,oracle为用户的transaction生成一个SCN号. 2,LGWR把redo buffer中的数据写入到redo log file,同时把SCN号记录到redo log file中.这一步完成后,说明用户提 交的数据已经安全的写到磁盘 3,释放用户session占用的locks,这些locks可以在V$LOCK中查到.释放用户的lock后,那么其他在等待lock的session 就会被唤醒,继续它们的工作 4,如果在commit后,用户tr

[转帖]达梦数据库(DM6)和ORACLE 10g的异同点

达梦数据库(DM6)和ORACLE 10g的异同点    https://bbs.aliyun.com/detail/351337.html 花花浪子 级别: 小白 发帖 0 云币 -41 加关注 写私信 只看楼主 更多操作楼主  发表于: 2017-03-24 比较惭愧,在当上本版版主后一直没有贡献一篇有营养的帖子,由于手上正好有达梦数据 DM6的版本,加上对ORACLE 10G比较熟悉,所以就这2种数据库的异同点做一个对比,也请大家不吝赐教. 对于达梦数据库,因为目前的工作是DBA,主要是对

python sqlalchemy中commit提交错误--项非空不能插入空数据

非常白痴的问题,插入数据库提交失败,一直走IntegrityError错误,没打印错误信息,以为插不进去,弄了好久,最后打印了错误信息 (sqlite3.IntegrityError) samples.file_type may not be NULL [SQL: u'INSERT INTO samples (file_size, file_type, md5, crc32, sha1, sha256, sha512, ssdeep) VALUES (?, ?, ?, ?, ?, ?, ?, ?

MVC + EF 框架 对数据库做增删改查

这几天一直在看MVC 开发模式,其中借助EF框架对数据库进行 增删改查操作 现在就小小的总结一下吧 在使用EF操作数据库时,会首先添加 ADO.NET数据模型,这时,会为我们添加一个数据上下文类,使用这个类的对象可以对数据库做任何操作.所以在使用EF操作数据库之前 需要创建数据上下文对象. MyDatabaseEntities mde = new MyDatabaseEntities(); 1.使用EF 对数据库 做增加操作 1.1 创建一个需要被操作数据表的对象(一般来说 ,一张表就是一个实体

CM13添加SudaMod开源项目的来去电归属地,查看commit提交记录

这个问题纠结了很多时间,感谢苏打先森@Sudamod的开源项目. 大家知道CM13是没有来去点归属地的,就算有那也是google,对于中国人不适用,所以这里把方法贡献出来. 1.与通话有关的app Dialer InCallUI Contact Telcom 2.与app有关的开源地址 https://github.com/SudaMod/android_packages_apps_Dialer/tree/sm-2.0 https://github.com/SudaMod/android_pac

从服务器将Oracle数据库导出到本地Oracle数据库的方法

原文:从服务器将Oracle数据库导出到本地Oracle数据库的方法 1.将服务器上的Oracle数据库导入到本地 在CMD模式下执行以下命令:   exp username1/[email protected]服务器端数据库 file=本地硬盘:/文件名.dmp   例如: exp admin/[email protected] file=e:db.dmp 2.建立本地数据库(默认已经安装Oracle客户端并且建立了本地数据库) 3.创建一个新用户,并赋予DBA权限 //创建一个用户名为tes

数据库做拆分的几种方式

数据库做拆分的几种方式:1.按功能划分(垂直切分) 将不同功能相关的表放到不同的数据库中,这样做的好处是非常直观.但当某一部分的功能其数据量或性能要求超出了可控的范围,就需要继续对其进行深入的再切分. 2.按表中某一字段值的范围划分(水平切分) 当伴随着某一个表的数据量越来越大,以至于不能承受的时候,就需要对它进行进一步的切分.一种选择是根据key 的范围来做切分,譬如ID 为 1-10000的放到A上,ID 为10000~20000的放到B.这样的扩展就是可预见的.另一种是根据某一字段值来划分