链接服务器在触发器中的使用有问题吗?

baoqingfeng 2004-12-06 04:42:45
我的链接服务器建立语句如下:
exec sp_dropserver 'srv_lnk_unicom','droplogins'
exec sp_addlinkedserver 'srv_lnk_unicom','','SQLOLEDB','211......
exec sp_addlinkedsrvlogin 'srv_lnk_unicom','false',null,'sa','xxxx'
exec sp_serveroption 'srv_lnk_unicom','rpc out','true'--这个允许调用链接服务器上的存储过程
exec sp_serveroption 'srv_lnk_unicom','connect timeout','3'
exec sp_serveroption 'srv_lnk_unicom','query timeout','3'

在查询分析器上使用如下语句执行:
declare @error_no int,@left2 varchar(2),@send_message varchar(3000),@src_addr varchar(50),@dst_addr varchar(50),@message varchar(161)
set @src_addr = 'XXXX'
set @dst_addr = '136....'
set @message = 'ck'
print @message
EXEC @error_no = srv_lnk_unicom.account.dbo.sp_sms_storage_query
@src_addr = @src_addr,
@dst_addr = @dst_addr,
@message = @message,
@send_message = @send_message output
print @send_message

可以成功。
但是在触发器里来触发执行这些语句就出现如下错误:
服务器: 消息 7391,级别 16,状态 1,过程 sp_sms_account_manage_service,行 59
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。
不知道为何〉
...全文
352 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
baoqingfeng 2004-12-20
  • 打赏
  • 举报
回复
郁闷,解决不了,只能写扩展存储过程了。
wangdehao 2004-12-09
  • 打赏
  • 举报
回复
哎,还没解决,期待中~~
baoqingfeng 2004-12-08
  • 打赏
  • 举报
回复
客户端如下错误:
Log from Test client:BAO
Start DTC connection test with remote host as 61.241.82.180
61.241.82.180 is resolved to 61.241.82.180

This IP address is back traced to unicom

routing information:

-------------------
gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

gethostbyaddr failure--error at nameping.cpp (line:91)-->
(11004-请求的名称有效并且是在数据库中找到,但是它没有相关的正确的数据。)

unicom (61.241.82.180 ):312 (ms)
-------------------

Invoking RPC method on 61.241.82.180
RPC test is successful
Partner's CID:C2143E26-BD35-4D36-9454-AECD7A110A3F

BAO Initiating DTC Binding Test....
Test Guid:EF1FF901-8653-4901-ABE6-BC592CE61AB9

Trying Bind to 61.241.82.180
Binding call to 61.241.82.180 Failed
In GUID:EF1FF901-8653-4901-ABE6-BC592CE61AB9

Out GUID:00000000-0000-0000-0000-000000000000

Trying Bind to 61.241.82.180


服务器端得到如下错误信息:

DTCping server is ready to take incoming calls
RPC server received call from client
gethostbyname can not resolve BAO

Can not resolve BAO

Received Bind call from Partner: BAO
Trying to Reverse Bind to BAO...
Error(status=1722): at servermanager.cpp (Line:507)

RPC failed
Description:1722-RPC 服务器不可用。
Reverse Binding to BAO Failed
In GUID:58209A05-FC3F-453A-8FA9-7F349A79726C

Out GUID:00000000-0000-0000-0000-000000000000

Received Bind call from Partner: BAO

BAO是客户端机器名字,是我在公司使用的机器。服务器放在IDC机房。
wangdehao 2004-12-08
  • 打赏
  • 举报
回复
不好意思,到现在还没解决
baoqingfeng 2004-12-08
  • 打赏
  • 举报
回复
我用DTCPing.exe 得到如下错误,是什么原因呢。
我已经在lmhost.sam文件中添加了61.241.82.180 unicom

Log from Test client:BAO
Start DTC connection test with remote host as unicom
unicom is resolved to 61.241.82.180

Can not resolve this IP address

Invalid remote host name
baoqingfeng 2004-12-08
  • 打赏
  • 举报
回复
你是这么解决的呢?
wangdehao 2004-12-08
  • 打赏
  • 举报
回复
帮顶一下,我也遇见过
zjcxc 元老 2004-12-08
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2835/2835706.xml?temp=.1959955
回复人: j9988(j9988)

一.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.

十.要安装SQL的最新补丁: sp3a
'全部补丁的位置
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766

'应该安装的补丁sql 2000 sp3
http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe
baoqingfeng 2004-12-08
  • 打赏
  • 举报
回复
没人回答啊
baoqingfeng 2004-12-08
  • 打赏
  • 举报
回复
A数据库机器(内网IP地址)
B数据库机器(公网IP地址)
A,B不能应用 分布式事务 吗?分布式事务是双向邦定的么?如果是的话B如何才能邦定A呢(在B的hosts中只能到A的NAT服务器)?
gimy007 2004-12-07
  • 打赏
  • 举报
回复
mark
baoqingfeng 2004-12-07
  • 打赏
  • 举报
回复
在微软的网站上看到一篇文章
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;329332
但好像是针对window 2003 server的。我的是2000 server的,
按照他的设置好像到这一步就找不到了:
e. 在 MSDTC 选项卡中,确保选中了下列选项: 网络 DTC 访问
网络管理
网络事务
XA 事务
另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。

有何高见?

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