Nur noch schnell einen BULK INSERT von einem Share …

Wer kennt das nicht? Noch schnell die Daten von einem Share in einen SQL Server laden und fertig. Der SQL Server Dienst läuft aber in der Regel unter einem lokalen Account (Local System, Local Service oder  Network Service). Dieser hat naturgemäß keinen Zugriff auf Netzwerk Laufwerke. Es sei denn:

  • das Share hat die NTFS Berechtigung “Jeder” und die Freigabe Berechtigung “Jeder”.
  • Man läßt den SQL Server Dienst unter einem Account der Domaine laufen, welcher die notwendigen Permissions hat.
  • Man meldet sich mit einem Domain Account anstatt einem SQL Login am Server an.
  • Mehr dazu kann man unter “Security Considerations” und “Bulk Importing from a Remote Data File” bei http://msdn.microsoft.com/en-us/library/ms175915.aspx gelesen werden.

Frustriert hat man es Stunden später vielleicht doch hinbekommen oder sich einen anderen Weg überlegt.

Aber mal angenommen wir möchten ein DAT Datei von einem Share adhoc in den SQL Server laden:

BULK INSERT [T_TEST]
FROM '\\server\share\test\T_TEST.dat'
WITH (
DATAFILETYPE = 'char',
TABLOCK,
CODEPAGE = '1252',
KEEPNULLS,
KEEPIDENTITY
);

Gegebenfalls hat das sogar von dem lokalen SQL Server funktioniert, aber auf dem eigentlichen Server will er das nicht laden.


Msg4861, Level 16, State 1, Line 2
Cannot bulk load because the file "\\server\share\test\T_TEST.dat" could not be opened. Operating system error code 5(Zugriff verweigert).

 

Um die Daten jetzt irgendwie doch (noch schnell) reinzuladen, können wir mal nachschauen, ob wir überhaupt in dem Verzeichnis lesen dürfen. Dafür brauchen wir kurzfristig die xp_cmdshell.

-- ‘Erweiterte Optionen anzeigen’ einschalten.
EXEC sp_configure 'show advanced options', 1;
-- Das System aktualisieren.
RECONFIGURE;
-- xp_cmdshell anschalten.
EXEC sp_configure 'xp_cmdshell', 1;
-- Das System aktualisieren.
RECONFIGURE;

 

Nun können wir den DIR Befehl auf den Zielpfad ausführen:

exec xp_cmdshell 'dir \\server\share\temp\'


Zugriff verweigert

Wir geben uns die notwendigen Rechte mit

exec xp_cmdshell 'net use \\server\share /user:<user>@<domain> <passwort>'


Der Befehl wurde erfolgreich ausgeführt.

Dann wiederum sollte der oben erwähnte DIR Befehl auch die Dateien in dem Verzeichnis anzeigen.

Volume in Laufwerk \\server\share\temp\: hat keine Bezeichnung.
Volumeseriennummer: 10XX-X58X
NULL
Verzeichnis von \\server\share\temp\
NULL
23.01.2008 10:16 8.423.195 T_TEST.dat
Nun den BULK INSERT ausführen und dieser sollte seine Arbeit mit der gewünschten Meldung quittieren:

(334.714 row(s) affected)

Jetzt noch aufräumen mit

-- Share trennen
exec xp_cmdshell 'net use \\server\share /delete';
-- xp_cmdshell abschalten.
EXEC sp_configure 'xp_cmdshell', 0;
-- Das System aktualisieren.
RECONFIGURE;

Abschließen bleibt noch zu sagen, das diese Variante nur dazu gedacht ist, mal Daten auf die Schnelle zu laden. xp_cmdshell ist „evil“ und sollte nur mit Bedacht genutzt werden. So wie man einen DIR absetzen kann, so kann man auch alle anderen Befehle absetzen !

Zu Risiken und Nebenwirkungen fragen Sie Ihren Administrator ;)

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News

Germanys next Topmodel – ein C# Entwickler ?

Alles wird gemessen, heutzutage. Performance von Aktien, der Ölpreis……. und mein Blutdruck ;)

Bleibt die Frage, wie messe ich einen Programmierer ? Nun, wie immer bei solchen Fragen, ist die Antwort nicht einfach. Viele Eigenschaften sind die Zutaten für einen guten Programmierer:

  • Fachwissen, welches sich stetig erweitern sollte.
  • Erfahrung – mit den Jahren hat man so die ein oder andere Klippe im Programmieren umschifft, das hilft in der Praxis. Fachwissen – zugegeben, nicht unbedingt notwendig, aber wenn es vorhanden ist, dann ist es ziemlich hilfreich.
  • Kreativität: wohl dem, der nicht von Morgens bis Abends Interfaces zwischen einem Legacy Programm und einen Upstream System programmieren muß.
  • Architekturverständnis. Yep, auch das ist sehr hilfreich. Klar gibt es Software Architekten, die auch wirklich sehr hilfreich sind, aber in kleinen Projekten fehlen die vielleicht, und das ‘Schludern’ im Code von heute, wird der Wochenend-Killer in einem oder zwei Jahren ;)
  • ‘PS-auf-die-Straße-bringen’ Eigenschaft, oder das GTD Gen :) , welches letztendlich ein Mix aus den oben genannten Eigenschaften darstellt (siehe gesonderten Blog Beitrag).

