none
Ausnahme einer Ausführung eines Auftrages über DTS Paket RRS feed

  • Frage

  • Hi,

    ich habe einen Auftrag auf meinen SQL 2000 Server, der führt ein DTS Paket immer zum 5 jedes Monats aus. Der Auftrag soll das 11 Monate im Jahr machen. Nur an einem Monat soll er das am 15 des Monats machen. Das kann man in den Aufträgen ja nicht einstellen. Jetzt hab ich die Idee gehabt, das über mein DTS Paket zu lösen, d.h. der Auftrag wird jedes Monat am 5 und am 15 ausgeführt und welche Befehele zum einsatzkommen entscheidet eine Logik im DTS Paket. Nur mein Problem ist mit welchen Bausteinen kann ich die Logik im DTS Paket aufbauen, die erkennt an welchen Tag sie was ausführen soll?

     

    lg

     

    Donnerstag, 10. November 2011 14:23

Antworten

  • Hallo azwinzds1,

    die einfachste Lösung ist natürlich 12 Aufträge zu generieren, mit den entsprechenden Daten und mit einer jährlichen Wiederholung. Eine andere Möglichkeit besteht darin, eine Hilfstabelle zu erstellen, in der die entsprechenden Daten gespeichert sind. Ich kann mir das ungefähr so vorstellen, das Du einen Auftrag am 5. und 15. jeden Monats laufen lässt, der in der Tabelle nachschaut ob in dem jetzigen Monat eine Ausführung am 5 oder 15 erfolgen so, und bei einem positiven Ergebniss das DTS-Paket ausführt bzw. bei negativem Ergebniss beendet wird. Die entsprechenden Daten dazu kannst du aus GETDATE holen.

    Nachtrag: Im Grunde benötigst Du auch nicht 12 Zeitpläne in dem Auftrag sondern 5 dürften auch schon ausreichen, so das Du etwas Fleißarbeit sparen kannst. Der erste läuft alle 2 Monate, der zweite alle 4 Monate und für die restlichen drei Monate musste dann noch seperate Zeitpläne mit jährlicher Wiederholung angelegt werden.


    Gruß Falk
    Blog Falk Krahl
    Donnerstag, 10. November 2011 15:53
  • Hallo,

    die von Falk vorgeschlagene Lösung mit den 12 Zeitplänen innerhalb eines Auftrags wäre auch meine erster Vorschlag; ist die einfachste Lösung und nur mit etwas Fleißarbeit verbunden.

    Eine zweite, aber nicht ganz so schöne Variante wäre ein ActiveX Script Task zu verwenden. Jeder Task hat ja 3 "Ausgänge": Bei Fehler, Bei Erfolg und Bei Beendigung und das könntest Du hierfür nutzen.

    Lege mal eine "ActiveX Script Task" mit der Script Sprache "VB Script", dort gibst Du dann den unten stehen Code ein. Ich hoffe mal, es ist halbwegs selbsterklärend: Als Beispiel, wenn der Monat = 12 und Tage = 15 oder eben nicht Monat = 12 und der Tag = 5, dann liefere ein "Success / Erfolg" zurück, sonst einen Fehler. Dann verwendst Du den Ausgang "Bei Erfolg", und im Paket weiter zu gehen; "Bei Fehler" endet das Paket einfach.
    Unschön ist halt, das die Paketausführung eben mit einem Fehler endet, was auch so protokolliert wird.

    Sub Main()
    Begin
    
       If (Month(Now) = 12 AND Day(Now) = 15) OR (Month(now) <> 12 AND Day(Now) = 5) Then
           return(DTSTaskExecResult_Success)
       Else
           return(DTSTaskExecResult_Failure)
       End If
    
    End Sub
    


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Donnerstag, 10. November 2011 17:15

Alle Antworten

  • Hallo azwinzds1,

    die einfachste Lösung ist natürlich 12 Aufträge zu generieren, mit den entsprechenden Daten und mit einer jährlichen Wiederholung. Eine andere Möglichkeit besteht darin, eine Hilfstabelle zu erstellen, in der die entsprechenden Daten gespeichert sind. Ich kann mir das ungefähr so vorstellen, das Du einen Auftrag am 5. und 15. jeden Monats laufen lässt, der in der Tabelle nachschaut ob in dem jetzigen Monat eine Ausführung am 5 oder 15 erfolgen so, und bei einem positiven Ergebniss das DTS-Paket ausführt bzw. bei negativem Ergebniss beendet wird. Die entsprechenden Daten dazu kannst du aus GETDATE holen.

    Nachtrag: Im Grunde benötigst Du auch nicht 12 Zeitpläne in dem Auftrag sondern 5 dürften auch schon ausreichen, so das Du etwas Fleißarbeit sparen kannst. Der erste läuft alle 2 Monate, der zweite alle 4 Monate und für die restlichen drei Monate musste dann noch seperate Zeitpläne mit jährlicher Wiederholung angelegt werden.


    Gruß Falk
    Blog Falk Krahl
    Donnerstag, 10. November 2011 15:53
  • Hallo,

    die von Falk vorgeschlagene Lösung mit den 12 Zeitplänen innerhalb eines Auftrags wäre auch meine erster Vorschlag; ist die einfachste Lösung und nur mit etwas Fleißarbeit verbunden.

    Eine zweite, aber nicht ganz so schöne Variante wäre ein ActiveX Script Task zu verwenden. Jeder Task hat ja 3 "Ausgänge": Bei Fehler, Bei Erfolg und Bei Beendigung und das könntest Du hierfür nutzen.

    Lege mal eine "ActiveX Script Task" mit der Script Sprache "VB Script", dort gibst Du dann den unten stehen Code ein. Ich hoffe mal, es ist halbwegs selbsterklärend: Als Beispiel, wenn der Monat = 12 und Tage = 15 oder eben nicht Monat = 12 und der Tag = 5, dann liefere ein "Success / Erfolg" zurück, sonst einen Fehler. Dann verwendst Du den Ausgang "Bei Erfolg", und im Paket weiter zu gehen; "Bei Fehler" endet das Paket einfach.
    Unschön ist halt, das die Paketausführung eben mit einem Fehler endet, was auch so protokolliert wird.

    Sub Main()
    Begin
    
       If (Month(Now) = 12 AND Day(Now) = 15) OR (Month(now) <> 12 AND Day(Now) = 5) Then
           return(DTSTaskExecResult_Success)
       Else
           return(DTSTaskExecResult_Failure)
       End If
    
    End Sub
    


    Olaf Helper
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich
    Blog Xing
    Donnerstag, 10. November 2011 17:15
  • Hallo azwinzds1,

    Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Donnerstag, 24. November 2011 15:35
    Moderator