Удаление Deletion Stabs

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

Eugeneus

Собственно все в сабже ) Можно ли через средства администрирования внепланово очистить базу от делишн стабс ? Спасибо большое заранее за ответы )
 

puks

Lotus Team
03.02.2007
1 921
56
BIT
14
В свойствах репликации на закладке "Space Savers" ставишь Remove documents not modified ... 0 дней, НЕ ВКЛЮЧАЯ ПРИ ЭТОМ ЧЕКБОКС!!! При открытии базы все стабы удалятся.

Вот здесь подробности разных вариантов.
 
E

Eugeneus

Большое спасибо. Один вопрос: база должна быть переоткрыта всеми текущими пользователями на момент внесения изменений ?
 
E

Eugeneus

Если честно, не помогло (((....То есть наверняка должно сработать, много статей перелопатил, везде одно говорят - время жизни стабс равно одной третьей периода указанного в этой опции...Но у меня почему-то не работает, ни вчера, ни сегодня ((( Хз(((
 
E

Eugeneus

Компакт тоже до фонаря (( Правда, есть вариант сделать репликацию, в реплику стабы не попадают, но не хочется гемороя с реплицированием и заменой базы на сервере со всеми вытекающими....Кроме того, ведь это должно работать !
 
A

Akupaka

стабы бьет задача updall, попробуй 1-й способ и принудительно updall запустить на базу...
возможно, ей понадобятся опции. еще отключи Soft deletions, возможно, они могут мешать...
сам не пробовал, возможных последствий не гарантирую :)

к стати, как ты определил, что они есть в базе? :huh:
 
E

Eugeneus

ммммм....Спасибо ) Насчет как определил: ну сначала сравнил количество документов (в свойствах базы), и количество документов отобранных по SELECT @ALL....Первых оказалось на 236 больше...Потом агентиком посчитал все IsDeleted документы в базейке - та же цифра 236
 
A

Akupaka

эээ, товарищ... у тебя Soft Deletion включен...
Deletion Stub таким образом образом не достанешь ;)

***
вот нарыл код, не проверял, у тебя есть возможность ;)


How to count and delete deletion stubs
Category: Lotus Notes Domino

Christophe Windelen wrote a blog entry a couple of years ago with a solution on how to delete deletion stubs for a Lotus Notes database. Take a look at his code to accomplish that, very nice!

I have modified it just a little bit to be able to first choose which database to work on and then to choose if you only want to count or if you want to count and delete them

Код:
(Options):
Option Public
Const wAPIModule = "NNOTES" ' Windows/32

(Declarations):
Declare Private Sub IDDestroyTable Lib wAPIModule Alias "IDDestroyTable" _
( Byval hT As Long)
Declare Private Function IDScan Lib wAPIModule Alias "IDScan" _
( Byval hT As Long, Byval F As Integer, ID As Long) As Integer
Declare Private Function NSFDbOpen Lib wAPIModule Alias "NSFDbOpen" _
( Byval P As String, hDB As Long) As Integer
Declare Private Function NSFDbClose Lib wAPIModule Alias "NSFDbClose" _
( Byval hDB As Long) As Integer
Declare Private Function NSFDbGetModifiedNoteTable Lib wAPIModule Alias "NSFDbGetModifiedNoteTable" _
( Byval hDB As Long, Byval C As Integer, Byval S As Currency, U As Currency, hT As Long) As Integer
Declare Private Function NSFNoteDelete Lib wAPIModule Alias "NSFNoteDelete" _
( Byval hDB As Long, Byval N As Long, Byval F As Integer) As Integer
Declare Private Function OSPathNetConstruct Lib wAPIModule Alias "OSPathNetConstruct" _
( Byval NullPort As Long, Byval Server As String, Byval FIle As String, Byval PathNet As String) As Integer
Declare Private Sub TimeConstant Lib wAPIModule Alias "TimeConstant" _
( Byval C As Integer, T As Currency)
Dim Db As NotesDatabase

Initialize:
Sub Initialize
Dim Session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim dbInfo As Variant
Dim sDbServer As String
Dim sDbPath As String
Dim retVal As Integer

dbInfo = ws.Prompt(13, "Choose database", "Choose a database")
sDbServer = dbInfo(0)
sDbPath = dbInfo(1)

Set db = session.GetDatabase(sDbServer, sDbPath)

retVal = ws.Prompt (PROMPT_YESNOCANCEL, _
"Delete or just count?", _
"Do you want to delete all of the deletion stubs in this database [Yes] or just count them [No]")

Select Case retVal
Case 1 : Call countAndDeleteStubs(db, 1)
Case 0 : Call countAndDeleteStubs(db, 0)
Case -1 : Msgbox "Operation cancelled"
End Select

End Sub

countAndDeleteStubs:
Sub countAndDeleteStubs(db As NotesDatabase, choice As Integer)
Dim ever As Currency, last As Currency
Dim hT As Long, RRV As Long, hDB As Long
With db
np$ = Space(1024)
OSPathNetConstruct 0, db.Server, db.FilePath, np$
End With
NSFDbOpen np$, hDB
TimeConstant 2, ever
NSFDbGetModifiedNoteTable hDB, &H7FFF, ever, last, hT
n& = 0
done = (IDScan(hT, True, RRV) = 0)
While Not done
If RRV < 0 Then
If (choice = 1) Then
NSFNoteDelete hDB, RRV And &H7FFFFFFF, &H0201
End If
n& = n& + 1
End If
done = (IDScan(hT, False, RRV) = 0)
Wend
IDDestroyTable hT
NSFDbClose hDB

If (choice = 1) Then
Msgbox "Deleted " & Cstr(n&) & " stubs in database " & db.FilePath & " on server " & db.Server
Else
Msgbox "Database " & db.FilePath & " on server " & db.Server & " contains " & Cstr(n&) & " stubs"
End If

End Sub

***

зы: проверил :) РАБОТАЕТ! ;)
 
E

Eugeneus

Всем аграмадное спасибо, Акупаке отдельный респект ) Правда кодом воспользоваться не пришлось, имела место замена базы на реплику и в конце концов проблема была решена, но скрипт взял на заметку )
 
Мы в соцсетях:

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