Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: FRANKI am 02.09.03 - 12:50:13

Titel: DB Komprimierung
Beitrag 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
Titel: Re:DB Komprimierung
Beitrag von: Markus Henke am 02.09.03 - 12:55:03
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
Titel: Re:DB Komprimierung
Beitrag von: koehlerbv am 02.09.03 - 12:57:22
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
Titel: Re:DB Komprimierung
Beitrag von: FRANKI am 02.09.03 - 13:01:57
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
Titel: Re:DB Komprimierung
Beitrag von: Driri am 02.09.03 - 15:32:41
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")
Titel: Re:DB Komprimierung
Beitrag von: ata am 02.09.03 - 17:53:50
... ich würde das mit dem Programmdokument machen, es ist zeitlich steuerbar...

ata
Titel: Re:DB Komprimierung
Beitrag von: koehlerbv am 02.09.03 - 19:23:57
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
Titel: Re:DB Komprimierung
Beitrag von: ata am 02.09.03 - 19:28:31
... 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
Titel: Re:DB Komprimierung
Beitrag von: FRANKI am 03.09.03 - 07:25:54
Danke für Eure Anregungen,

leider liegt der Sch.... mit dem löschen und neu Aufbauen definitiv nicht in meiner Hand.

Gruß
FRANKI
Titel: Re:DB Komprimierung
Beitrag von: eknori am 03.09.03 - 08:08:50
...  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
Titel: Re:DB Komprimierung
Beitrag von: ata am 03.09.03 - 10:19:23
... kommt wie gerufen, kann ich gerade wo anders gebrauchen...

...danke...

ata  ;D
Titel: Re:DB Komprimierung
Beitrag von: FRANKI am 03.09.03 - 13:16:24
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
Titel: Re:DB Komprimierung
Beitrag von: HRaq am 03.09.03 - 13:32:59
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
Titel: Re:DB Komprimierung
Beitrag von: ata am 03.09.03 - 15:16:32
@Franki

... du kannst im Log nachschauen, ob der Befehl erfolgreich abgesetzt wurde, dort sind die eintragungen der Konsole "protokolliert"

ata
Titel: Re:DB Komprimierung
Beitrag von: FRANKI am 03.09.03 - 16:08:33
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