Ошибка разделения доступа к базе данных при обновлении

Содержание: 

1.         Варианты возникновения ошибки разделенного доступа

2.        Файловый режим работы: способы решения ошибки разделенного доступа

3.        Пути решения ошибки разделенного доступа в клиент-серверном варианте работы

4.        Зависшие фоновые задания разделенного доступа в клиент-серверном варианте 

1.  Варианты возникновения ошибки разделенного доступа

С ошибкой разделенного доступа в базе хотя бы раз сталкивался каждый разработчик. Обычно данную ошибку можно увидеть при принятии монопольных изменений конфигурации системы базы данных, при попытке выгрузки информационных баз или запуске тестирования и исправления информационной базы. Все эти операции требуют монопольный доступ к базе данных, то есть к базе не должны быть подключены пользователи. Далее мы рассмотрим варианты возникновения ошибки разделенного доступа и возможные пути их исправления:

Пользователи подключены к 1С

Для начала стоит проверить активные сеансы пользователей 1С. Количество активных пользователей можно посмотреть в конфигураторе: зайти в панель управления Администрирование, выбрать кнопку «Активные пользователи». И попросить их выйти из 1С. Помимо этого, информацию об активных сеансах можно увидеть в окне ошибки, но при большом количестве активных пользователей, информация будет не о всех активных сеансах.

У пользователя запущена 1С, но не введен пароль

Файловая база данных обычно содержит в себе подобную ошибку. Для решения данной проблемы следует запустить диспетчер задач, найти подобные процессы и, с его помощью, принудительно их завершить. Так как пользователь для работы с БД не авторизован, этот сеанс не отображается в списке активных пользователей, но соединение с базой при этом уже установлена. Следовательно, информационное сообщение так же, не будет нам полезно.

Зависший сеанс

Пользователи закрыли все свои окна 1С 8.3, но ошибка все еще осталась, в таком случае, вероятно, остались зависшие сеансы. В таком случае требуется принудительное завершение работы подобных сеансов. Последующие действия следует выполнять только после того, как испробовали методы описанные выше.  

2.  Файловый режим работы: способы решения ошибки разделенного доступа

— С помощью Диспетчера задач.

После завершения активных сеансов в файловом режиме работы, не сохраненная информация пользователей будет утеряна. Завершить сеансы этим способом можно вызвав диспетчер задач (диспетчер задач можно вызвать комбинацией клавиш Ctrl+Alt+Delete), выбрать нужные процессы(1Сv8.exe или 1Сv8c.exe), после этого нажать кнопку снять задачу.

— Перезагрузка сервера, на котором установлена 1С.  

3.  Пути решения ошибки разделенного доступа в клиент-серверном варианте работы

Завершить активные сеансы поможет консоль администрирования сервера, находим в ней нужную нам базу и заходим в меню «Сеансы».

Выделяем мешающие нам сеансы и завершаем их через пункт контекстного меню «Удалить» или соответствующую кнопку на панели.

— Если не удалось удалить сеансы, используя консоль, то пробуем перезапустить службу Агент сервера 1С Предприятия 8.3.

— Если не получается удалить соединение, можно попробовать это сделать средствами в 1С СУБД. К примеру, в MS SQL для 1С, можно открыть Management studio и написать запрос к нужной базе с использованием метода kill <ID>, где ID – номер соединения с СУБД, который так же можно увидеть в консоли администрирования.

— Только если все предыдущие способы не дали нам результата и ошибка все еще сохраняется, то можем перезагрузить сервер. Важно помнить, что к этому методу стоит прибегать только в крайнем случае.  

4.  Зависшие фоновые задания разделенного доступа в клиент-серверном варианте работы

В подобном случае, при повышенной пиковой нагрузке на сервер, сеансы фоновых заданий могут отрабатывать медленно или даже зависать, что так же влечет за собой возникновение данной ошибки.

Фоновые задания, как и обычный сеанс можно попытаться завершить, но после завершения они могут запускаться вновь. Активные сеансы фоновых заданий, как и пользовательские, можно увидеть в консоли администрирования на вкладке Соединения.

Попробовать завершить эти сеансы можно следующими методами:

— Завершить сеанс и обновить список активных соединений, для проверки, не запускаются ли они заново.

— Среди свойств базы найти флажок «Блокировка регламентных заданий включена», после этого снова надо попытаться завершить задание.

В итоге при возникновении данной ошибки, надо отталкиваться именно от причины ее возникновения, исходя из этого, производится выбор способа ее решения. Именно поэтому не стоит переходить сразу к радикальным методам, перегружать сервер, особенно, если есть возможность решить все более «щадящим» способом. Данные варианты решений уменьшат вероятность ошибок и повреждения данных таблиц информационной базы.

