TXSeries入门系列文章8

第二部分 DB2

关于本部分

DB2作为一个流行的RDBMS(关系型数据库管理系统)和DTP模式下(分布式事务处理模型)的资源管理器,可以与TXSeries协同工作。数据可以被DB2高效地管理,用户仅仅需要考虑如何连接DB2并保证数据的完整性。本部分将介绍三种连接类型的概念:non-XA(非XA协议提交)、XA single phaseXA协议一阶段提交)和XA two phaseXA协议两阶段提交)和一些相关知识。也会进一步介绍如何配置TXSeries通过XA协议连接DB2 

1. 三种连接类型

用户可以根据具体情况选择三种连接类型与资源管理器通信。下面将具体介绍每种连接类型的区别和应用场景。

1XA协议一阶段提交

一阶段提交意味着TXSeries直接发布提交/回滚来一次性完成交易。TXSeries完成连接、断开、提交和回滚操作并确保数据完整性,而不需要应用程序通过SQL命令来显式执行。TXSeries和数据库中的任何数据更新显式地通过EXEC CICS SYNCPOINT命令提交(或者隐式地通过EXEC CICS RETURN命令提交)。

当一个交易中仅有一个资源管理器时可以使用XA协议一阶段提交。它比两阶段提交性能更好。

2XA协议两阶段提交

两阶段提交意味着在阶段一,TXSeries将请求资源管理器做好准备;在阶段二,将发布提交/回滚命令来完成交易。TXSeries扮演和XA协议一阶段提交时相同的角色,并将做更多工作以保证多个数据库中数据的一致性——这就是为什么一阶段提交有更好的性能。

当多于一个资源管理器与TXSeries协同工作时,使用XA协议两阶段提交。

3)非XA协议提交

不同于XA协议,在非XA协议连接中,应用程序需要通过SQL命令完成包括连接、断开、提交和回滚在内的所有工作。如果出现任何错误,数据应该被手动恢复以保证完整性。

只在性能比资源完整性和交易原子性(例如:只读)更重要时,或者应用程序已经包含用于连接、断开、提交和回滚的SQL命令时使用非XA协议提交。

在多数情况下XA协议连接是保证数据完整性的更好选择,因为大多数重要的工作已经被TXSeries完成。

2. SYNCPOINT介绍

EXEC CICS SYNCPOINT命令定义一个同步点,它可以标记一个逻辑工作单元(LUW)的完成。在执行这个命令后,除非ROLLBACK选项被指定,否则可恢复资源的修改会被提交。

同步点类似于游戏中的存档点——LUW中的资源更新会在这个点被保存(提交)。但是如果 SYNCPOINT后跟着ROLLBACK选项,这点之前的所有改变将会回退到上一个同步点——你的游戏进展会丢失,你必须在最后一次保存游戏的点继续开始。

 
 

参阅:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/reference/r_set_syncpoint.html?lang=en

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_synchronisation_points.html?lang=en

3. Switch load file

如果RM(资源管理器)安装在默认目录下,TXSeries已经提供了一些可以和这些RM协同工作的switch load file32位的库会被安装,RM版本是可以被支持的最旧的版本。

如果出现XA错误,应该重新编译switch load file

 
 

参阅:

http://www-01.ibm.com/support/knowledgecenter/SSAL2T_8.1.0/com.ibm.cics.tx.doc/concepts/c_enblg_db_cnxn_xa_env.html?lang=en

到此为止,已经介绍了一些有用的基本概念。接下来配置TXSeries连接DB2,并通过示例应用测试连接。确保服务器机器上安装了DB2服务器,客户端机器上安装了DB2客户端。

以下列出本部分实验中的环境:

服务器:

Linux x86_64

DB2 Enterprise Server Edition V10.5(DB2_Svr_10.5.0.1_Linux_x86-64.tar)

Server name:oc5832702872(9.119.154.229)

客户端:

Linux x86_64

DB2 Client V10.5(DB2_DSClient_V10.5_Linux_x86-64.tar)

TXSeries for Multiplatforms 8.1.0

IBM CICS Transaction Gateway Desktop Edition Version 9.0.0.1

4. 在服务器端配置数据库

为了测试是否一切正常,我们需要创建一个数据库并向其中添加一些数据。

1)使用db2inst1用户启动DB2实例

#su – db2inst1

#db2start

2)创建一个名为test1的数据库

#db2 create database test1

3)连接数据库test1

#db2 connect to test1

4)使用SQL命令创建表并添加数据

#db2 “create table student(id int,name varchar(30),age int)”

#db2 “insert into student values(1,’Tom’,22)”

#db2 “insert into student values(2,’Jack’,21)”

#db2 “insert into student values(3,’Marry’,23)”

5)查看数据库中的记录

#db2 “select * from student”

结果如下:

ID NAME AGE

———– ————————– ———–

1 Tom 22

2 Jack 21

3 Marry 23

 
 

参阅:

关于DB2的知识中心:

http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.kc.doc/welcome.html?lang=en

5. 配置服务器端环境

1)在cics组中创建cics用户

这是客户端访问DB2服务器所需的用户,稍后将在XAOpen字符串中找到它,XAOpen字符串中定义了连接数据库所必需的属性。

#su root

#groupadd cics

#useradd -g cics cics

#passwd cics

示例中密码为passw0rd

2)为cics用户赋予访问数据库的合适权限

为了方便测试应用程序中不同的命令(如果需要也可以测试数据位于不同的表中), 此处赋予cics在整个数据库中连接和数据访问的权限。所以cics用户可以连接数据库并进行插入、更新、删除和读取数据等操作。

#su db2inst1

#db2 “grant connect on database to user cics”

#db2 “grant dataaccess on database to user cics”

 
 

参阅:

关于grant

http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000958.html?cp=SSEPGG_10.5.0%2F2-10-3-0-0-5&lang=en

3)配置TCP/IP服务和端口

/etc/services文件中添加如下的服务记录:

db2c_db2inst1 50000/tcp

示例中客户端将从DB2服务器的50000端口进行连接,不要忘记在防火墙中启用这个端口。

然后使用下列命令更新数据库管理器的TCP/IP服务名称:

#db2 update dbm cfg using svcename db2c_db2inst1

现在,重启DB2以更新配置。

#db2stop

#db2start

 
 

参阅:

关于更新svcename

http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.qb.server.doc/doc/t0006065.html?lang=en

6. 客户端配置

1)为远程数据库添加一个节点(node)和数据库别名(alias

为了使TXSeries通过XA协议与DB2通信,客户端需要添加一个节点和数据库别名。

首先向节点目录中添加一个TCP/IP数据库分区服务器记录(node1)用来识别服务器的地址(9.119.154.229)和端口(50000)。

#db2 catalog tcpip4 node node1 remote 9.119.154.229 server 50000

然后在上面的节点中添加数据库别名——这个别名会出现在XAOpen字符串中,作为被连接的数据库的名称。

以下文章点击率最高

Loading…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注