代码之家  ›  专栏  ›  技术社区  ›  Prescott

链接表-SQL Server 2008到SQL Server 2005

  •  1
  • Prescott  · 技术社区  · 14 年前

    我有一个数据库服务器,当前有两个数据库,分别称为[A]和[B]。

    [A]是我的应用程序使用的标准数据库吗? [B]被另一个应用程序使用(这会给服务器带来相当大的负载),但是,我们谨慎地使用一些表(在我的应用程序和使用[B]的主应用程序之间共享)。最近,对[B]的使用不断增加,这导致了我的应用程序中长时间的等待和超时。

    我乐于接受其他的想法,但目前我所提出的最快的潜在解决方案是找到第二个数据库服务器并将[A]转移到那个服务器上。但是,我确实需要访问[B]中的一些表——理想情况下,代码更改越少越好。

    我们在考虑一种设置,比如:

    当前: DB服务器1[A]、[B](SQL Server 2005)

    新设置 DB服务器1[B](SQL Server 2005) DB服务器2[A]、[B](SQL Server 2008)

    在新设置中,dbserver2[b]是一个链接到dbserver1的表(类似于)。

    我研究了链接数据库,从我的理解(有限的)来看,这些数据库作为另一台服务器上的数据库的别名工作,这几乎是我们想要的,只是它添加了额外的服务器限定符,并且它在数据库级别上工作。我想这样做,但理想情况下没有服务器限定符和表级别。

    例如,[B]有表用户和事件。用户表每周按批更新一次,我们经常使用它,因此我们希望在新的DBServer2上有一个本地副本。但是,我们使用事件的频率要低得多,并且需要在两个服务器之间实时进行。在这种情况下,将事件作为一个链接表进行处理是非常好的。

    此外,如果我们可以对查询使用相同的标记,那就太棒了。今天要从另一个数据库中查询一个数据库,我们将执行如下操作

    从b.events join a.dates中选择*。

    我们想继续,除非让数据库服务器知道,当我们接触事件时,它实际上位于dbserver1.b.events。

    这有道理吗?我有时会把自己弄糊涂。

    谢谢你的帮助 ~P

    2 回复  |  直到 14 年前
        1
  •  0
  •   Sam    14 年前

    可以使用链接对象的同义词- http://msdn.microsoft.com/en-us/library/ms177544%28SQL.90%29.aspx

    不幸的是,这只适用于单个对象,您不能将linkedserver.databasename作为同义词,然后引用syndbname.table。

        2
  •  0
  •   Sam    14 年前

    自从你说你是开放的,我的“另类想法”…

    看看慢的原因怎么样?你测量的“负荷”是多少? 您的磁盘在服务器上的布局如何?

    也许您可以使用更多的内存、另一个CPU或一些SQL调优?

    用软件或硬件修复方法修复问题可能比使用服务器进行所有安装,然后解决可能遇到的集成问题更快。