![]() |
|
v7: load extension ошибка not authorized | ☑ | ||
---|---|---|---|---|
0
evgpinsk_
21.07.21
✎
11:53
|
Данный код (читает из CSV в базу 1sqlite), по умолчанию отрабатывает нормально:
Запрос=База.НовыйЗапрос(); Запрос.ВыполнитьЗапрос("PRAGMA synchronous = OFF"); Запрос.ВыполнитьЗапрос("PRAGMA journal_mode = MEMORY"); Запрос.ВыполнитьЗапрос("SELECT load_extension('sqlite3_mod_csv','sqlite3_extension_init');"); но периодически в течении дня вылазит ошибка : "not authorized" насколько я понимаю, одновременно несколько пользователей чтото хотят сделать с базой. Не понятно как отловить проблему? И каким именно действием может так монопольно захватываться база db3? |
|||
1
Ёпрст
гуру
21.07.21
✎
11:58
|
(0)
https://www.sqlite.org/pragma.html#pragma_journal_mode MEMORY - это от лукавого, лучше не пользовать, если тока, вы не читатель |
|||
2
Ёпрст
гуру
21.07.21
✎
12:01
|
ну и synchronous в off аналогично
|
|||
3
evgpinsk_
22.07.21
✎
16:24
|
Закомментировал эти строки. Не помогло. В какойто момент времени в другом сеансе происходит какоето обращение к базе db3 и после этого на код из (0) ругается
|
|||
4
evgpinsk_
23.07.21
✎
12:33
|
Приходится закрывать сеанс 1с, в котором запускается данный код. А это сеанс робота и он должен работать постоянно, мониторя разные события
|
|||
5
nicesc
23.07.21
✎
12:47
|
Скорее всего проблема в текущем каталоге. Попробуй так
ТекущийКаталог = ФС.ТекКаталог(); ФС.УстТекКаталог(КаталогИБ() + "ПАПКА_ГДЕ_ЛЕЖИТ_РАСШИРЕНИЕ\"); Запрос.ВыполнитьЗапрос("SELECT load_extension('sqlite3_mod_csv','sqlite3_extension_init');"); ФС.УстТекКаталог(ТекущийКаталог); |
|||
6
evgpinsk_
23.07.21
✎
13:00
|
(5) Сложно попробовать, т.к. не понятно как вызвать ошибку.
Но мне кажется изза этой проблемы ошибка наблюдалась бы или всегда или никогда? |
|||
7
nicesc
23.07.21
✎
14:10
|
(6) Возможно есть обработки или отчеты которые изменяют текущий каталог, тогда ошибка будет появляться после запуска таких модулей.
|
|||
8
evgpinsk_
23.07.21
✎
14:55
|
(7) Не в этом проблема , т.к. sqlite3_mod_csv лежит как-раз в КаталогИБ()
Тут именно косяк, что одновременно и Робот в своём сеансе 1с и какойто другой пользователь в другом сеансе одновременно чтото хотят сделать с базой db3 и как я понимаю захватывают её с монопольными правами. естественно получается это только у одного. Но баш ещё в том, что если такое событие произошло, то уже потом "монорольность" не отпускается и нужно закрывать руками сеанс робота |
|||
9
Вафель
23.07.21
✎
15:30
|
Блокируй какой-нибудь элемент справочника
|
|||
10
evgpinsk_
24.07.21
✎
09:59
|
(9) Не понял
|
|||
11
Djelf
гуру
24.07.21
✎
10:34
|
(10) Загружай не в основную таблицу, а во временную таблицу, а потом дропай основную и переименовывай временную в основную.
Еще можешь попробовать PRAGMA busy_timeout = milliseconds; https://www.sqlite.org/pragma.html#pragma_busy_timeout Ну и PRAGMA schema.journal_mode = WAL https://www.sqlite.org/pragma.html#pragma_journal_mode лучше включить. А в (9) правильное, но сложное решение. Не расшифровываю кодом, но вот так: Справочник->Блокировки->ЭлементСправочника->Блокировка(<ВклВыкл>) Т.е. устанавливаем блокировку в 1С на запись и читаем/пишем только когда элемент справочника в 1С разблокирован. Не использую. journal_mode=wal и busy_timeout +загрузка объемных данных через временную таблицу вполне достаточно. |
|||
12
Djelf
гуру
24.07.21
✎
10:38
|
+(11) Что бы выскочило load_extension "not authorized"... Возможно у тебя пересоздается объект "База".
Добавь туда еще База.РазрешитьЗагрузкуРасширений(1); |
|||
13
Djelf
гуру
24.07.21
✎
11:11
|
+(12) Расширения лучше не загружать повторно (у меня изредка были падения при этом).
А для проверки загруженных расширений есть https://www.sqlite.org/pragma.html#pragma_module_list |
|||
14
Вафель
24.07.21
✎
13:53
|
(10) ну чтоб пока 1 работает, другие отдыхали
|
|||
15
Djelf
гуру
24.07.21
✎
15:09
|
(14) Извини, но это вредная подсказка!
Монопольного доступа 1sqlite не требует. И ошибка вообще другая... не связанная с доступом к базе |
|||
16
evgpinsk_
24.07.21
✎
16:57
|
(11) > Загружай не в основную таблицу, а во временную таблицу, а потом дропай основную и переименовывай временную в основную.
Так и делаю почти. Но ведь все эти DROP и CREATE в коде идут после Запрос.ВыполнитьЗапрос("SELECT load_extension('sqlite3_mod_csv','sqlite3_extension_init');"); а ошибка "not authorized" именно на этой первой строке кода |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |