龙空技术网

在DB2中Commit是什么意思?

混迹外企的数据魔法师 138

前言:

此刻我们对“oracle commit用法”大体比较关切,咱们都需要分析一些“oracle commit用法”的相关知识。那么小编在网上汇集了一些对于“oracle commit用法””的相关资讯,希望看官们能喜欢,咱们一起来学习一下吧!

什么是COMMIT

数据库管理系统具有提交的概念。这个概念与将一组动作分组在一起有关,以使它们都作为一个组成功或失败。这代表在著名的一个交易系统的ACID属性。A代表原子性–表示事务可能由多个小部分组成,但是如果这些部分之一失败,则整个事务也必须对数据进行任何更改。此概念在关系数据库中尤其重要,该关系数据库可以规范化为许多较小的表,从而导致事务不仅仅是在单个位置中包含单个更新。

假定应用程序未打开自动提交,以下内容代表事务和提交使用的示例。

BEGIN TRANSACTION

select columns from table a where id < NNNN;

update table_a set col1=1234;

update table_b set col2=5678;

insert into table_c .... ;

commit work;

END TRANSACTION

在上面的示例中,如果table_b的更新语句失败,则应用程序将检测到该错误,并且将永远不会执行commit work语句,或者可能执行回滚语句。DB2将更新回滚到table_a并将插入回滚到table_c。

提交还与ACID-持久性中的D有关。持久性属性意味着一旦发生提交,即使断电或发生其他可能的故障,数据也会持久保存(传统上在磁盘上)。这是数据库具有事务日志的主要原因。

何时发生

缺省情况下,DB2命令行通常已启用自动提交。这意味着,如果您只是从命令行发出db2命令,那么通常不必提交。许多应用程序以其他方式管理提交,包括一些GUI数据库管理或访问应用程序。

在设计应用程序时,设计人员和开发人员必须确定应按要求进行的提交。

DBA还提倡在长时间运行的操作(例如数据加载或大型删除)期间进行频繁提交。在很大程度上,这是因为事务日志文件不会填满。

频繁提交支持最高级别的并发数据访问。

COMMIT做什么

DB2使用一种称为预写日志记录的方法。这意味着在发生提交时,数据将直接写入事务日志。数据通过缓冲池异步到达表等磁盘上。提交不会将数据写出到表本身。这样可以节省时间-最终用户无需坐等大量I / O。

附带说明-DB2将重做和撤消数据都写入事务日志中-不同于Oracle,重做和撤消日志是分开的东西。

DB2有一个称为日志缓冲区的内存缓冲区。更改数据后,无论是否提交,都会将其写入日志缓冲区。然后,当日志缓冲区已满或任何连接进行提交时,日志缓冲区都会写出到磁盘。在将提交从日志缓冲区外部化到磁盘上的日志文件之前,提交不会成功。

发生这种情况时,可以将未提交的数据从日志缓冲区写入日志文件。但是DB2跟踪并知道哪些事务已提交,哪些事务未提交。

在上图中,代理将提交记录写入日志缓冲区(1)。然后,记录器进程根据MINCOMMIT和其他因素立即或不久将日志缓冲区写入磁盘(2)。代理等待记录器进程的确认,即代理提交的日志记录已被外部化到磁盘(3),直到该提交记录为止。一次可能有多个座席在等待。由于这是最终用户在等待物理I / O的地方,因此将最快的磁盘应用于事务日志文件是很有意义的。

请注意,提交不会涉及缓冲池或表空间数据。语句通过后,他们已经将撤消和重做的所有信息都写入了日志缓冲区,因此它已经存在或在事务日志文件中等待提交。

如果数据库崩溃,则在恢复数据库时,它将经历一个称为崩溃恢复的过程,该过程将查看事务日志文件并前滚所有需要的事务。在完成崩溃恢复的“前进阶段”之后,它将继续并回滚日志文件中尚未提交的所有事务。

标签: #oracle commit用法