Специалист компании «Кодерлайн»

Марк Романенков

Фоновое задание не дает обновится

Я
   aleks100

30.11.19 — 16:12

При  первом запуске после обновления выходит сообщение  Невозможно выполнить обновление информационной базы, так как к ней подключены другие сеансы.

Обратитесь к системному администратору.

Подробности ошибки:

Ошибка разделенного доступа к базе данных

База данных заблокирована:

компьютер: DESKTOP-MH30GLI, сеанс: 12, начат: 30.11.2019 в 21:01:30, приложение: Фоновое задание

конфигурация рарус комплексный учет питания

Что это может быть?

   ДенисЧ

1 — 30.11.19 — 16:14

Не отрубил задание какое-то.

Консоль заданий что говорит?

   vde69

2 — 30.11.19 — 16:22

надо смотреть консоль сервера, вероятно это какое-то регламентное задание…

бывали случаи когда в такой ситуации помогала блокировка рег заданий в консоли сервера (на время обновления)

   Провинциальный 1сник

3 — 30.11.19 — 16:22

Да, а кстати — как правильно обновиться, если в базу пользователи лезут как мухи на мёд? Отключить вход не вариант — тогда и администратор не зайдет первым запуском для выполнения процедур обработки данных при обновлении. А иначе — процедура обновления натыкается на ошибку невозможности установки монопольного режима. Только хакерство на ум приходит с правилами брандмауэра, временно тупо блокировать трафик сервера 1с от всех, кроме администратора 1с.

   aleks100

4 — 30.11.19 — 16:34

конфигурация в файловом варианте

   aleks100

5 — 30.11.19 — 16:36

(1) первый запуск после обновления

   aleks100

6 — 30.11.19 — 16:42

выполняется задание слияние индекса Слияние индекса полнотекстового поиска доступа

   aleks100

7 — 30.11.19 — 16:43

как узнать какое именно фоновое задание блокировало?

   ДенисЧ

8 — 30.11.19 — 17:13

(7) см (6)

   aleks100

9 — 30.11.19 — 17:55

(8) закончил это задание, посмотрел  в обработке регламентных заданий и потом только обновилось нормально

   aleks100

10 — 30.11.19 — 17:55

это задание видимо блокировало

   rphosts

11 — 30.11.19 — 18:54

(3) вариант 1: зашёл, заблокирвоал другим вход, снёс пассажиров из консоли.

варант 2: заблокировал с кодом разблокировки, зашёл с кодом разблокировки, снёс пассажиров из консоли

   Провинциальный 1сник

12 — 30.11.19 — 18:58

(11) Если заблокировать начало сеансов — то фоновое задание обновления ИБ не запустится. Пробовал.

   rphosts

13 — 30.11.19 — 19:08

(12) впихуй в код процедуры ПриНачалеСеанса или как там его… ну например если это не BackGround и время входа ну пусть 22:00 — 04:00 — Отказ = Истина.

   Провинциальный 1сник

14 — 30.11.19 — 19:13

(13) Не, ну это уж слишком. Речь о типовом обновлении типовой конфигурации. Как-то не продумано это.

   rphosts

15 — 30.11.19 — 19:15

(14) вы не вкурили расширения?

   Провинциальный 1сник

16 — 30.11.19 — 19:18

(15) То есть, чтобы установить штатное обновление, нужно предварительно расширение писать с костылями?

   Провинциальный 1сник

17 — 30.11.19 — 19:22

Реально не хватает в сервере 1с специального «режима обслуживания», когда запускаются только сеансы администратора и фоновые задания, иницированные им. А то они гордятся что от монопольного режима ушли, а толку то? Всё равно он нужен. Ну или пусть пишут процедуры обновления без требования включения монопольного режима попеременно с фоновыми заданиями.

   rphosts

18 — 30.11.19 — 19:24

(16) в типовых есть ограничение на время работы пользователей?

   Aleksey

19 — 30.11.19 — 19:39

(18) Так вроде бы речь не о пользователях. Их выкинуть можно.

А о фоновых заданиях. Например заходишь обновиться а там индекс ППД висит.

Т.е. две проблемы.

1. нет галки монопольно, когда блокируются фоновые задания

2. Обновление ИБ реализовано через фоновое задание, т.е. если даже заблокируешь фоновые задачи, автоматом блокируется процедуры из обновления.

И вот так и живем. Сидишь как дурак, ждешь когда все фоновые из базы свалят, чтобы была возможность поймать окно и обновиться

  

