Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сделать чистую копию базы данных  [new]
wewenami2
Member

Откуда:
Сообщений: 26
Здравствуйте.
Есть рабочая база данных, нужно создать её чистую копию, тесть с таблицами, триггерами, но без данных.
Или получить весь код базы данных (все create table, create trigger и т.д).
Нужно чтобы передавать базу данных с приложением на другие компьютеры.
8 янв 14, 17:08    [15386697]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
wewenami2,

В SSMS правую педаль на базе -> Tasks -> Generate Scripts...
8 янв 14, 17:17    [15386725]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4255
Добавлю свои 5 копеек.
При автоматической генерации скрипта в некоторых случаях приходится руками переставлять создаваемые объекты типа внешнего ключа или констрейна.
Бывает так, что ключ со ссылкой на другую таблицу создается раньше самой таблицы на которую ссылается.
Правильный путь в обход грабель - попытаться запустить скрипт и отловить все косяки.
Метод грубой силы - накатывать скрипт несколько раз с игнорированием ошибок.
8 янв 14, 17:25    [15386750]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
SQL2008
Добавлю свои 5 копеек.


Ну и я свои 2е. Все DDL скрипты должны лежать в системе контроля версий, чтоб не было даже желания генерить их в SSMS. "Там" и порядок можно обеспечить.
8 янв 14, 17:33    [15386788]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
leov
Member

Откуда: С-Петербург
Сообщений: 616
SQL2008,

на sql2k сначала объекты создавало и только потом констрейнты
так что на констрейты не ругалось, хотя если процедуры друг друга вызывали то бывало ругалось
теоретически можно и сейчас два скрипта сделать
8 янв 14, 17:37    [15386801]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
wewenami2
Member

Откуда:
Сообщений: 26
pkarklin
wewenami2,

В SSMS правую педаль на базе -> Tasks -> Generate Scripts...
В этом скрипте нету триггеров, только пользователи и таблицы.
8 янв 14, 17:48    [15386828]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
wewenami2
В этом скрипте нету триггеров, только пользователи и таблицы.


Да ну?! Вы кнопочку Advance на вкладке Script Options нажмите то.
8 янв 14, 17:52    [15386834]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
wewenami2
Member

Откуда:
Сообщений: 26
pkarklin,

спасибо, извините туплю.
8 янв 14, 17:56    [15386848]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
RenVold
Member

Откуда: Бузулук
Сообщений: 359
wewenami2
Здравствуйте.
Есть рабочая база данных, нужно создать её чистую копию, тесть с таблицами, триггерами, но без данных.
Или получить весь код базы данных (все create table, create trigger и т.д).
Нужно чтобы передавать базу данных с приложением на другие компьютеры.


А что за СУБД то?
8 янв 14, 22:13    [15387600]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
wewenami2
Member

Откуда:
Сообщений: 26
RenVold,

MS SQL Server Express 2008 R2
8 янв 14, 23:57    [15387853]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
Crimzic
Member

Откуда: Sydney
Сообщений: 59
wewenami2,

В голову пришли два способа. Один нормальный, другой кривой немного:
1. Visual Studio SQL Server Data Tools. Создать "SQL Server Database Project" и воспользоваться фичей "Import Database". Потом проект можно легко деплоить на другие сервера при помощи Visual Studio или SqlPackage.exe.
2. Backup рабочей БД, Restore её на другой сервер, потом DELETE FROM <all tables> в бесконечном цикле, пока все данные не будут удалены :-) Полученную пустую БД можно бекапить и восстанавливать в другие места.
9 янв 14, 03:16    [15388218]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
гость888
Guest
>DELETE FROM
Лог транзакций распухнет
9 янв 14, 03:19    [15388222]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
гость888
>DELETE FROM
Лог транзакций распухнет
Recovery Model -> Simple
9 янв 14, 03:51    [15388240]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
Jaffar
Member

Откуда:
Сообщений: 633
скорее всего удалять нужно не все таблицы - ибо есть наверное справочники, которые нужно оставить.
самый лучший вариант на мой взгляд - это просто удалить данные из "ненужных таблиц" + шринк сделать потом.
а потом просто делать "attach database".
9 янв 14, 08:23    [15388385]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
SSDT. Содержимое справочников можно заскриптовать.
9 янв 14, 09:15    [15388456]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Ennor Tiegael,

Гораздо проще и быстрее сделать attach db чем применять 100500 скриптов в которых нужна опред. последовательность.
так же в момент инсталляции можно скопировать базу куда нужно и открыв коннект к серверу выполнить attach.
9 янв 14, 10:16    [15388609]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3274
Jaffar,

"Проще сделать" - безусловно. А вот не забывать при каждом изменении каждого справочника вносить оные изменения в эту эталонную БД - вот с этим уже посложнее, ибо люди по своей природе ленивы.

Я обычно для справочников создаю набор хранимых процедур в БД (ну или одну, в зависимости от масштаба системы), которые все вызываются из одной главной процедуры инициализации. Задаю им всем одинаковый префикс, например init_ и после создания БД достаточно запустить главную такую хранимку, а она вызовет остальные. Сама БД разворачивается из деплоймент скрипта SSDT, в котором я веду всю разработку кода.

Но можно и другой подход применить. Если систем много, они все разные и между ними есть куча пересекающихся справочников, то можно поднять Master Data Services (MDS) или его аналог и вносить изменения только там, а уже из MDS огранизовать выгрузки и синхронизацию отдельно.
9 янв 14, 10:43    [15388738]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Ennor Tiegael,



по большому счету ведь нет разницы куда переносить новые данные веденные в справочник на dewvloper`ской базе - в скрипт или в базу. все равно потом из него будет создана база.
НО, создание базы из крипта имеет большую вероятность завершиться с ошибкой чем простой attach просто в силу того что attach имеет меньше кода.
Это что-то вроде того как компилировать exe файл на стороне клиента, отправляя ему "правильные" исходники.\

Хотя возможно это дело вкуса, цвета и запаха.
21 янв 14, 07:47    [15444759]     Ответить | Цитировать Сообщить модератору
 Re: Сделать чистую копию базы данных  [new]
П-Л
Guest
Интересно, можно сделать проект типа база данных во взрослой (полной) визуал студии, скормить ему в качестве образца имеющуюся БД ? По идее, он должен корректно разложить все объекты по папочкам и при деплое на целевую БД формировать скрипт с гарантировано правильным порядком создания всех объектов ?

Ну и devart'овские сравняторы и скриптеры мне субъективно нравятся больше.
21 янв 14, 09:50    [15444973]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить