一个Oracle简单事务:
1:用户首先使用Oracle net service通过网络层,基于WEB等方式访问到数据库中。
2:此时数据库会检查用户帐号密码等信息。如果信息正确,服务器会分配一个服务器进程给这个用户。
3:当用户执行一些操作时,Oracle数据库会在数据库缓冲区中查看用户的可执行权限,如果没有需要从数据文件中读取到数据库缓冲区中。
4:如果用户有这个权限,Oracle会检查用户的SQL语句之前是否有执行过,或者在共享池中,若是会执行此SQL语句,若不是,Oracle会
再次分析此SQL语句后再执行,并且会在用户会话的PGA中创建一个私有的SQL区域。
5:为了防止其他用户再次更改相同行,Oracle会施加行级锁。
6:由于用户有更改数据,那么会在日志缓冲区中产生更改矢量,并且更改数据会在数据库高速缓冲区中进行。
7:用户这时会执行COMMIT操作,让更改永久生效。此时会话会处于挂起状态,这时重做日志缓冲区会被写入联机重做日志文件中。
8:日志写完后,返回给客户执行成功的消息。
了解下提交事务,回滚事务:
1:提交事务:提交事务也就是COMMIT操作,执行的SQL语句所做的更改操作将永久生效。
执行COMMIT操作之前数据库内部做以下工作:
A:生成撤销数据,这些撤销数据也就是更改前的数据,存放在undo表空间中。(用于rollback操作)。
B:由于产生更改矢量,所以在重做日志缓冲区中的更改信息会被写入联机重做日志文件中,
C:缓存区中的数据将被更改。(不一定会马上写入数据文件中,因为DBWN使用极懒的算法来写入)。
D:当缓冲区数据被写入数据文件后SCN号写入其中,此时LGWR也在日志文件中分配一个SCN(标记事务正式提交的作用)。
F:然后释放行级锁,事务被标记正式完成。
2:回滚事务:使用rollback命令,撤销未提交的事务,使其恢复到更改前的数据,撤销完成后行级锁也会被释放。
什么时候会出现rollback操作呢:
A:用户自己执行的撤销操作。
B:未提交事务突然中断,此时系统会回滚这些更改操作。
C:或者系统出现内部错误,这时也会回滚数据。
了解事务的特性:
事务有4大特性:原子性,一致性,隔离性,持久性。
1:原子性:一个事务要么完全执行,要么完全不执行。假如事务执行到一半遇到突发问题停止了,那么整个事务将完全不执行。
2:一致性:如果事务执行之前是一致的,那么事务执行之后也必须是一致的,所谓的事务的一致性,也就是事务的完整性。
3:隔离性:事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的,隔离性由并发控制来支持。
4:持久性:事务的持久性保证了提交的事务将永久保存在数据库中。数据恢复技术将保证事务持久性。
因为一个数据库有很多人同时访问同一个表,为了让不同用户之间不受影响,Oracle通过锁定表的方式来隔离每个事务,这就是并发控制,但这种锁定采用最少限制的方式。
了解并发控制:
因为一个Oracle数据库同时受多个用户访问,为了让多个用户同时访问同一个表,就需要并发控制来隔离每个独立的事务(Oracle的并发控制采用最少的限制方式)
并发控制带来的问题:
1:脏问题:当A用户更改一个表的值,但还未提交。此时B读取这个新值,但由于某种原因A用户回滚了事务。
那么就会造成B用户读取的值为错误的。
2:幻读问题:当A用户读一个表时只有一行,此时B用户插入新行,用户A又重新查询了这个表,此时对A来
说多出1行,这就是幻读。
3:更新丢失问题:用户A查询表的一行数据,用户B此时也查询与A同一行数据,此时用户A修改此数据并且
提交,用户B紧接着也修改这行数据并且提交。这时A所做的修改将丢失,因为被B用户所覆盖。
4:不可重复读(模糊读)问题:当A用户发现之前读的行已经被其他用户修改了。不可重复读的问题就出现了。
了解隔离级别:
隔离级别的提出可以使并发控制与隔离执行之间的矛盾得到一个平衡。因为隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。
Oracle隔离级别含义:
1:串行:串行级别就是事务之间完全隔离,排队轮流执行。通过锁定机制,解决了脏读,幻读,不可重复读的问题。
2:可重复读:这个隔离级别就是读一致性的意思,同一个事务2个不同的时间点,读取的数据都是一样的。解决了脏读,不可重复读的问题。
3:未提交读:也就是可以读取脏数据,就是指中间数据。这样并发控制的问题可能会全部体现出来。
4:已提交读:Oracle默认情况下是语句级的已提交读。只读取会话前已提交的数据。不会有脏问题的存在。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29481709/viewspace-1123907/ ,如需转载,请注明出处,否则将追究法律责任。