Autor Thema: "db.CreateCopy" ohne aktivierte Agenten?  (Gelesen 7700 mal)

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
"db.CreateCopy" ohne aktivierte Agenten?
« am: 22.06.09 - 11:10:30 »
Hallo NG,

ich habe einen periodischen Agenten erstellt der mir von der Datenbank in welcher er läuft eine (zunächst leere) Kopie erstellt.
Nun ist mir aufgefallen, daß bei diesem Vorgang aktivierte Agenten in der Kopie ebenfalls aktiviert sind und versuchen auf dem Server loszulaufen. Damit "vermehrt" sich der Agent solange, bis der Server schlimmstenfalls irgendwann mangels Ressource steht.

Wie kann ich verhindern, das die Agenten aktiviert übernommen werden? In der Beschreibung der CreateCopy-Methode habe ich nichts dazu gefunden.

Ich könnte natürlich auch mit der Remove-Methode oder der IsEnabled-Eigenschaft der NotesAgent Klasse arbeiten - aber ich könnte damit auf die Nase fallen weil der Agent in der Datenbankkopie schneller los läuft als er durch das Script deaktiviert wird.

Wie könnte die beste Vorgehensweise aussehen?

Gruß
Jens
« Letzte Änderung: 24.06.09 - 11:12:51 von Jens_1 »
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Offline jBubbleBoy

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.276
  • Geschlecht: Männlich
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #1 am: 22.06.09 - 11:22:03 »
Ist ja eine komische Konstellation, ist das etwa ein Notesvirus ;)

Deaktiviere doch einfach den Agent vor dem Kopieren.
Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.16
--
Nur ein toter Bug, ist ein guter Bug!

Driri

  • Gast
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #2 am: 22.06.09 - 11:31:19 »
Warum arbeitest Du nicht mit Templates ?

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #3 am: 22.06.09 - 11:56:41 »
Ist ja eine komische Konstellation, ist das etwa ein Notesvirus ;)

Deaktiviere doch einfach den Agent vor dem Kopieren.

Eine Idee auf die ich zwischenzeitig auch schon gekommen bin.
Wenn's denn keinen eleganteren Weg gibt....

Ich müsste dann auslesen welche Agenten gerade aktiviert sind, diese deaktivieren und dann wieder aktivieren.
Bissi umständlich....  :(

Gruß
Jens
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #4 am: 22.06.09 - 11:59:21 »
Warum arbeitest Du nicht mit Templates ?

Hallo Ingo,

zum einen weil in der Organisation in der ich tätig bin keine Templates auf den Servern liegen sollen (weiss auch nicht was der Schwachsinn soll.....) und zum anderen werden so Änderungen am Design der Ursprungsdatenbank in die Kopie übernommen.

Gruß
Jens
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

klaussal

  • Gast
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #5 am: 22.06.09 - 12:02:50 »
Evtl hiermit ? :

Zitat
So deaktivieren Sie alle Agenten in einer Datenbank
  1.   Wählen Sie "Datei - Datenbank - Eigenschaften".
  2.   Wählen Sie im Register "Datenbank allgemein" die Option "Hintergrund-Agenten für diese Datenbank deaktivieren".
Hinweis  Wenn Sie Agenten in der InfoBox "Eigenschaften: Datenbank" deaktivieren, werden die Agenten nicht neu signiert und der Status "Aktivieren/Deaktivieren" der einzelnen Agenten wird nicht geändert. Wenn Sie diese Option deaktivieren, werden nicht notwendigerweise alle Agenten aktiviert. Es werden lediglich die bereits aktivierten Agenten ausgeführt.

Ich weiß jetzt nicht, ob man das per Script machen kann.

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #6 am: 22.06.09 - 12:22:44 »
Evtl hiermit ? :

Zitat
So deaktivieren Sie alle Agenten in einer Datenbank
  1.   Wählen Sie "Datei - Datenbank - Eigenschaften".
  2.   Wählen Sie im Register "Datenbank allgemein" die Option "Hintergrund-Agenten für diese Datenbank deaktivieren".
Hinweis  Wenn Sie Agenten in der InfoBox "Eigenschaften: Datenbank" deaktivieren, werden die Agenten nicht neu signiert und der Status "Aktivieren/Deaktivieren" der einzelnen Agenten wird nicht geändert. Wenn Sie diese Option deaktivieren, werden nicht notwendigerweise alle Agenten aktiviert. Es werden lediglich die bereits aktivierten Agenten ausgeführt.

Ich weiß jetzt nicht, ob man das per Script machen kann.

Das wäre der Jackpot! Mal schauen ob sich was in der Hilfe findet....

Gruß
Jens
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Driri

  • Gast

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #8 am: 22.06.09 - 14:28:26 »
Das geht leider nicht per Script. Wenn überhaupt dann nur per API.

Siehe auch :

What are the database properties that you cannot modify?

Is there a way to programmatically change Database Properties for a Lotus Notes/Domino database?

Yepp - das habe ich mir auch schon gedacht weil die Datenbankklasse nichts entsprechendes hergegeben hat.
Ich bastele mir jetzt gerade eine Schleife zusammen die mir alle Agenten mit der Eigenschaft "Trigger = 1" herausgibt und werde versuchen die dann in ein Array zu speichern welches dann wieder ausgelsen werden soll.
Da ich in erster Linie Admin bin und nur "Hobby"-Programmierer fordert mich das allerdings ganz gut. Insofern wäre mir der eine Schalter natürlich lieber gewesen...  ;) ;D

