Иногда при попытке зайти в базу 1С (как в режиме Предприятия, так и в Конфигуратор), развернутую локально на MS SQL Server (часто в редакции Express), возникает критическая ошибка. Сеанс работы завершается администратором, а в подробностях фигурирует сообщение: Microsoft SQL Server Native Client 11.0: Поставщик общей памяти: С обоих концов канала отсутствуют процессы. HRESULT=80004005, native=233. При использовании сетевого протокола ошибка может выглядеть так: Поставщик TCP: Удаленный хост принудительно разорвал существующее подключение, native=10054.
Проанализируем причины такого поведения и разберем по шагам доступные способы восстановления работоспособности базы.
Разберем основные факторы, которые могут приводить к принудительному завершению сеанса:
rphost) или служба SQL Server потребляют всю доступную оперативную память. Операционная система принудительно завершает процесс, что выглядит как разрыв соединения. Это особенно актуально для бесплатной редакции SQL Express, которая имеет жесткий лимит на использование ОЗУ ядром СУБД (около 1–1.4 ГБ).Посмотрим, как исключить проблемы с протоколом Shared Memory. В качестве первой меры рекомендуется принудительно перевести обмен данными на сетевой протокол.
Рассмотрим еще одну настройку СУБД, которая иногда помогает стабилизировать соединение при передаче больших объемов данных (например, тяжелых макетов). Попробуйте увеличить размер сетевого пакета (network packet size) в свойствах SQL Server до максимального значения, которое позволяет редакция (в обычных версиях это значение равно 32767).
Если смена протокола не помогла, и в Конфигуратор по-прежнему не пускает, необходимо проверить базу на наличие логических и физических ошибок. Выполним проверку с помощью Management Studio.
Вы можете запустить следующий скрипт (заменив имя базы на свое):
ALTER DATABASE <Имя БД> SET EMERGENCY
ALTER DATABASE <Имя БД> SET SINGLE_USER
DBCC CHECKDB (<Имя БД>, REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE <Имя БД> SET MULTI_USER
Если команда DBCC CHECKDB выдает ошибки вида «Ошибка таблицы... Тест (IS_OFF (BUF_IOERR, pBUF->bstat)) не прошел», это свидетельствует о серьезных повреждениях страниц данных.
Важно: При попытке выполнить проверку или реструктуризацию базы на версии SQL Express, СУБД может мгновенно упереться в лимит оперативной памяти и оборвать соединение. Для лечения поврежденных баз рекомендуется развернуть бэкап на полноценной редакции SQL Server (Standard/Enterprise/Developer).
Если встроенные средства SQL не могут исправить ошибки, или починка невозможна из-за лимитов, разберем альтернативный вариант восстановления.
EXCP и DBMSSQL. Это поможет увидеть, на каком запросе к служебным таблицам (например, Config или Params) падает процесс.SELECT * FROM dbo.Config), чтобы найти строку, на чтении которой возникает ошибка ввода-вывода..dt..dt в пустую файловую базу.В файловой базе уже с помощью обработок и сравнения/объединения с эталонным cf-файлом (или конфигурацией поставщика) можно будет восстановить удаленные объекты и метаданные. Например, если были повреждены или удалены данные о лицензировании, их можно перенести из новой чистой базы аналогичной версии.