Domino 9 und frühere Versionen > ND6: Entwicklung

falsche Dokumentzuordnung

(1/2) > >>

DAU-in:
hallo an alle , die jetzt nicht beim skifahren sind:

ich bin gerade ziemlich frei drehend wegen folgendem:

Problem:
In einer Produktiv-DB wurden durch einen Agenten fälschlicherweise fast alle attachments abgehängt, diese müssen wieder eingefügt werden
derzeit sind alle User an der Datenbereinigung, und der Fehler wurde mit Verzögerung entdeckt, also einfach ein Backup hinstellen ghet nicht, wenn wir nicht gelyncht werden wollen.


Lösungsansatz:
In einer restore-DB läuft ein agent, nimmt sich ein Dokument nach dem anderen, sucht in der Produktiv-DB nach dem entsprechenden dokument, löscht das attachmentfeld, hängt das attachmentfeld aus dem RestoreDokument rein und speichert das ganze.
Es läuft auf den ersten Blick auch zufriedenstellend, allerdings hat eine Kontrolle ergeben, dass manchmal die verkehrten attachmentfelder angehängt werden.
Von den DocIDs her sieht alles korrekt aus. Ich kann keine Regelmässigkeit erkennen, bei einem erneuten Lauf waren jedoch dieselben Dokumente falsch verändert.


tks:
Kann es sein, daß Variablen noch "alte" Werte haben.

Ich meine, daß er noch Angaben zum Attachment aus einem vorherigen Dokument in einer Variablen gespeichert hat und dann ein Attachment doppelt in unterschiedliche Dokumente reinhängt?

DAU-in:
sobald der Konsistenzcheck durch ist, häng ich den Code hier rein


ich setzte rtitem auf nothing, damit sollten 'alte' attachments doch entsorgt sein?

hier ist der code:


Set dbCurrent = session.CurrentDatabase
   Set dbLive = session.GetDatabase( "server", "db")
   
   Set vAct1 = dbCurrent.GetView("(allActivities)")
   Set vAct2 = dblive.GetView("(allActivities)")
   
   
   Set docActOld = vAct1.getfirstdocument
   
   Set stream = session.CreateStream
   flag = stream.Open( "C:\Log\fr_protocol_Body.txt", "Windows-1252")   
   
   
   Set streamNot = session.CreateStream
   flagNot = streamNot.Open( "C:\Log\fr_protocol_notFound.txt", "Windows-1252")   
   
   Set streamError = session.CreateStream
   flagError = streamError.Open( "C:\Log\fr_oprotocol_Error.txt", "Windows-1252")   
   
   
   
   
   i = 1
   
   While Not docActOld Is Nothing
      
      Print i
      
      strDoc(0) = docActOld.Form(0)
      strDoc(1) = docActOld.activityDocID(0)
   '   Set docActNew = vAct2.GetDocumentByKey(strDoc)
      
      Set docActNew = dbLive.GetDocumentByUNID( docActOld.activityDocID(0) )
      If Not docActNew Is Nothing Then      
         
         
         Set rtitem = docActOld.GetFirstItem("Body")
         
         If Not rtitem Is Nothing Then
            
            Call docActNew.RemoveItem( "Body")
            
            Call docActNew.CopyItem( rtitem, "Body")
            
            Call docActNew.Save(True,False)
            
            Call stream.WriteText(Cstr(i ) & "~'~" & strDoc (0) & "~'~" & strDoc(1) & Chr(13))
         Else
            Call streamError.WriteText(Cstr(i ) & "~'~" & strDoc (0) & "~'~" & strDoc(1) & "~'~" & " no body" & Chr(13))
            
            
         End If
         
         
         Set rtitem = Nothing
         
      Else
         
         Call streamNot.WriteText(Cstr(i ) & "~'~" &  strDoc (0) & "~'~" & strDoc(1)   & "~'~" & " no doc"  &Chr(13))
         
      End If
      
      
      Set docActOld = vAct1.getnextdocument(docActOld)
      i = i+ 1
      
   Wend
   
   Call stream.Close
   Call streamNot.Close
   Call streamError.Close
   
   Exit Sub
   
   
errorhandling:
   Call streamError.WriteText(strDoc (0) & "~'~" & strDoc(1) & "~'~" & " error"  & Chr(13))
   Set docActOld = vAct1.getnextdocument(docActOld)
   i = i+ 1
   If Not rtitem Is Nothing Then Set rtitem = Nothing
   Resume Next

tks:
So auf den ersten Blick kann ich keinen Fehler erkennen.

Ich vermute aber, daß nach errorhandling was schiefläuft. Wenn in DBAlt ein Dokument drin ist, daß es nicht mehr in DBAktuell gibt, müsste das Script auf errorhandling laufen. Dort wird dann mit dem nächsten Dok (alt) weitergemacht und docActNew ist noch befüllt. Als Schuss ins Blaue würde ich einfach hier mal docActNew auf Nothing setzen.

Sorry, aber mehr fällt mir da auch nicht ein.

DAU-in:
Hallo,

das ganz merkwürdige ist, das das ganze mit lokalen Kopien problemlos durchläuft, nur auf dem Server nicht.

ich probier mal weiter.

aber auf alle Fälle vielen Dank, das docActNew habe ich übersehen

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln