заблокирован s3db-журнал - PullRequest
0 голосов
/ 24 августа 2009

несколько дней у нас была странная ошибка с sqlite. Мы используем базу данных sqlite на сетевом ресурсе, к которому подключаются несколько компьютеров. Наш клиент сообщил, что база данных пропала. Краткий обзор показал, что база данных все еще там, но ни один компьютер не может получить к ней доступ. Он также показал файл s3db-journal, указывающий, что кто-то обращается к базе данных, когда что-то происходит. Что странно - файл s3db-journal был заблокирован файловой системой (мы не смогли скопировать / удалить его). После перезапуска всех приложений заблокированный файл исчез, как и должно быть.

Как это происходит? Мы бы хотели как-то подсчитать, как наш клиент попал в эту ситуацию. Мы знаем, что к одному из компьютеров было повреждено сетевое соединение.

Спасибо за вашу помощь.

Tobias


Чтобы уточнить это: несколько = до 10 компьютеров

Ответы [ 2 ]

0 голосов
/ 25 августа 2009

Проблема решена. Компонент базы данных (zeos) вызвал исключение, и мы попытались выполнить откат. Благодаря тому, как был разработан компонент, это разрешено только при запуске транзакции. Если нет, вы получите заблокированный файл s3db-journal.

В итоге мы узнали 2 вещи: никогда не откатываться, когда вы не начинали транзакцию, во-вторых, для этого есть функция InTransaction от zeos.

0 голосов
/ 24 августа 2009

со страницы " Соответствующее использование для SQLite ":

Если у вас много клиентских программ, обращающихся к общей базе данных по сети, вам следует рассмотреть возможность использования ядра базы данных клиент / сервер вместо SQLite. SQLite будет работать над сетевой файловой системой, но из-за задержки, связанной с большинством сетевых файловых систем, производительность не будет большой. Кроме того, логика блокировки файлов во многих сетевых файловых системах содержит ошибки (как в Unix, так и в Windows). Если блокировка файла работает не так, как должно, две или более клиентские программы могут изменить одну и ту же часть одной и той же базы данных одновременно, что приведет к повреждению базы данных. Поскольку эта проблема возникает из-за ошибок в реализации базовой файловой системы, SQLite ничего не может сделать, чтобы предотвратить ее.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...