标签: linked-server

链接服务器上的 SQL Server 更新查询导致远程扫描

我将 SQL Server 2012 设置为 SQL Server 2008 服务器上的链接服务器。

以下查询在不到 1 秒内执行:

   SELECT kg.IdGarment
   FROM Products p 
   INNER JOIN ZAMStaffRentals r ON r.ProductID = p.UniqueID 
   INNER JOIN ZAMCustomer_Staff s ON r.StaffID = s.UniqueID 
   INNER JOIN ZAMRentalGarments g ON g.StaffRentalID = r.UniqueID 
   INNER JOIN [REMOTE_SERVER].[REMOTE_DB].dbo.t_ProcessIT_Garment kg on g.BarcodeRFID = kg.IdGarment 
   INNER JOIN ZAMKannChanges log on log.GarmentID = g.UniqueID 
   WHERE log.ActionType = 'I' 
Run Code Online (Sandbox Code Playgroud)

t_ProcessIT_Garment包含 37,000 行,查询返回两条记录,IdGarment 列为主键。这里没问题。

但是,如果我运行此查询进行远程更新,则需要 24 秒,并且会影响 2 行:

   UPDATE [REMOTE_SERVER].[REMOTE_DB].dbo.t_ProcessIT_Garment SET 
   IdGarment = IdGarment
   FROM Products p …
Run Code Online (Sandbox Code Playgroud)

sql-server linked-server

6
推荐指数
1
解决办法
1万
查看次数

MySQL - 在另一台服务器上运行 SELECT 语句而不定义表结构

在 MySQL 中,我可以使用联合表查询另一台服务器上的信息,只要我在本地定义了相同的表结构。

但是,在 MS SQL Server 中,我可以对链接服务器运行任何 SQL 语句。是否可以在 MySQL 中做同样的事情?

mysql linked-server

6
推荐指数
1
解决办法
1万
查看次数

从 SQL Server 2012 到 SQL Server 2000 服务器的链接服务器

我有一个新的 SQL Server 2012 实例,并且正在从 SQL Server 2000 迁移数据库。数据库中的一些存储过程我正在移动引用另一个数据库回到该 2000 服务器上。处理这个问题的最佳方法是什么?

链接服务器会有帮助吗?我在创建测试链接时遇到问题。有些人推荐使用 ODBC,其他人似乎使用 SQL Server 10 客户端驱动程序 (SQLNCLI10)。使用 SQL Server 10 客户端驱动程序对我来说似乎更好,在 SQL Server 2012 实例上安装它有问题吗?

sql-server sql-server-2000 linked-server sql-server-2012

6
推荐指数
2
解决办法
3万
查看次数

如何通过 tcp/ip 为远程数据库指定链接服务器?

我有一个在 IAAS 提供程序上运行的远程数据库,我需要能够从我的本地工作站执行联合查询。我遇到了麻烦,因为当我尝试创建链接时,它试图使用命名管道进行连接。

我使用 SQL Server Native Client 10 创建了一个系统 DSN,并向其提供 IP、数据库、用户和密码。测试了它,它很好。

  1. 转到链接服务器并创建新服务器。
  2. 指定名称“MAIN”
  3. 在组合框中选择 SQL Server Native Client 10
  4. 在产品名称字段中输入 SQL Server
  5. 在数据源字段中输入我的 DSN 名称
  6. 在提供者名称字段中输入 SQLNCLI10
  7. 在目录字段中输入我的数据库名称
  8. 转到安全选项并指定我的本地到远程登录配对。

单击“确定”后,我收到一条错误消息,提示它找不到服务器,并显示它正在尝试使用命名管道。

我应该怎么做才能纠正这个问题?

sql-server sql-server-2008-r2 linked-server

6
推荐指数
1
解决办法
9004
查看次数

链接服务器上缺少数据库

所以有一个链接服务器。但是,在展开目录下拉列表后,我目前无法从 SSMS 中查看与该链接服务器关联的所有数据库。我的理解是这可能是权限问题。但是,我不确定我需要授予哪些权限才能与来自链接服务器的 tat db 进行交互。

有任何想法吗?

从链接服务器执行以下命令后:

select * from [<server>].[<database>].[dbo].table1
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

