9

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

4

3 回答 3

16

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

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

在“源”数据库中创建一个或多个图表。

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

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

以下脚本会将所有图表从一个数据库复制到同一服务器上的另一个数据库(这就是我如何从容易被删除和重新创建的数据库中归档花费太长时间才能创建的复杂图表):

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 等)是可能的,但我对这些更不熟悉。

于 2011-05-13T20:37:32.240 回答
2

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

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

    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 
    

这个解决方案对我来说非常有用。当然,如果您不想要所有图表或目标数据库中存在其他图表,则必须过滤 select 语句并进行一些 identity_insert 操作,但这应该不会太难。

于 2011-10-04T12:23:08.133 回答
0

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

于 2011-05-13T13:53:01.257 回答