greyhound
Goto Top

MS-SQL-Server - Probleme mit dynamischen Dateinamen bei DTS-Task

Dateiname wird nicht zuverlässig ersetzt

MS-SQL-Cracks bitte melden face-smile

Seit einiger Zeit habe ich ein seltsames Problem mit unserem SQL-Server.

Hier zunächst die Aufgabenstellung und mein Lösungsansatz.
Für ein Auswertungsprogramm benötigen wir aus einer MSSQL Datenbank täglich Selektionen verschiedener Daten in Form von (kleinen) ASCII-Dateien.

Ich habe hierzu ein spezielles DTS-Paket erstellt, welches zu einem festgelegten Zeitpunkt entsprechende SQL-Scripts ausführt und die Ergebnisse in entsprechende ASCII-Dateien ausgibt. (MS-SQL will wegen der Transformationsregeln hierzu einen konkreten Dateinamen angegeben haben. )
Da die Dateien aber nicht überschrieben werden sollen, habe ich in einem zweiten Schritt über entsprechende Tasks den Dateinamen dynamisch festgelegt (Format \\Server\Freigabe\TEXT-JJJJMMDD.EXT).

Nun mein Problem:
Normalerweise funktioniert obiges Verfahren auch, aber leider nicht immer. Ich habe nun festgestellt, daß die DTS-Task ab und an (grund unbekannt) den Dateinamen nicht dynamisch festlegt, sondern den bei der Definition angegebenen (statischen) Dateinamen benutzt. Da diese Datei dann jedes Mal überschrieben wird, gehen mir immer wieder die "alten" Daten verloren.

Hat jemand hierzu einen Tipp oder auch einen alternativen Lösungsansatz? Bin im Moment ziemlich ratlos und für jeden Hinweis dankbar.

Greyhound

Content-ID: 89958

Url: https://administrator.de/contentid/89958

Ausgedruckt am: 22.11.2024 um 07:11 Uhr

geTuemII
geTuemII 17.06.2008, aktualisiert am 18.10.2012 um 18:35:52 Uhr
Goto Top
Hallo Greyhound,

von DTS habe ich wenig Ahnung, daher hier ein alternativer Ansatz:
  • Dateien mit DTS zu bestimmtem Zeitpunkt erzeugen --> Ergebnis: Datei mit bekanntemn Namen im bekannten Verzeichnis (\\Server\Freigabe\TEXT.EXT)
  • Danach par Batch Umbenennung der bekannten Datei TEXT.EXT in TEXT-JJJJMMDD.EXT --> Ergebnis: Datei hat den Namen, den sie haben soll und TEXT.EXT ist wieder frei (nicht mehr vorhanden) für den nächsten DTS-Lauf

Falls dieser Ansatz für dich interessant klingt, empfehle ich Workshop Batch for Runaways - Part III - Datums- und Zeitvariablen im Batch zur Lektüre.

geTuemII
greyhound
greyhound 17.06.2008 um 18:09:00 Uhr
Goto Top
Hi geTuemII,

Darüber hatte ich auch schon nachgedacht, wenngleich es anders eleganter wäre face-wink. Aber falls sonst niemand eine Idee zu meinem Problem hat, werde ich mich wohl mit einem "bätsch" versuchen. Da ich mit der Syntax dieser Windowsskripte als alter X-er etwas auf Kriegsfuß stehe, ist Dein Link sicher sehr nützlich. Werd' dann halt ein bisschen beim "Altmeister" abkupfern müssen.

Greyhound
Biber
Biber 21.06.2008 um 19:54:16 Uhr
Goto Top
Moin Greyhound,

ich habe nun auch schon ein paar Tage abgewartet, ob und was so für Alternativen gepostet werden.
Denn... okay, machbar und nicht allzu aufwändig ginge das via einpaar Batchzeilen, aber das kann es ja wohl nicht sein, dass wir es nicht mit SQL zum Fliegen bekommen.

Du hast Doch bestimmt schon 20x auf die fünf Zeilen draufgeschaut, die diese dynamischen Dateinamen ermitteln - magst Du die mal posten?
Und wie startest Du das Skript - über dtsrun oder über VB/VBS?
Irgendeine Regelmäßigkeit bezüglich des "mal klappts, mal klappts nicht"?
Aber bitte nicht antworten: "War immer unter Windows..."

Grüße
Biber
greyhound
greyhound 23.06.2008 um 13:15:58 Uhr
Goto Top
Hallo Biber,

