学习基本观念
经监任务单元
什么是事情?
术语任务单元(UOW)和事情 的观念是同义的。任务单元被定义为作为单个原子利用执行的 0 到多个 SQL 查询。例如,当客户在 IBM 网站上举办一次在线购物时,必需执行三个步骤:
- 必需更新 IBM 网上市肆的库存。
- 客户必需为所采办的商品付费。
- 必需配送客户采办的商品。
假如库存记录曾经被更新,并且客户也曾经付费,然则却没有创立一个装货单条目,会出现什么情况呢?不光客户会因为没有收到所采办的商品而生气,并且库存也出现了不一律的地方。是以,采办进程中的完备绝对 SQL 查询都必需定义为一个单一的原子利用。
事情中的步骤
目前来看看一个 DB2 事情中须要有哪些步骤。在末尾之前,必需树立与事情所运用的数据库的衔接。
以一条可执行语句末尾事情。一个事情中总会有一条可执行语句。假如挨次在一个事情完毕后又出现一条可执行语句,那么它将末尾一个新的事情。下面是一些非 可执行语句:
BEGIN DECLARE SECTION END DECLARE SECTION INCLUDE SQLCA INCLUDE SQLDA DECLARE CURSOR WHENEVER
以以下体式名目完毕事情:
COMMIT ROLLBACK
COMMIT
语句完毕事情,并使变化对其他进程可见。记着,应该定期地执行提交,并且要在挨次中断之前单独地执行提交。在 Windows 利用体系中,假如没有显式地提交事情,DB2 将会主动回滚这些事情。在其他利用体系上,DB2 在挨次中断期间会主动提交完备绝对未决的事情。
ROLLBACK
语句使数据库回到事情运转之前的形状。回滚可以阻止将之前的事情提交之后的变化运用到数据库。多么可以确保要么事情中完备绝对的利用被提交,要么都不提交。DB2 在以下情况下回滚变化:
- 日志已满
- 出现招致体系进程中断的情况
为了阻止轮回失败,在 ROLLBACK
语句之前运用 WHENEVER SQLWARNING CONTINUE
或 WHENEVER SQLERROR CONTINUE
。ROLLBACK
语句对宿主变量的内容没有影响。
应该采用以下步骤来中断运用挨次:
- 经过议定
COMMIT
或ROLLBACK
完毕尔后事情。 - 经过议定发出
CONNECT RESET
语句开释衔接。 - 开释资源(例如姑且存储、数据结商洽共享内存等)
在一个运用挨次中可以运用多个事情。在一次事情中,可以有多个到数据库的衔接。
回页首
衔接与事情
编程接口有两种规范的衔接:事情型和非事情型。固然 DB2 支持这两种观念,然则应该清晰,抱负上到数据库的衔接只需一种 —— 事情型衔接。是以,每个 SQL 查询都是事情的一局部。当以非事情体式名目运转时,所运用的编程接口曾经启用了一个称为主动提交(autocommit) 的成效,该成效在每个 SQL 利用完成后隐式地发出一条 COMMIT
语句。假如 UOW 要完成多个查询的话,服膺不要启用 autocommit 成效。
回页首
保管点与事情
保管点(savepoint)是用于当数据库央求失败时,撤销数据库管理体系(DBMS)所执行的任务的一种机制。保管点使非原子数据库央求勾当酿成原子的。假如在执行期间发生错误,保管点可用于撤销从事情末尾到收到保管点回滚央求这段时分外事情所作出的变化。
保管点便于将多个 SQL 语句组合到单个可执行块中。在这个块中第一个子语句执行之前,须要先发出一个启动保管点块的央求。假如某个子语句发生错误,那么只需回滚阿谁子语句。多么可以供应比复合 SQL 语句更细的粒度,关于复合 SQL 语句,一个错误就会招致整个块发生错误,并回滚整个复合 SQL 语句。在保管点语句块的最后,可以开释保管点,也可以回滚到保管点。
目前来看一些用于创立和节制保管点的 SQL 语句。要设置一个保管点,可发出 SAVEPOINT
SQL 语句。为了使代码更明了,可觉得保管点选择一个更有意义的称号。例如:
SAVEPOINT SAVEPOINT1 ON ROLLBACK RETAIN CURSORS
要开释一个保管点,可发出 RELEASE SAVEPOINT
SQL 语句。例如:
RELEASE SAVEPOINT SAVEPOINT1
假如不必 RELEASE SAVEPOINT
SQL 语句显式地开释保管点,那么它会在事情的最后主动开释。
要回滚到保管点,可发出 ROLLBACK TO SAVEPOINT
SQL 语句。例如:
ROLLBACK TO SAVEPOINT SAVEPOINT1
版权声明: 原创作品,容许转载,转载时请务必以超链接方式标明文章 原始来由 、作者信息和本声明。不然将深究法例责任。