Advanced DTS Features

Um die erweiterten Funktionen bei der Bearbeitung von DTS-Packages zur verfügung zu haben, muß im Entersprise-Manager bei den Eigenschaften der “Data Transformation Services” die entsprechenden Optionen aktiviert sein.

  • Enable Caching
    Erlaubt das Cachen von Objekten, die dem DTS Designer zur Verfügung stehen. Ansonsten werden immer alle möglichen Objekte aus der Registry ausgelesen.
  • Multi-Phase-Data-Pump
    Dabei ist es möglich, die einzelnen Phase einer Data-Pump zu unterbrechen und durch Scripting zu “manipulieren”
  • Debugging
    Zur Laufzeit kann bei einem Fehler oder einem STOP Statement der Default-Debugger aktiviert werden, um die restliche Ausführung in einem Debugger zu bearbeiten bzw. zu überwachen.

Die Einstellungen gelten dabei immer für alle SQL-Server Registrationen auf dem aktuellen Rechner.

Import von Binär-Daten in den MS SQL-Server mit ADO

Der hier beschriebene Source-Code bezieht sich auf die Verwendung von VBScript. Die Verwendung in VB oder VBA ist analog.

Um Dateien als Binary importieren zu können muss zunächst eine Stream-Objekt erstellt werden, welches die zu importierende Datei repräsentiert:

 Dim strFile
 strFile = "C:\Temp\Test.jpg"
 Dim objStream
 Set objStream = CreateObject("ADODB.Stream")
 objStream.Open
 objStream.Type = adTypeBinary
 objStream.LoadFromFile(strFile)

Anschließend kann eine normale ADO Verbindung mit dem SQL-Server aufgebaut werden. In diesem Fall wird mit Windows-Authentifizierung eine Verbindung mit der Datenbank Test gemacht:

 Dim cnn, rst
 Set cnn = CreateObject("ADODB.Connection")
 cnn.Open "Provider=SQLOLEDB.1; Data Source=(local); " & "Integrated Security=SSPI;Initial Catalog=Test;"
 Set rst = CreateObject("ADODB.Recordset")

In dieser Datenbank ist eine Tabelle Table1 vorhanden, die über zwei Spalten verfügt: FileName und Bild, wobei Bild vom Datentyp image ist. Der Import wird in eine Transaktion gekapselt:

 cnn.BeginTrans
 rst.Open "Table1", cnn, adOpenForwardOnly, adLockOptimistic
 rst.AddNew
 rst.Fields("FileName").Value = strFile
 rst.Fields("Bild").AppendChunk(objStream.Read)
 rst.Update
 rst.close
 cnn.CommitTrans

Schließlich werden noch alle Objekte wieder freigegeben:

 ' Clean-Up
 objStream.Close
 cnn.Close
 Set rst = Nothing
 Set objStream = Nothing
 Set cnn = Nothing

Das komplette Skript kann auch als VBS-Datei gedownloaded werden.

Link: How to load a Binary File into an Oracle BLOB with ADO

Service Pack 2 in Windows-XP-CD integrieren

Für die Integration wird zum einen das SP2 für XP als auch die original Installations-CD benötigt.

  1. Als erstes muss die Original-CD auf die Festplatte kopiert werden. Es wird davon ausgegangen, daß die CD in nach E:\XP_INST kopiert wird.
  2. Anschließend wird das SP2 mit dem Parameter /integrate:<Pfad>. Pfad ist dabei der Ordner, in dem sich die Original-Dateien der Installations-CD befinden, in diesem Fall also E:\XP_INST. Dabei darf kein Leerzeichen zwischen integrate: und dem Pfad stehen. Als Ergebnis erhält im Wurzelverzeichnes des SP2 eine Datei win51ip.SP2.
  3. Mit Nero kann das Image nun auf CD gebrannt werden. Dazu wird ein neue Projekt vom Typ CD-ROM (Boot) erstellt. Der benötigte Bootblock kann hier heruntergeladen werden. Als Emulation sollte Keine Emulation verwendet werden, der Name für den Bootblock ist beliebig, Ladesegment 0C70 und 4 Bootblocks.

Link: Service Pack 2 in Windows-XP-CD integrieren

Active-Directory Migration auf Windows 2003

Installation eines W2K3-Servers in einer W2K-Domain, und Migration der Domain auf W2K3:

Vor der Installation sollte mit dcdiag überprüft werden, ob die Domäne ordnungsgemäß funktioniert. Sollten DNS-Einträge müssen diese zunächst repariert werden.

  1. Auf dem W2k-Server die W2k3-CD einlegen und adprep.exe /forestprep aus dem Verzeichnis i386aufrufen. Anschließend kontrollieren, ob die Domäne erfolgreich vorbereitet wurde. Dazuadsiedit.msc starten und unter CN=Configuration nach einem Eintrag CN=ForestUpdates suchen. Unterhalb von diesem Eintrag sollte ein weiterer Eintrag CN=Windows2003Update zu finden sein.
  2. Mit adprep /domainprep die Änderungen der Domäne an alle Server propagieren. Anschließend wieder im adsiedit kontrollieren ob die Änderungen richtig eingetragen wurden. Dazu unter ‘Domain\DC=[domäne], DC=[tld]\CN=System\CN=DomainUpdates’ nach dem EintragCN=Windows2003Update suchen.
  3. Nachdem die Domäne für das Update soweit vorbereitet ist, kann der W2K3-Server installiert/gestartet werden. Dort auf der Kommandozeile das Programm dcpromo ausführen, und den Server zum Domänen-Controller machen.

