Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: FRANKI am 02.09.03 - 12:50:13
-
Hallo alle zusammen,
hier eine ganz "einfache" Frage:
Kann man eine Datenbank per Agenten dazu kriegen, einen compress zu machen ??
Danke
FRANKI
-
Hi,
es gibt keine Methode die das kann, aber wahrscheinlich gibt es dafür eine API. Ich denke die anderen hier können Dir bestimmt eine konkrete Antwort geben.
Gruß
Markus
-
Doch, eine Methode gibt es schon (NotesDatabase.Compact), aber die wirkt nur lokal ;-(
Warum soll das eigentlich ein Agent machen? Ein Programmdokument für den Server tut es doch auch.
Bernhard
-
Ich hab' hier eine DB in der ca 30000 Dokumente sind.
Die muß ich zu einem bestimmten Zeitpunkt löschen.
Anschließend wird die Datenbank dann neu aufgebaut, also es werden 30000 Dokumente erzeugt.
.....ist leider so und daran kann ich nichts ändern.
Ich hab nur das löschen in der Hand.
Danach würde ich die DB gerne dazu bewegen, sich auf normalgröße "gesundzuschrumpfen".
Das ist der Background.
Irgend eine Idee???
FRANKI
-
Hi,
man kann über die Kommandozeile Datenbanken komprimieren, ich weiß aber nicht, ob das auch auf dem Server funktioniert.
Aufruf wäre z.B. ncompact.exe doc/log.nsf
Das kannst du ja per Execute ausführen, also z.B. :
@Command([Execute];"ncompact.exe doc\\log.nsf")
-
... ich würde das mit dem Programmdokument machen, es ist zeitlich steuerbar...
ata
-
Auch wenn ich entsetzt bin, daß jeden Tag eine fünfstellige Dokumentenanzahl gelöscht wird, um sie dann neu 'reinzuziehen (brauchst Du Tipps, wie man das verhindern kann oder Argumente, warum man ggf. dann für solche Aktionen nicht Notes nehmen sollte?):
Folge ata's Tip und mach' ein Programmdokument für den betreffenden Server:
Programmname = compact
Befehlszeile = pfad\dateiname -L
Server = entsprechend angeben
Zeitplan: Im sicheren Abstand, nachdem Euer Kamikaze-Agent gelaufen ist (Log auswerten)
HTH,
Bernhard
-
... und verkürze in der Datenbank die Verweildauer für gelöschte Dokumente, deaktiviere "Ungelesene Dokumente markieren"
... und ich würde über Bernhards Anregung nachdenken, ob es nicht besser wäre nur upzudaten, wenn es was gibt, und ansonsten das Dokument zu belassen wie es ist, oder das System zu wechseln, ...
ata
-
Danke für Eure Anregungen,
leider liegt der Sch.... mit dem löschen und neu Aufbauen definitiv nicht in meiner Hand.
Gruß
FRANKI
-
... NotesDatabase.Compact funktioniert ja nur lokal.
Aber du kannst ja Konsolenkommandos über Script absetzen. Hier der notwendige Code
Declare Function NSFRemoteConsole Lib "NNotes.dll" Alias "NSFRemoteConsole" (Byval Server As String, Byval cmd As String, ret As Long) As Long
Declare Function OSLockObject Lib "NNotes.dll" Alias "OSLockObject" (Byval Handle) As String
Declare Sub OSUnlockObject Lib "NNotes.dll" Alias "OSUnlockObject" (Byval Handle)
Declare Sub OSMemFree Lib "NNotes.dll" Alias "OSMemFree" (Byval Handle)
Class remoteConsole
Private IsError As Variant
Private rc As Integer
Private hBuffer As Long
Private Server As String
Private Command As String
Private Result As String
Sub New(inpServer As String)
Dim server As New NotesSession
If inpServer = "" Then
Me.IsError = True
Else
Me.server=inpServer
Me.IsError = False
End If
End Sub
Function Execute(inpCommand As String) As String
If Me.Server = "" Then
Exit Function
End If
If inpCommand = "" Then
Me.execute="You must specify a command"
Me.iserror = True
Exit Function
Else
Me.command = inpCommand
End If
Me.rc = NSFRemoteConsole(Me.server, Me.command, hBuffer)
If Me.rc <> 0 Then
Me.iserror = True
Me.result="Error returned " & _
" from console [" & Cstr(rc) & "]"
Else
Me.result = OSLockObject(hBuffer)
Call OSUnlockObject(hBuffer)
Call OSMemFree(hBuffer)
Me.Iserror = False
End If
Me.execute = Me.result
End Function
End Class
Sub Click(Source As Button)
Dim exec As String
Dim dummy As Variant
Dim remConsole As New RemoteConsole ( "YOUR_SERVER_HERE" )
Exec = "load compact.... deine Datenbank hier"
dummy = remConsole.Execute(exec)
End Sub
-
... kommt wie gerufen, kann ich gerade wo anders gebrauchen...
...danke...
ata ;D
-
Hallo Eknori,
ich stelle mich gerade etwas dumm an, Dein Script bekomme ich nicht zum laufen.
Ich habe einen Agenten erstellt und Dein Script hingeworfen.
dann gestartet und.......
der Bildschirm flackert einmal, das wars....
Was habe ich falsch gemacht??
Danke
FRANKI
-
Hi FRANKIE,
falls du dich doch für die Programmdokumente entscheiden solltest, würde ich vor das Compact ein Dokument für "updall Dateiname -R"
erstellen. Damit werden die Ansichtsindizes neu erstellt und alle anderen Indizes gelöscht. Das verkleinert die DB schon einmal. Noch idealer wäre es, danach noch ein Fixup (ebenfalls über Programmdokument) zu starten, falls das noch ins Zeitfenster passt.
Gruß Henning
-
@Franki
... du kannst im Log nachschauen, ob der Befehl erfolgreich abgesetzt wurde, dort sind die eintragungen der Konsole "protokolliert"
ata
-
da steht leider nur:
Agent 'DBcompress' wurde am 03.09.2003 16:07:16 gestartet
Bearbeitet alle Dokumente in der Datenbank: insgesamt 6355
6355 Dokumente gefunden, die die Suchkriterien erfüllen
LotusScript Code ausgeführt
Agent 'DBcompress' wurde am 03.09.2003 16:07:16 beendet
und kompriemiert hat er nicht !!
Was ist verkehrt??
FRANKI