Перенос базы данных «вниз» по версии СУБД (даунгрейд с Microsoft SQL Server 2005 на SQL Server 2000) — задача нетипичная и сложная, особенно когда речь идет о платформе 1С:Предприятие 7.7 и базах данных размером под 90 ГБ. Стандартные средства SQL Server, такие как создание резервной копии с последующим восстановлением (RESTORE DATABASE) или прямое подключение файлов (ATTACH DATABASE), здесь принципиально не работают. Движок MS SQL Server не поддерживает обратную совместимость файлов данных между мажорными версиями.
Разберем подробнее, с какими сложностями приходится сталкиваться при таком переносе, выясним причины типичных ошибок платформы 1С 7.7 и рассмотрим проверенные практические способы решения этой задачи.
При попытке нестандартного переноса данных специалисты сталкиваются со следующими проблемами:
Требуется MS SQL 6.5 + Service 5a или более старшая версия!. Это происходит из-за того, что библиотека BkEnd.dll не рассчитана на парсинг строк версий выше SQL 2000 (версия 8.x). Для работы с SQL 2005 и новее традиционно используется пропатченная библиотека или специальная заглушка.column ordinal ID), заданному в словаре базы данных 1Cv7.DDS. Если последовательность полей, первичные ключи или свойства NULL/NOT NULL хоть немного отклоняются от стандарта 1С, запуск базы аварийно блокируется.Проанализируем самый надежный и простой с точки зрения целостности метаданных способ, которым автор темы успешно решил проблему. Он заключается в штатной логической выгрузке и последующей загрузке данных средствами самой 1С 7.7, но с обходом лимита размера файла выгрузки.
Разберем процесс по шагам:
BkEnd.dll должна быть отключена проверка версии СУБД).Cyrillic_General_CI_AS).1Cv7.MD, укажем параметры подключения к новой базе на SQL Server 2000 и откроем Конфигуратор.Если время простоя строго ограничено и ждать долгую выгрузку через архив нет возможности, применим вариант переноса данных напрямую на уровне SQL, но с обязательным формированием схемы самой платформой 1С. Это позволит избежать ошибки с нарушением структуры 1SCONST.
Разберем по шагам правильную последовательность действий:
1Cv7.MD в отдельную папку. Запустим Конфигуратор, укажем путь к новой базе на SQL 2000 и выполним сохранение. В этот момент платформа сама сформирует словарь 1Cv7.DDS и создаст в СУБД все таблицы с правильным физическим порядком полей, системными свойствами и типами.Linked Server на MS SQL Server 2000 или настроим задачу импорта/экспорта.1Cv7.DDS, избегая конструкций с маской звездочки. Посмотрим на пример концептуального переноса данных для таблицы констант:
-- Пример запроса переноса данных через связанный сервер
INSERT INTO dbo._1SCONST (ID, OBJID, VALUE, DATE, TIME)
SELECT ID, OBJID, VALUE, DATE, TIME
FROM [SQL2005_LINKED_SERVER].[DatabaseName].dbo._1SCONST;
Для ускорения процесса копирования 90 ГБ данных отлично подходит стандартная консольная утилита СУБД — bcp. Она позволяет выгружать и загружать строки на максимальной скорости дисковой подсистемы.
bcp DatabaseName.dbo._1SCONST out "C:\Dump\_1SCONST.bcp" -n -T -S SQL2005_SERVER
bcp DatabaseName.dbo._1SCONST in "C:\Dump\_1SCONST.bcp" -n -T -S SQL2000_SERVER -h "TABLOCK, CHECK_CONSTRAINTS"
Перед началом любой из процедур миграции настоятельно рекомендуется выполнить аудит базы: очистить системный журнал регистрации (таблица 1SSYSLOG), усечь журнал транзакций (LDF) в режиме Simple и выполнить сжатие (SHRINKDATABASE). Это позволит существенно снизить объем перемещаемых данных и сократить время простоя системы.