Восстанавливаются удаленные документы

nayke

Well-known member
04.08.2010
310
0
#1
Ситуация вот какая. из базы А по фильтру копируются документы в созданную базу Б. Причем перед копированием меняется ReplicID, для дальнейшей репликации с репликами базы А. документы не подходящие по фильтру копируются окурками(создаются пустыми потом удаляются). Unidы документов сохраняются. Связь между базами репликами и базой Б есть. копирование выполняется верно,НО при запуске репликации в базе некоторые документы восстанавливаются(причем непонятно по какому критерию). Причем при разном фильтре документы восстанавливаются или не восстанавливаются по-разному. Может кто-то сталкивался с таким глюком?
 

nvyush

Lotus team
22.04.2009
2 317
0
#2
Может быть в какой-то из реплик "удалённые" в Б документы изменяются после удаления?
 

nayke

Well-known member
04.08.2010
310
0
#3
Репликация происходит непосредственно после процесса копирования. база-реплика не изменяется с момента запуска копирования. И еще с помошью scanEZ по unid проверил восстанавливающиеся документы после копирования содержаться в базе как окурки.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 583
269
#4
несинхрон по времени сторон репликации м.б.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#5
чё-то я не догоняю идею копировать док, потом его удалять
естественно он восстановится, так как унид тот же и если в главной базе он меняется то и в реплике тоже пронаследуется
нифига это не восстановление
сделайте более умный фильтр для репликации, поле какое-нибудь наложите и вставте его в формулу репликации, тогда будет всё правильно
 

nayke

Well-known member
04.08.2010
310
0
#6
документ копируется+удаляется в главной базе. это операция нужна для создания окурков которые впоследствии призваны удалять эти документы на дочерних базах, а не возвращать их оттуда.. т.е. администратор главной базы обрезает главную базу по фильтру.. и при репликации также обрезаются дочерние..
 

nvyush

Lotus team
22.04.2009
2 317
0
#7
документ копируется+удаляется в главной базе. это операция нужна для создания окурков которые впоследствии призваны удалять эти документы на дочерних базах, а не возвращать их оттуда.. т.е. администратор главной базы обрезает главную базу по фильтру.. и при репликации также обрезаются дочерние..
Не понятно, какая из них главная — А или Б. Если нужно удалять документы во всех репликах, не проще ли вместо "скопировать в Б + удалить" непосредственно удалить в А?
 

nayke

Well-known member
04.08.2010
310
0
#8
База А занимает достаточно большой объем.. после удаления физический размер не меняется, а compact займет несколько суток.. поэтому было решено как бы подменить базу на новую... скопировать необходимые.
 

nvyush

Lotus team
22.04.2009
2 317
0
#9
Если из базы А в базу Б производится просто копирование (в т.ч. с созданием окурков для удаляемых документов) — то зачем их между собой реплицировать? Или проблема при репликации с базами на других серверах? Тогда см. пост 2, в реплицируемой базе документ обновлялся после удаления в базе Б. Других объяснений я не вижу.
 

nayke

Well-known member
04.08.2010
310
0
#10
Между собой Базы А и Б не реплицируются.
Алгоритм следующий:
1. Допустим есть База А(1000 документов) на сервере. Для нее на лок. комп. создаем реплику базу С.
2. Далее на базу А накатывается новый шаблон.. и из нее запускается процесс копирования.
3. Получили база Б с идентификатором реплики одинаковым с Базой С. База А имеет другой ReplicID
4. После этого имеем База Б 200 документов 800 окурков. База С не изменяемая с пункта 1 соответственно имеющая 1000 документов.
5. Запускаем репликацию на сервере в результате получаем База Б и База С становятся например 350 документов, 650 окурков.
 

nvyush

Lotus team
22.04.2009
2 317
0
#11
Попробуйте в удаляемые документы копировать поле $Revisions из оригинала.
 

nayke

Well-known member
04.08.2010
310
0
#12
Попробуйте в удаляемые документы копировать поле $Revisions из оригинала.
Попробовал. ничего не дало. У некоторых документов это поле вообще не заполнено.
Может еще что-нибудь может быть?


Выяснилось еще кое-что - документы действительно восстанавливаются из реплики. при проведении репликации от Базы на лок. комп. к серверной базы без передачи документов на сервер в локальной базе восстанавливающиеся документы остались.. но все даты (modified initialy,added in this file Modified in this file, accessed in this file) меньше даты и времени удаления. В базе на лок. компе просто остается документ, а на сервере документ с таким же unidом числится в stubs. Отличий от удаляемых документов найти не удалось. Почему документы могут не удаляться?
 