Und das GTD Gen kann man messen. Na ja, ‘Kind of’.

Top Coder

Competition ArenaUnter http://www.topcoder.com erreicht man eine Plattform die sozusagen Programmier-Wettbewerbe austrägt. Zugegeben, der Registrierungsprozeß ist etwas uncool, aber es lohnt sich. In der etwas unübersichtlichen Seite von TopCoder verbergen sich diverse Betätigungsfelder. Für Programmierer und auch für Firmen, die Programmierer suchen. TopCoder bietet Wettbewerbe an, in denen Programmierer in einer Art ‘SandBox’ Aufgaben gestellt bekommen, deren Lösung mit Punkten bewertet werden.

Top Coder für Programmierer

Für Programmierer bietet TopCoder eine Plattform um ihr Wissen neutral mit anderen zu messen. Aufgaben aus diversen Bereichen wie Algorithmen, Software Architektur, Design, Development, Assembly Programming aber auch Software Testing stehen zur Auswahl.
Hatte ich erwähnt, das man des Englischen mächtig sein sollte, um bei TopCoder mitzumachen ? Alle Aufgaben, sowie die ganze Plattform sind in der englischen Sprache verfaßt. Aber Hand aufs Herz. In diesem Geschäft, sollte man sowieso gut Englisch sprechen, oder ?Aufgabe und Lösung

Hat man sich einmal angemeldet und sich einen Bereich ausgesucht (z.B. Assembly Development), dann kann man sich Aufgaben aus vergangenen Wettbewerben anschauen. Folgende Programmiersprachen stehen dabei zur Verfügung: Java, C++, C#, VB.net (Python in Vorbereitung).
Es ist nicht notwendig, jedoch sehr empfehlenswert, die Programmiersprache auf dem heimischen Rechner installiert zu haben, um so in der eigenen Entwicklungsumgebung zu coden, und dann das Ergebnis in TopCoder zu kopieren. Man kann auch sofort im TopCoder Fenster coden.

Grundsätzlich gibt es hier 2 Kategorien: Wettbewerbe (Contests) und Trainings (Practise Rooms).

In den Practise Rooms kann man sozusagen abgelaufene Wettbewerbe nachprogrammieren. Dabei werden verschiedene Schwierigkeitsstufen zur Auswahl gestellt. Je nach Schwierigkeitsstufe, kann man unterschiedliche Punktzahlen erreichen. Tipp: erst mal mit einer kleinen Stufe anfangen ;) )

Wettbewerbe starten weltweit zur gleichen Uhrzeit. Dem Teilnehmer wird dann die Problemstellung geschildert und los gehts. In der eigenen Programmierumgebung starten und kompilieren und wenns ohne Fehler läuft, den Source Code per copy & paste ins Top Coder Fenster pasten :) Achtung, jeder fehlerhafte Lauf im Top Coder Fenster kostet am Ende wertvolle Punkte … Am Ende des Wettbewerbs kann man sich so mit anderen Teilnehmern aus der ganzen Welt vergleichen. Da es bekanntlich viele Wege nach Rom gibt, gibt es auch verschiedene Lösungsansätze und selbst Super-Programmierer habe ich ob der Einfachheit und Kürze der anderen Lösungen schon erstaunt und ehrfürchtig gesehen ;)

Top Coder für Firmen

System TestFür Firmen bietet diese Plattform ungeahnte Möglichkeiten. So ist es durchaus denkbar im Rahmen eines Vorstellungsgesprächs einen Bewerber bzw. eine Bewerberin ein Problemfall live in TopCoder programmieren zu lassen. Es ist somit ein neutrales Medium mit neutralen Fällen in einer neutralen Umgebung. So eine Übung dauert vielleicht 20-30 Minuten, aber es zeigt oft, ob neben den sehr guten Zeugnissen auch die Praxis vorhanden ist.

Natürlich sollte solch ein Test nur ein Mosaikstein im Bewerberprofil sein. Aber man kann doch einiges feststellen, da es sich im Allgemeinen in solch einem Gespräch dann um eine Streßsituation handelt. Also, liebe Arbeitgeber, bitte auch berücksichtigen dass in solch einem Umfeld auch Top Programmierer manchmal einen Black-Out haben können ;)

Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • E-mail this story to a friend!
  • LinkedIn
  • MySpace
  • Netvibes
  • ThisNext
  • TwitThis
  • Yahoo! Buzz
  • MisterWong.DE
  • Webnews.de
  • Blogosphere News