danke für's "Mithirnen". Wie Du schon sagtest habe ich natürlich schon x-mal das bisschen Code durchgesehen. Es ist sogar noch simpler als Du annimmst. Die Codesequenz, welche den Dateinamen zuweist lautet einfach :
SELECT '\\server_name\share\prefixtext-' + REPLACE(CONVERT(char, GETDATE(), 102), '.', '') + '.extension'
In dem DTS-Job werden drei verschiedene SQL-Statements abgesetzt, die drei verschiedene Files erzeugen. Die Filenamen (und auch die entsprechenden Statements) unterscheiden sich nur in der Fileextension. Der Rest ist absolut gleich.
Meistens, wenn's schiefgeht, aber nicht immer ist ein bestimmtes File betroffen. Das hat mich jetzt auf eine Idee gebracht. Die Tasks wurden im DTS-Designer von MS-SQL erzeugt und können eigentlich parallel ablaufen. Aufgrund der Ablaufprotokolle ist mir aufgefallen, dass, obwohl die Dateinamen als "dynamic property" der jeweiligen "Destination" zugewiesen wurden, MS-SQL möglicherweise nicht die Generierung der Dateinamen abwartet, sondern die Task ggf. mit dem statischen Namen beendet. Um das zu verifizieren habe ich jetzt mal die Generierung der Dateinamen und die eigentliche Datenselektion über einen Workflow verknüpft. Wenn's das gewesen sein sollte, würde ich gern mal den entsprechenden Programmierer in Redmond sprechen.

Gruß
Greyhound
Biber
Biber 23.06.2008 um 13:25:17 Uhr
Goto Top
Moin Greyhound,
Wenn's das gewesen sein sollte, würde ich gern mal den entsprechenden Programmierer in Redmond sprechen

Dann solltest Du aber aus zwei Gründen persönlich statt fernmündlich bei ihm/ihr vorsprechen:

  • erstens kannst Du nach dem Betreten des Raumes die Bürotür von innen abschliessen
  • zweitens haben PraktikantInnen bestimmt gar kein eigenes Telefon

Grüß mal von mir
Biber
greyhound
greyhound 23.06.2008 um 15:02:25 Uhr
Goto Top
Hi Biber

Grüß mal von mir

mit dem Neunschwänzigen? face-wink
Biber
Biber 23.06.2008 um 15:39:59 Uhr
Goto Top
Moin greyhound,
<OT>
mit dem Neunschwänzigen?
Hmmm, der Neunschwänzige würde sicherlich nicht in jedem Fall als Strafe empfunden werden, aber wenn Du die Neunschwänzige meinst...

In unseren Forumsregeln steht ja unter Regel 5 als verboten : "Aufrufe oder Anleitungen zu Straftaten" sowie .."Äußerungen, die ...in anderer Weise diskriminierenden Charakter haben.".

Also tue bitte nichts, was ich nicht auch tun würde und nichts, was den Anschein einer ungeplanten Affekthandlung anfechtbar macht.

Ein klitzekleines "Beaver was here" in den 28-Zoll-TFT fände ich aber tolerabel.
</OT>

Grüße
Biber
greyhound
greyhound 23.06.2008 um 16:08:07 Uhr
Goto Top
<nochmals OT>
1. ich meinte eigentlich das Neunschwänzige

2. ich werde mich an die Dreisekundenregel halten
</OT>

Gruß
greyhound

<EDIT> naguuut, deeplink beseitigt </EDIT>
geTuemII
geTuemII 23.06.2008 um 17:55:12 Uhr
Goto Top
Deeplink --> tststs!

Nimm http://blog.tuxilla.de/?s=cat5 dan klapps auch mit dem Neunschwänzigen face-smile Irgendwo muß ich doch noch einige Gute (tm) HP-BNC (die grauen!) rumliegen haben...

[Edit] Der Deeplink hat auch das Blinkersyndrom... interessant... [/Edit]

geTuemII
greyhound
greyhound 25.06.2008 um 01:43:09 Uhr
Goto Top
@all

Das "Blinker-Syndrom" scheint aufgeklärt zu sein.

Offensichtlich versteht man in Redmond unter "dynamic property" etwas völlig anderes als im Rest der Welt. Es scheint sich keineswegs um eine mit der entsprechenden Variablen fest verknüpfte Eigenschaft zu handeln. Vielmehr lässt DTS die Berechnung solcher Properties offensichtlich als mehr oder weniger unabhängige Tasks ablaufen. Ist die Berechnung der "Property" bei Abschluß der zugehörigen Transfer-Task bereits beendet, dann wird die Property korrekt zugewiesen, andernfalls - Pech gehabt. Der Erfolg ist also abhängig von der aktuellen Maschinenauslastung, der Größe der Datensamples und wer weiß noch was. Das hat zugegebenermaßen natürlich schon auch was Dynamisches.

Merke: Um eine Zuweisung von "dynamic properties" wirklich sicherzustellen, scheint zusätzlich zwingend eine Ende-Start Verknüpfung der "Property-Task" mit der "Transfer-Task" erforderlich zu sein (workflow). Erst dann wartet DTS die Berechnung der Property ab.

Ich glaube, ich seh' mich mal nach einem günstigen Flug nach Redmond um.

greyhound