nvyush

Lotus team
22.04.2009
2 317
0
#15
Попробуйте добавлять $ConflictAction со значением "2".
У меня недавно была проблема с репликацией документа между двумя серверами в кластере. У изменённого позднее документа был более ранний $Revisions (как такое случилось — понять не могу), в результате ни туда, ни сюда. Увеличил $Revisions — репликация в миг прошла, глазом моргнуть не успел.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#16
Алгоритм следующий:
1. Допустим есть База А(1000 документов) на сервере. Для нее на лок. комп. создаем реплику базу С.
2. Далее на базу А накатывается новый шаблон.. и из нее запускается процесс копирования.
3. Получили база Б с идентификатором реплики одинаковым с Базой С. База А имеет другой ReplicID
4. После этого имеем База Б 200 документов 800 окурков. База С не изменяемая с пункта 1 соответственно имеющая 1000 документов.
5. Запускаем репликацию на сервере в результате получаем База Б и База С становятся например 350 документов, 650 окурков.
не понял шаг 3, как вы получили базу Б и почему у базы А вдруг стала другая репликИД?
 

nayke

Well-known member
04.08.2010
310
0
#17
не понял шаг 3, как вы получили базу Б и почему у базы А вдруг стала другая репликИД?
База Б создается программно. Затем меняется идентификатор реплики. и туда копируются документы (т.е. впринципе создаются в новой базе, меняется unid, и сохраняются).




Добавлено:
Попробуйте добавлять $ConflictAction со значением "2".
У меня недавно была проблема с репликацией документа между двумя серверами в кластере. У изменённого позднее документа был более ранний $Revisions (как такое случилось — понять не могу), в результате ни туда, ни сюда. Увеличил $Revisions — репликация в миг прошла, глазом моргнуть не успел.
ConflictAction="2" ничего не дал.. А как именно увеличивали $Revisions и чем это грозит если поле до заполнения пустое.
 

nvyush

Lotus team
22.04.2009
2 317
0
#18
А как именно увеличивали $Revisions и чем это грозит если поле до заполнения пустое.
Добавил более позднее значение "Волшебной кнопкой" (есть в КБ). Чем грозит — не знаю. Кстати, не совсем понял насчёт дат создания/модификации проблемных документов — дата удаления позже или раньше? Да, проверьте также наличие конфликтных документов, а то может быть "нормальные" документы удаляются, а конфликты реплицируются в "нормальные".
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#19
nayke
База Б создается программно. Затем меняется идентификатор реплики. и туда копируются документы (т.е. впринципе создаются в новой базе, меняется unid, и сохраняются).
какая-то белеберда получается
Сначала из базІ А делаете реплику базы С
потом программно создаёте базу Б(утверждая что репликаИД у неё драгая) НО её репликаИД совпадает с базой С
помоему все три базы имеют одну репликаИД и вы чего-то не понимаете
 

nayke

Well-known member
04.08.2010
310
0
#20
Добавил более позднее значение "Волшебной кнопкой" (есть в КБ). Чем грозит — не знаю. Кстати, не совсем понял насчёт дат создания/модификации проблемных документов — дата удаления позже или раньше? Да, проверьте также наличие конфликтных документов, а то может быть "нормальные" документы удаляются, а конфликты реплицируются в "нормальные".

Дата удаления позже. Конфликтных документов нет. Добавил более позднее значение "Волшебной кнопкой" (есть в КБ) - не понял а можно поподробнее..

Добавлено:
nayke

какая-то белеберда получается
Сначала из базІ А делаете реплику базы С
потом программно создаёте базу Б(утверждая что репликаИД у неё драгая) НО её репликаИД совпадает с базой С
помоему все три базы имеют одну репликаИД и вы чего-то не понимаете
для Базы А ReplicID=1
создали реплику для Базы А ReplicID=1 для Базы C ReplicID=1
База Б создается копированием из А, а не репликой(метод CreateCopy)
создали базу Б сразу после копирования для Базы Б ReplicID=2
меняем База А ReplicID=2 База Б ReplicID=1 потом копируем документы в Б
в результате
База А ReplicID=2
База Б ReplicID=1
Базы C ReplicID=1