欢迎来到天天文库
浏览记录
ID:26583849
大小:2.11 MB
页数:14页
时间:2018-11-27
《分布数据库事务处理-sqlserver》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、分布式数据库事务处理1.为什么要用分布事务?1)为了保证数据库完整性,一致性。如大监管标准版中,业务库与基础信息库是分开的,客户一般要求将最终结果反写到基础数据中。如果不引用分布事务,由于网络的原因及其他外界各方面的原因,会导至数据的不一致性。2)在对外项目中,我们时常会听到客户反应“为什么在流程中,前面是有的,到后面就是不对了?(在操作后事件中,同步操作多表)”类似这样的问题,我方经常回复客户是“将此记录删除了,重新走一条”。以上这种问题可以通过,开启事务的方法来避免,减少垃圾数据。下面以分布数据事务为例,讲解一下环境的配置及写法。2.
2、分布数据库数据的配置数据库:2008R21).双方启动MSDTC服务MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(DistributedTransactionCoordinator)服务。如下图:2.打开双方135端口MSDTC服务依赖于RPC(RemoteProcedureCall(RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。使用“telnetIP135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Adva
3、ncedPortScanner)扫描端口以判断端口是否开放。如果图:图2)图3)图4)图5)图6)图7)然后一直下一步,直到见图8)点击“完成”即可。补充:首先允许Msdtc.exe通过Window防火墙,如下图:图9)图10)图11)图12)最后点击“确定”即可。3.保证链接服务器中语句没有访问发起事务服务器的操作MSDTC设置打开“管理工具――组件服务”,以此打开“组件服务――计算机”,在“我的电脑”上点击右键。在MSDTC选项卡中,点击“安全配置”按钮。在安全配置窗口中做如下设置:选中“网络DTC访问”在客户端管理中选中“允许远程客
4、户端”“允许远程管理”在事务管理通讯中选“允许入站”“允许出站”“不要求进行验证”保证DTC登陆账户为:NTAuthorityNetworkService。如图:图13)图14)右击”属性”,图15)点击“确定”,即可。4.1数据库引擎在“C:WINDOWSsystem32driversetchosts”文件中增加一条记录:xxx.xxx.xxx.xxx服务器名作用同样是把服务器名对应到链接服务器的ip地址。如下图:图16)再次说明,双方服务器就得设置。3.数据库方法的设置例如有A和B两个数据库,我要启动数据的情况下在A数据库
5、上访问B数据库上的数据库,并对其进行增、删、改、查的操作。第一步、打开两台数据库的分布式通信息。第二部,添加数据库服务器。如下图:数据库按以下设置完成即可。4.实例1)在数据库中写相关的代码。在启动事务的情况下,查B库的Test表。在启动事务的情况下,对B库的Test表进行增、删、改。注:在执行增、删、改时,确保XACT_ABORT是打开的。2)在.net代码中写分布事务publicstringServer1Str=System.Configuration.ConfigurationManager.ConnectionStrings["S
6、erver1"].ToString();publicstringServer2Str=System.Configuration.ConfigurationManager.ConnectionStrings["Server2"].ToString();TransactionOptionstOpt=newTransactionOptions();tOpt.IsolationLevel=System.Transactions.IsolationLevel.ReadCommitted;//设置超时间隔为2分钟,默认为60秒tOpt.Timeout
7、=newTimeSpan(0,2,0);using(TransactionScopescope=newTransactionScope(TransactionScopeOption.RequiresNew,tOpt)){SqlConnectionser1conn=newSqlConnection(Server1Str);SqlConnectionser2conn=newSqlConnection(Server2Str);try{stringRowGuid=Guid.NewGuid().ToString();//SqlConnections
8、er1conn=newSqlConnection(Server1Str);ser1conn.Open();SqlCommandser1cmd=newSqlCommand();ser1cmd.C
此文档下载收益归作者所有