Страница 1 из 2

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

Добавлено: Пн окт 11, 2010 12:05
A.Matveev
Всем доброго времени суток.
Озадачился переносом базы данных SQL с одного сервера на другой. На исходном стоит 2005, на конечном 2008. Перенос обусловлен приобретением Microsoft SQL Server.
Итак, сначала делал следующим образом:
В конечной СУБД запущен скрипт gtd для формирования базы данных. По успешном завершении был запущен встроенный инструмент мелкомягких для импорта данных на новый сервер. Импорт прошел успешно, создан новый логин для базы и прочие мероприятия, согласно руководству по настройке на сайте alta.ru/ed.
Итак, все перенесено. В программе вбиты верные настройки соединения со SQL-сервером, список отображается корректно. Но невозможно сдублировать или создать документ - вылетает ошибка Не удалось вставить значение NULL в столбец "txt", таблицы "gtd.dbo.Docs"; в столбце запрещены значения NULL. Ошибка в INSERT.
Саппорт порекомендовал написать письмо на support at alta.ru, ответа нет до сих пор). Ладно, где наша не пропадала.

Лезем в SQL Management Studio, открываем злосчастную таблицу Docs. Столбец txt в наличии. Параметр NOT NULL имеется. Попытки изменить его вручную ни к чему не привели - сохраняет лишь в отдельный документ. Во всех других документах в столбец автоматически дописывается параметр txt, а в созданные не хочет.

Ответ пришел сам собой - необходимо скопировать файлы базы данных (по дефолту gtd.mdf (сама бд) и gtd_log (журнал транзакций) ) в любое место и подключить его на новом сервере через вышеуказанную оснастку.

Необходимо заново пересоздать пользователя и наделить правами для базы данных согласно мануалу.

Вуаля, и все работает.

На сим и откланиваюсь.

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

Добавлено: Пн окт 11, 2010 12:10
Koteneff
:) Вот что значит четко проговорить проблему в слух. Решение приходить быстрее :)

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

Добавлено: Вт окт 12, 2010 18:06
alta_olg
Да, письмо было, помню, куда-то мы его замылили, приношу извинения.

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

Добавлено: Пт ноя 18, 2011 04:35
LandSea
Ну не знаю. Как-то сложно всё у вас расписано.
у меня всё это заняло 2 минуты, не считая установки SQL-2008 на новой машине.
Я делал так:
- предварительно закрываем программы "Альта-ГТД" на всех рабочих местах (отключаемся от SQL-базы)
1. На старом SQL сервере (2005):
запускаем "SQL Server Management Studio", соединяемся с базой, выбираем базу "GTD" (ваше название)
-> Правая кнопка мыши -> "Задачи" -> "Отсоединить" ("Tasks" -> "Detach") -> В открывшемся окне кнопка "ОК"
2. Копируем два нужных файла: "gtd.mfd" и "gtd_log.ldf" (ваши названия) на новый компьютер в специально выделенную для этого папку (обычно назначается в процессе установки SQL).
3. На новом SQL сервере (2008):
запускаем "SQL Server Management Studio", соединяемся, устанавливаем курсор на "Базы данных"
-> Правая кнопка мыши -> "Присоединить" ("Attach") -> кнопка "Добавить" (Add) в открывшемся окне -> выбрать нужные файлы ("gtd.mfd" и "gtd_log.ldf") и нажать "ОК".
4. Перенастроить все рабочие места на новую базу.

В своё время использовал информацию отсюда:
1 - http://www.intuit.ru/department/se/msadonet/1/5.html
2 - http://shatoweb.blogspot.com/2008/07/sql.html

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

Добавлено: Пт ноя 18, 2011 07:39
BigZmei
а вот как правильно скопировать базу с полнотекстовым поиском?

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

Добавлено: Пт ноя 18, 2011 08:25
A.Matveev
LandSea писал(а):Ну не знаю. Как-то сложно всё у вас расписано.
у меня всё это заняло 2 минуты, не считая установки SQL-2008 на новой машине.
Я делал так:
- предварительно закрываем программы "Альта-ГТД" на всех рабочих местах (отключаемся от SQL-базы)
1. На старом SQL сервере (2005):
запускаем "SQL Server Management Studio", соединяемся с базой, выбираем базу "GTD" (ваше название)
-> Правая кнопка мыши -> "Задачи" -> "Отсоединить" ("Tasks" -> "Detach") -> В открывшемся окне кнопка "ОК"
2. Копируем два нужных файла: "gtd.mfd" и "gtd_log.ldf" (ваши названия) на новый компьютер в специально выделенную для этого папку (обычно назначается в процессе установки SQL).
3. На новом SQL сервере (2008):
запускаем "SQL Server Management Studio", соединяемся, устанавливаем курсор на "Базы данных"
-> Правая кнопка мыши -> "Присоединить" ("Attach") -> кнопка "Добавить" (Add) в открывшемся окне -> выбрать нужные файлы ("gtd.mfd" и "gtd_log.ldf") и нажать "ОК".
4. Перенастроить все рабочие места на новую базу.

