正在使用的服务器:SQL Server 2012 SP3
我刚刚收到一个奇怪的错误(奇怪,因为它之前工作过)
could not connect to server LNK_SRV because sa is not defined as a remote login
sys.servers 说 LNK_SRV 的 is_linked = 0 - 不知道为什么。以下返回结果
select top 10 * from LNK_SRV.DBName.dbo.TblName
但是程序失败了
exec LNK_SRV.DBName.dbo.ProcName
在我们删除链接服务器并重新添加它之前,它工作正常。
此外,LNK_SRV 也被用于复制。
注意:我知道 sa 不好。它很快就会得到照顾。
链接服务器也用于复制。
订阅和创建链接服务器的顺序是问题所在。
重现错误:
1. 删除订阅
2. 删除链接服务器
3. 先配置订阅
4. 下一步链接服务器
5. 测试
- a. 选择将返回结果
- b。执行过程导致错误
修复:
1. 删除订阅
2. 删除链接服务器
3. 首先创建链接服务器
4. 接下来配置订阅
5. 测试
- a。选择将返回结果
- b。exec proc 将成功
此外,在链接服务器上执行以下操作也可以。
根据 sys.servers 的文档,is_linked:
您的链接服务器为 is_linked 返回 0 的事实表明链接服务器是使用旧样式创建的
sp_addserver
(不推荐)。我建议创建一个“新”链接服务器(用于测试目的),方法是编写一个未使用
sp_addserver
或从 SSMS GUI 创建新链接服务器的现有链接服务器。确保您访问新创建的链接服务器的安全页面并根据需要进行调整。尝试使用新的链接服务器来执行远程存储过程以及正常的选择等。如果可行,则删除当前出现故障的链接服务器并将其替换为可以运行的新链接服务器。
这似乎是一个棘手的错误。根据问题,您可以做,
SELECT
但会收到一条错误消息exec
。如果它们尚未得到照顾,您可以尝试以下选项:当涉及两台或多台机器并希望在它们之间进行分布式事务时,SQL 服务器会使用DTC 。更多信息可以在下面的链接中找到。
DTC 的 MSDN 博客
用于分布式事务语法的 Microsoft DOC
如何在 SQL 服务器上启用 DTC 选项:“Shiv Sing”在堆栈溢出时提供了一个有用的答案。
要启用 RPC in 和 out,请在 SQL Server Management Studio 中打开链接服务器的属性窗口。选择
Server Options
,您将在此处找到 RPC 和 RPC out 参数。将它们标记为是。完成后,尝试以以下格式执行相同的命令。