Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: pl001 am 09.02.11 - 11:44:36

Titel: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 09.02.11 - 11:44:36
Hallo,

ich muss alle Dokumente (inkl. Änderungen und Löschung) aus einer Ansicht in eine andere Datenbank kopieren. Hierzu verwende ich folgendes Script als Agent:

Code
Sub Initialize
	Dim session As New NotesSession
	Dim sourcedb As NotesDatabase
	Dim targetdb As NotesDatabase
	Dim sourceview As notesview
	Dim targetview As notesview
	Dim dc As NotesDocumentCollection
	Dim vc As NotesViewEntryCollection
	Dim doc As NotesDocument
	
	Set sourcedb = New NotesDatabase("SERVER","database.nsf")
	Set targetdb = session.CurrentDatabase
	
	
	Set sourceview = sourcedb.GetView("People")
	Set targetview = targetdb.GetView("all")
	Set vc = targetview.AllEntries
	Call vc.RemoveAll(True)
	
	
	Set doc = sourceview.GetFirstDocument
	
	While Not(doc Is Nothing)
		Call doc.CopyToDatabase(targetdb)
		Set doc = sourceview.GetNextDocument(doc)
	Wend
End Sub

Es werde also erst alle Dokumente der Ansicht "all" aus der Ziel-DB gelöscht und anschließend werden alle Dokumente der Ansicht "People" von der Quell-DB zur Ziel-DB kopiert. Es handelt sich dabei aktuell um ca. 1500 Dokumente, aber der Agent benötigt hierfür ca. 3 Minuten. Das Problem ist hierbei offensichtlich das Löschen, denn wenn ich dies zuvor manuell mache und dann den Agent starte benötigt er nur noch 15 Sekunden.

Wie kann ich das Löschen beschleunigen?

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: oxyd21 am 09.02.11 - 11:49:16
Wenn du was aus nem View löschst, wird der im Allgemeinen wieder aktualisiert. An welcher Stelle brauch der Debugger lange?
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 09.02.11 - 11:52:24
Zitat
Wenn du was aus nem View löschst, wird der im Allgemeinen wieder aktualisiert.

Das in der View alle Dokumente angezeigt werden, wäre es natürlich auch möglich einfach alle Dokumente in der DB zu löschen. Wäre das möglich und sinnvoll?

Zitat
An welcher Stelle brauch der Debugger lange?

Sorry, aber wo kann ich das sehen. Habe leider nicht viel Erfahrungen mit Notes-Programmierung.


Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: ascabg am 09.02.11 - 11:54:38
Hallo,m

Aber Du kannst doch Dein Script im Debugger laufenlassen, oder an geeigneten Stellen
Print-Befehle einbauen.


Andreas
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: oxyd21 am 09.02.11 - 11:55:59
Das in der View alle Dokumente angezeigt werden, wäre es natürlich auch möglich einfach alle Dokumente in der DB zu löschen. Wäre das möglich und sinnvoll?
??? Kapier ich nicht

Zitat
Sorry, aber wo kann ich das sehen. Habe leider nicht viel Erfahrungen mit Notes-Programmierung.
Werkzeuge -> Debug LotusScript
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 09.02.11 - 12:05:09
Also ich habe jetzt mal einen Print-Befehl eingebaut und konnte so sehen, dass fast die gesamte Zeit für folgenden Befehl benötigt wird.

Code
Call vc.RemoveAll(True)

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: ascabg am 09.02.11 - 12:11:08
Ok.
Damit bist Du also in Deiner Vermutung bestaetigt worden, dass das Loeschen der Dokumente die Bremse fuer Dein Script ist.

Warum loescht Du die Dokumente eigentlich?


Andreas
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 09.02.11 - 12:14:20
Ich habe zwei Datenbanken die keine Repliken sind und die Ziel-DB soll den gleichen Inhalt wie eine Ansicht der Quell-DB haben. Es sollen also alle neuen, geänderten und gelöschten Dokumente übertragen werden und das Ganze natürlich nicht als Replikation.

Ach ja, in diesem Zusammenhang gleich noch eine Frage. Wenn Dokumente mittels CopyToDatabase in eine DB-Replik kopiert werden, gibt es dann Probleme bei der eigentlichen Replikation. Führt dies also zu einem Replizierkonflikt oder ist ein solches Dokument dann doppelt vorhanden?

