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