oracle 事务管理
转贴请注明出处
关于事务的基本属性ACID在这里不在累述,但是oracle有一种特殊的事务提交形式--DDL(数据库定义语言)。下面着重oracle从开始一个事务到提交一个事务的时序。
-
事务开始
-
oracle生产undo数据,这里的undo数据指的是要被此事务修改的数据。它的生产方法是在buffer cash中找到相应的数据块,如果没有找到就到数据文件中读取到buffer cash。说明这里提到的buffer cash是指sga DataBase Buffer Cash 它主要包括dirty buffer 和 free buffer。
-
生成redo log buffer 记录,然后把此记录放到sga中的redo log buffer中,此记录即包括原来的数据有包括将要提交的记录。但是此可以在事务提交时写到redo log file。
-
在sga中修改在此事务中的一些相关信息。
-
-
事务提交
-
在记录事务的内部表中标记此事务已经被提交,同时系统产生一个SCN(SCN只有在事务提交后才产生的,system change number 关于SCN想专门描述)被记录到相应的数据文件中(这里指的是控制文件)。
-
把将要提交的数据从redo log buffer写到redo log file,同时把上面的SCN也加入到redo log file.因为这个SCN是用redo log file恢复时要用到得。
-
释放相应的lock。
-
此事务标记为已提交。
-
-
当发生检查点时
-
当发生检查点时CKPT更新所有数据问题的头信息(包括SCN),DBWn 负责将buffer cash 中的脏数据写到数据文件中。所以我们可以看到只有当检查点的时候数据才真正写到数据文件中。而且是从buffer cash 中读取的。redo file只能用于恢复。
-