Aleksey

20 — 30.11.19 — 19:41

(7) консоль заданий, там можно посмотреть какое задание выполняется в данный момент. В типовых эта та обработка в которой список регламентных задач и на второй вкладки там формируются отчеты по фоновым, в т.ч. по тем кто сейчас выполняется

Ошибка исключительной блокировки информационной базы и ошибка разделения доступа к базе данных выскакивает при обновлении, при выгрузке базы 1с и при проверке и исправлении ошибок(чеке). Что делать в этом случае?
Ошибка исключительной блокировки информационной базы

  1. Возможно дело в фоновом процессе. Следует попробовать выгнать всех пользователей из базы с помощью блокировки. Можно сделать батник с командой net session /delete /y
  2. Может помочь перезагрузка сервера с базой. Либо последовательное выполнение команд (опять же батником) net stop "1C:Enterprise 8.2 Server Agent" для остановки сервера и net start "1C:Enterprise 8.2 Server Agent" для запуска.
  3. Также возможно дело в доступе. Выделить папку с базой =>все пользователи => разрешить изменения. ошибка разделения доступа
  4. Вполне вероятно что ваша база опубликована в 1С Линк. В этом случае следует отключить публикацию и попробовать повторить манипуляции, все получится.

Еще один способ устранения подобной ошибки описан в предыдущей статье


[Всего голосов: 0    Средний: 0/5]

Оглавление

  • Суть проблемы
  • Общение с технической поддержкой 1с
  • Решение
    • Назначаем всем пользователям непустые пароли
    • Заставляем пользователей вводить пароль
    • Заставляем обновлятор контролировать сохранение установленной блокировки сеансов
  • Как помочь с исправлением ошибки

Суть проблемы

 Ошибка исправлена в тестовой 8.3.21.1140. 

При обновлении или тестировании клиент-серверной базы через обновлятор может возникать ошибка исключительной блокировки на этапах обновления конфигурации базы данных…

Обновляется конфигурация базы данных.
ОбщаяКартинка.Информация: Имя не уникально!
Обновление конфигурации базы данных
Обработка структуры базы данных...
Ошибка исключительной блокировки информационной базы.
База данных заблокирована:
пользователь: ?, сеанс : 4, начат: 13.10.2021 в 0:40:29, приложение: ?

… выполнения обработчиков обновления:

Выполняются обработчики обновления.
Ошибка: ошибка разделенного доступа к базе данных, база данных заблокирована:, компьютер: ?,
пользователь: ?, сеанс: 61511, начат: ?, приложение: ?

… или тестирования, включающее пересчёт итогов.

Кроме ошибки исключительной блокировки тестирование, включающее пересчёт итогов,  может просто зависнуть , если в базу в этот момент зайдёт пользователь.

Почему это происходит, ведь обновлятор устанавливает блокировку сеансов и выгоняет всех пользователей перед началом операции? Каким образом новые пользователи попадают в базу по ходу выполнения операции?

Оказывается при определенных условиях ( а именно пересчёт итогов ) конфигуратор сам (несанкционированно) сбрасывает установленную блокировку сеансов (а заодно код разрешения) в клиент-серверной базе.

Я провёл расследование и выяснил, что это баг в платформе (уже веду переписку с технической поддержкой 1с). Проблема никак не связана с обновлятором и воспроизводится только при помощи конфигуратора.

Для того, чтобы конфигуратор несанкционированно сбросил установленную блокировку сеансов (и код разрешения) необходимо выполнение следующих условий:

  1. База является клиент-серверной.
  2. Платформа 1с любая версии 8.3.18, 8.3.19 или 8.3.20.
  3. В базе накоплены определённые изменения в конфигурации (например, выполнено обновление конфигурации Бухгалтерия Предприятие с версии 3.0.95.24 на 3.0.99.19) без последующего обновления конфигурации базы данных. Отдельно подчеркну, что проблема воспроизводится не на всех обновлениях конфигурации ( а только на тех, когда возникает пересчёт итогов ), именно поэтому я привёл пример конкретного обновления на котором проблема воспроизводится.

Если при выполнении этих 3 условий…

  1. Установить в базе блокировку сеансов и код разрешения.
  2. А затем выполнить операцию «Обновление конфигурации базы данных» (хоть вручную через конфигуратор, хоть через обновлятор), либо запустить тестирование и исправление конфигурации с пересчётом итогов (тогда пункт 3 из предыдущего абзаца не важен).

… мы обнаружим, что установленная блокировка сеансов и код разрешения были несанкционированно сброшены конфигуратором (это подтверждается технологическим журналом) по ходу выполнения операции «Обновление конфигурации базы данных» ( а вернее возникшего в процессе выполнения пересчёта итогов ) или тестирования, включающее пересчёт итогов.

