Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: mastertom am 29.12.10 - 19:39:31

Titel: Selektive Repliken anlegen
Beitrag von: mastertom am 29.12.10 - 19:39:31
Hallo zusammen,

ich suche ein Script, dass es mir ermöglicht, von Server X die Datenbank Y als Replik auf Server Z anzulegen.

Idealer Weise wird dann auch gleich eine Replikationsformel hinterlegt, die z.B. nur 90 Tage alte Mails repliziert.

Ist das überhaupt mit Lotus Script / oder ggf. mit Formelsprache umsetzbar oder muß ich hier tatsächlich "Hand" anlegen?

Bin gespannt auf Eure Ansätze

Titel: Re: Selektive Repliken anlegen
Beitrag von: pram am 30.12.10 - 00:45:27
Es gibt notesDatabase.createReplica. In Verbindung mit dem NotesDbDirectory sollte zumindest das Anlegen kein Problem sein.
Wie man jetzt aber die Replizierformel ändert, weiß ich nicht, ggf. steckt sie in diesem speziellen Dokument:
Set doc = db.GetDocumentByID("FFFF0800")

Gruß
Roland
Titel: Re: Selektive Repliken anlegen
Beitrag von: eknori am 30.12.10 - 10:11:51
Du musst zunachst einen ReplicaStub anlegen. Dafür gibt es in LS aber keinen direkten Befehl.

Über notesDatabase.CreateReplica( newServer$, newDbFile$ ) kann man zwar eine neue replik erstellen, es wird aber sofort repliziert.

Daher müssen wir mal wieder zur API greifen

Declaration
Code
Declare Function W32_NSFDbOpen Lib "nnotes.dll" Alias "NSFDbOpen" _
(Byval dbname As String, dbHandle As Long ) As Long
Declare Function W32_NSFDbClose Lib "nnotes.dll" Alias "NSFDbClose" _
(Byval dbHandle As Long ) As Long
Declare Function W32_NSFDBCREATE Lib "NNOTES.DLL" Alias "NSFDbCreate" _
(Byval dbname As String, Byval dbClass As Single, Byval forceIt As Single) As Long
Declare Function W32_NSFDBREPLICAINFOSET Lib "NNOTES.DLL" Alias "NSFDbReplicaInfoSet" _
(Byval dbHandle As Long, replInfoStruct As Long) As Long
Declare Function W32_NSFDBREPLICAINFOGET Lib "NNOTES.DLL" Alias "NSFDbReplicaInfoGet" _
(Byval dbHandle As Long, replInfoStruct As Long) As Long

Function CreateReplStub
Code
Function CreateReplStub(S_Server As String, S_Db As String, T_Server As String, T_Db As String, forceit As Single) As Long
	Dim S_DbString As String
	Dim T_DbString As String
	Dim dbhandle As Long
	Dim retNoteID As Long
	Dim noteClass As Long
	Dim replInfo(5) As Long
	
	Select Case Ucase$(S_Server)
	Case "LOCAL"
		S_DbString = S_Db
	Case "LOKAL"
		S_DbString = S_Db
	Case ""
		S_DbString = S_Db
	Case Else
		S_DbString = S_Server + "!!" + S_Db
	End Select
	
	Select Case Ucase$(T_Server)
	Case "LOCAL"
		T_DbString = T_Db
	Case "LOKAL"
		T_DbString = T_Db
	Case ""
		T_DbString = T_Db
	Case Else
		T_DbString = T_Server + "!!" + T_Db
	End Select
	
'get the replica info struct from Source DB
	
	rc = W32_NSFDBOPEN(S_DbString, dbhandle)
	rc = W32_NSFDBREPLICAINFOGET(dbhandle, replInfo(0))
	rc = W32_NSFDBCLOSE(dbhandle)
	
'crete new DB and asign replikaInfo
	
	rc = W32_NSFDBCREATE(T_DbString, DBCLASS_NOTEFILE, forceIt)
	Print "Create",rc
	rc = W32_NSFDBOPEN(T_DbString, dbhandle)
	Print "Open", rc
	rc = W32_NSFDBREPLICAINFOSET(dbhandle, replInfo(0))
	Print "Set", rc
	rc = W32_NSFDBCLOSE(dbhandle)
	Print "close", rc
	
End Function

aufgerufen wird der code dann beispielsweise:
Code
Sub Click(Source As Button)
	rc = CreateReplStub("comm3/singultus/de", "mail\bgates.nsf", "comm2/singultus/de", "mail\bgates.nsf", True) 
End Sub

Der code erstellt einen replica stub in dem du jetzt über
notesReplicationEntry.Formula = formula$ die Replikationsformel setzen kannst.

Ein bisschen ErrorHandling solltest du auch noch einbauen. Habe den Code auf das Nötigste abgespeckt.
Titel: Re: Selektive Repliken anlegen
Beitrag von: mastertom am 30.12.10 - 18:00:17
Wow... das liest sich sehr schlüssig... da werde ich mich gleich mal dransetzen :-)

Vielen Dank für die Unterstützung... Ich melde mich dann entsprechender Erfolgsmeldung :-)


