第二部分 DB2
關於本部分
DB2作為一個流行的RDBMS(關係型數據庫管理系統)和DTP模式下(分布式事務處理模型)的資源管理器,可以與TXSeries協同工作。數據可以被DB2高效地管理,用戶僅僅需要考慮如何連接DB2並保證數據的完整性。本部分將介紹三種連接類型的概念:non-XA(非XA協議提交)、XA single phase(XA協議一階段提交)和XA two phase(XA協議兩階段提交)和一些相關知識。也會進一步介紹如何配置TXSeries通過XA協議連接DB2 。
1. 三種連接類型
用戶可以根據具體情況選擇三種連接類型與資源管理器通信。下面將具體介紹每種連接類型的區別和應用場景。
(1)XA協議一階段提交
一階段提交意味着TXSeries直接發布提交/回滾來一次性完成交易。TXSeries完成連接、斷開、提交和回滾操作並確保數據完整性,而不需要應用程序通過SQL命令來顯式執行。TXSeries和數據庫中的任何數據更新顯式地通過EXEC CICS SYNCPOINT命令提交(或者隱式地通過EXEC CICS RETURN命令提交)。
當一個交易中僅有一個資源管理器時可以使用XA協議一階段提交。它比兩階段提交性能更好。
(2)XA協議兩階段提交
兩階段提交意味着在階段一,TXSeries將請求資源管理器做好準備;在階段二,將發布提交/回滾命令來完成交易。TXSeries扮演和XA協議一階段提交時相同的角色,並將做更多工作以保證多個數據庫中數據的一致性——這就是為什麼一階段提交有更好的性能。
當多於一個資源管理器與TXSeries協同工作時,使用XA協議兩階段提交。
(3)非XA協議提交
不同於XA協議,在非XA協議連接中,應用程序需要通過SQL命令完成包括連接、斷開、提交和回滾在內的所有工作。如果出現任何錯誤,數據應該被手動恢復以保證完整性。
只在性能比資源完整性和交易原子性(例如:只讀)更重要時,或者應用程序已經包含用於連接、斷開、提交和回滾的SQL命令時使用非XA協議提交。
在多數情況下XA協議連接是保證數據完整性的更好選擇,因為大多數重要的工作已經被TXSeries完成。
2. SYNCPOINT介紹
EXEC CICS SYNCPOINT命令定義一個同步點,它可以標記一個邏輯工作單元(LUW)的完成。在執行這個命令後,除非ROLLBACK選項被指定,否則可恢復資源的修改會被提交。
同步點類似於遊戲中的存檔點——LUW中的資源更新會在這個點被保存(提交)。但是如果 SYNCPOINT後跟着ROLLBACK選項,這點之前的所有改變將會回退到上一個同步點——你的遊戲進展會丟失,你必須在最後一次保存遊戲的點繼續開始。
參閱:
3. Switch load file
如果RM(資源管理器)安裝在默認目錄下,TXSeries已經提供了一些可以和這些RM協同工作的switch load file。32位的庫會被安裝,RM版本是可以被支持的最舊的版本。
如果出現XA錯誤,應該重新編譯switch load file。
參閱:
到此為止,已經介紹了一些有用的基本概念。接下來配置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的知識中心:
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:
(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:
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…