暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库之提交事务

原创 zy 2022-12-11
5214

提交事务就是提交事务对数据库所做的修改,将从事务开始的所有更新保存到数据库中,任何更改的记录都被写入日志文件并最终写入到数据文件,同时提交事务还会释放由事务占用的资源,如锁。如果提交时数据还没有写入到数据文件,DM数据库后台线程会在适当时机(如检查点、缓冲区满)将它们写入。

具体说来,在一个修改了数据的事务被提交之前,DM数据库进行了以下操作:

(1)生成回滚记录,回滚记录包含了事务中各SQL 语句所修改的数据的原始值;

(2)在系统的重做日志缓冲区中生成重做日志记录,重做日志记录包含了对数据页和回滚页所进行的修改,这些记录可能在事务提交之前被写入磁盘;

(3)对数据的修改已经被写入数据缓冲区,这些修改也可能在事务提交之前被写入磁盘。

已提交事务中对数据的修改被存储在数据库的缓冲区中,它们不一定被立即写入数据文件内。DM数据库自动选择适当的时机进行写操作以保证系统的效率。因此写操作既可能发生在事务提交之前,也可能在提交之后。
当事务被提交之后,DM数据库进行以下操作:

  1. 将事务任何更改的记录写入日志文件并最终写入到数据文件;
  2. 释放事务上的所有锁,将事务标记为完成;
  3. 返回提交成功消息给请求者。

在DM数据库中还存在有3种事务模式:自动提交模式、手动提交模式和隐式提交模式。

自动提交模式
除了命令行交互式工具DISQL外,DM数据库缺省都采用自动提交模式。用户通过DM数据库的其他管理工具、编程接口访问DM数据库时,如果不手动/编程设置提交模式,所有的SQL语句都会在执行结束后提交,或者在执行失败时回滚,此时每个事务都只有一条SQL语句。
在DISQL中,用户也可以通过执行如下语句来设置当前会话为自动提交模式:
SET AUTOCOMMIT ON;

手动提交模式
在手动提交模式下,DM数据库用户或者应用开发人员明确定义事务的开始和结束,这些事务也被称为显式事务。在DISQL中,没有设置自动提交时,就是处于手动提交模式,此时DISQL连接到服务器后第一条SQL语句或者事务结束后的第一条语句就标记着事务的开始,可以执行COMMIT或者ROLLBACK来提交或者回滚事务。

隐式提交
在手动提交模式下,当遇到DDL语句时,DM数据库会自动提交前面的事务,然后开始一个新的事务执行DDL语句。这种事务提交被称为隐式提交。DM数据库在遇到以下SQL语句时自动提交前面的事务:

  1. CREATE;
  2. ALTER;
  3. TRUNCATE;
  4. DROP;
  5. GRANT;
  6. REVOKE;
  7. 审计设置语句。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论