--启动DTC(分布式事务处理协调器) exec master..xp_cmdshell 'net start msdtc',no_output set XACT_ABORT on set ANSI_NULL_DFLT_ON on set ANSI_WARNINGS on BEGIN DISTRIBUTED TRANSACTION select * from OPENDATASOURCE('MSDASQL','DRIVER={SQL Server};SERVER=ip;UID=sa;PWD=密码;').pubs.dbo.jobs commit tran
注意使用事務是: BEGIN DISTRIBUTED TRANSACTION 不是 begin tran
create trigger dw_EIP on dw for update,insert,delete as set xact_abort on set ANSI_NULL_DFLT_ON on set ANSI_WARNINGS on BEGIN DISTRIBUTED TRANSACTION delete mistoeip.xsrz.dbo.dw_mis from mistoeip.xsrz.dbo.dw_mis a,inserted b where a.dwbh=b.dwbhinsert into mistoeip.xsrz.dbo.dw_mis select * from inserted set xact_abort off set ANSI_NULL_DFLT_ON off set ANSI_WARNINGS off commit tran ;执行的时候还是提示相同的问题 谢谢
--创建链接服务器--名称为'srv_lnk' exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','192.168.0.1' exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','密码' goinsert into srv_lnk.alinkcrm.dbo.ops_indent select * from ops_indentgo --处理完成后删除链接服务器 exec sp_dropserver 'srv_lnk','droplogins'
--创建链接服务器--名称为'srv_lnk' exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','服务器名称或者ip' exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码' goinsert into srv_lnk.alinkcrm.dbo.ops_indent select * from ops_indentgo --处理完成后删除链接服务器 exec sp_dropserver 'srv_lnk','droplogins'
觸發器本身就是事務,去掉BEGIN DISTRIBUTED TRANSACTION試試create trigger dw_EIP on dw for update,insert,delete as set xact_abort on set ANSI_NULL_DFLT_ON on set ANSI_WARNINGS on delete mistoeip.xsrz.dbo.dw_mis from mistoeip.xsrz.dbo.dw_mis a,inserted b where a.dwbh=b.dwbhinsert into mistoeip.xsrz.dbo.dw_mis select * from inserted set xact_abort off set ANSI_NULL_DFLT_ON off set ANSI_WARNINGS off
create trigger dw_EIP on dw for update,insert,delete as set xact_abort on set ANSI_NULL_DFLT_ON on set ANSI_WARNINGS on set NOCOUNT ONdelete a from mistoeip.xsrz.dbo.dw_mis a,inserted b where a.dwbh=b.dwbhinsert into mistoeip.xsrz.dbo.dw_mis select * from inserted set xact_abort off set ANSI_NULL_DFLT_ON off set ANSI_WARNINGS off set NOCOUNT off
D.下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息. http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe二.两台机的MSDTC是否都打开了.三.MSDTC设置是否正确. 1.打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。 2.转至"组件服务管理工具"。 3.浏览至"启动管理工具"。 4.选择"组件服务"。 a.展开"组件服务"树,然后展开"我的电脑"。 b.右键单击"我的电脑",然后选择"属性"。 C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问 网络管理 网络事务 XA 事务 e.另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。 5.单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。 所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。 6.单击"确定"关闭"我的电脑"属性窗口。 四. MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙. telnet IP 135 如果是关闭的打开它.五. 有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL" 的ODBC方式联接. 使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器) Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication. 七.检查你的两台服务器是否在同一个域中. 如果不在同一个域中,是否建立可信任联接.八.如果是WIN2000,升级到SP4九.升级MDAC到2.6以上,最好是2.8.
exec master..xp_cmdshell 'net start msdtc',no_output set XACT_ABORT on
set ANSI_NULL_DFLT_ON on
set ANSI_WARNINGS on BEGIN DISTRIBUTED TRANSACTION
select * from OPENDATASOURCE('MSDASQL','DRIVER={SQL Server};SERVER=ip;UID=sa;PWD=密码;').pubs.dbo.jobs
commit tran
BEGIN DISTRIBUTED TRANSACTION
不是
begin tran
on dw
for update,insert,delete
as
set xact_abort on
set ANSI_NULL_DFLT_ON on
set ANSI_WARNINGS on
BEGIN DISTRIBUTED TRANSACTION
delete mistoeip.xsrz.dbo.dw_mis from mistoeip.xsrz.dbo.dw_mis a,inserted b
where a.dwbh=b.dwbhinsert into mistoeip.xsrz.dbo.dw_mis select * from inserted
set xact_abort off
set ANSI_NULL_DFLT_ON off
set ANSI_WARNINGS off
commit tran
;执行的时候还是提示相同的问题
谢谢
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','192.168.0.1'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','密码'
goinsert into srv_lnk.alinkcrm.dbo.ops_indent select * from ops_indentgo
--处理完成后删除链接服务器
exec sp_dropserver 'srv_lnk','droplogins'
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','服务器名称或者ip'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
goinsert into srv_lnk.alinkcrm.dbo.ops_indent select * from ops_indentgo
--处理完成后删除链接服务器
exec sp_dropserver 'srv_lnk','droplogins'
exec sp_addlinkedsrvlogin 'mistoeip','false',sa,'sa','aaa'
----------
aaa为密码
on dw
for update,insert,delete
as
set xact_abort on
set ANSI_NULL_DFLT_ON on
set ANSI_WARNINGS on delete mistoeip.xsrz.dbo.dw_mis from mistoeip.xsrz.dbo.dw_mis a,inserted b
where a.dwbh=b.dwbhinsert into mistoeip.xsrz.dbo.dw_mis select * from inserted
set xact_abort off
set ANSI_NULL_DFLT_ON off
set ANSI_WARNINGS off
on dw
for update,insert,delete
as
set xact_abort on
set ANSI_NULL_DFLT_ON on
set ANSI_WARNINGS on
set NOCOUNT ONdelete a from mistoeip.xsrz.dbo.dw_mis a,inserted b
where a.dwbh=b.dwbhinsert into mistoeip.xsrz.dbo.dw_mis select * from inserted
set xact_abort off
set ANSI_NULL_DFLT_ON off
set ANSI_WARNINGS off
set NOCOUNT off
一.A.不用事务,关用SELECT 语句.是否可以分布式查询? B.LINKSERVER 在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务) C.DBCC TRACEON (3604, 7300)--用跟踪看更详细错误信息.
D.下载MS提供的DTCPing.exe 分装在两台机上,按README说明来运行它.看出错信息.
http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe二.两台机的MSDTC是否都打开了.三.MSDTC设置是否正确.
1.打开命令提示,运行"net stop msdtc",然后运行"net start msdtc"。
2.转至"组件服务管理工具"。
3.浏览至"启动管理工具"。
4.选择"组件服务"。
a.展开"组件服务"树,然后展开"我的电脑"。
b.右键单击"我的电脑",然后选择"属性"。
C.在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
网络管理
网络事务
XA 事务
e.另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。
5.单击"确定"。这样将会提示您"MS DTC 将会停止并重新启动。
所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。
6.单击"确定"关闭"我的电脑"属性窗口。
四.
MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.
telnet IP 135
如果是关闭的打开它.五.
有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL" 的ODBC方式联接.
使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)
Check whether you are using Remote Access Server (RAS) to access remote servers. If so, make sure that you have implemented Routing RAS (RRAS). Linked server does not work on RAS because RAS allows only one way communication.
七.检查你的两台服务器是否在同一个域中.
如果不在同一个域中,是否建立可信任联接.八.如果是WIN2000,升级到SP4九.升级MDAC到2.6以上,最好是2.8.
无论是什么网段,只要有路由并且打开了1433和135端口,只需修改LMHOST文件就可以。