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

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

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

A.Matveev
Новый участник
Сообщения: 6
На форуме: c 11 окт 2010
Откуда: Москва
Сказал: 0 ед.
Получил: 0 ед.

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

Сообщение 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 (журнал транзакций) ) в любое место и подключить его на новом сервере через вышеуказанную оснастку.

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

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

На сим и откланиваюсь.
Аватара пользователя
Koteneff
Аксакал
Сообщения: 877
На форуме: c 13 мар 2009
Сказал: 73 ед.
Получил: 45 ед.

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

Сообщение Koteneff »

:) Вот что значит четко проговорить проблему в слух. Решение приходить быстрее :)
alta_olg
Модератор
Сообщения: 2537
На форуме: c 05 ноя 2004
Откуда: Москва, Альта-Софт
Сказал: 1 ед.
Получил: 104 ед.

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

Сообщение alta_olg »

Да, письмо было, помню, куда-то мы его замылили, приношу извинения.
Олег Михайлов
Отдел техн. поддержки и разработки ПО
Аватара пользователя
LandSea
Новый участник
Сообщения: 8
На форуме: c 01 май 2010
Сказал: 1 ед.
Получил: 2 ед.

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

Сообщение 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
BigZmei
Почетный участник
Сообщения: 123
На форуме: c 14 ноя 2004
Откуда: Ростов-на-Дону
Сказал: 2 ед.
Получил: 3 ед.

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

Сообщение BigZmei »

а вот как правильно скопировать базу с полнотекстовым поиском?
A.Matveev
Новый участник
Сообщения: 6
На форуме: c 11 окт 2010
Откуда: Москва
Сказал: 0 ед.
Получил: 0 ед.

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

Сообщение 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
Еще раз прочитайте последние абзацы первого поста. Я изначально описывал различные подходы к переносу.
A.Matveev
Новый участник
Сообщения: 6
На форуме: c 11 окт 2010
Откуда: Москва
Сказал: 0 ед.
Получил: 0 ед.

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

Сообщение A.Matveev »

BigZmei писал(а):а вот как правильно скопировать базу с полнотекстовым поиском?
Что именно вы подразумеваете под полнотекстовым поиском? База состоит из самого файла с БД и файла с журналом транзакций. Насколько мне известно, полнотекстовый поиск обеспечивается именно самой программной частью MS SQL, а не прописывается в конкретной БД.
Аватара пользователя
Ranger_Z
Эксперт
Сообщения: 1072
На форуме: c 28 ноя 2007
Откуда: МКС
Сказал: 5 ед.
Получил: 125 ед.

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

Сообщение Ranger_Z »

Каталог с полнотекстовыми индексами находится там же.
BigZmei
Почетный участник
Сообщения: 123
На форуме: c 14 ноя 2004
Откуда: Ростов-на-Дону
Сказал: 2 ед.
Получил: 3 ед.

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

Сообщение BigZmei »

У меня получилось, что после переноса и присоединения на другой компьютер gtd.mdf и gtd_log.ldf запросила каталог для поиска. Указ тот же с базой, но присоединить не вышло. Правда SQL Server'а разные у исходной 2005,а присоединял к 2008.
Аватара пользователя
Ranger_Z
Эксперт
Сообщения: 1072
На форуме: c 28 ноя 2007
Откуда: МКС
Сказал: 5 ед.
Получил: 125 ед.

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

Сообщение Ranger_Z »

Попробуйте пересоздать полнотекстовые индексы на восьмерке.
Аватара пользователя
Nick
Аксакал
Сообщения: 734
На форуме: c 02 фев 2005
Откуда: Альта-Софт, Программист
Сказал: 13 ед.
Получил: 124 ед.

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

Сообщение Nick »

Возможно такое, что при установке нового SQL-сервера забыли включить Full Text Search как класс?
Аватара пользователя
LandSea
Новый участник
Сообщения: 8
На форуме: c 01 май 2010
Сказал: 1 ед.
Получил: 2 ед.

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

Сообщение LandSea »

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

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

Сообщение Nick »

Скрипт называется C:\gtdw\data\FULLTEXT.SQL
Аватара пользователя
Koteneff
Аксакал
Сообщения: 877
На форуме: c 13 мар 2009
Сказал: 73 ед.
Получил: 45 ед.

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

Сообщение Koteneff »

Коллеги, а слабо базу сделанную в 2008 SQL перенести на 2005 SQL?
Возникла ситуация. нужно. 2005 ругается на версию базы и не подцепляет ее.
Аватара пользователя
LandSea
Новый участник
Сообщения: 8
На форуме: c 01 май 2010
Сказал: 1 ед.
Получил: 2 ед.

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

Сообщение 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 в своё время установил не совсем корректно, а может быть при предыдущих переносах базы как-то нарушилась её структура. Не знаю... Будет время - поэкспериментирую.
Так что попробуйте. Если получится - отпишитесь. Удачи!
Последний раз редактировалось LandSea Ср ноя 23, 2011 08:56, всего редактировалось 1 раз.
Аватара пользователя
Koteneff
Аксакал
Сообщения: 877
На форуме: c 13 мар 2009
Сказал: 73 ед.
Получил: 45 ед.

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

Сообщение Koteneff »

Да нет, речь об том каким образом mdb файл созданный в MS SQL 2008 воткнуть в MS SQL 2005. оказывается версия файла имеет отличие от поддерживаемых. Конвертор бы или экспортер.
Аватара пользователя
Ranger_Z
Эксперт
Сообщения: 1072
На форуме: c 28 ноя 2007
Откуда: МКС
Сказал: 5 ед.
Получил: 125 ед.

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

Сообщение Ranger_Z »

Ковырял, много думал, не выходит, озадачу более продвинутых.
Следующие пользователи поблагодарили Ranger_Z за это собщение: Koteneff
Аватара пользователя
LandSea
Новый участник
Сообщения: 8
На форуме: c 01 май 2010
Сказал: 1 ед.
Получил: 2 ед.

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

Сообщение 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.
Следующие пользователи поблагодарили LandSea за это собщение: Koteneff
Аватара пользователя
LandSea
Новый участник
Сообщения: 8
На форуме: c 01 май 2010
Сказал: 1 ед.
Получил: 2 ед.

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

Сообщение LandSea »

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

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

Сообщение Koteneff »

звучит устрашающе. чет даже пробывать не хочется. ))
Ответить