-
-
Обсуждения на сайте Альта-Софт
-
Правильный перенос SQL-базы данных
Модераторы: Renat, Gala, alta_olg, Lemur, expert
-
- Новый участник
- Сообщения: 6
- На форуме: c 11 окт 2010
- Откуда: Москва
Сказал: 0 ед.
Получил: 0 ед.
Получил: 0 ед.
Правильный перенос SQL-базы данных
Всем доброго времени суток.
Озадачился переносом базы данных 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 (журнал транзакций) ) в любое место и подключить его на новом сервере через вышеуказанную оснастку.
Необходимо заново пересоздать пользователя и наделить правами для базы данных согласно мануалу.
Вуаля, и все работает.
На сим и откланиваюсь.
Озадачился переносом базы данных 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-базы данных


-
- Модератор
- Сообщения: 2537
- На форуме: c 05 ноя 2004
- Откуда: Москва, Альта-Софт
Сказал: 1 ед.
Получил: 104 ед.
Получил: 104 ед.
Re: Правильный перенос SQL-базы данных
Да, письмо было, помню, куда-то мы его замылили, приношу извинения.
Олег Михайлов
Отдел техн. поддержки и разработки ПО
Отдел техн. поддержки и разработки ПО
Re: Правильный перенос SQL-базы данных
Ну не знаю. Как-то сложно всё у вас расписано.
у меня всё это заняло 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
у меня всё это заняло 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
-
- Почетный участник
- Сообщения: 123
- На форуме: c 14 ноя 2004
- Откуда: Ростов-на-Дону
Сказал: 2 ед.
Получил: 3 ед.
Получил: 3 ед.
Re: Правильный перенос SQL-базы данных
а вот как правильно скопировать базу с полнотекстовым поиском?
-
- Новый участник
- Сообщения: 6
- На форуме: c 11 окт 2010
- Откуда: Москва
Сказал: 0 ед.
Получил: 0 ед.
Получил: 0 ед.
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
-
- Новый участник
- Сообщения: 6
- На форуме: c 11 окт 2010
- Откуда: Москва
Сказал: 0 ед.
Получил: 0 ед.
Получил: 0 ед.
Re: Правильный перенос SQL-базы данных
Что именно вы подразумеваете под полнотекстовым поиском? База состоит из самого файла с БД и файла с журналом транзакций. Насколько мне известно, полнотекстовый поиск обеспечивается именно самой программной частью MS SQL, а не прописывается в конкретной БД.BigZmei писал(а):а вот как правильно скопировать базу с полнотекстовым поиском?
- Ranger_Z
- Эксперт
- Сообщения: 1072
- На форуме: c 28 ноя 2007
- Откуда: МКС
Сказал: 5 ед.
Получил: 125 ед.
Получил: 125 ед.
Re: Правильный перенос SQL-базы данных
Каталог с полнотекстовыми индексами находится там же.
-
- Почетный участник
- Сообщения: 123
- На форуме: c 14 ноя 2004
- Откуда: Ростов-на-Дону
Сказал: 2 ед.
Получил: 3 ед.
Получил: 3 ед.
Re: Правильный перенос SQL-базы данных
У меня получилось, что после переноса и присоединения на другой компьютер gtd.mdf и gtd_log.ldf запросила каталог для поиска. Указ тот же с базой, но присоединить не вышло. Правда SQL Server'а разные у исходной 2005,а присоединял к 2008.
- Ranger_Z
- Эксперт
- Сообщения: 1072
- На форуме: c 28 ноя 2007
- Откуда: МКС
Сказал: 5 ед.
Получил: 125 ед.
Получил: 125 ед.
Re: Правильный перенос SQL-базы данных
Попробуйте пересоздать полнотекстовые индексы на восьмерке.
- Nick
- Аксакал
- Сообщения: 734
- На форуме: c 02 фев 2005
- Откуда: Альта-Софт, Программист
Сказал: 13 ед.
Получил: 124 ед.
Получил: 124 ед.
Re: Правильный перенос SQL-базы данных
Возможно такое, что при установке нового SQL-сервера забыли включить Full Text Search как класс?
Re: Правильный перенос SQL-базы данных
У меня такое было, когда я впервые переносил базу с одного компьютера на другой с SQL2005 на SQL2005.BigZmei писал(а):У меня получилось, что после переноса и присоединения на другой компьютер gtd.mdf и gtd_log.ldf запросила каталог для поиска. Указ тот же с базой, но присоединить не вышло. Правда SQL Server'а разные у исходной 2005,а присоединял к 2008.
Однако точно могу сказать, что полнотекстовый поиск не работал и на первом компьютере, не смотря на правильно установленные опции SQL.
Тогда вопрос решился звонком в техподдержку Альта-Софт. Меня соединили с их главным специалистом по SQL, и он сказал какой, из имеющихся в Альта, нужно запустить скрипт. После этого полнотекстовый поиск заработал.
К сожалению не помню уже, какой именно скрипт нужно было запустить. Думаю звонок в техподдержку решит Вашу проблему.
- Nick
- Аксакал
- Сообщения: 734
- На форуме: c 02 фев 2005
- Откуда: Альта-Софт, Программист
Сказал: 13 ед.
Получил: 124 ед.
Получил: 124 ед.
Re: Правильный перенос SQL-базы данных
Скрипт называется C:\gtdw\data\FULLTEXT.SQL
Re: Правильный перенос SQL-базы данных
Коллеги, а слабо базу сделанную в 2008 SQL перенести на 2005 SQL?
Возникла ситуация. нужно. 2005 ругается на версию базы и не подцепляет ее.
Возникла ситуация. нужно. 2005 ругается на версию базы и не подцепляет ее.
Re: Правильный перенос SQL-базы данных
В целом для других баз данных это можно сделать так: Перенос базы SQL Server 2008 на SQL Server 2005Koteneff писал(а):Коллеги, а слабо базу сделанную в 2008 SQL перенести на 2005 SQL?
Возникла ситуация. нужно. 2005 ругается на версию базы и не подцепляет ее.
Для малых баз данных это абсолютно точно работает. Специально сегодня проверял!
Но к сожалению для большой базы данных GTD, я в своё время так и не смог корректно завершить перенос.
Сообщения об "Отказе в доступе", "Недостатке памяти" тогда преследовали меня, и преодолеть это не удалось.
С тех пор больше не пробовал.
Но кое-какие выводы я тогда сделал, например:
- Предпочтительнее создавать не один файл на всю базу, а использовать опцию "Один файл на объект".
При этом нужно учитывать, что запуск сформированных файлов нужно производить всё-таки в некоторой последовательности, то есть сперва: gtd.Database.sql - создать базу данных, потом - dbo.Docs.Table.sql (если хватит памяти) и т.д.
то есть BAT-файл, который предлагает использовать автор той статьи, в данном случае не годится. В общем-то объектов в данном случае не так уж и много, так что для разового переноса он и не нужен, удобнее использовать меню "Файл" - "Открыть", выделить мышью все сформированные файлы и нажать "Ввод", а потом просто запускать их из появившихся вкладок в нужной последовательности.
Возможно, я использовал где-то неправильные опции, поэтому и не получилось. Возможно, это вызвано тем, что перенос я пробовал делать с 64-битной версии на 32-битную (хотя на малых базах это точно не препятствует переносу), возможно тем, что у меня не SQL-2008, а SQL-2008R2 (на малых базах это тоже роли не играет). Возможно SQL-сервер-2008 в своё время установил не совсем корректно, а может быть при предыдущих переносах базы как-то нарушилась её структура. Не знаю... Будет время - поэкспериментирую.
Так что попробуйте. Если получится - отпишитесь. Удачи!
Последний раз редактировалось LandSea Ср ноя 23, 2011 08:56, всего редактировалось 1 раз.
Re: Правильный перенос SQL-базы данных
Да нет, речь об том каким образом mdb файл созданный в MS SQL 2008 воткнуть в MS SQL 2005. оказывается версия файла имеет отличие от поддерживаемых. Конвертор бы или экспортер.
- Ranger_Z
- Эксперт
- Сообщения: 1072
- На форуме: c 28 ноя 2007
- Откуда: МКС
Сказал: 5 ед.
Получил: 125 ед.
Получил: 125 ед.
Re: Правильный перенос SQL-базы данных
Ковырял, много думал, не выходит, озадачу более продвинутых.
Следующие пользователи поблагодарили Ranger_Z за это собщение: Koteneff
Re: Правильный перенос SQL-базы данных
Нет, вы меня не поняли, наверное. Идея выше именно об этом. То есть для того, чтобы переконвертировать файл из SQL-2008 в SQL-2005, и нужно перенести базу с 2008 на 2005 указанным выше способом. Полученные файлы будут иметь формат SQL-2005.Koteneff писал(а):Да нет, речь об том каким образом mdb файл созданный в MS SQL 2008 воткнуть в MS 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
Re: Правильный перенос SQL-базы данных
Добавлю к предыдущему сообщению:
Спасибо, что подняли этот вопрос. Интересно было поэкспериментировать, почему в своё время это у меня не получилось.
Зато теперь, после некоторых экспериментов, могу утверждать, что:
Указанным способом можно успешно переносить (переконвертировать) большие базы данных ЭД ГТД из формата SQL-2008 в формат SQL-2005.
Однако, эта задача не совсем тривиальная, а именно:
Чтобы корректно, без сообщений о недостатке памяти или прав доступа, переносить большие таблицы: dbo.EDMsgs.Table и dbo.Docs.Table, а также прочие большие объекты базы данных, необходимо после выполнения сценария по переносу объектов, разбивать их файлы: dbo.EDMsgs.Table.sql, dbo.Docs.Table.sql и т.д. на несколько небольших частей. В самих файлах получаемых скриптов записи разбиты на группы по 100 штук.
Как это сделать? Думаю, что "руками" - способ точно не подходит, так как файлы у меня, например, получились размером за 3,5ГБ., а у многих, наверняка, получатся ещё больше.
Сразу скажу, что я не нашел способа сделать такую разбивку на этапе формирования этих файлов. Я разбивал на части их программно уже после их формирования. Времени всё это занимает немало, поэтому делать это без острой необходимости никому не советую.
Если кому-нибудь нужна более подробная инструкция, то обращайтесь, постараюсь помочь, но не ждите быстрого ответа хотя бы потому, что разница у нас с Москвой +7 часов.
Ещё раз всем удачи!
Спасибо, что подняли этот вопрос. Интересно было поэкспериментировать, почему в своё время это у меня не получилось.
Зато теперь, после некоторых экспериментов, могу утверждать, что:
Указанным способом можно успешно переносить (переконвертировать) большие базы данных ЭД ГТД из формата SQL-2008 в формат SQL-2005.
Однако, эта задача не совсем тривиальная, а именно:
Чтобы корректно, без сообщений о недостатке памяти или прав доступа, переносить большие таблицы: dbo.EDMsgs.Table и dbo.Docs.Table, а также прочие большие объекты базы данных, необходимо после выполнения сценария по переносу объектов, разбивать их файлы: dbo.EDMsgs.Table.sql, dbo.Docs.Table.sql и т.д. на несколько небольших частей. В самих файлах получаемых скриптов записи разбиты на группы по 100 штук.
Как это сделать? Думаю, что "руками" - способ точно не подходит, так как файлы у меня, например, получились размером за 3,5ГБ., а у многих, наверняка, получатся ещё больше.
Сразу скажу, что я не нашел способа сделать такую разбивку на этапе формирования этих файлов. Я разбивал на части их программно уже после их формирования. Времени всё это занимает немало, поэтому делать это без острой необходимости никому не советую.
Если кому-нибудь нужна более подробная инструкция, то обращайтесь, постараюсь помочь, но не ждите быстрого ответа хотя бы потому, что разница у нас с Москвой +7 часов.
Ещё раз всем удачи!
Следующие пользователи поблагодарили LandSea за это собщение: Koteneff
Re: Правильный перенос SQL-базы данных
звучит устрашающе. чет даже пробывать не хочется. ))