И если в этот момент (когда блокировка сеансов сброшена, но операция ещё не закончена) в базу заходят пользователи (вручную или автоматически, так как их предварительно выбросило из базы при блокировке и у них нет пароля), то мы получаем ошибку исключительной блокировки или зависание, если речь идёт о тестировании.

Общение с технической поддержкой 1с

26.10.2021 Вся собранная информация (включающая детальное описание и быстрый способ воспроизведения ошибки) отправлена в техническую поддержку 1с на адрес v8@1c.ru, обращение зарегистрировано под номером HL-405298.

18.11.2021 Получил такой ответ от технической поддержки 1с:
«Ошибка платформы https://bugboard.v8.1c.ru/error/000114376
Исправлена в будущих версиях 8.3.21+»

А значит, установленная блокировка сеансов будет сбрасываться не только при обновлении базы данных, но и при отдельно запущенной операции тестирование и исправление, включающей пересчёт итогов.

 Ошибка исправлена в тестовой 8.3.21.1140. 

Решение

Как решить проблему не дожидаясь исправления платформы? Для этого я подготовил ряд рекомендаций, а также разработал дополнительную опцию в обновляторе. Итак, поехали.

Назначаем всем пользователям непустые пароли

Потому что, если у пользователя пустой пароль, то становится возможен следующий сценарий:

  1. Пользователь с пустым паролем оставил базу открытой и ушёл домой.
  2. Ночью вы сами (вручную или через обновлятор) установили в базе блокировку сеансов (для её обслуживания) и дождались, когда всех пользователей (это функционал типовых) выбросит из базы.
  3. Да, пользователя выбросило, но на его рабочем месте появилось окно ожидания с попытками (каждую минуту) повторного подключения к базе.
  4. Попытки повторного входа будут неудачными, ведь в базе установлена блокировка сеансов.
  5. И тут конфигуратор по ходу выполнения операции «Обновление конфигурации базы данных» несанкционированно сбрасывает (то есть снимает) блокировку сеансов и тот самый диалог ожидания автоматически пускает пользователя обратно в базу! И операция обновления базы данных завершается ошибкой из-за исключительной блокировки.
  6. Так вот если бы у пользователя был непустой пароль — его бы в базу обратно автоматически не пустило.

Заставляем пользователей вводить пароль

Эту рекомендацию не всегда возможно выполнить целиком. Её смысл в том, что даже если у пользователя непустой пароль, но при этом…

  • он прописал его (пароль) в параметрах базы в стартере вот так
  • либо зашёл в базу через альтернативный стартер (в настройках которого уже прописаны логин и пароль для входа в базу), например, вот так

… пользователя также пустит обратно в базу автоматически (см. предыдущий сценарий, пункт 5).

Пользователя пускает обратно в базу автоматически потому, что при первоначальном (описанном выше) входе в базу логин и пароль сохраняются в параметрах запуска платформы.

Вопрос какими средствами в этом случае заставить пользователей не прописывать нигде пароль для автоматического входа в базу остаётся открытым.

Заставляем обновлятор контролировать сохранение установленной блокировки сеансов

Заходим в свойства клиент-серверной базы, закладка «Обновление», раздел «Сам процесс»:

Здесь включаем опцию «При обновлении конфигурации базы данных (на проблемных релизах платформы 1с) контролировать сохранение блокировки сеансов».

Внимание! Начиная с тестовой версии от 23 декабря обновлятор согласно этой же настройке осуществляет контроль за сохранением блокировки сеансов при операциях тестирования и исправления, включающей пересчёт итогов.

Кроме того, в скриптах у команды из меню «Обновлятор-Методы-Выполнение пакетного скрипта» появился дополнительный параметр keep_sessions_lock, установка которого в true позволит осуществить контроль за сохранением блокировки сеансов (при условии, что она включена в свойствах базы) при выполнении любой команды.

Например:

@run_cmd(
    script: "%run_1c_d% /UpdateDBCfg -Dynamic-",
    keep_sessions_lock: "true"
)
@run_cmd(
    script: "%run_1c_d% /IBCheckAndRepair -RecalcTotals -TestOnly",
    keep_sessions_lock: "true"
)

По умолчанию данная опция включена и имеет значение «Однократно после» ( рекомендую сразу сменить это значение на «непрерывно в процессе» ).

«Однократно после» означает, что обновлятор считывает состояние блокировки сеансов (а также код разрешения) перед обновлением конфигурации базы данных.

