Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Friese am 02.08.02 - 12:18:45
-
Moin Moin!
Ich hab´ da mal eine Frage:
Um automatisch eine Replik zu erstellen, bietet Notes ja im Script eine Möglichkeit. Ich kann sagen: Erstelle mir von Datenbank x auf Server y eine Replik.
Ich möchte diese Replik aber nur als nackte Datenbank, so daß erst bei der nächsten Replikation (sei es manuell oder zeitlich) diese Datenbanken abgeglichen werden.
Kann mir da einer helfen? Es würde nämlich zu lange dauern, wenn ich zum Beispiel 5 Datenbanken hätte und alle ziemlich groß sind.
Vielen Dank schon mal im voraus.
Gruß aus Friesland
-
Servus,
ich würde es so machen:
Ich würde eine lokale Replik der Datenbank erstellen.
In dieser lokalen Replik würde ich dann alle Dokumente löschen.
Auf Basis dieser leeren Datenbank würde ich mittels eines kleinen Agents die benötigten Repliken auf den betroffenen Servern erstellen.
Bei der nächsten Replikation werden - sofern in den Verbindungsdokumenten vorgesehen - die Repliken mit Daten gefüllt.
Die leere lokale Replik kannst Du dann wieder löschen.
Ciao, Siegi
-
und das alles im script unterbringen? *grübel* Erstelle Datenbank (lokal), lösche alle Dokumente (lokal), davon Replik anlegen (auf Server)....
Hmmmmm
Versuch macht kluch
Gruß
-
Moin Moin!
Wollte grad anfangen, aber ich kann mir nicht vorstellen, daß diese drei Schritte wesentlich schneller sind als der eine (s.o.), zumal ja noch eine richtige Replik lokal angelegt wird *wart*
Hat noch jemand eine Idee?
Gruß
-
Hallo,
versuch's mal folgendermaßen:
Starte manuell eine Replikation bis diese 5 bis 10 % fortgeschritten ist. Dann abbrechen und an der Server-Console den Task "replicate ..." abrufen, geht sehr schnell.
So machen wir das, wenn wir User mit großen Mailfiles umziehen.
Jimmi
-
Hi,
ich hab das Problem auch gerade gehabt und eine Lösung gefunden. Hier die fertige Funktion:
'Declarations:
'For CreateEmptyReplica
Type TIMEDATE
Innards(1) As Long
End Type
Type DBREPLICAINFO
ID As TIMEDATE
Flags As Integer
CutoffInterval As Integer
Cutoff As TIMEDATE
End Type
Declare Function W32NSFDbReplicaInfoGet Lib "nnotes" Alias "NSFDbReplicaInfoGet" ( Byval hDb As Long, ReplicationInfo As DBREPLICAINFO ) As Integer
Declare Function W32NSFDbReplicaInfoSet Lib "nnotes" Alias "NSFDbReplicaInfoSet" ( Byval hDb As Long, ReplicationInfo As DBREPLICAINFO ) As Integer
Declare Function W32NSFDbOpen Lib "nnotes" Alias "NSFDbOpen" ( Byval PathName As Lmbcs String, rethDb As Long ) As Integer
Declare Function W32NSFDbClose Lib "nnotes" Alias "NSFDbClose" ( Byval hDb As Long ) As Integer
Declare Function W32OSLoadString Lib "nnotes" Alias "OSLoadString" ( Byval hModule As Long, Byval StringCode As Integer, Byval retBuffer As Lmbcs String, Byval BufferLength As Integer ) As Integer
Const NULLHANDLE = 0&
Const NOERROR = 0
Const PKG_NSF = &H200
Const ERR_NOT_NSF = PKG_NSF + 1
Const ERR_NSF_VERSION = PKG_NSF + 25
Const REPLFLG_HIDDEN_DESIGN = &H00 ' &H20 Hide , &H00 Unhide.
Sub CreateEmptyReplica( strSrSrv As String, strSrNa As String, strDeSrv As String, strDeNa As String)
Dim dbSr As New NotesDatabase(strSrSrv,strSrNa)
Dim dbDes As NotesDatabase
Dim hDbSr As Long
Dim hDbDe As Long
Dim dbRepInfo As DBREPLICAINFO
Dim iStatus As Integer
Dim sErrMsg As String
Dim sBuffer As String
Dim strTmp As String
'Create empty copy of DB
Call dbSr.CreateCopy(strDeSrv,strDeNa)
'Copy Replica info to make it a replica
sBuffer = String$(256, 0)
'Open Source DB
If strSrSrv="" Then
strTmp=strSrNa
Else
strTmp=strSrSrv+"!!"+strSrNa
End If
iStatus = W32NSFDbOpen(strTmp, hDbSr) 'Source Server and database name
If iStatus <> NOERROR Then
Select Case iStatus
Case ERR_NOT_NSF
sErrMsg = "No NSF File"
Case ERR_NSF_VERSION
sErrMsg = "Version NSF Invalide"
Case Else
sErrMsg = GetCAPIErrorMsg(iStatus)
End Select
Msgbox sErrMsg, 48, "Error in API C"
Exit Sub
End If
'Open Destination DB
If strDeSrv="" Then
strTmp=strDeNa
Else
strTmp=strDeSrv+"!!"+strDeNa
End If
iStatus = W32NSFDbOpen(strTmp, hDbDe) 'Destination Server and database name
If iStatus <> NOERROR Then
Select Case iStatus
Case ERR_NOT_NSF
sErrMsg = "No NSF File"
Case ERR_NSF_VERSION
sErrMsg = "Version NSF Invalide"
Case Else
sErrMsg = GetCAPIErrorMsg(iStatus)
End Select
Msgbox sErrMsg, 48, "Error in API C"
Exit Sub
End If
'Read Source Replica Info
iStatus = W32NSFDbReplicaInfoGet(hDbSr, dbRepInfo)
If iStatus <> NOERROR Then
Msgbox GetCAPIErrorMsg(iStatus), 48, "Error in API C"
Exit Sub
End If
'Write Dest. Replica Info
iStatus = W32NSFDbReplicaInfoSet(hDbDe, dbRepInfo)
If iStatus <> NOERROR Then
Msgbox GetCAPIErrorMsg(iStatus), 48, "Error in API C"
Exit Sub
End If
'Close Source
iStatus = W32NSFDbClose(hDbSr)
If iStatus <> NOERROR Then
Msgbox GetCAPIErrorMsg(iStatus), 48, "Error in API C"
End If
'Close Dest.
iStatus = W32NSFDbClose(hDbDe)
If iStatus <> NOERROR Then
Msgbox GetCAPIErrorMsg(iStatus), 48, "Error in API C"
End If
End Sub
Achtung: Wenn man nicht direkt in der ACL mit Name eingetragen ist, ist der Zugriff auf die Replik erst nach dem ersten replicieren möglich!
Gurß Hape
-
Hallo!
Danke erst einmal....
Aber wie und wo hast Du das eingebaut? Alleine schon durch GetCAPIErrorMsg kann ich diese Funktion (sei es als Button oder Agent) nicht speichern.
Hilfe! :'(
-
Sorry ich hatte die Funktion vergessen :-( . Hier ist Sie:
Function GetCAPIErrorMsg(iStatus As Integer) As String
%REM
GetCAPIErrorMsg - Cette fonction prend le statut de l'erreur retourné par l'API C, retourne le message d'erreurs correspondant venant des entrailles de Notes
et retourne le message à l'appelant.
%END REM
Dim iLen As Integer
Dim sBuffer As String
sBuffer = String$(256, 0)
iLen = W32OSLoadString(NULLHANDLE, iStatus, sBuffer, Len(sBuffer) - 1)
If iLen > 0 Then
GetCAPIErrorMsg = Left$(sBuffer, Instr(1, sBuffer, Chr$(0)) - 1)
Else
GetCAPIErrorMsg = "Error unknown"
End If
End Function
Jetzt sollte es klappen.
-
Hallo!
Erst einmal wieder Danke für die Nachricht!
Nur meckert er immer noch, bzw. wieder.
Dieses mal über W32OSLoadString
Könntest Du mir nicht eine Datenbank schicken, in der die Funktion steckt? Mehr braucht ja nicht in der Datenbank sein.
Gruß aus Friesland
PS.: frieslaender@gmx.de
-
Hallo!
Nun habe ich es hinbekommen HaPe, besten Dank nochmal.
Die einzige Verbesserung wäre nur noch, daß wenn ich eine neue Replik anlege (eben mit dem Script), daß dann auch nicht das Design erstellt wird. Sprich so, als würde ich mit der rechten Maustaste auf das Datenbank Icon gehen würde und sage, ja moin, ich möchte eine neue Replik, aber nicht sofort. Dann entsteht da so etwas, was unter 200 kb groß, bzw klein ist ;-) Und mit der nächsten Replizierung wird das Dingens auf Normalgröße gebracht.
Vielleicht fällt Dir ja noch was ein *hoff*
Gruß
-
Klar fällt mir dazu was ein ::).
Wenn du die Dim Zeile:
Dim dbSr As New NotesDatabase(strSrSrv,strSrNa)
durch das Template einer neuen leeren DB ersetzt:
Dim dbSr As New NotesDatabase("","default.ntf")
sollte es klappen. Die default.ntf musst du durch das erstellen einer neuen datenbank mut dem "- Blank -" template erstellen.
Hab momentan keinen Zeit das zu testen, gieb mal feedback.
Gruß HaPe
-
Hi,
Ich hatte auch schon nach Möglichkeiten gesucht !
Hier meine Ergebnisse:
Über den AdminClient :
Dateien dann rechts Repliken erstellen. Den Rest macht dann der AdminP. Man muß aber mindestenz Leser auf der DB sein.
oder
in der Sandbox:
http://www-10.lotus.com/ldd/sandbox.nsf/ecc552f1ab6e46e4852568a90055c4cd/90bb96e358b38d5485256a240052f0b3?OpenDocument&Highlight=0,replica
habe ich aber noch nicht getestet !
Ich braucht man aber keine Rechte auf der DB.
Gruß
Hardy