• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Нюансы Getdocumentsbykey

  • Автор темы Eugenus
  • Дата начала
E

Eugenus

Добрый день, товарищи лотусники и лотусисты..
Второй раз возникла такая проблема:
Есть агент, который периодически (раз в пять минут по 120 циклов за один запуск) колбасит представление XXX, отбирая из него n-е количество документов через NotesView.GetDocumentsByKey по первому отсортированному столбцу. Так вот, вдруг внезапно, без видимых причин, в отобранной коллекции оказывается 0 документов, при том, что на самом деле их там должно быть больше ста. То есть метод GetDocumentsByKey не возвращает ни одного документа. При пересоздании вида (и соответственно его индекса) все налаживается. Вот собственно вопрос - может ли как-то самопроизвольно сбиться или убиться индекс для какого-либо представления ? На сервере запущены две задачи Update, не думаю, что они могут конфликтовать или причина в этом, но на всяй случай уточню..
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
может ли как-то самопроизвольно сбиться или убиться индекс
может, причины разные
замечал - если ключ юнид, такое происходит (например)
ставьте регулярной задачей апдейт вьюшки (индекса)
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
сервер устал ^_^
используется однопроходный алгоритм, проверте возможно быстрее и проще будет всосать весь вид в самодельную структуру и там уже колбаситься
 
E

Eugenus

Хм, ключ не унид, но учту. Спасибо. ToxaRat: Насчет самодельной структуры - можно попробовать, но проблема не носит регулярный характер и обычно все колбасится быстро, без натуги. Да и там переписывать придется половину движка.

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

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
это и нужно сделать
административнми средствами
создать документ программс в АК (хэлп админа)
команда в консоли:load updall dbname -R -T viewname
в программс её разделить надо и убрать load
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
4
Хм, ключ не унид, но учту. Спасибо. ToxaRat: Насчет самодельной структуры - можно попробовать, но проблема не носит регулярный характер и обычно все колбасится быстро, без натуги. Да и там переписывать придется половину движка.

Попробуйте юзать конструкцию вместе с view.refresh. Т.е.

collection=view.GetDocumentsByKey(..)
if collection.Count=0 then
call view.Refresh()
collection=view.GetDocumentsByKey(..)
end if
 
E

Eugenus

Imake:Спасибо. А что значит разделить ? Убрал load и прописал в Command Line
rinsk: Рефреш не прокатывает. Я это представление и обновлял и пересохранял, все равно в коллекции пусто, помогает только пересоздание, видимо, индекс не просто "неполный", а вообще отсутствует...
 

rinsk

Lotus Team
12.11.2009
1 151
125
BIT
4
rinsk: Рефреш не прокатывает. Я это представление и обновлял и пересохранял, все равно в коллекции пусто, помогает только пересоздание, видимо, индекс не просто "неполный", а вообще отсутствует...

Надо провести полный ремонт базы - Fixup\Compac -c -D + все последние фиксы.
Такого рода глюки были при проблемах с диском\контроллером и с самим Домино, когда странным образом летели индексы на нагруженной системе. Щас 852FP1 - врод все стабильно...
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!