• Обсуждения на сайте Альта-Софт

Правильный перенос SQL-базы данных

Модераторы: Renat, Gala, alta_olg, Lemur, expert

popov
Почетный участник
Сообщения: 101
На форуме: c 06 ноя 2004
Откуда: Альта-Софт
Сказал: 0 ед.
Получил: 20 ед.

Re: Правильный перенос SQL-базы данных

Сообщение popov »

Я конечно сильно извиняюсь, что вовремя не заметил этой темы и не вмешался, но так сказать "для будущих поколений" напишу:

ВСЕ ВЫШЕОПИСАННОЕ В КОРНЕ НЕВЕРНО И ДЕЛАТЬ ТАК НИ В КОЕМ СЛУЧАЕ НЕ НАДО !!!
(только головной боли добавляете себе и нашей техподдержке)

ЕДИНСТВЕННО правильный способ переноса БД с одного сервера на другой - это через файл резервной копии (т.н. backup) - см. https://www.alta.ru/sql_backup_instr.php !

И особенно если речь идет о переходе с одной мажор-версии SQL-я на другую (2005->2008, 2008->2008 R2 и т.д.). А вот отсоединять-присоединять файлы MDF-LDF со спокойной душой можно ТОЛЬКО в рамках одной и той же мажор-версии SQL-я, да и то полнотекстовый каталог естественно при этом НЕ перенесется (надо будет его восстановить скриптом C:ALTAUTILSConvertFtcLng.sql). Но лично я считаю, что даже если SP-ки отличаются (т.е. полная версия a.b.c.d хоть чем-то отличается на двух серверах), то уже так делать НЕ надо!
Иногда подобные эксперименты заканчиваются очень плачевно - полной потерей БД, т.к. уже начавшая так жить база начинает себя вести неадекватно на новой версии SQL (раздуваться, рушится и т.п.)!

Единственная задача переноса, которая НЕ решается через backup - это перенос на более старую версию (2008->2005, 2012->2008 и т.п.). В этом случае самая правильная последовательность действий должна быть такая:
1. Заскриптовать структуру таблиц из старой базы (получить файл-скрипт *.sql)
2. Создать новую базу на сервере назначения (нашим скриптом C:ALTAUTILSgtd.sql или вручную или включив в скрипт п.1 операции по созданию самой БД)
3. Накатить на эту базу скрипт из п.1, предварительно ВЫРЕЗАВ из него ВСЕ команды по созданию связей между таблицами (ALTER TABLE ... ADD CONSTRAINT ... FOREIGN KEY)
4. Импортировать данные всех таблиц SQL-ной утилитой импорта/экспорта данных (для 2005 Express Edition ставится с отдельного дистрибутива)
5. Накатить связи, вырезанные в п.3

Только так можно будет получить нормальную работоспособную БД.
Но поскольку в п.1 требуется правильно выбрать параметры скриптования (иначе опять же не вся структура заскриптуется), да и вообще все это небанально для рядового админа, не говоря уже о пользователях, то мы постараемся когда-нибудь все-таки автоматизировать данный процесс на базе нашей утилиты C:ALTAUTILSdbutils.exe например...
А пока настоятельно рекомендуется в таких случаях (а даунгрейд - это самый настоящий ФОРС-МАЖОР) обращаться за помощью к нам.

P.S. Ошибка, указанная в первом посте, связана как раз с тем, что при тупом импорте не переносится СТРУКТУРА таблиц в полном объеме - в данном случае значение по умолчанию для поля TXT не перенеслось. Но поскольку не перенеслось и еще КУЧА всего (первич. ключи, индексы, связи, триггеры и т.д.), то такая "база" является абсолютно не пригодной для какой бы то ни было работы!
С уважением, Дмитрий.
Ответить