commit,对于oracle来说,是一个提交的动作,也就是说,你把你对oracle数据库的修改,提交给数据库,告诉数据库,你已经确定要修改这些东西了,然后数据库看到了你的提交,就把内容修改了


其实在commit里面呢,涉及到了一个oracle数据库的概念,那就是事务


transaction,事务的特点呢,有四个

ACID

ATOMIC:原子性,也就是说,这是最小的单位了,没有比这个更小的单位了

要么提交,要么失败


consistentcy:一致性,??我现在还是不明白一致性到底是什么意思?

TOM书里写的内容是:事务将oracle从一个状态切换到另外一个状态

我现在还是不明白???????????????????????????

STILL DON'T GET IT



ISOLATION:隔离性,这也就是说,在你提交一个事务之前,任何数据库的别人,都看不到你的操作,你的改动。

DURATION:持久性,这个意思是说,一旦你提交这个事务之后,她就不会改动了,除非你回滚


对于commit来说呢,我们现在来讲我们commit之后呢,what's going to happen

WELL,two thing is going to happen

1:oracle会使用LGWR进程把REDO LOG BUFFER中的内容写到硬盘DISK中,也就是写到REDO01.LOG或者REDO02.LOG,或者REDO03.LOG中去。

这里的内容指的是:我们的transaction的redo records

2:oracle会为我们的这一次提交生成一个SCN号,提交给数据库,来确定我们commit的transaction的redo records。


I don't knwo why,but during these days ,I always thought that this is it


我已经把oracle的redo的信息整理过了

下面呢,我们来讲一下commit,这是一个和transaction事务紧密相连的一个事情

一个DML语句是默认事务的开始

我忘记了,好像是一个事务开始默认是DML语句开始,一个事务结束就是commit了

我真的是忘了,这是TOM的书里面写的内

就是说,一个事务的默认开始是:DML语句

让我再看看我的书里,哈哈

wait for me

哈哈,找到了

oracle不需要专门的语句来“开始事务”。事务会在修改数据的第一条语句处开始。


恩恩,讲述的真是明白,这和其他的数据库不相同

和DB2,SQLSERVER不一样,比如说,她们需要显式地开始一个事务,但是oracle不需要

oracle可以显式的结束一个事务,使用commit,或者rollback


其实oracle和文件系统不同的地方就在于这里,oracle数据库是以事务为原子

这也就是说,all or nothing。

文件系统可能会产生数据不一致的地方,但是oracle数据库不会

这是oracle数据库的一种设计理念

为了容错率极低的保险和金融行业,恩恩


这是逻辑上的东西,下面我们来看oracle是怎么从物理上来实现这些事情的

$其实要说起commit来,是无法和oracle中的事务分开的。


下面我们来看commit之后的动作


commit之后呢,发生的两件事情并没有同步数据到物理的存储上面


那么oracle是如何实现数据一致性的呢?

这是一个很大的问题,我们现在这里留一个疑问