В своё время использовал информацию отсюда:
1 - http://www.intuit.ru/department/se/msadonet/1/5.html
2 - http://shatoweb.blogspot.com/2008/07/sql.html
Еще раз прочитайте последние абзацы первого поста. Я изначально описывал различные подходы к переносу.

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

Добавлено: Пт ноя 18, 2011 08:27
A.Matveev
BigZmei писал(а):а вот как правильно скопировать базу с полнотекстовым поиском?
Что именно вы подразумеваете под полнотекстовым поиском? База состоит из самого файла с БД и файла с журналом транзакций. Насколько мне известно, полнотекстовый поиск обеспечивается именно самой программной частью MS SQL, а не прописывается в конкретной БД.

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

Добавлено: Пт ноя 18, 2011 10:15
Ranger_Z
Каталог с полнотекстовыми индексами находится там же.

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

Добавлено: Пт ноя 18, 2011 10:41
BigZmei
У меня получилось, что после переноса и присоединения на другой компьютер gtd.mdf и gtd_log.ldf запросила каталог для поиска. Указ тот же с базой, но присоединить не вышло. Правда SQL Server'а разные у исходной 2005,а присоединял к 2008.

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

Добавлено: Пт ноя 18, 2011 11:39
Ranger_Z
Попробуйте пересоздать полнотекстовые индексы на восьмерке.

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

Добавлено: Пт ноя 18, 2011 21:47
Nick
Возможно такое, что при установке нового SQL-сервера забыли включить Full Text Search как класс?

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

Добавлено: Сб ноя 19, 2011 03:04
LandSea
BigZmei писал(а):У меня получилось, что после переноса и присоединения на другой компьютер gtd.mdf и gtd_log.ldf запросила каталог для поиска. Указ тот же с базой, но присоединить не вышло. Правда SQL Server'а разные у исходной 2005,а присоединял к 2008.
У меня такое было, когда я впервые переносил базу с одного компьютера на другой с SQL2005 на SQL2005.
Однако точно могу сказать, что полнотекстовый поиск не работал и на первом компьютере, не смотря на правильно установленные опции SQL.
Тогда вопрос решился звонком в техподдержку Альта-Софт. Меня соединили с их главным специалистом по SQL, и он сказал какой, из имеющихся в Альта, нужно запустить скрипт. После этого полнотекстовый поиск заработал.
К сожалению не помню уже, какой именно скрипт нужно было запустить. Думаю звонок в техподдержку решит Вашу проблему.

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

Добавлено: Сб ноя 19, 2011 10:40
Nick
Скрипт называется C:\gtdw\data\FULLTEXT.SQL

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

Добавлено: Вт ноя 22, 2011 17:05
Koteneff
Коллеги, а слабо базу сделанную в 2008 SQL перенести на 2005 SQL?
Возникла ситуация. нужно. 2005 ругается на версию базы и не подцепляет ее.

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

Добавлено: Ср ноя 23, 2011 08:14
LandSea
Koteneff писал(а):Коллеги, а слабо базу сделанную в 2008 SQL перенести на 2005 SQL?
Возникла ситуация. нужно. 2005 ругается на версию базы и не подцепляет ее.
В целом для других баз данных это можно сделать так: Перенос базы SQL Server 2008 на SQL Server 2005
Для малых баз данных это абсолютно точно работает. Специально сегодня проверял!
Но к сожалению для большой базы данных GTD, я в своё время так и не смог корректно завершить перенос.
Сообщения об "Отказе в доступе", "Недостатке памяти" тогда преследовали меня, и преодолеть это не удалось.
С тех пор больше не пробовал.
Но кое-какие выводы я тогда сделал, например:
- Предпочтительнее создавать не один файл на всю базу, а использовать опцию "Один файл на объект".
При этом нужно учитывать, что запуск сформированных файлов нужно производить всё-таки в некоторой последовательности, то есть сперва: gtd.Database.sql - создать базу данных, потом - dbo.Docs.Table.sql (если хватит памяти) и т.д.
то есть BAT-файл, который предлагает использовать автор той статьи, в данном случае не годится. В общем-то объектов в данном случае не так уж и много, так что для разового переноса он и не нужен, удобнее использовать меню "Файл" - "Открыть", выделить мышью все сформированные файлы и нажать "Ввод", а потом просто запускать их из появившихся вкладок в нужной последовательности.
Возможно, я использовал где-то неправильные опции, поэтому и не получилось. Возможно, это вызвано тем, что перенос я пробовал делать с 64-битной версии на 32-битную (хотя на малых базах это точно не препятствует переносу), возможно тем, что у меня не SQL-2008, а SQL-2008R2 (на малых базах это тоже роли не играет). Возможно SQL-сервер-2008 в своё время установил не совсем корректно, а может быть при предыдущих переносах базы как-то нарушилась её структура. Не знаю... Будет время - поэкспериментирую.
Так что попробуйте. Если получится - отпишитесь. Удачи!

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

