如何将数据库图从一个服务器移动到另一个服务器

时间:2011-05-13 13:48:24

标签: sql sql-server sql-server-2005 sql-server-2008 database-diagram

我在测试数据库中创建了一个新的数据库图表,它位于sitde01服务器中。现在我想将它移动到另一台服务器。如何将其迁移到另一台服务器。

3 个答案:

答案 0 :(得分:16)

可以做到,但这是一种皇室般的痛苦。以下是该过程和一些脚本的概述。

图表存储在名为sysDiagrams的“系统”表中。单击SSMS中的图表节点时会创建此表(仅?),它会询问您是否要创建支持图表的对象,然后单击“是”。在源数据库和目标数据库上都这样做。

在“源”数据库中创建图表。

查看sysDiagrams的结构和内容。请注意,列diagram_id是标识列。每个图表都存储1行。 (你不在乎,但它在SQL 2000中曾经是4行或5行。)

要复制到同一SQL实例上的另一个数据库,最简单的方法是在表之间执行INSERT ... SELECT ....使用该标识列,您将不得不与SET IDENTITY_INSERT大惊小怪,并且可能在目标计算机上分配新的标识值。刺激,但不是很难。

以下脚本将所有图表从一个数据库复制到同一服务器上的另一个数据库(这就是我存档复杂图表的方式,这些图表花费了很长时间才能创建,从容易被删除和重新创建的数据库): p>

USE TargetDatabase

DELETE sysDiagrams
 where name in (select name from SourceDatabase.dbo.sysDiagrams)

SET identity_insert sysDiagrams on

INSERT sysDiagrams (name, principal_id, diagram_id, version, definition)
 select name, principal_id, diagram_id, version, definition
  from SourceDatabase.dbo.sysDiagrams

SET identity_insert sysDiagrams off

要复制到另一个SQL实例(或服务器)上的另一个数据库,它会变得更加困难。我使用临时创建的链接服务器定义,使用多年前我冒充子弹的脚本,并且从不想再次修改(即发布一个不同的问题,以便知道的人可以告诉你它们是如何工作的),并用适当的四个修改脚本 - 部分命名约定。其他选项(OPENROWSET等)也是可能的,但我对它们的了解甚少。

答案 1 :(得分:2)

如果要将图表从一个实例或服务器移动到另一个实例或服务器,并且您不想还原整个数据库,则可以执行以下操作。

  1. 如果它不存在,请在目标服务器上创建数据库。您还必须单击SSMS中的“Database Diagrams”节点,才能创建dbo.sysDiagrams表。
  2. 然后确保导入图表中所需的所有架构信息。因为你的图表将指向这些。即必须有桌子,PK,FK等。
  3. 在源服务器上备份数据库。
  4. 将其还原到目标服务器上的临时数据库中。通过这种方式,您可以将所有图表信息都收集到目标服务器中。
  5. 将临时数据库中dbo.sysDiagrams表中的信息复制到目标数据库的dbo.sysDiagram表中。你可以做这样的事情(改编菲利普凯利的代码):

    USE TargetDatabase 
    
    SET identity_insert sysDiagrams on 
    
    INSERT sysDiagrams (name, principal_id, diagram_id, version, definition) 
     select name, principal_id, diagram_id, version, definition 
      from TempDatabase.dbo.sysDiagrams 
    
    SET identity_insert sysDiagrams off 
    
  6. 这个解决方案对我来说非常好用。当然,如果您不想要所有图表或目标数据库中存在其他图表,则必须过滤select语句并执行一些identity_insert操作,但这不应该太困难。

答案 2 :(得分:0)

为了移动数据库图,您需要迁移该图中包含的所有表和触发器。最简单的方法是备份数据库并在另一台服务器上恢复。