- 论坛徽章:
- 0
|
-- 为什么要增加自动提交(AutoCommit)功能?
-- 自动提交模式是怎样工作的?
-- 支持自动提交功能所需要的补丁程序(PTF)有那些?
-- 数据库服务器及其客户端对AutoCommit的支持
在 OS/400 R440推出以前,操作系统并不支持真正的自动提交功能。大多数数据库将自动提交和隔离级别
(Isolation Level)分别处理。它们允许"读取落实"(Read Commiteed)等隔离级别在使用时附带自动提交功能。
在插入、更新或删除等操作后,数据库自动执行自动提交。由于DB2/400不支持该功能,大多数IBM数据接入方式
(如:ODBC、 CLI、 JDBC等等)均使用隔离级别*NONE 来模仿自动提交。但是由于这种方式有很多局限性(见下文),
OS/400 R440新增了对新的自动提交模式的支持。 该变化将使一些应用在某些数据库操作时出现错误信息
SQL7008 rc3。因此需要对这些应用程序所使用的文件进行日志(Journal)记录。
-- 为什么要增加自动提交功能?
将隔离级别*NONE 模仿自动提交会带来以下问题:
1. 在提交控制下,通过触发程序(trigger)、存储过程(Store Procedure)或SQL功能进行的更改无法被执行(commit)。
而且当连接中断时,这些更改便会丢失。当编译程序或执行SET TRANSACTION命令时,如果隔离级别设置为非*NONE的
值,则会出现这种情况。
2. 无法调用原子的(atomic)存储过程。
3. 无法通过操作导航器(Operation Navigator)的"运行SQL脚本"功能来发出执行(Commit)和回滚(RollBack)命令。
4. BLOB和CLOB定位器(Locator)要求采用高于*NONE的隔离级别来开启指针(cursor)。旧版本的操作要求任务运行时不含
自动提交功能,而且要求至少是"读取未落实"(Read Uncommitted)的隔离级别。
-- 自动提交模式是怎样工作的?
对于在OS/400上运行的作业和使用OS/400数据库服务器的客户机作业,自动提交模式的改变将发挥不同的作用。
对于OS/400作业(如: OS/400 SQL CLI的用户), 补丁程序使自动提交适用于所有的隔离级别:
1. 开启自动提交,隔离级别为*NONE(Isolation *NONE with AutoCommit ON):
在新的自动提交模式中,当打开的文件中含有BLOB或CLOB字段而且使用定位器时,SQL将把指示标隔离级别由
*NONE升级到*CHG。在执行控制下,由存储过程、SQL功能或触发器作出的任何更改,都将在启动存储过程、
SQL功能或触发器的指令完成后被执行。
只有那些在执行控制下被访问的文件(如: 含有BLOB的表或由存储过程访问的那些文件),需要进行日志记录。
这样的更改解决了以上的问题,而且对现存的应用程序或系统性能的影响极小,甚至没有。
2. 关闭自动提交,隔离级别为*NONE(Isolation *NONE with AutoCommit OFF):
对原操作无更改。由触发程序、存储过程或SQL功能在执行控制下作出的更改不会被执行。
3. 开启自动提交,隔离级别非*NONE(Isolation not *NONE with AutoCommit ON):
DB2/400将在任何改变数据的操作完成后执行"暂停提交(COMMIT HOLD)"命令,这些操作包括更新、插入、删除、
修改表格、调用存储程序、执行触发等等。所有被应用程序访问的文件都必须进行日志记录。
那些要执行大量操作(要求被执行,如用插入命令来添写表格)的应用程序,可能会受到明显的性能影响。因此,
这些程序应考虑使用*NONE 隔离级别,或者由程序自己来提交。
4. 关闭自动提交,隔离级别非*NONE(Isolation not *NONE with AutoCommit OFF):
无需更改原操作。应用程序会控制执行。
-- 支持自动提交功能所需要的补丁程序(PTF)有那些?
操作系统OS/400对新的自动提交模式的支持由下列补丁程序提供:
SF58482
SF58629
SF58465
SF58567
SF58560
将来的版本会把这些功能嵌入操作系统中。这些PTF不是可选的,它们(或它们的替代PTF)包含在数据库补丁包
SF99104和操作系统包C9313440中。
1. SQL调用级别接口(SQLCLI):
不需要额外的补丁程序,而且必须采用自动提交模式。请注意: 任何使用SQLCLI的应用都可能会受到影响,包括:
Lotus Notes Pump、Lotus Enterprise Integrator(LEI)、Host JDBC classes、SQLJ等。使用OS/440专用扩
展名SQL_TX_NO_COMMIT的应用,一般被默认为SQL_TXN_READ_UNCOMMITTED,同时自动提交设为ON。这要求被那
些应用程序使用的文件做日志记录。
2. OS/400 SQLJ:
参见上面的SQLCLI。
3. OS/400 Host JDBC:
在自动提交开启时,JDBC的缺省值设置为*CHG。注意,这要求将文件进行日志记录。如果不想给这些文件做日志,
那么必须在JDBC连接字符串上将"隔离级别"设置为"*NONE":
Properties properties = new Properties ();
properties.put ("transaction isolation", "none");
try {
Class.forName("com.ibm.db2.jdbc.app.DB2Driver")
connection = DriverManager.getConnection("jdbc:db2://RCHASSC2", properties);
...
-- 数据库服务器及其客户端对自动提交的支持
数据库服务器通过数据库补丁包SF99104 #8增加了对自动提交的支持。所以现有的数据库服务器的客户端和不支持
新的自动提交模式扩展的客户端,将按下面的指示操作: 如果数据库服务器的客户端设置隔离级别为*NONE或根本不
设置隔离级别,那么自动提交将被启动。若客户端设置任何*NONE以外的隔离级别,则自动提交模式将被关闭。
目前,大多数客户端(包括JDBC toolkit和Client Access ODBC)将隔离级别设置为*NONE以模仿自动提交。这
样的更改将不会影响使用这些客户端的应用。更详尽说明请参见"开启自动提交,隔离级别为*NONE"部分。
以下客户端对数据库服务器自动提交模式提供有限或全面的支持:
Client Access ODBC:
Client Access/400 R440 ODBC 新增了对自动提交模式的支持。如果需要的话,能取消自动提交模式。目前,
Client Access ODBC不支持隔离级别高于*NONE的自动提交模式。当自动提交被应用启动 时,ODBC驱动程序将
更改为*NONE隔离级别,并启动自动提交模式(而不受隔离级别影响)。然后,如果应用取消自动提交,那么ODBC
驱动程序将把隔离级别重新设置为原始值。
--------------------------------------------
以上转于网上
[ 本帖最后由 ddzg 于 2008-10-22 08:21 编辑 ] |
|