链接服务器 "" 的 OLE DB 访问接口 "SQLNCLI10" 不包含表 """."dbo"."table1""。该表不存在或当前用户对该表没有权限。

TLDR;

问题:我不确定如何显示与我的链接服务器关联的数据库之一。

sql-server linked-server

6
推荐指数
2
解决办法
3万
查看次数

SQL Server:当数据库可能在同一台服务器上时使用 4 部分标识符

在我客户端的设置中,为了节省成本,较低环境中的数据库服务器都在一台服务器上,但在较高环境中,这些数据库部署在单独的服务器上,并且在跨服务器运行查询时使用链接服务器。

示例设置:

Dev:
  Server1: DB1, DB2
UAT: 
  Server1: DB1 (with linked server for DB2)
  Server2: DB2
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用一组 SQL Server Data Tools 项目来维护数据库,使用 4 个部分[server].[database].[schema].[object]标识符和数据库引用变量来对关系进行建模。当数据库不在同一台服务器上时这很有效,但当数据库在同一台服务器上时会失败。

我的问题:

  1. 除了省略服务器定义之外,是否有默认方法可以在 4 部分标识符中引用本地服务器?
  2. 如果没有,有没有办法添加指向本地服务器的链接服务器?
  3. 如果上述两种方法都不可能,是否有另一种方法可以在 SQL Server 中进行管理?

sql-server linked-server ssdt

6
推荐指数
1
解决办法
2226
查看次数

在引用链接服务器中的表的本地数据库中创建存储过程

我目前有一个本地服务器链接到远程服务器。

是否可以在本地服务器内创建存储过程,但从链接服务器内的表中查询数据。我知道可能存在性能问题,但我不愿意在链接服务器上创建 sp,因为它需要获得权限才能这样做。

我相信我的问题是语法,但我无法确定到底是什么,

USE [LOCALDB]  --my local database or should I reference linked server db here
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROC [dbo].[mystoredprocedure]
    DECLARE @linkedserv NVARCHAR(150)
    DECLARE @linkeddb NVARCHAR(150)

    SET @linkedserv = 'HOSTNAME\SERVER';
    SET @linkeddb = 'remotedb';

    SELECT (CASE LTRIM(RTRIM([COLUMN1]))
        WHEN '' Then ''
        WHEN 'THIS' THEN 'THAT'
        WHEN 'NOW' THEN 'NEVER'
        ELSE 'OTHER' END) [Options]
    INTO #TempTable
    FROM @linkedserv.@linkeddb.dbo.TableOnLinkedServer --is this an issue?
    FULL OUTER JOIN OtherTableOnLinkedServer ON TableOnLinkedServer.COUMN1 = 
    OtherTableOnLinkedServer.COLUMN0   
Run Code Online (Sandbox Code Playgroud)

链接服务器 db …

sql-server stored-procedures linked-server

6
推荐指数
1
解决办法
1763
查看次数

非常偶发无法初始化链接服务器的 OLE DB 提供程序“SQLNCLI11”的数据源对象

链接服务器“001”的 OLE DB 访问接口“SQLNCLI11”返回消息“由于打开服务器连接延迟,无法完成登录过程”。消息 7303,级别 16,状态 1,第 19 行无法初始化链接服务器“001”的 OLE DB 访问接口“SQLNCLI11”的数据源对象。

我意识到有很多潜在适用的 SO 帖子和谷歌点击(其中许多我已经阅读了很多次),所以让我来看看我们所看到的和我们已经尝试过的。老实说,我现在不知道还有什么可看的。

我们将链接服务器 001(目标)转到 002(源)作为 SQL 登录名,该登录名从 C#/.Net 应用程序代码作为 proc 通过数据访问方法和 SSPI 连接字符串通过具有适当权限的服务帐户调用。我相信 .Net 版本是 4.3,现在是 4.7,但问题在两者中都存在。它是从不同网络上的旧 2008R2 环境迁移而来的,这在物理设备上从来都不是问题,而且两个新的当前都是 64 位 2016 虚拟机。

问题期间始终可重现,但在其他情况下则不然,并且似乎总是相同的调用。对于阻塞/死锁/奇怪的锁定页面或对象,sp_what 中没有显示任何内容。如果未报告该问题,则该问题将无法重现。有时它只发生一次或两次,有时持续 10-15 周,然后它会正常工作数周。不确定它是否相关,但是当我们看到这个时,应用程序偶尔也会显示线程中止,但我认为这更像是一种症状。

  • 双方的链接服务器和帐户已通过脚本和 GUI 以及已知的工作链接服务器手动重新创建。我已经多次确认他们没有被锁定并且拥有正确的权限。
  • 我增加了双方的最大查询超时。
  • SQLNCLI11.DLL 驱动程序位于与 SQL Server 安装相同版本的两台服务器上。
  • SQL 管理或错误日志中没有显示任何明显的登录失败、损坏或奇怪行为。
  • 我们在任何一方的服务器事件日志中都看不到任何内容。
  • 我们的网络和安全团队进行了检查,并没有发现位于同一交换机上且未通过防火墙的连接和流量方面的任何问题。
  • 端口是开放的。
  • 当这些问题发生时,来自链接服务器的测试连接工作正常,我通常可以通过临时访问底层问题表,但不能访问存储过程的代码,甚至就地运行。

我在这里缺少什么?

sql-server linked-server errors connections

5
推荐指数
1
解决办法
2429
查看次数

TLS 1.2 破坏 SQL Server 链接服务器

作为最近的安全闪电战的一部分,我们在所有服务器上设置了 TLS 1.2。昨晚我在我们所有的 SQL Server 上翻转了“强制加密”标志,从那时起我在链接服务器上遇到了一个奇怪的问题。

我有两台服务器;

  • 服务器 A 运行 SQL Server 2016 SP2 CU3

  • 运行 SQL Server 2012 SP4 的服务器 B

两者都有正确的加密证书,都有必要的注册表编辑来禁用 SSL 和 TLS 1.0 和 1.1,只启用 TLS 1.2。两者都在 SQL Server Config Mgr 中设置了证书并设置了“强制加密”。

从服务器 A 到 B(2016 年到 2012 年)的链接服务器工作正常。从服务器 B 到 A(2012 年到 2016 年)的链接服务器显示服务器并列出数据库,但任何通过该链接服务器查询表的尝试都会生成错误:

TCP Provider: The specified network name is no longer available. (Microsoft SQL Server, Error: 64)

但是,我可以在服务器 B 上启动 SQL Server Management Studio 会话并连接到服务器 A 就好了。所以只有链接服务器有问题。

我检查了服务器 A 上的扩展事件,我可以看到使用 TLS 1.2 来自服务器 …

sql-server linked-server tls-1.2

5
推荐指数
1
解决办法
1865
查看次数

升级到 SQL Server 2022 后链接服务器上的更新失败

将 SQL Server 从 2019 年升级到 2022 后,以下使用链接服务器的查询开始失败(为了简单起见,我省略了一些列名称和详细信息):

UPDATE [<remote server>].[<remote db>].dbo.Projects
SET    RemoteColumnName = p.LocalColumnName
FROM   prod.Projects p
WHERE  p.ProjectID = Projects.ProjectID;
Run Code Online (Sandbox Code Playgroud)

然而,不涉及本地表工作的基本更新就很好了。SQL Server 报告以下错误,我什至在文档中找不到该错误:

UPDATE [<remote server>].[<remote db>].dbo.Projects
SET    RemoteColumnName = p.LocalColumnName
FROM   prod.Projects p
WHERE  p.ProjectID = Projects.ProjectID;
Run Code Online (Sandbox Code Playgroud)

两台服务器都是 SQL Server 2022,在升级之前一切正常。

为本地和远程表添加 DDL,以防万一。但是,问题似乎与模式无关,并且在具有不同数据类型的不同表上重现。

-- Table on the remote linked server
CREATE TABLE dbo.Projects
(
    ProjectID               BIGINT           NOT NULL,
    RemoteColumnName        VARCHAR(255)     NOT NULL,
    CONSTRAINT PK_Projects PRIMARY KEY CLUSTERED (ProjectID)
)

-- Table on the local server
CREATE …
Run Code Online (Sandbox Code Playgroud)

sql-server linked-server update sql-server-2022

5
推荐指数
1
解决办法
1143
查看次数