Gruß
Jochen
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: Bastel123 am 09.02.11 - 13:38:55
Ich verstehe nicht warum man Dokumente in eine Datenbank kopiert, die sowieso repliziert.

Aber sei's drum.

Normalerweise wird bei copytodatabase keine neue UNID vergeben. Es sei denn der Parameter

CopyToDatabase_New_UNID = 1

ist gesetzt. Dann wird immer eine neue UNID erzeugt und man muss eventuelle Antworten mitziehen.


Wenn ein Dokument mit der UNID schon vorhanden ist wird bei einem neuen Kopieren ein weiteres Dokument mit einer neuen UNID angelegt.

HTH

Sebastian 
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: ascabg am 09.02.11 - 14:05:09
@Bastel123
Es sind doch keine Repliken, wie der Fragesteller auch geschrieben hat.
Zitat
Ich habe zwei Datenbanken die keine Repliken sind und die Ziel-DB soll den gleichen Inhalt wie eine Ansicht der Quell-DB haben. Es sollen also alle neuen, geänderten und gelöschten Dokumente übertragen werden und das Ganze natürlich nicht als Replikation.

@pl001
Meine Frage mit dem Loeschen zielte eigentlich darauf hin ab, warum laesst Du, wenn es denn sein muss, dei Dokumente nicht zu einem spaeteren Zeitpunkt automatisch durch einen zweiten kleinen Agenten loeschen.

In Deinem jetzigen Script muesstest Du die zu loeschenden Dokumente einfach nur durch ein spezielles Flag kennzeichnen.
Natuerlich muesstest Du dann auch noch dir Ansicht anpassen, damit dei Dokumente mit dem gesetzten Loeschflag nicht mit angezeigt werden.


Andreas
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: Glombi am 09.02.11 - 14:07:51
Ach ja, in diesem Zusammenhang gleich noch eine Frage. Wenn Dokumente mittels CopyToDatabase in eine DB-Replik kopiert werden, gibt es dann Probleme bei der eigentlichen Replikation. Führt dies also zu einem Replizierkonflikt oder ist ein solches Dokument dann doppelt vorhanden?
Ist eine DB-Replik keine Replik?
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 09.02.11 - 14:18:09
Eigentlich geht es um folgende Anforderung.

Aus unserem Domino-Verzeichnis sollen alle Personendokumente in anderes und bereits bestehendes Adressbuch (keine Replik vom Verzeichnis) übertragen werden. Dieses soll immer die gleichen Personendokumente beinhalten wie das Verzeichnis. Es müssen also neue Einträge, Änderungen und Löschungen übertragen werden. Das zweite Adressbuch wird dann wiederrum per Replik an viele andere Standorte verteilt.

Genau genommen benötige ich also eine One-Way-Synchronisation. Nun dachte ich, dass man die Dokumente einfach mittels CopyToDatabase() kopieren kann, denn so soll sich die ID ja nicht ändern. Aber ich musste eben schon feststellen, dass dennoch alle so erzeugten Dokumente wird neu zu den anderen Standorten repliziert werden.

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: Peter Klett am 09.02.11 - 14:26:21
Was Du da baust, ist m.E. strukturell das Schlimmste, was man in Notes machen kann.

1500 Dokumente periodisch in einer Datenbank löschen und dann die (fast) gleichen wieder hineinkopieren. Anschließend dann die Zieldatenbank per Replikation an andere Standorte verteilen.

Du produzierst damit u.a. einen enormen unnötigen Replikationsverkehr.

Baue einen Agenten, der einen sauberen Abgleich der Datenbanken durchführt.

Neue Dokumente hinzufügen
Gelöschte Dokumente entfernen
Geänderte Dokumente ändern
Nicht geänderte Dokumente IN RUHE LASSEN

Für alles andere verbietet mir die Höflichkeit die korrekte Bezeichnung.
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: koehlerbv am 09.02.11 - 14:31:05
Nun dachte ich, dass man die Dokumente einfach mittels CopyToDatabase() kopieren kann, denn so soll sich die ID ja nicht ändern. Aber ich musste eben schon feststellen, dass dennoch alle so erzeugten Dokumente wird neu zu den anderen Standorten repliziert werden.

Peters Worten ist nichts hinzufügen.

