Как переместить диаграмму базы данных с одного сервера на другой сервер - PullRequest
9 голосов
/ 13 мая 2011

Я создал новую диаграмму базы данных в тестовой базе данных, и она находится на сервере sitde01.Теперь я хочу переместить его на другой сервер.Как перенести его на другой сервер.

Ответы [ 3 ]

16 голосов
/ 14 мая 2011

Это можно сделать, но это королевская боль.Вот схема процесса и некоторые сценарии.

Диаграммы хранятся в «системной» таблице с именем sysDiagrams.Эта таблица (только?) Создается, когда вы нажимаете на узел диаграмм в SSMS, она спрашивает вас, хотите ли вы создать объекты, поддерживающие диаграммы, и вы нажимаете «Да».Сделайте это как для исходной, так и для целевой базы данных.

Создайте диаграмму или диаграммы в базе данных «source».

Просмотрите структуру и содержимое sysDiagrams.Обратите внимание, что столбец diagram_id является столбцом идентификаторов.1 строка сохраняется для каждой диаграммы.(Вам все равно, но в SQL 2000 раньше было 4 или 5 строк.)

Чтобы скопировать в другую базу данных на том же экземпляре SQL , самый простой способ - это сделатьВСТАВИТЬ ... ВЫБРАТЬ ... между таблицами.С этим столбцом идентификаторов вам придется возиться с 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 (или сервере), ну, это становится еще сложнее.Я использую временно созданные определения Linked Server, используя сценарии, которые я выбил пулями много лет назад, и мне больше никогда не захочется их модифицировать (т. Е. Опубликовать другой вопрос, чтобы кто-то, кто знает, мог рассказать вам, как они работают), и изменить сценарии с помощью соответствующихсоглашения об именовании частей.Возможны и другие варианты (OPENROWSET и т. П.), Но я еще менее знаком с ними.

2 голосов
/ 04 октября 2011

Если вы хотите переместить свои диаграммы с одного экземпляра или сервера на другой и не хотите восстанавливать всю базу данных, вы можете сделать следующее.

  1. Если его не существует, создайте базу данных на целевом сервере. Вы также должны щелкнуть по узлу «Диаграммы базы данных» в SSMS, чтобы он создал таблицу dbo.sysDiagrams.
  2. Затем убедитесь, что импортировали всю информацию схемы, которая вам нужна на диаграмме. Потому что ваша диаграмма будет указывать на это. То есть таблицы, ПК, ФК и т. д. должны присутствовать.
  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 
    

Это решение отлично сработало для меня. Конечно, если вам не нужны все диаграммы или если в целевой базе данных есть другие диаграммы, вы должны отфильтровать оператор select и выполнить некоторые манипуляции с identity_insert, но это не должно быть слишком сложным.

0 голосов
/ 13 мая 2011

Чтобы переместить диаграмму базы данных, вам нужно перенести все таблицы и триггеры, включенные в эту диаграмму.Самый простой способ сделать это - создать резервную копию БД и восстановить ее на другом сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...