Titel: Re: Selektive Repliken anlegen
Beitrag von: 0xse am 03.01.11 - 11:51:59
Bis auf die Anlage des Replik-Rumpfes findest du alles hier:
http://atnotes.de/index.php/topic,47655.0.html (http://atnotes.de/index.php/topic,47655.0.html)
Titel: Re: Selektive Repliken anlegen
Beitrag von: koehlerbv am 03.01.11 - 14:26:44
Wenn die Bedingungen gegeben sind, dann geht das Anlegen eines Replica Stubs sogar noch einfacher: Die Quell-Replik wird mittels NotesReplication.Disabled auf "nicht replizierbar" gesetzt. Dann mit CreateReplica eine Replik erzeugen - wegen des Flags wird daraus nur ein Stub. Anschliessend das erforderliche weitere Vorgehen bzgl. Replication Formula und dann NotesReplication.Disabled wieder auf False setzen.

HTH,
Bernhard
Titel: Re: Selektive Repliken anlegen
Beitrag von: ronka am 12.10.21 - 21:18:10
ich weiss, sehr alten thread.. aber ich muss hier einmal etwas melden.

Ich habe aktuell die aufgabe beim Merge von 4 Server zu einen neuen mit DAOS, genau dieses zu tun, replik stumf anlegen, DAOS enabeln und dann erst replizieren.

Wenn der Replication disabeld ist, bekommt der CreateReplica ein User Defined error, und geht damit nicht. Leider.
Titel: Re: Selektive Repliken anlegen
Beitrag von: Tode am 13.10.21 - 07:46:00
Der Ansatz von Ulrich funktioniert einwandfrei, den setze ich hier auch ein. Nach Aufruf von CreateReplStub kannst Du dann ganz einfach die Replizierformel setzen:
Code
Set dbTarget = New NotesDatabase( targetServer, targetPath )
Set repl = dbTarget.Replicationinfo
Set replEntry = repl.Getentry("-", "CN=TargetServerName/O=Certifier", True)
replEntry.Formula = replFormula
Call replEntry.Save
Call repl.Save
Titel: Re: Selektive Repliken anlegen
Beitrag von: CarstenH am 13.10.21 - 10:41:28
Wenn man keine Replizierungsformel braucht sondern nur die eigentliche Replikation bis zum Aktivieren des DAOS unterdrücken möchte geht es noch viel einfacher ohne Script und API-Tricks:

1) Alle gewünschten DB's im Adminclient markieren und Replikation deaktivieren.
2) Die DB's im Adminclient auf den Zielserver ziehen und bestätigen.

Dank AdminP sind wenige Minuten später die leeren Repliken angelegt.

Jetzt kann man in Ruhe den DAOS aktivieren und danach die Replikation gleich wieder freigeben, den Rest macht der Replikator.

HTH
Carsten
Titel: Re: Selektive Repliken anlegen
Beitrag von: ronka am 13.10.21 - 21:13:51
Wenn es doch so einfach wäre...

Server 1 bis 6, die daten haben von sih UND Server 7 bi 15 ( ! ) und aus historische gründen mit einen verzeichnis struktur /alteServername/verzeichnis/unterverzeichnis/Datenbank.nsf liegen nicht an den Stelle wo sie zukünftig liegen sollten.,

Dazu gibtr es notes 7 8 und 9 Servern (wenigstens ehemalige), und mehrere Replieken in unterschiedliche verzeichnisse. Und einige knapp an der 64 GB grenze dran..

Das habe ich schon "kontrolliert" und alle Replieken zusammen gefunden.

Dann muss ein neuen Pfad gemacht werden wo die zukunftige Datenbanke auf den neuen Server liegen sollten..

Und klar Ulrichs lösung funktioniert. Den verwende ich auch, der andere mit Replizierung ausschalten, direkt über mein Posting, darüber war meine Meldung gemeint.. Entschuldigung wenn das nicht klar war.

Neue Server ist Domino 11, und mit DAOS für den Anhänge die sicherlich über all doppelt und dreifach vorhanden sind. Daten werden auch nur per PULL geholt, sonnst könnten die DB's kaputt gehen mit den 64 GB Grenze.
Titel: Re: Selektive Repliken anlegen
Beitrag von: Tode am 14.10.21 - 15:06:25
Dann mache auf jedne Fall ein Create_R10_Databases in die INI des Servers bevor Du die Repliken erstellst. Dann ist wenigstens die Grenze bei 265GB...
Titel: Re: Selektive Repliken anlegen
Beitrag von: ronka am 14.10.21 - 19:40:23
Guter hinweis, ich war der FALSCHE meinung das den R11 Server das selber tun würde.. gemacht.

Replizierung voin 2 TB daten dauert dann einen weile.
Titel: Re: Selektive Repliken anlegen
Beitrag von: Tode am 15.10.21 - 09:03:17
durchaus... bezüglich "automatisch": Erinnerst Du Dich an das Debakel beim automatischen Update des ODS von Version 4 auf Version 5 mit Datenverlust, korrupten Datenbanken, etc.? Seither hat sich IBM und jetzt auch HCL nie mehr getraut eine neue ODS OHNE einen entsprechenden INI- Parameter automatisch zu aktivieren...
Titel: Re: Selektive Repliken anlegen
Beitrag von: ronka am 15.10.21 - 13:43:13
Ich habe es verdrängt :-)

Jedenfalls läuft es jetzt und müssen sehr viele Datenbanken mittels Pull Repliziert werden zum neuen.

Verbindungsdokumente mit Pull Only erstellt, und von 18 bis 8 laufen lassen. Damit tagsüber das netzwerk nicht so belastet wird.

Mal sehen ob es am Montagmorgen fertig ist.