Как переместить схему базы данных с одного сервера на другой сервер

#sql #sql-server #sql-server-2005 #sql-server-2008 #database-diagram

#sql #sql-сервер #sql-server-2005 #sql-server-2008 #база данных-схема

Вопрос:

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

Комментарии:

1. диаграмма — это только визуальное представление всех PK и FK … вы можете легко создать скрипт для обновления существующей базы данных с помощью этой информации.

2. @balexandre — Совсем не так. На диаграмме могут быть текстовые примечания. Кроме того, графическое расположение таблиц на схеме может передать, как таблицы логически сгруппированы вместе.

Ответ №1:

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

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

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

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

Для копирования в другую базу данных на том же экземпляре SQL самый простой способ — выполнить INSERT… ВЫБЕРИТЕ … между таблицами. Из-за этого столбца идентификаторов вам придется повозиться с УСТАНОВКОЙ 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. 1: У меня это сработало. На самом деле это не имело большого значения, поскольку я был на том же сервере, но пока я не нашел этот скрипт, я немного боролся.

Ответ №2:

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

  1. Если она не существует, создайте базу данных на вашем целевом сервере. Вы также должны нажать на узел «Диаграммы базы данных» в SSMS, чтобы он создал таблицу 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, но это не должно быть слишком сложно.

Ответ №3:

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

Комментарии:

1. резервное копирование и восстановление — это единственный известный мне способ переноса схемы.

2. Я не хочу делать резервное копирование и восстановление, поскольку таблицы на разных серверах разные. Есть ли другой способ, кроме резервного копирования и восстановления?