У нас проблема. Работаем в 1Сv7.7 SQL и накануне вышел из строя сервер. Однако удалось восстановить каталоги SQL-сервера 6.5 и информационной базы 1С с конфигурацией. К сожалению backup сделать не успели за несколько недель. После переинсталляции SQL-сервера 6.5 подсунули ему старые файлы устройств с базой. Однако при старте конфигуратора или предприятия при подключении к данным на SQL-сервере 1С выдаёт сообщение: "Доступ к данным на сервере возможен только из одного каталога информационной базы". Создаётся предположение, что где-то что-то заклинило на уровне проверки соединения с базой, и именно в 1С. Файлы типа lock, $.. удаляли, SINGLE_USER_ONLY — отключали, checktable — запускали — не помогает. Может где-то в таблицах SQL-базы сидят флажки — но где? Если знаешь, то пожалуйста подскажи.
ОТВЕТ:
Суть Вашей проблемы понятна, правда непонятна причина, по которой это происходит. 1С выдает это сообщение в том случае, когда, при соединении с базой данных на SQL она обнаруживает существующее соединение, сделанное не из каталога базы данных. Делает она это следующим образом. Выполняется запрос:
SELECT * FROM sysprocesses WHERE dbid=<ID вашей базы на сервере>
А затем полученная информация сравнивается с данными из 1cv7.LCK (по моему так) и если там нет ни одного зарегистрированного соединения, тогда выдается такое сообщение об ошибке.
Рецепт пока могу дать один: Перед запуском 1С необходимо убедиться в том, что к базе нет ни одного соединения. Делается это так: Перед запуском 1С, при помощи Query Analyser, в Database master выполняются запросы: select * from sysdatabases where name='MyDb', где MyDb — это название вашей базы. В поле dbid результата запроса вы получите dbid вашей базы. Назовем его MyDbId. И затем, так же в master нужно выполнить запрос: select * from sysprocesses where dbid=MyDbId. Этот запрос не должен вернуть ни одной записи, только в этом случае возможно подключение 1С. Если записи будут, тогда нужно отключить эти соединения, литбо используя sp_killProcess, либо при помощи SQL Enterprise Manager. На будущее: переходите на SQL 7.0. Вам очень сильно повезло, что SQL6.5. "съел" вашу базу. Обычно он отказывается от "чужих" данных
ВОПРОС:
Спасибо за ответ! К сожалению восстановить базу нам не удалось. Скорее всего ошибка сидит где-то в данных. Пробовали исправлять, но из 1С — система виснет, а из MSQL, что-то исправляет, но 1С уже не стартует (ошибка файла DH699).
ОТВЕТ:
Если данные для Вас являются критичными, то вы можете попытаться их достаточно просто восстановить. Если это еще актуально, пишите, есть способ.
ВОПРОС:
Отзавись пожалуйста! Опять появилась надежда! Данные которые корректно сохранились 3-х месячной давности. Поэтому если как-томожно востановить базу, буду очень признателен.
ОТВЕТ:
Есть один достаточно простой, но трудоемкий способ восстановленияданных.Насколько я понимаю, у вас нарушилась структура одной из таблиц, ее,скорее всего, уже не спасти, но можно попробовать спасти данные из других таблиц:
1. Нужно сделать копию текущей конфигурации:
Сделать новую базу на сервере (пустую). В свойствах DataBase выставить параметр "Insert into Bulk/Copy"
Скопировать каталог БД. Например, у Вас сейчас каталог БД лежит на C:MyDB, скопируйте его в C:NewDB (файл DDS из каталога удалить).
Запустить конфигуратор, указав в качестве каталога БД новый каталог (в примере: C:NewDB). Когда 1С спросит какие будут данные, сказать, что SQL.
Указать параметры подключения к SQL серверу. При этом, базу данных указать ту, которую мы только что сделали (пустую).
Сохранить конфигурацию (если 1С не будет сохранять данные, тогда нужно сделать какое ни будь изменение в данных, например, у одного из справочников, добавить реквизит и удалить его).
В результате этой процедуры, на SQL сервере будет развернута база данных, структура которой полностью соответствует вашей MD.
2. Скопировать таблицы.
Теперь Вам нужно последовательно копировать таблицы из старой базы в новую. Копирование нужно делать при помощи утилиты bcp (поставляется вместе с SQL сервером). Эта утилита может копировать данные в Native Mode, т.е. физически перетаскивать данные. Копирование производится следующим образом:
1. Список таблиц нужно смотреть в SQL Enterprise Manager DataBaseTables. Начинать копировать нужно с таблиц, которые начинаются с _1S...
2. Для каждой таблицы на сервере нужно выполнить следующее:
bcp "<DB>.<TABLE>" out <TABLE>.dat -S<SERVER> -Usa -P<PASSWORD> -E -q -n где: <DB> - название базы данных - источника (старая). <TABLE> - Название таблицы. <SERVER> - Название сервера. <PASSWORD> - Пароль sa.
Эта команда сохранит данные таблицы <TABLE> в текущем каталоге, в файле <TABLE>.dat. В Командной строке Windows:
bcp "<DB>.<TABLE>" in <TABLE>.dat -S<SERVER> -Usa -P<PASSWORD> -E -q -n где: <DB> - название базы данных - получателя (новая). <TABLE> - Название таблицы. <SERVER> - Название сервера. <PASSWORD> - Пароль sa.
Эта команда загрузит данные из файла <TABLE>.dat в таблицу на сервере. Таблица предварительно должна быть очищена, именно для этого мы и делаем сначала TRUNCATE.
При копировании некоторых таблиц может появляться сообщение об ошибке. Нужно внимательно читать, что в них пишется. Если там написано, что не совпадает структура (по английски), то это означает, что у этой таблици нарушена структура. Могут быть разные сообщения об ошибках, читайте их.
По окончании этой операции, вы восстановите часть данных (а можнет быть и все) и сможете запустить 1С из нового каталога с новыми данными.
PS: Будте предельно внимательными. Сделайте Backup перед началом восстановления.
PS2: Ключики bcp я написал для SQL 7.0, для 6.5 они могут отличаться, я уже не помню. Если будет ругаться, почитайте Books Online для SQL. Смысл ключиков должен быть таким: Копирование в Native Mode, Ignore Character set settings, Ignore Identity And Primary Key.