Оптимизация конфигураций на платформе 1C SQL
На главную
Обратная связь
Карта сайта
Оптимизация конфигураций на платформе 1C SQL
ГлавнаяМатериалыСтатьиАдминистратору
  • Деятельность

  • Материалы

  •      › Скачать
         › Статьи
         › FAQ
         › Новости
  • Контакты

  • Форум



  • e-mail:
    icq: 169296011
    © 2003-2010 Шемякин Павел





    Администратору

    Опубликована: 07.11.2001, отредактирована: 26.03.2003 Автор: Witon

    HOWTO:Восстановление базы 1С под SQL Server 6.5

    ВОПРОС:

    У нас проблема.
    Работаем в 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. Для каждой таблицы на сервере нужно выполнить следующее:

    • В Query Analyser (DB получатель - новая): truncate table <TABLE NAME>
    • В Командной строке Windows:

      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.

    PS3: Удачи..

     наверх