Eine Erläuterung aber noch zur DocumentUniversalID: Bei CopyToDatabase bleibt diese erhalten - wenn es noch kein Dokument mit dieser UNID gibt. Und das ist in Deinem Fall ja nicht gegeben - der Deletion Stub des gerade gelöschten Dokuments hat ja schon diese UNID (sonst können Löschungen nicht repliziert werden).

Bernhard
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 09.02.11 - 14:32:15
Mir ist natürlich klar, dass die von Dir vorgeschlagene Lösung deutlich besser ist, nur leider fehlen mir die notwendigen Kenntnisse um so etwas umzusetzen. Das Script was ich hier gepostet habe wurde auch nur mit Mühe und Not mittels Copy&Paste zusammengestellt.

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: Peter Klett am 09.02.11 - 14:38:52
Das verstehe ich nur zu gut, aber es ändert nichts an dem Unheil, das Du mit der Aktion anrichtest. Das fällt Dir irgendwann richtig auf die Füße. Sicher gibt es irgendwelche Abgleich-Tools käuflich oder als Freeware, oder Du läßt Dir so einen Agenten bauen. Es wird auf jeden Fall billiger, als das so umzusetzen, wie Du es geplant hast.
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: eknori am 09.02.11 - 14:55:57
Freeware ... Hat mich da jemand gerufen ? http://www.eknori.de/2005-09-03/adressbucher-konsolidieren/

Ist zwar noch aus 4.x Zeiten, funktioniert aber bestens. Man muss auch nichts programmieren, sondern nur konfigurieren.
Und OpenNTF hat sicherlich auch noch was auf der Pfanne. ( Data Moving Animal )
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 09.02.11 - 15:03:22
@eknori

Vielen Dank für den Tipp, aber mit welcher Version wurde die DB erstellt? Bei kommt "Ungültige  NSF-Version".

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: eknori am 09.02.11 - 15:10:33
war OD 43. Hier noch einmal als ODS 20
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: WernerMo am 09.02.11 - 15:31:41
Hallo Ulrich

/Offtopic on

... Hier noch einmal als ODS 20...

ODS 20 war das nicht V4?
Inzwischen glaube ich, dass Du jede Version aktiv hast?

/Offtopic off

Gruß aus Nürnberg
Werner
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 09.02.11 - 15:32:39
Danke werde ich morgen gleich mal testen.

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: eknori am 09.02.11 - 16:19:48
Zitat
allo Ulrich

/Offtopic on

Zitat von: eknori am Heute um 15:10:33
... Hier noch einmal als ODS 20...

ODS 20 war das nicht V4?
Inzwischen glaube ich, dass Du jede Version aktiv hast?

/Offtopic off

Das nicht, aber mit einem "Neu Kopie" und als Dateiname statt NSF ein NS4 und schon machst du aus jedem ODS ein ODS20
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 10:01:07
@eknori

Hallo,

habe mir jetzt DWFSYNC mal etwas genauer angesehen. Vielen Dank für den Tipp, denn das Tool ist genau das was ich gesucht habe.

Leider gibt es nur noch ein Problem, wenn ich das SYN-Profile mittels Agent starten will. Es kommt dann folgende Fehlermeldung

Code
09:53:35 AM - ERROR! 1 - Unable to locate database 'names.nsf' on server 'SERVER' 
Class: CCDBMGRPATH Method: IsValid @ Line 283

09:53:35 AM -     PASSED FROM -->  Class: CCSYNCDATASOURCEDOMINOPROFILE Method: IsValid @ Line 402 as 9999 {User-defined error}