Добавлено: Ср ноя 23, 2011 08:18
Koteneff
Да нет, речь об том каким образом mdb файл созданный в MS SQL 2008 воткнуть в MS SQL 2005. оказывается версия файла имеет отличие от поддерживаемых. Конвертор бы или экспортер.

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

Добавлено: Ср ноя 23, 2011 09:00
Ranger_Z
Ковырял, много думал, не выходит, озадачу более продвинутых.

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

Добавлено: Ср ноя 23, 2011 09:38
LandSea
Koteneff писал(а):Да нет, речь об том каким образом mdb файл созданный в MS SQL 2008 воткнуть в MS SQL 2005. оказывается версия файла имеет отличие от поддерживаемых. Конвертор бы или экспортер.
Нет, вы меня не поняли, наверное. Идея выше именно об этом. То есть для того, чтобы переконвертировать файл из SQL-2008 в SQL-2005, и нужно перенести базу с 2008 на 2005 указанным выше способом. Полученные файлы будут иметь формат SQL-2005.
Других способов, насколько мне известно, не существует.
Структура переносится абсолютно корректно, а вот при переносе данных проблема состоит в том, что не получается на больших базах корректно перенести 2 таблицы: dbo.Docs.Table.sql (иногда, при сохранении в формате Юникода, переносится не всё, наверное из-за слишком длинных строк, а иногда не хватает памяти) так что в любом случае в опциях нужно выбирать формат ANSI. Но главное не переносится таблица сообщений ЭД - dbo.EDMsgs.Table.sql (не хватает памяти, либо прав). Я пока не знаю почему и как с этим пороться.
В целом, если преодолеть последнее описанное препятствие с таблицей dbo.EDMsgs.Table.sql, то можно получить файлы gtd.mdf и gtd_log.LDF в необходимом формате SQL-2005.

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

Добавлено: Ср ноя 23, 2011 11:42
LandSea
Добавлю к предыдущему сообщению:
Спасибо, что подняли этот вопрос. Интересно было поэкспериментировать, почему в своё время это у меня не получилось.
Зато теперь, после некоторых экспериментов, могу утверждать, что:
Указанным способом можно успешно переносить (переконвертировать) большие базы данных ЭД ГТД из формата SQL-2008 в формат SQL-2005.
Однако, эта задача не совсем тривиальная, а именно:
Чтобы корректно, без сообщений о недостатке памяти или прав доступа, переносить большие таблицы: dbo.EDMsgs.Table и dbo.Docs.Table, а также прочие большие объекты базы данных, необходимо после выполнения сценария по переносу объектов, разбивать их файлы: dbo.EDMsgs.Table.sql, dbo.Docs.Table.sql и т.д. на несколько небольших частей. В самих файлах получаемых скриптов записи разбиты на группы по 100 штук.
Как это сделать? Думаю, что "руками" - способ точно не подходит, так как файлы у меня, например, получились размером за 3,5ГБ., а у многих, наверняка, получатся ещё больше.
Сразу скажу, что я не нашел способа сделать такую разбивку на этапе формирования этих файлов. Я разбивал на части их программно уже после их формирования. Времени всё это занимает немало, поэтому делать это без острой необходимости никому не советую.
Если кому-нибудь нужна более подробная инструкция, то обращайтесь, постараюсь помочь, но не ждите быстрого ответа хотя бы потому, что разница у нас с Москвой +7 часов.
Ещё раз всем удачи!

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

Добавлено: Ср ноя 23, 2011 14:38
Koteneff
звучит устрашающе. чет даже пробывать не хочется. ))