提交事务就是提交事务对数据库所做的修改,将从事务开始的所有更新保存到数据库中,任何更改的记录都被写入日志文件并最终写入到数据文件,同时提交事务还会释放由事务占用的资源,如锁。如果提交时数据还没有写入到数据文件,DM数据库后台线程会在适当时机(如检查点、缓冲区满)将它们写入。
具体说来,在一个修改了数据的事务被提交之前,DM数据库进行了以下操作:
(1)生成回滚记录,回滚记录包含了事务中各SQL 语句所修改的数据的原始值;
(2)在系统的重做日志缓冲区中生成重做日志记录,重做日志记录包含了对数据页和回滚页所进行的修改,这些记录可能在事务提交之前被写入磁盘;
(3)对数据的修改已经被写入数据缓冲区,这些修改也可能在事务提交之前被写入磁盘。
已提交事务中对数据的修改被存储在数据库的缓冲区中,它们不一定被立即写入数据文件内。DM数据库自动选择适当的时机进行写操作以保证系统的效率。因此写操作既可能发生在事务提交之前,也可能在提交之后。
当事务被提交之后,DM数据库进行以下操作:
- 将事务任何更改的记录写入日志文件并最终写入到数据文件;
- 释放事务上的所有锁,将事务标记为完成;
- 返回提交成功消息给请求者。
在DM数据库中还存在有3种事务模式:自动提交模式、手动提交模式和隐式提交模式。
自动提交模式
除了命令行交互式工具DISQL外,DM数据库缺省都采用自动提交模式。用户通过DM数据库的其他管理工具、编程接口访问DM数据库时,如果不手动/编程设置提交模式,所有的SQL语句都会在执行结束后提交,或者在执行失败时回滚,此时每个事务都只有一条SQL语句。
在DISQL中,用户也可以通过执行如下语句来设置当前会话为自动提交模式:
SET AUTOCOMMIT ON;
手动提交模式
在手动提交模式下,DM数据库用户或者应用开发人员明确定义事务的开始和结束,这些事务也被称为显式事务。在DISQL中,没有设置自动提交时,就是处于手动提交模式,此时DISQL连接到服务器后第一条SQL语句或者事务结束后的第一条语句就标记着事务的开始,可以执行COMMIT或者ROLLBACK来提交或者回滚事务。
隐式提交
在手动提交模式下,当遇到DDL语句时,DM数据库会自动提交前面的事务,然后开始一个新的事务执行DDL语句。这种事务提交被称为隐式提交。DM数据库在遇到以下SQL语句时自动提交前面的事务:
- CREATE;
- ALTER;
- TRUNCATE;
- DROP;
- GRANT;
- REVOKE;
- 审计设置语句。