09:53:35 AM -     PASSED FROM -->  Class: CCSYNCHERDOMINO Method: initFromProfile @ Line 306 as 9999 {Data SOURCE reports it's invalid: Verzeichnis}

09:53:35 AM -     PASSED FROM -->  [Method: Sync Line 192] as 91 {Object variable not set}

Starte ich das SYN-Profile direkt, also über "Sync Now!" läuft es ohne Probleme.

Hast Du eventuell eine Lösung hierfür?

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: Peter Klett am 10.02.11 - 10:13:16
Ohne das Tool zu kennen, wirst Du wohl irgendwo den Quell- und/oder Ziel-Server angeben müssen. Derzeit scheint dort "SERVER" eingetragen zu sein

09:53:35 AM - ERROR! 1 - Unable to locate database 'names.nsf' on server 'SERVER'
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 10:16:18
Ich wollte hier nicht unseren Servernamen preisgeben, daher habe ich diesen im Log einfach gegen "Server" ersetzt. Im Profil ist er auf jedenfall korrekt eingetragen, denn der manuelle SYNC funktioniert ja ohne Probleme.

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: eknori am 10.02.11 - 10:20:46
Überprüfe mal die Rechte des Agenten.
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 10:25:31
Die DB wurde mit der ID des Servers signiert. Ich habe eben auch noch einmal versucht, die DB mit dem Client des Domio-Servers zu öffnen, so dass ich direkt mit der Server ID authentifiziert bin. Wenn ich das Profil dann manuell starte kommt die gleiche Fehlermeldung, wie bei dem Agent.

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: eknori am 10.02.11 - 10:41:25
ist da ein LINUX Server am Werk. Wegen Gross-/ Kleinschreibung? Ansonsten bleibt dir nur, den Agenten am Server zu debuggen, um zu sehen, was da abgeht.
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 10:43:56
Also es handelt sich um einen Windows Server 2003 mit Lotus Domino 5.0.10.

Wie kann ich den Agent debuggen?

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: koehlerbv am 10.02.11 - 10:45:47
Gegen Linux spricht ja auch "Client des Domino-Servers", Ulrich.

Peter, der Einsatz eines solchen Clients ist aber ganz übel. Auf produktiven Systemen hat sowas nichts zu suchen, und wirklich benötigt wird sowas wirklich nicht.

Bernhard
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 10:51:29
Wenn ich den Agent von einem Client aus starte funktioniert es auch. Scheint also nur dann ein Problem zu geben, wenn der Agent mit der Server-ID läuft.

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: eknori am 10.02.11 - 11:02:44
Da sowohl der Background- als auch der Foreground Agent den selben Code verwenden, tippe ich nach wie vor auf ein Berechtigungsproblem beim BackGround Sync Agent.
Die Datenquelle ist NOTHING; das bedeutet nicht zwangsläufig, daß die names.nsf nicht vorhanden ist und daher nicht gefunden wird.
Liegt die DB evtl. auf einem anderen Server, als der Agent? Da war doch mal was mit Zugriffen auf einen anderen Server. ...

Zitat
Gegen Linux spricht ja auch "Client des Domino-Servers", Ulrich.
Nö, auch auf einem LINUX Domino kann ich  mir einen LINUX Client zusätzlich installieren..
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: koehlerbv am 10.02.11 - 11:08:28
Mit R7?
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 11:10:10
Also die Datenbanken und der Agent befinden sich auf dem selben Server.
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 12:05:42
Zitat
Da sowohl der Background- als auch der Foreground Agent den selben Code verwenden, tippe ich nach wie vor auf ein Berechtigungsproblem beim BackGround Sync Agent.

Wenn ich aber den Domino Client verwende funktioniert auch der Foreground Agent offensichtlich nicht. Starte ich den Background- oder Foreground Agent mit meiner User-ID von einem Client funktioniert alles problemlos.

Kann es eventuell nicht auch damit zusammenhängen, dass die Agenten, wenn sie auf dem Server ausgeführt werden, in einer lokalen Instanz laufen, denn der Server ist für sich selbst ja lokal.

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: Peter Klett am 10.02.11 - 12:10:30
Kann es sein, dass die Server keine Zugriffsrechte auf das jeweils andere NAB haben? Bräuchten sie normalerweise ja auch nicht, wenn die nicht darüber miteinander replizieren.
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 12:19:02
Die beiden NAB liegen auf dem gleichen Server und der Server selbst hat auch auf beide DB Manager-Zugriff. Die DB DWFSYNC und somit auch die besagten Agenten habe ich mit der ID des Servers signiert.

Als aus meiner Sicht sollte es kein Berechtigungsproblem sein.

Gruß
Peter
Titel: Re: Löschen aus Ansicht dauert sehr lange
Beitrag von: pl001 am 10.02.11 - 12:26:19
Kommando zurück!!!

Ich habe den Domino jetzt einmal neu gestartet und siehe da, jetzt funktioniert es.

Tut mir leid, dass ich euch jetzt mit einen Problem beschäftigt habe, was offensichtlich garnicht existiert.

Viele Grüße und besonderen Dank an eknori für dieses Tool

Peter