Gruß
Jens
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

Glombi

  • Gast
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #9 am: 22.06.09 - 14:33:52 »
Wir leben ja in modernen Zeiten und es geht mit XML, siehe

http://atnotes.de/index.php/topic,28927.0.html

XML database property: allowbackgroundagents


Oder mit der OpenNTF Library.

Andreas

Driri

  • Gast
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #10 am: 22.06.09 - 15:39:32 »
Wieder was gelernt. Danke Glombi  ;)

Offline Jens_1

  • Senior Mitglied
  • ****
  • Beiträge: 440
  • Geschlecht: Männlich
Re: "db.CreateCopy" ohne aktivierter Agenten?
« Antwort #11 am: 24.06.09 - 09:42:31 »
Hallo!

Da ich mich mit Schleifen und Array mangels Praxis immer etwas schwer tue habe ich die Herausforderungs sportlich gesehen und mit Erfolg versucht das ganze zu lösen.

Das ist dabei herausgekommen und über Hinweise auf elegantere Wege freue ich mich.

Gruß
Jens


Zitat
Sub Initialize
   Dim session As New NotesSession      ' aktuelle Sitzung
   Dim db As NotesDatabase                  ' Datenbank in der das Script läuft
   Dim count As Integer                        ' Zähler für die Schleife zum Auslesen der Agenten
   Dim agname () As String                  ' Array mit den Namen der Agenten
   
   Set db = session.CurrentDatabase
   count = 0
   
   ' Namen der Agenten auslesen und im Array "agname" speichern   
   Forall a In db.Agents
      If a.trigger = 1 Then
         If a.IsEnabled = True Then
            Redim Preserve agname(count)
            agname(count) = a.name
            count = count + 1
         End If
      End If
   End Forall   
   
   ' Wenn das Array leer ist, also keine Agenten aktiviert waren dann aussteigen
   If count  = 0 Then
      Print " Keine Agenten deaktiviert..."
      Exit Sub
   End If
   
   ' Agenten deaktivieren
   Forall a In db.Agents
      If Not Isnull (Arraygetindex (agname, a.name)) Then
         a.isenabled = False
         Call a.save
         Print a.name & " deaktiviert"
      End If
   End Forall
   
   ' Agenten aktivieren
   Forall a In db.Agents
      If Not Isnull (Arraygetindex (agname, a.name)) Then
         a.isenabled = True
         Call a.save
         Print a.name & " aktiviert"
      End If
   End Forall
   
End Sub
CLP Domino R5 System Administrator
CLP IBM Lotus Domino 6 System Administrator
CLP IBM Lotus Domino 7 System Administrator
IBM Certified System Administrator - Lotus Notes and Domino 8

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz