powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Блокировка БД при многопользовательском использовании
6 сообщений из 6, страница 1 из 1
Блокировка БД при многопользовательском использовании
    #38491855
LiYing
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация такая: имеется файл БД на файл-сервере и клиентское приложение (Delphi + DISQLite3 ("враппер" для SQLite)), работающее на 2-х компах в локальной сети. В случаях, когда юзер1 и юзер2 одновременно выполняют запись в БД, появляется ошибка: SQLite3 Error 5 - datadase is locked у одного из юзеров (у другого все записывается). Запись в БД схематично делается так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
      DB.StartTransaction();
      try
        Stmt := DB.Prepare(SQL_INSERT_OBJECT);
        try
          Stmt.Bind_Int(1, eRooms.AsInteger);
          Stmt.StepAndReset;
        finally
          Stmt.Free;
        end;
        DB.Commit;
      except
        DB.Rollback;   // откат
        raise;
      end;



Добавил после коннекта с БД вызов функции
Код: pascal
1.
  sqlite3_busy_timeout(pointer(DB), WRITE_BUSY_TIMEOUT);

,
где варьировал WRITE_BUSY_TIMEOUT от 1 до 30 секунд. Не помогло.
Подскажите, пожалуйста, как можно решить эту проблему, если можно вообще?
...
Рейтинг: 0 / 0
Блокировка БД при многопользовательском использовании
    #38492128
wowow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LiYing,
смотри PRAGMA locking_mode = NORMAL | EXCLUSIVE
должно быть NORMAL
...
Рейтинг: 0 / 0
Блокировка БД при многопользовательском использовании
    #38493741
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wowow,

Если база в EXCLUSIVE режиме то второе соединение вообще не откроется, можно поиграть с опциями
busy_timeout, read_uncommitted, и методом qlite3_enable_shared_cache ( pragma )
...
Рейтинг: 0 / 0
Блокировка БД при многопользовательском использовании
    #38494139
wowow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pit_alexwowow,

Если база в EXCLUSIVE режиме то второе соединение вообще не откроется, можно поиграть с опциями
busy_timeout, read_uncommitted, и методом qlite3_enable_shared_cache ( pragma )

возможно транзакцию не завершает...
...
Рейтинг: 0 / 0
Блокировка БД при многопользовательском использовании
    #38494148
wowow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LiYing,
посмотрите еще параметр journal_mode...
тоже pragma параметр
...
Рейтинг: 0 / 0
Блокировка БД при многопользовательском использовании
    #38494550
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А умные люди ставят в многопользовательской среде серверную базу данных и не имеют проблем.
Или нанимают MBG.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Блокировка БД при многопользовательском использовании
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]