Abschließend muss der neue Server noch zum Betriebsmaster, PDC und Schemamaster heraufgestuft werden, um den alten W2K-Server abzulösen. Wenn der alte Server auch DNS-Server war, dann muss der neue Server ebenfalls zum DNS-Server gemacht werden, und bei dem alten Server ggf. als DNS-Server eingetragen werden (Netzwerkverbindungen), damit der alte Server sich bei dem neuen DNS-Server registrieren kann. Nun muss nur noch der globale Katalog zu dem neuen Server transferiert werden. DazuActive Directory-Standorte und -Dienste aufrufen und unterSites\[Standortname]\Servers\[neuer Server Name]\NTDS Settings bei den Eigenschaften den Haken bei globaler Kalatog machen. Danach müssen sich die Server einmal replizieren, was irgendwann automatisch geschieht, oder per repadmin.exe /syncall erzwungen werden kann. Nun kann der Haken bei globaler Katalog bei den NTDS Settings des alten Servers entfernt werden, und der alte Server kann mit dcpromo zum normalen Mitgliedserver herabgestuft werden.

Link: Migration von Windows 2000 Domänen auf Windows Server 2003

Komprimierung von HTTP-Verkehr

Eine Möglichkeit besteht darin, den Datenverkehr, der von einem Webserver zum Browser gesendet wird zu komprimieren. Dazu wird in der Regel das gzip-Verfahren eingesetzt, welches im Hintergrund den gesamten Datenverkehr komprimiert. Somit können die Daten zwischen Server und Client schneller übertragen werden. Dieses Verfahren wird von den gängigsten Browsern und Servern unterstützt. Auch der IIS bietet die Möglichkeit sowohl statische als auch dynamisch erzeugte Web-Seite per gzip zu komprimieren.

Allerdings zeigt die Umsetzung dieser Technik auf Seiten des Clients (hier konkret des Internet Explorers) ein Problem auf. Gerade bei dynamischen Seiten, wie sie ja oftmals für Intranet-Inhalte typisch sind, will man oft nicht, daß die Seiten auf dem Client gecached werden, sondern die Seiten sollen bei jedem Zugriff immer wieder neu vom Server angefordert werden. Damit soll sichergestellt werden, daß die mobilen Anwender immer auf die aktuellen Daten und Informationen des Unternehmens zugreifen können. Um das Cachen von Seiten zu verhinden gibt es bestimmte “Attribute” die man einer HTML-Seite geben kann, damit sie vom Client nicht gecached wird. Leider werden diese Attribute vom Internet Explorer in zusammenhang mit gzip-komprimierten Seiten schlichtweg ignoriert. Das Ergebnis: die Seiten werden dennoch gecached.

Bei einfachen Inhalten, die sich sowieso nicht so häufig ändern stellt das noch kein Problem dar, allerdings bei Web-Anwendungen wird dies schon zu einem Problem. Hier wird oftmals immer nur eine einzige Seite, jeweils mit unterschiedlichen Parametern, aufgerufen, die dann die gesamte Darstellung und Verarbeitung übernimmt. Wird hier bei jedem Klick immer wieder die gleiche Seite angezeigt, weil der Browser die Seite, mit den nun “neuen” Parametern, nicht erneut vom Webserver anfordert sondern, wegen der permanent gleichen Adresse, die gecachte Seite anzeigt, so ist dieses Verhalten nicht akzeptabel.

Obwohl das gzip-Verfahren schon lange verwendet wird, gerade im Unix-Bereich schon seit Jahren etabliert ist, so scheitert der praktische Einsatz an den unzulänglichkeiten des Internet Explorers.

Informationen von Microsoft: Microsoft Knowledge Base Article – 321722 Content with “Content-Encoding: gzip” Is Always Cached Although You Use “Cache-Control: no-cache”

FTP per Batch

Mit Hilfe des Kommandozeilen FTP-Programms lassen sich auch ganze FTP-Sitzungen automatisieren.

Dazu muss zunächst eine FTP Steuerdatei angelegt werden, in der alle Befehle für die FTP-Sitzung aufgeführt sind.

Ein solche Steuerdatei könnte so aussehen:

 open ftp.meine-domain.org
 meinAccount
 meinPasswort
 bin
 prompt
 cd /pub/incoming
 mput *.doc
 cd /pub/
 mget *.xls
 quit

In diesem Beispiel wird eine Verbindung zum FTP-Server ftp.meine-domain.org mit dem Login meinAccount und dem Passwort meinPasswort. Anschließend wird in den Binary-Modus gewechselt und der Prompt deaktiviert, damit keine interaktiven Fragen vom FTP-Server kommen. Schließlich wird in das Verzeichnis /pub/incoming gewechselt und dort werden alle doc Dateien aus dem aktuellen lokalen Verzeichnis hochgeladen. Danach werden alle xls Dateien aus dem FTP-Verzeichnis /pub in das aktuelle Verzeichnis heruntergeladen. Nur im Zusammenhang mit mget und mput können Wildcarts bei den Dateinamen verwendet werden.

Damit das ganze beispielsweise automatisiert in einem Schedule ablaufen kann, muß diese FTP-Sitzung nun noch aus einer Batch-Datei aus aufgerufen werden:

 @echo off
 cd c:\
 ftp.exe -s:mySession.ftp > mySession.log

Mit dem Parameter -s: wird dem FTP-Programm mitgeteilt, die angegebene Sitzungsdatei zu verarbeiten. Zur besseren Kontrolle werden sämtliche Ausgaben der FTP-Sitzung in die Protokolldatei mySession.log gespeichert.

Download Beispiel: ftp_per_batch