BEA Tuxedo的数据库系统[转帖]_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4306 | 回复: 0   主题: BEA Tuxedo的数据库系统[转帖]        下一篇 
匿名用户
发表于: IP:您无权察看 2012-7-6 10:06:18 | [全部帖] [楼主帖] 楼主

Tuxedo/SQL是一个随BEA Tuxedo系统一块发布的资源管理器(RM),它是完全XA兼容的,可以和任何XA兼容的事务管理器(TM)协同工作。它是一个小型数据库系统,主要用于演示Tuxedo与数据库的连接以及事务处理的特性,BEA公司不推荐将其用于正式系统中。然而,在应用程序开发和测试阶段,Tuxedo/SQL却是一个很不错的资源管理器。本文以一个通讯录的存取为例子,介绍Tuxedo/SQL的使用。一、创建数据库和表Tuxedo/SQL提供了一个管理实用工具sql,通过它可以创建数据库以及表、索引等数据库对象,从功能上看,它有点类似于Oracle的SQL*PLUS。在使用sql之前,要定义两个环境变量:FSCONFIG和DBNAME,前者指定数据库使用的设备文件,后者指定数据库名。1.设置环境变量假设通讯录数据存储在G:\Bea\tuxedo\samples\atmi\addrlist\JQDB1.DAT设备文件中,数据库为JQDB,配置文件为tuxconfig,则环境变量应该设置如下:

北京联动北方科技有限公司2.创建数据库设备使用tmadmin实用程序创建数据库设备,大小为30000个磁盘块:>tmadmin -ccrdl -z G:\bea\tuxedo\samples\atmi\addrlist\JQDB1.DAT -b 300003.创建数据库使用sql实用程序创建数据库,名为JQDB,北京联动北方科技有限公司with后面给出了使用的参数,DEVNAME 指出了使用的设置名;IPCKEY取值必须在32768和262143之间;其它参数的取值由资源管理器决定。4.创建表北京联动北方科技有限公司二、批量数据的导入在实际应用中,经常会遇到需要将批量数据导入数据库的问题,Tuxedo对此类问题的解决方案是使用ud实用程序。ud使用Fextread()调用从标准输入读取数据包,把它们存储到一个FML类型缓冲区中,然后发送给SRVCNM标识的服务。如果接收FBFR缓冲区的服务能够将数据插入数据库,那么ud就提供了一种批量数据的导入方法。ud适用于16位FML缓冲区,ud32适用于32位FML缓冲区,wud和wud32只适用于工作站。在下面的例子中,左侧客户程序gendata.c将通讯录数据打印到标准输出,右侧有一个名为ADD_FRIEND的服务,它从FML缓冲区取通讯录数据,然后插入FRIEND表中。北京联动北方科技有限公司注意客户程序中for循环的第一行“printf("n\nSRVCNM\tADD_FRIEND\n");”,它先打印了一个n,表示让ud实用程序重新初始化FML缓冲区,准备读取下面的数据;接着打印了一个SRVCNM,它是Tuxedo系统内部定义的字段标识(FLDID),表示它后面的值ADD_FRIEND是一个服务名,也就是ud将把FML缓冲区数据转发给它。服务器启动后,在命令提示符下运行“gendata | ud”,就可以把所有数据导入到FRIEND表中,若导入成功,ud就显示已发送的数据以及ADD_FRIEND的返回数据,你会注意到它们是一样的,因为ADD_FRIEND服务以输入数据作为ud的响应。三、数据的路由选择在数据导入过程中会碰到这样的问题,即需要将符合某些条件的数据导入一个数据库,而将其它数据导入另外一个数据库,这时就需要根据导入条件进行路由选择。以上面的通讯录数据为例,在客户程序中,好友编号为1~6,现在需要将编号为1~2的数据导入JQDB1,北京联动北方科技有限公司将编号为3~4的数据导入JQDB2,将编号为5~6的数据导入JQDB3。Tuxedo通过数据路由来解决这类问题。程序员不必编写额外的程序,只需修改配置文件,加入路由标准即可。服务器接收到请求后,调用路由函数,根据路由标准将请求转发给其它的服务器来处理。为了解决通讯录数据的路由问题,编写了如上图所示的配置文件,*ROUTING段定义了路由信息,FIELD=FRIEND_ID定义了路由字段,RANGES="1-2:JQG1,3-4:JQG2,5-6:JQG3"定义了路由标准,即FRIEND_ID在1~2范围内的,由JQG1组中的ADD_FRIEND服务来处理,在3~4范围内的,由JQG2组中的ADD_FRIEND服务来处理,在5~6范围内的,由JQG3组中的ADD_FRIEND服务来处理。*SERVER段中定义了三个FRIEND服务器,分别用于提供JQG1、JQG1、JQG1组中的ADD_FRIEND服务。*GROUP段中不但定义了三个组,而且还定义了每个组使用的资源。服务器运行后,打印出来的服务列表为:北京联动北方科技有限公司四、数据库的操作在Tuxedo系统中,客户程序对数据库的访问只能通过服务调用来完成,服务对数据库的操作由System/T进行管理和监控。System/T对数据库的操作以事务为单位,在下图中,客户程序为了达到将一条通讯录从JQDB1移动到JQDB2的目的,依次调用了GET、DEL、ADD三个服务,这三个服务调用构成了一个事务。事务具有1和0两个特性,即只有所有操作都执行成功,事务才能提交,否则必须回滚。

北京联动北方科技有限公司

客户程序执行tpinit()调用加入System/T,执行tpbegin()调用通知System/T开始一个事务。若三个服务调用都成功,客户程序执行tpcommit()调用通知System/T可以提交事务了,否则执行tpabort()调用通知System/T回滚事务,最后执行tpterm()调用退出System/T。



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论