我登录到一个 SQL Server 数据库,它有一个 AS400 服务器作为链接服务器。
我发现如果我在 OPENQUERY 中运行选择,那么针对这个 AS400 服务器运行查询会快得多...
SELECT EMEQP#
FROM _
WHERE EMALOC = '467' AND EMDLCD = 'A' AND EMSTAT NOT IN ('S', 'J', 'V')
Run Code Online (Sandbox Code Playgroud)
执行时间:46秒
SELECT EMEQP#
FROM
OPENQUERY(_, '
SELECT EMEQP#
FROM _
WHERE EMALOC = ''467'' AND EMDLCD = ''A'' AND EMSTAT NOT IN (''S'', ''J'', ''V'')
')
Run Code Online (Sandbox Code Playgroud)
执行时间:1秒
有人可以解释或链接我为什么/如何发生这种情况吗?
我有一个使用链接服务器的慢查询问题。让我先列出我的环境,然后我会解决这个问题:


好的,所以问题本身:
我试过修补:
我不知道从这里开始该怎么做。我们希望使用 4 个 vCore,因为服务器将被大量使用。但是,与仅使用 1 个 vCore 相比,查询需要更长的时间。
是否有任何可能的方法来限制链接服务器使用的 vCore 数量?
还有什么我应该看的吗?
谢谢!
performance sql-server db2 linked-server virtualisation query-performance
公平警告,我知道这不是最好的方法,但我正在尝试扩展一些现有代码而无需重写。
无论如何,我已经安装了两个 SQL Server 2012,一个在我的办公室本地,另一个在远程站点。远程站点的服务器为我的本地系统设置了链接服务器。
远程站点的应用程序将记录插入链接服务器上具有INSTEAD OF触发器的表中。该触发器的末尾有一个 select 语句,它返回一个整数值。如果我在 SSMS 的本地框上插入,我会得到整数作为输出。如果我在远程盒子上插入,我得到的只是1 row(s) affected.
无论如何我可以将触发器的输出传递回链接服务器还是我需要重写为存储过程?
以下文本基于评论中要求的澄清
所有连接都是在远程端的单个用户的安全上下文中进行的。如果我EXECUTE AS USER在本地服务器上使用插入而不是通过链接进行插入,则输出会按预期显示,因此这不是帐户的权限问题。
服务器选项是:
Collation Compatible=False
Data Access=True
RPC=True
RPC Out=True
Use Remote Collation=True
Collation Name=(blank)
Connection Timeout=0
Query Timeout=0
Distributor=False
Publisher=False
Subscriber=False
Lazy Schema Validation=False
Enable Promotion of Distributed Transaction=True
Run Code Online (Sandbox Code Playgroud) 我试图更好地了解 SQL Server 如何使用远程 SQL Server(例如链接服务器)上的统计信息。我知道用户需要 db_owner/db_ddladmin 权限才能使用远程框上的统计信息。起初,根据 Microsoft 的以下文本,这似乎非常简单。
要在链接服务器上使用表时创建最佳查询计划,查询处理器必须具有来自链接服务器的数据分布统计信息。对表的任何列具有有限权限的用户可能没有足够的权限来获取所有有用的统计信息,并且可能会收到效率较低的查询计划并体验较差的性能。如果链接服务器是 SQL Server 的实例,要获取所有可用的统计信息,用户必须拥有该表或者是链接服务器上的 sysadmin 固定服务器角色、db_owner 固定数据库角色或 db_ddladmin 固定数据库角色的成员.
让我困惑的是“用户”这个词。我们为所有连接而不是用户登录使用标准安全上下文。此登录名/用户具有上述对相关数据库的定义所需的权限。此外,我们不使用模拟。
我曾尝试使用在删除服务器上具有和未具有提升权限的帐户运行查询并捕获两端的跟踪。在我看来,远程服务器不会收集统计信息,除非实际用户(键盘上的那个人)拥有提升的权限。我相信这是真的,因为当用户拥有所需的权限时,我只会看到对 sys.sp_table_statistics2_rowset 的调用。
我真的希望这是有道理的。
有没有人了解这在 SQL 2008 R2 及更低版本中的实际工作原理?
sql-server permissions statistics sql-server-2008-r2 linked-server
我有一个 SQL Server 2008 实例,我想用它从 Oracle 服务器导入数据。
我已经设置了一个链接服务器,它在运行像SELECT * FROM table. 但是,如果我声明一个变量或循环遍历表中的行或OPENQUERY.
是否可以使用OPENQUERY? 我需要额外的权限吗?
我有一个 SQL Server 2012 标准版 sp1,它也安装了 ssas。
我从这个服务器创建了一个链接服务器到一个名为 BIREPLON1 的 ssas 服务器,但是当我尝试访问它时,我收到如下所示的错误消息。
有趣的是,当我通过 GUI 时,单击 Server Objects\linked servers\BIREPLON1 似乎一切正常(如下图 4 所示)。
但是当我运行简单的select:
SELECT CATALOG_NAME
FROM OPENQUERY([BIREPLON1], 'SET FMTONLY OFF;SELECT [CATALOG_NAME] FROM $SYSTEM.DBSCHEMA_CATALOGS') as Radhe
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
消息 7303,级别 16,状态 1,第 1 行
无法初始化链接服务器“BIREPLON1”的 OLE DB 提供程序“MSOLAP”的数据源对象。
我错过了什么吗?




我有一个备份 SSAS 数据库的程序。
这是一种魅力。
现在我的服务器被 SSAS 备份填满,我想删除超过 2 天的备份文件。
为了实现这一点,我使用了以下 POWERSHELL 脚本:
#-------------------------------------------------------------------------------
# Script to delete old SSAS backup files
#
# Marcelo Miorelli
#
# 19-novembre-2014 Wed
#-------------------------------------------------------------------------------
#-- connect to the remote server -- SQLBILON1
#
ENTER-PSSESSION sqlbilon1
#-- set the Path where the backup files (.abf) are located
#
$path = 'H:\SQLBackups'
#-- set the number of days backups should be deleted -- in this case 2
#
$NumberOfDays = 2
#-- …Run Code Online (Sandbox Code Playgroud) 想象一下以下场景:我有两台服务器,它们位于两个单独的专用网络上。
已创建链接服务器,服务器 A 中有一个表,该表具有服务器 B 上同一表的更新版本。更新范围不大,本质上只是重新分配了一些布尔值。
两台服务器之间的连接可靠但速度较慢,并且两表之间的排序规则不匹配。
是否有推荐或标准的方法来更新具有排序规则不匹配的两台服务器之间的信息?
我有一个使用 SQL 2014 和 Windows Server 2012 R2 的始终可用组设置。组中有 3 个节点。SQL 服务在每个节点上作为托管服务帐户运行(每个服务器 1 个 MSA)。
我正在尝试在每个节点上创建一个链接服务器以指向当前的活动节点。因此,假设这三个服务器称为 Server1、Server2 和 Server3,而 AlwaysOn 可用性组称为 SQLAAG_PROD。我想创建到 SQLAAG_PROD 的链接服务器。
我能够为每个单独的节点创建一个链接服务器(例如 Server1 与 server2 和 Server3 的链接),并且使用安全选项可以正常工作Be made using the login's current security context。
但是,当我尝试为组侦听器创建链接服务器时,我得到了 Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON
如果我将安全模式更改为对当前活动服务器使用 SA 密码,则一切正常,但出于明显的安全原因,这不是可接受的解决方案。
我已经阅读了很多关于需要设置 SPN 并允许帐户进行委派的内容。我Trust this computer for delegation to any service (Kerberos only)在 Active Directory 中打开了 SQLAAG_PROD 对象,但仍然有同样的问题。
有没有人以前见过这个,和/或是否有关于如何设置的指南?
===更新===
不确定它是否有帮助,但是当我跑步时
select auth_scheme from sys.dm_exec_connections where session_id=@@SPID
Run Code Online (Sandbox Code Playgroud)
当直接连接到节点时,我得到 …
authentication sql-server linked-server availability-groups sql-server-2014
我有 3 台服务器,其中一台配置了指向另一台的链接服务器——我称之为服务器 A。服务器 A 有超过 100 个用于各种目的的用户数据库。服务器 B 正在运行 SQL 2005,我们正试图消除它。服务器 C 拥有服务器 B 中一些数据库的副本,我们正在将应用程序从服务器 B 的数据库副本迁移到服务器 C。
当我在服务器 B 上时,我可以看到从服务器 A 到某个数据库的连接,但我不知道如何判断服务器 A 的哪些过程、任务或作业正在使用该链接服务器连接到服务器 B。
为了停用服务器 B 上的数据库,我需要将服务器 A 的连接重新指向服务器 C 上的数据库;但为了做到这一点,我需要知道服务器 A 上的哪些过程、任务或作业正在使用该连接,以便更新它们。
有没有办法在不禁用链接服务器的情况下查看链接服务器上的依赖关系以查看开始失败的内容?
linked-server ×10
sql-server ×10
ssas ×2
collation ×1
db2 ×1
import ×1
iseries ×1
oracle ×1
performance ×1
permissions ×1
powershell ×1
statistics ×1
trigger ×1