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-Key: 89958

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

Printed on: April 16, 2024 at 08:04 o'clock

Member: geTuemII
geTuemII Jun 17, 2008, updated at Oct 18, 2012 at 16:35:52 (UTC)
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
Member: greyhound
greyhound Jun 17, 2008 at 16:09:00 (UTC)
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
Member: Biber
Biber Jun 21, 2008 at 17:54:16 (UTC)
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
Member: greyhound
greyhound Jun 23, 2008 at 11:15:58 (UTC)
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
Member: Biber
Biber Jun 23, 2008 at 11:25:17 (UTC)
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
Member: greyhound
greyhound Jun 23, 2008 at 13:02:25 (UTC)
Goto Top
Hi Biber

Grüß mal von mir

mit dem Neunschwänzigen? face-wink
Member: Biber
Biber Jun 23, 2008 at 13:39:59 (UTC)
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
Member: greyhound
greyhound Jun 23, 2008 at 14:08:07 (UTC)
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>
Member: geTuemII
geTuemII Jun 23, 2008 at 15:55:12 (UTC)
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
Member: greyhound
greyhound Jun 24, 2008 at 23:43:09 (UTC)
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