msdtc跨数据库使用时,遇到的问题

[复制链接]
查看11 | 回复4 | 2021-1-27 06:10:41 | 显示全部楼层 |阅读模式
有一个Web应用,是在一个DTC的事务中,向同一台数据库的两个不同的数据库写入数据。
按照网上介绍的msdtc要求的配置完成,Web服务器和DB服务器都能使用机器名ping通,在启用dtc的情况下,单独写其中一个数据库,一切正常,但是同时写两个数据库时,就出现dtc通讯失败的错误。
不知道是不是在跨数据库的情况下,还有什么需要特殊设置的地方?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:10:41 | 显示全部楼层
抱歉,上面描述得有点乱,是向同一台数据库服务器上的两个不同的数据库写入数据。
回复

使用道具 举报

千问 | 2021-1-27 06:10:41 | 显示全部楼层
"同一台数据库服务器上的两个不同的数据库"应不用分布式事务,设置用户权限便可
回复

使用道具 举报

千问 | 2021-1-27 06:10:41 | 显示全部楼层
同一台服务器不同的的实例还是同一实例的不同数据库?前者需要使用DTC,后者不需要使用DTC,直接插入就可以了,可以再插入前指定具体数据库名字或者直接将数据库名+schema名字加到表前面,并赋予相应权限就可以了。
使用DTC时需要建EndPoint。参考如下:
DBCCTRACEON(1400,-1)
GO
dropmasterkey
createmasterkeyencryptionbypassword='123';
GO
dropcertificateHOST_W_cert
createcertificateHOST_W_certwithsubject='HOST_Wcertificate',start_date='2010/07/23',expiry_date='2020/11/01';
GO
Createendpointendpoint_mirroringstate=started
astcp(listener_port=7025,listener_ip=all)
fordatabase_mirroring(authentication=certificateHOST_W_cert,encryption=disabled,role=witness);
GO
DROPENDPOINTendpoint_mirroring
BackupcertificateHOST_W_certtofile='E:\HOST_W_cert.cer';
droploginHOST_A_login
createloginHOST_A_loginwithPASSWORD='123';
GO
dropuserHOST_A_user
createuserHOST_A_userfromloginHOST_A_login;
GO
dropcertificateHOST_A_cert
CreatecertificateHOST_A_cert
AuthorizationHOST_A_user
Fromfile='E:\HOST_A_cert.cer';
GO
GrantCONNECTONEndpoint::Endpoint_mirroringto[HOST_A_login];
GO
-------
droploginHOST_B_login
createloginHOST_B_loginwithPASSWORD='123';
GO
dropuserHOST_B_user
createuserHOST_B_userfromloginHOST_B_login;
GO
dropcertificateHOST_B_cert
CreatecertificateHOST_B_cert
AuthorizationHOST_B_user
Fromfile='E:\HOST_B_cert.cer';
GO
GrantCONNECTONEndpoint::endpoint_mirroringto[HOST_B_login];
GO
select@@version

回复

使用道具 举报

千问 | 2021-1-27 06:10:41 | 显示全部楼层

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行