跨 MS SQL 数据库引擎查询

跨 MS SQL 数据库引擎查询

是否可以进行跨两个不同的 2008 MS SQL Server 上的数据库的跨数据库查询?

如果是,那么需要在 MS SQL 中进行哪些配置(如果有的话)?另外,有人可以给我展示一个示例查询吗?

范围蔓延:
链接两个服务器时:

  • 这是否会以某种方式耦合服务器,从而可能导致跨链接服务器的查询之外的缺点?
  • 这些服务器在地理上分散。但是,使用此功能的查询通常很少见。根据经验,此功能和 SQL 服务器是否存在任何特殊挑战?

答案1

这称为分布式查询,非常常见。链接服务器是执行您所描述的操作的最常见且最简单的方法;如果这对您不起作用,您可以尝试 OPENQUERY 或 OPENROWSET,但您可能不需要这样做。其他人已经介绍了“如何”创建链接服务器,所以我就不详细介绍了。

使用链接服务器的查询可能会影响性能,但服务器整体的性能不会降低。由于您的服务器在地理上分散,因此性能影响将比它们位于同一 LAN 上时更大;您必须尝试看看性能是否可以接受,但假设远程服务器的响应时间不错,您可能不会有任何问题。

使用链接服务器时要记住的最重要的事情是尽可能集中远程服务器返回的结果集。SQL Server 不会在两台服务器之间提供活动链接,以便像所有东西都在同一台服务器上时那样在不同服务器上的对象之间进行“实时”连接。相反,它所做的是将分布式查询分解为可以在远程服务器上独立运行的部分,然后将结果返回到调用(本地)服务器并完成作业。这意味着任何事物- 连接、条件、计算等 - 涉及多个服务器的这些操作必须保存在本地服务器上,并且支持该操作所需的任何数据都必须带回。举一个简单的例子,如果远程服务器上的 10,000,000 行表与本地服务器上的 15 行表连接,SQL Server 将从远程服务器带回所有 10,000,000 行以执行连接!不用说,这将导致严重的性能下降,尤其是在较慢的连接上。使用估计的执行计划来验证远程查询;使用派生列和 CTE 之类的东西“明确”创建可以批量传递给远程服务器的原子查询;如果您发现严重问题,请不要害怕将查询拆分为单独的查询以强制其返回较小的结果集。

希望这可以帮助!

答案2

是的,你可以链接服务器

SELECT * FROM SERVER1.DBO.DB1.TABLE1

答案3

警告:我是开发人员,不是数据库管理员 - 我的观点可能有所不同;p

配置及方法:链接服务器和 4 部分标识符

你应该是一个比较棘手的问题;我上一个职位的 DBA 团队热衷于尽量减少这种“令人憎恶的事情”;我相信他们有充分的 DBA 理由;事实上,我从开发的角度同意了,纯粹是出于维护/可管理性。

答案4

当我为我的组织创建链接服务器时,我总是映射所有登录名(“对于上面列表中未定义的登录,连接将:不会建立” - GUI 中链接服务器安全部分中的第一个单选按钮)。

我对此有抱怨,但在我看来,当我明确映射登录名时,我知道谁将从起始服务器转到目标服务器。有趣的是,我从来没有遇到过审计员询问链接服务器的问题。

相关内容