Как я могу скопировать базу данных SQL Server 2005 из производства в разработку? - PullRequest
2 голосов
/ 29 октября 2008

У нас есть рабочий сервер базы данных SQL Server 2005 с рабочей версией базы данных нашего приложения. Я хотел бы иметь возможность скопировать содержимое данных производственной базы данных на сервер разработки для тестирования.

Несколько сайтов (и форумов Microsoft) предлагают использовать параметры резервного копирования / восстановления для копирования баз данных с одного сервера с другого, но это решение не работает по нескольким причинам (у меня нет прав на резервное копирование нашей производственной базы данных, я я не хочу перезаписывать разрешения на сервере разработки, я не хочу перезаписывать изменения структуры на сервере разработки и т. д ...)

Я пытался использовать мастер импорта / экспорта SQL в SQL Server 2005, но он всегда сообщает о нарушениях первичного ключа. Как можно скопировать содержимое базы данных с рабочего сервера в разработку без использования метода «Резервное копирование / восстановление»?

Ответы [ 11 ]

3 голосов
/ 29 октября 2008

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

Один из способов, который я бы порекомендовал, - это удалить все ваши ограничения и индексы, а затем добавить их снова после импорта / экспорта данных.

Не элегантное решение, но оно будет работать очень быстро.

EDIT: Другой вариант - создать пакет служб SSIS, в котором вы специально создадите дамп таблиц в порядке, который не будет нарушать ограничения.

2 голосов
/ 29 октября 2008

Предполагая, что вы можете подключиться к обеим БД с одной и той же машины (что почти всегда возможно - я делаю это с моими производственными серверами через VPN).

Для каждой таблицы

DELETE FROM devserv.dbo.tablename;
SET identity_insert [devserv.dbo.tablename] ON;
INSERT into devserv.dbo.tablename SELECT * from prodserv.dbo.tablename;
SET identity_insert [devname.dbo.tablename] OFF;

Очевидно, стоит отметить, что вам нужно будет сделать это в определенном порядке, если ваши таблицы имеют ограничения внешнего ключа.

2 голосов
/ 29 октября 2008

Я часто использую SQL Data Compare (http://www.red -gate.com / products / sql_data_compare / index.htm ) для этой задачи: записываемые сценарии синхронизации удаляют связи во время передачи и повторно применяют их, но это нормально в большинстве случаев разработки. Это особенно хорошо работает с небольшими базами данных или подмножествами баз данных.

Если ваша база данных велика, я бы порекомендовал найти кого-нибудь с ключами от королевства. Внеочередное резервное копирование может привести к невозможности восстановления базы данных из первичной резервной копии (например, если они выполняют партиализацию в течение недели), помечая записи, резервные копии которых находятся только в вашей резервной копии, так что не пытайтесь обойти эту безопасность, если вы не уверены, почему она там есть.

1 голос
/ 30 октября 2008

Если у вас нет разрешения на резервное копирование на рабочем сервере, я полагаю, это потому, что вы используете общий SQL Server из веб-хостера. В этом случае проверьте, предоставляет ли ваш веб-хостер инструмент под названием myLittleBackup . Позволяет установить БД с одного сервера на другой в несколько кликов ...

1 голос
/ 29 октября 2008

Мастер импорта / экспорта печально известен такими вещами, и на самом деле в нем есть ошибка, которая делает его еще менее полезным при разработке зависимостей (извините, подробностей нет).

Службы SSIS работают намного лучше, но вам придется добавлять каждую задачу копирования таблицы вручную (на самом деле это источник данных, задача копирования и объекты назначения данных. Настроить это немного утомительно (больше, чем должно быть) , но намного проще, чем писать свой собственный код.

Один совет: избегайте генерации проекта SSIS с помощью мастера импорта / экспорта, думая, что его будет легче просто настроить. Он генерирует то, что большинство людей находят неузнаваемым даже при некотором опыте SSIS!

0 голосов
/ 08 июля 2012

Если вам нужно избежать резервного копирования / восстановления, я бы порекомендовал это (эти шаги, если вы не хотите поддерживать старую схему NAME, только структуру) -

Скачать opendbdiff . Выберите «Сравнить» между источником и (пустым) местом назначения. Выберите синхронизацию. вкладку сценария и скопируйте только строки создания таблицы (без таблиц dbo.sysdiagrams и т. д.), вставьте в sql managment studio новый запрос, удалите все имена схем, появляющиеся перед именами таблиц.

Теперь у вас есть полная структура, включая первичные ключи, идентификационные данные и т. Д. Следующий шаг - используйте SQL Server для импорта и экспорта данных, как вы делали раньше (убедитесь, что вы выбрали редактирование отображений и выберите схему назначения как dbo и т. Д.). Также убедитесь, что вы отметили опускание и воссоздаете таблицу назначения.

0 голосов
/ 19 декабря 2008

Мы просто используем Мастер публикации баз данных SQL Server на работе.

Вы бы использовали эту маленькую утилиту для создания сценария T-SQL, который описывает вашу производственную базу данных (включая все ее данные). Затем подключитесь к вашему dev-серверу и запустите сгенерированный скрипт.

0 голосов
/ 19 декабря 2008

Очевидно, стоит отметить, что вам нужно будет сделать это в определенном порядке, если ваши таблицы имеют ограничения внешнего ключа.

0 голосов
/ 30 октября 2008

Я мог бы подумать о том, чтобы получить резервную копию, так как будет ли один запускать ее или нет (хотя бы в теории резервная копия Prod DB резервируется :))

Затем просто восстановите новую базу данных на своем устройстве разработчика, чтобы не конфликтовать ни с чем и ни с кем другим.

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

0 голосов
/ 30 октября 2008

На вашем компьютере разработчика настройте связанный сервер с вашим рабочим компьютером. Тогда просто

INSERT dev.db.dbo.table (fieldlist)

SELECT (список полей) из prod.db.dbo.table

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