【问题标题】:How to move Database Diagram from One Server to Another Server如何将数据库图从一台服务器移动到另一台服务器
【发布时间】:2011-05-13 13:48:24
【问题描述】:

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

【问题讨论】:

  • 图表只是所有 PK 和 FK 的直观视图......您可以轻松创建脚本以使用此信息更新现有数据库。
  • @balexandre - 完全不正确。在图表中,您可以有文本注释。此外,图表中表格的图形布局可以传达表格的逻辑分组方式。

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


【解决方案1】:

这是可以做到的,但这是一种皇家的痛苦。以下是流程的概要和一些脚本。

图表存储在名为 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 等)也是可能的,但我对这些更不熟悉。

【讨论】:

  • +1:这对我有用。由于我在同一台服务器上,这并不是什么大不了的事,但在我找到这个脚本之前,我有点挣扎。
【解决方案2】:

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

  1. 如果不存在,请在目标服务器上创建数据库。您还必须单击 SSMS 中的“Database Diagrams”节点,让它创建一个 dbo.sysDiagrams 表。
  2. 然后确保在图表中导入您需要的所有架构信息。因为您的图表将指向这些。 IE。表、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 操作,但这应该不会太难。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 备份和恢复是我知道您可以迁移图表的唯一方法。
    • 我不想做备份和恢复,因为服务器中的表不一样。除了备份和恢复还有其他方法吗?
    猜你喜欢
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多