А затем (после окончания обновления конфигурации базы данных) восстанавливает блокировку сеансов (и код разрешения), если они были сброшены конфигуратором.

Эта опция предотвращает дальнейшие проблемы, если блокировка сеансов была сброшена конфигуратором в процессе обновления конфигурации базы данных, но нам повезло и в базу (в процессе обновления конфигурации базы данных) никто из пользователей не попал.

Если это не помогает — установите эту же опцию со значением «Непрерывно в процессе«:

В этом случае обновлятор параллельно с выполнением операции «Обновление конфигурации базы данных» будет контролировать (примерно раз в секунду) состояние блокировки сеансов и как только он обнаружит, что конфигуратор несанкционированно сбросил блокировку сеансов, он тут же восстановит её. В этом случае пользователь сможет попасть в базу, если осуществит такую попытку только в ту же самую секунду, когда конфигуратор несанкционированно сбросил блокировку сеансов.

Вот как это будет выглядеть в отчёте:

Как помочь с исправлением ошибки

 Ошибка исправлена в тестовой 8.3.21.1140. 

Друзья, я уже отписался выше, что ошибка зарегистрирована в 1С.

Теперь я прошу вас по возможности зайти на страницу с ошибкой и поставить отметку «Для меня исправление ошибки важно»:

Тем самым мы повысим вероятность исправления этой ошибки в одном из ближайших релизов платформы.

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Автор BIV, 06 окт 2016, 06:33

0 Пользователей и 1 гость просматривают эту тему.

После обновления 1C Предприятие 8.3 не запускается база. Дело было так. 1С показала что есть обновление. Обновился в автоматическом режиме. Теперь при запуске базы пишет, что файл базы данных повреждён. В конфигураторе тоже не запускается. Как быть? Вот сообщение от 1С для тех. поддержки:


Платформа: 1С:Предприятие 8.3 (8.3.8.2054)

Ошибки:
--------------------------------------------------------------------------------
06.10.2016 10:07:20
Невосстановимая ошибка
Ошибка при выполнении запроса POST к ресурсу /e1cib/login:
по причине:
Ошибка при выполнении операции с информационной базой
Файл базы данных поврежден 'D:Base 1cAccountingBase/1Cv8.1CD'
по причине:
Файл базы данных поврежден 'D:Base 1cAccountingBase/1Cv8.1CD'


Попробовал исправить  при помощи chdbfl.exe. Пишет:

Произошло неожиданное прерывание выполнения проверки или исправления БД. Ошибка разделения доступа к базе данных 'D:Base 1cAccountingBase/1Cv8.1CD'


Перед тем как тестировать chdbfl все пользователи вышли из базы?
Лучше проверять в диспетчере задач в процессах (галочка отображать процессы других пользователей должна быть).


тогда только одно, восстанавливать базу из архива (надеюсь перед обновлением архив/резервную копию сделали?).
пробовать обновиться еще раз, если возможно что кривое обновление (такое тоже иногда бывает) ждать следующего обновления.

если помогло нажмите: Спасибо!


Цитата: Namef от 06 окт 2016, 09:29
Перед тем как тестировать chdbfl все пользователи вышли из базы?
Лучше проверять в диспетчере задач в процессах (галочка отображать процессы других пользователей должна быть).

База локальная на 1 компе. Других пользователей не может быть. Исправил базу при помощи chdbfl. Вот только с первого раза она никак не хотела исправлять, почему меня это и ввело в ступор. Раза с 6-го только запустилась на проверку и исправление. Знакомый посоветовал несколько раз пробовать открыть базу в chdbfl, даже если она даёт ошибку. Вот и сработало. Далее через конфигуратор протестил. Тот тоже нашёл ошибки и исправил. Потом всё заработало. Всем СПС. Думаю тему можно закрыть.


если сбой произошел при автообновлении, то сначала нужно было попробовать в каталоге с БД удалить файл с расширением .cdn
на всякий случай естественно нужно не забыть сделать копию базы


Цитата: BuhRust от 06 окт 2016, 14:19
если сбой произошел при автообновлении, то сначала нужно было попробовать в каталоге с БД удалить файл с расширением .cdn
на всякий случай естественно нужно не забыть сделать копию базы

В том-то и дело , что сбоя при обновлении вроде бы как и не было. просто база потом не запустилась и всё. Ваш совет учту на будущее.


  • Ошибка раздаточной коробки pajero 4
  • Ошибка раздатки уаз патриот даймос
  • Ошибка раздатки туарег 2008
  • Ошибка раздатки порше кайен 955
  • Ошибка раздатки митсубиси паджеро 3 поколения дизель