Oracle事务及提交事务(COMMIT语句)

Oracle事务

1. 什么是事务

在数据库中事务是工作的逻辑单元,一个事务是由一个或多个完成一组的相关行为的SQL语句组成,通过事务机制确保这一组SQL语句所作的操作要么都成功执行,完成整个工作单元操作,要么一个也不执行。

2. 事务特性

SQL92标准定义了数据库事务的四个特点:

原子性(Atomicity):一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做。
一致性(Consistency):事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。
隔离性(Isolation):是指数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务的并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。
持久性 (Durability) : 是指当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。
一组SQL语句操作要成为事务,数据库管理系统必须保证这组操作的原子性(Atomicity)、一致性(consistency)、隔离性(Isolation)和持久性(Durability),这就是ACID特性。

Oracle提交事务(COMMIT语句)

在Oracle中,COMMIT语句提交当前事务的所有更改。发出提交后,其他用户将能够看到您的更改。

语句

Oracle / PLSQL中COMMIT语句的语法是:

COMMIT [ WORK ] [ COMMENT clause ] [ WRITE clause ] [ FORCE clause ];

参数

  • WORK – 可选的。它被Oracle添加为符合SQL标准。使用或不使用WORK参数来执行COMMIT将产生相同的结果。
  • COMMENT clause – 可选的。 它用于指定与当前事务关联的注释。 该注释最多可以包含在单引号中的255个字节的文本中。 如果出现问题,它将与事务ID一起存储在名为DBA_2PC_PENDING的系统视图中。
  • WRITE clause – 可选的。 它用于指定将已提交事务的重做信息写入重做日志的优先级。 用这个子句,有两个参数可以指定:
    • WAIT 或 NOWAIT (如果省略,WAIT是默认值)
    • IMMEDIATEBATCH(IMMEDIATE是省略时的默认值)
  • FORCE clause – 可选的。 它用于强制提交可能已损坏或有疑问的事务。 有了这个子句,可以用3种方式指定FORCE:
    • FORCE'string',[integer]FORCE CORRUPT_XID'string'FORCE CORRUPT_XID_ALL

注意

  • 必须拥有DBA权限才能访问系统视图 – DBA_2PC_PENDINGV$CORRUPT_XID_LIST
  • 必须拥有DBA权限才能指定COMMIT语句的某些功能。

示例

我们来看一个示例,演示如何使用COMMIT语句在Oracle中发出提交。

例如:

COMMIT;

COMMIT示例将执行与以下相同的操作:

COMMIT WORK WRITE WAIT IMMEDIATE;

在此示例中,隐含了WORK关键字,并且省略WRITE子句将缺省为WRITE WAIT IMMEDIATE,因此它与前面的COMMIT语句是等效的。

添加备注

我们来看一个显示如何使用COMMENT子句的COMMIT示例:

例如,您可以通过两种方式使用注释编写COMMIT

COMMIT COMMENT 'This is the comment for the transaction';

或者 –

COMMIT WORK COMMENT 'This is the comment for the transaction';

由于始终隐含WORK关键字,因此这两个COMMIT示例都是等效的。 如果事务出错或存在疑问,COMMIT会将包含在引号中的注释与事务ID一起存储在DBA_2PC_PENDING系统视图中。

强制
最后,看一下显示如何使用FORCE子句的COMMIT示例。

例如,可以通过两种方式编写可疑事务的COMMIT

COMMIT FORCE '22.14.67';

或者 –COMMIT WORK FORCE '22.14.67';

SQL 复制 全屏

由于始终隐含WORK关键字,因此这两个COMMIT示例都会强制执行由事务ID “22.14.67”标识的已损坏或疑问事务。

THE END
点赞5赞赏 分享
抢沙发
头像
提交
头像

昵称

取消
昵称表情

    暂无评论内容