Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

28. Februar 2007 um 22:39

Ausführen von IE6 und IE7 auf demselben Computer

Letztes Jahr im November sorgte ein Artikel aus dem IE-Blog für Furore: Damals wurde ein Image von Windows XP mit bereits installiertem Windows XP für Virtual PC zum allgemeinen, kostenlosen bereit gestellt. Die Lizenz ist bis April gültig. Dann sollte weiter überlegt werden, wie damit umgegangen wird. Bis April ist es nicht mehr weit.

Daher wundert es mich sehr, dass am 12.2. 2007 genau dieser alte Artikel übersetzt, aber unverändert in die MSDN aufgenommen wurde: Ausführen von IE6 und IE7 auf demselben Computer.

Da MSDN-Artikel eine sehr lange Haltbarkeit haben, könnte das eine Vorentscheidung sein, diese Images weiterhin bereit zu stellen… Oder mahlen die Mühlen der Bürokratie bei MS einfach nur langsam?

28. Februar 2007 um 22:28

Gartner-Bericht zu Data-Warehouse-Systemen

Durch den Newsletter des SQL Server Magazine wurde ich auch schon auf den letztjährigen Gartner-Bericht zu Data-Warehouse-Systemen aufmerksam:
"Magic Quadrant for Data Warehouse Database Management Systems, September 2006".
Zusätzlich dazu steht sogar schon der Januar-Bericht zu BI online bereit:
Magic Quadrant for Business Intelligence Plattfoms, 1Q.2007

Diese Berichte sind nicht allein selig machend, wirken meiner Erfahrung nach auf Manager aber ungeheuer überzeugend. Das liegt vermutlich daran, dass sie so teuer sind…

26. Februar 2007 um 18:20

Fehlerbehandlung am SQL-Server

Grant Fritchey stellt den sehr guten Workshop "SQL Server Error Handling Workbench" bereit. Eigentlich wollte ich auch mal was zu dem Thema schreiben, aber Grant hat die Latte ziemlich hoch gelegt. Sein Workshop ist gleichermaßen verständlich und nahezu vollständig.

Es nennt es Workshop, weil man die SQL-Datei in das Management-Studio lädt und dann dort schrittweise ausprobiert. Er ist meiner Ansicht nach für alle (angehenden) TSQL-Profis sehr zu empfehlen.

26. Februar 2007 um 18:13

PowerSMO – Powershell für Datenbank-Admins

Wer von der Powershell nicht genug bekommen kann und auch mit dem SQL-Server-2005 arbeiten muss/mag, der wird sich über
PowerSMO freuen.

Damit kann man im Rahmen der Powershell auf Objekte im SQL-Server zugreifen. Ich persönlich finde das schon mal einen guten Anfang, aber es ist einfach noch zu kompliziert. Es ist zu stark an die SMO angelehnt. Ich persönlich würde mir eine stärkere Anbindung an SQL wünschen. Wenn ich mir die Beispiele so ansehe, finde ich das alles noch sehr umständlich, z.B. das Anlegen einer Datenbank. Eigentlich kann man statt dessen ja auch einfach einen SQL-Befehl ("create database") an den Server schicken und gut is… 😉

Dan Sullivan, der Erfinder, bietet selber auch zwei Artikel an die sich vor allem an Einsteiger in die PowerShell richten:

25. Februar 2007 um 22:45

Server-Default-Collation ändern

Weil ich gerade etwas über Collations schrieb, musste ich wieder daran denken, wie ich neulich von meinem Kollegen Matthias lernte, dass man am SQL-Server-2005 die Server-Default-Collation viel einfacher ändern kann als früher. Bis inkl. SQL-Server-2000 war ein explizites "Rebuild Master" notwendig. Neuerdings geht das mittels des Setup-Befehls. Da wird zwar auch ein "rebuild master" durchgeführt, aber der Aufruf ist erheblich einfacher.

start /wait setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=test SQLCOLLATION=SQL_Latin1_General_CP1_CI_AI

Weitere Infos stehen in der Online-Hilfe. Das Beispiel ist auch von dort.

25. Februar 2007 um 22:35

temporäre Tabellen – heute hier, morgen fort

Am Microsoft SQL Server gibt es drei offizielle Arten von temporären Tabellen, aber tatsächlich sind es sogar fünf. Je nach Art der Verwendung findet sich leicht etwas passendes.

sitzungsbezogene temporäre Tabellen

Die lokale Tabelle wird direkt in einer Session angelegt. Beispiel:

create table #localtable(
id integer identity(1,1) not null primary key,
f nvarchar(100) collate Latin1_General_CI_AS not null
);

  • Die Tabelle existiert in der gesamten Verbindung ("Session") und damit in allen Prozeduren, die innerhalb aufgerufen werden.
    Erst nach dem Ende der Verbindung wird die Tabelle automatisch entfernt. Es sei denn sie wird vorher explizit mit einem DROP-Befehl entfernt.
  • Andere Verbindungen können nicht auf die Tabelle zugreifen. Sie existiert nur "lokal" in dieser Session.
  • Wird in einer Stored-Procedure (SP) eine gleichnamige Tabelle angelegt, dann wird dort eine eigene, unabhängige, temporäre Tabelle mit gleichem Namen angelegt. In diesem Fall kann man nur auf die "innere" zugreifen. (siehe nächster Typ)
  • Es ist möglich einen Index auf die Tabele zu legen und/oder nachträglich weitere Constraints anzulegen.

lokale temporäre Tabellen

Die lokale Tabelle wird in einer Stored-Procedure (oder einem anderen Gültigkeitsbereich) angelegt. Die Syntax ist genau wie beim obigen Beispiel.

  • Die Tabelle existiert aber nur in dieser Stored-Procedure (nennen wir sie mal SP1) und allen Prozeduren, die innerhalb von SP1 aufgerufen werden.
    Nach dem Ende der Prozedur wird die Tabelle automatisch entfernt. Es sei denn sie wird vorher explizit entfernt.
  • Andere Prozeduren oder Verbindungen können nicht auf die Tabelle zugreifen. Sie existiert nur "lokal" in dieser Instanz der SP.
  • Wird die Prozedur in anderen Sitzungen erneut aufgerufen, werden dort jeweils eigene, unabhängige temporäre Tabellen angelegt.
  • Es ist möglich einen Index auf die Tabele zu legen und/oder nachträglich weitere Constraints anzulegen.

globale temporäre Tabellen

Bei der globalen Tabelle ist es egal in welchem Gültigkeitsbereich sie angelegt, wird. Sie kann in allen Stored-Procedures und Funktions zugegriffen werden. Für die Syntax anbei noch ein Beispiel:

create table ##globaltable(
id integer identity(1,1) not null primary key,
f nvarchar(100) collate Latin1_General_CI_AS not null
);

  • Die Tabelle ist von jeder Verbindung aus zugreifbar, kann also von allen Stored-Procedures, Funktionen verwendet werden.
  • Wird von einer anderen Verbindung (egal mit welchem Benutzer) versucht eine gleichnamibe Tabelle anzulegen, kommt die Fehlermeldung, dass es die Tabelle schon gibt.
  • Nach dem Ende der ursprünglichen Verbindung wird die Tabelle automatisch entfernt, sofern keine andere Verbindung eine Sperre auf einen Datensatz, eine Seite oder die ganze Tabelle hält. Natürlich kann sie auch vorher explizit entfernt werden.
  • Sobald die anderen Verbindungen auf die so eben entfernte Tabelle zuzugreifen, kommt die Meldung, dass sie nicht existiert.
  • Es ist möglich einen Index auf die Tabele zu legen und/oder nachträglich weitere Constraints anzulegen.

In der Praxis finde ich diese Art der Tabellen sehr unpraktisch und würde von deren Verwendung abraten. Was hat man davon, wenn die Existenz der Tabelle so stark mit der anlegenden Verbindung zusammenhängt, dann wäre doch die sitzungsbezogene temporäre Tabelle deutlich verständlicher.

(normale) Tabelle in TempDB

Bei der normalen Tabelle in der TempDB muss man das Recht haben Tabellen anzulegen, also z.B. SysAdmin oder DdlAdmin in der TempDB sein. Für die Syntax wieder ein Beispiel:

create table tempdb.dbo.mytable(
id integer identity(1,1) not null primary key,
f nvarchar(100) collate Latin1_General_CI_AS not null
);

  • Die Tabelle ist von jeder Verbindung aus zugreifbar, kann also von allen Stored-Procedures, Funktionen verwendet werden.
  • Die Tabelle wird erst beim nächsten Start des SQL-Servers entfernt, sofern sie nicht vorher explizit entfernt wurde.
  • Es ist möglich einen Index auf die Tabele zu legen und/oder nachträglich weitere Constraints anzulegen.

Rechte in der Praxis

1. Möglichkeit: Man kann die Benutzer, die diese Tabellen anlegen dürfen als User in der TempDB anlegen. Dass muss man allerdings nach jedem Server-Start machen, weil da die TempDB gelöscht und neu aus einer Kopie der Model-Datenbank angelegt wird. Diese Benutzer bekommen dann das Recht "CREATE TABLE". Dazu könnte man sich eine Autostart-Prozedur anlegen, die die anzulegenden User aus einer eigens dafür anzulegenden Tabelle liest und anlegt.
Nach dem Anlegen der Tabelle muss dann der Benutzer die Rechte auf die Tabelle explizit vergeben. Das alles ist umständlich und erfordert jede Menge Aufwand. Dafür ist es "nach Vorschrift": Jeder hat nur so viele Rechte, wie er benötigt.
2. Möglichkeit: Man gibt der Gruppe Public in der TempDB das Recht "CREATE TABLE". Auch hier schlage ich eine Autostart-Prozedur vor. Die anzulegenden Tabellen nennt man "tempdb.guest.". Dann darf sie automatisch jeder lesen, schreiben, allerdings auch löschen. Sicherheitskritische Daten sollte man aber in so eine Tabelle ohnehin nicht schreiben.

Tabellenvariablen

Und dann gibt es da noch die Tabellenvariablen. Sie funktionieren im Grunde fast genau wie lokale temporäre Tabellen

DECLARE @MyTempTable table (
id integer identity(1,1) not null primary key,
f nvarchar(100) collate Latin1_General_CI_AS not null);

  • Die Tabellenvariable existiert aber nur in dieser Stored-Procedure (SP), aber nicht in den Prozeduren, die aufgerufen werden.
  • Andere Prozeduren oder Verbindungen können nicht auf die Tabellenvariable zugreifen. Sie existiert nur "lokal" in dieser Instanz der SP.
  • Wird die Prozedur in anderen Sitzungen erneut aufgerufen, werden dort jeweils eigene, unabhängige temporäre Tabellenvariablen angelegt.
  • Es ist nicht möglich einen Index auf die Tabele zu legen oder nachträglich weitere Constraints anzulegen.

Collate in der Praxis

In obigen Beispielen habe ich immer die Collation angegeben. Das ist immer dann wichtig, wenn ich nicht sicher davon ausgehen kann, dass sie Server-Default-Collation mit der Collation in "meiner" Datenbank übereinstimmt. Da temporäre Tabellen in der TempDb angelegt werden, wird für Zeichenketten automatisch die Default-Collation des Servers verwendet, wenn es nicht anders angegeben wird.

24. Februar 2007 um 19:39

Informationsweitergabe – das schwächste Glied

Jetzt erlebte ich an eigenem Leibe, dass die Informationsweitergabe nur so gut ist, wie das schwächste Glied… Wir bestellten bei Tchibo ein paar Schränke für das Badezimmer. Als die Schränke ankamen, waren wir nicht da, also mussten sie ein 2tes Mal zugestellt werden.

Was dann ankam, war ein völlig zerbeutelter Karton, der nichts Gutes ahnen ließ:
Sendung von Tchibo

Innen drin befand sich ein weiterer Karton auf dem gut leserlich "Glas, zerbrechlich, nicht werfen, …" stand. Diese Information stand auf dem äußeren Karton aber nicht. Sie ging einfach verloren.

Und die Moral von der Geschichte: Achte darauf Deine Jobs mit offenen Augen für die Konsequenzen Deines Handelns zu erledigen.

PS: Die Glasscheiben waren zum Glück nicht kaputt…

20. Februar 2007 um 21:08

Der Weg nach Hause

Wer anderen seinen Weg nach Hause beschreiben will, der hat neuerdings auch die Möglichkeit das mittels maps.live.com zu tun. Wenn man Glück hat, sogar in 3D. Aber nur, wenn man Fan des Internet-Explorers ist.

Hier ein paar Möglichkeiten im direkten Vergleich:

  • maps.live.com – das stellt sich aber doof, wenn man es mit dem Firefox aufruft.
  • maps.google.de – funktioniert in der Regel ganz gut.
  • GoYellow.de, wo die Straßen meist etwas neben der Spur liegen.
  • Oder ganz konservativ auf dem Plan der von der Stadt Erlangen bereitgestellt wird. Das fällt gerne mal aus. Jetzt zum Beispiel …
18. Februar 2007 um 15:46

kostenloses Buch zu C# von Charles Petzold

Mein Kollege Reinhard machte mich darauf aufmerksam, dass Charles Petzold auf seiner Homepage das Buch ".NET Book Zero" als PDF zum kostenlosen Download anbietet.
Es richtet sich speziell an C- oder C++-Programmierer, die in C# und das .Net-Framework einsteigen möchten. Im Vorwort steht auch , wie es zu dem komischen Namen kommt:

Some books have a Chapter Zero. That‘s the chapter with the stuff the reader needs to know before reading Chapter One. Chapter Zero might be a refresher course in subjects the reader once knew but has now forgot-ten, or it might be a quick-and-dirty summary of prerequisites for the rest of the book.
This book originated as a Chapter Zero in my book Applications = Code + Markup: A Guide to the Microsoft Windows Presentation Foundation (Microsoft Press, 2006), which is about the new Windows client programming platform that‘s part of Microsoft .NET 3.0 and Microsoft Windows Vista.

Ich habe es mal angelesen und hatte einen guten Eindruck. Da es kostenlos zum Download zur Verfügung steht, kann sich jeder selber eine Meinung bilden…

18. Februar 2007 um 15:45

Haltbarkeit von Festplatten

Bei Heise.de kann man eine sehr ausführlich Zusammenfassung der Google-Studie zur Haltbarkeit von Festplatten nachlesen.
Diese Studie sollte man in alle Sprachen übersetzen un deren Zusammenfassung zur Pflichtlektüre für jeden EDV-Verantwortlichen machen…

Prometeo wundert sich darüber, dass einer der Haupteinflussfaktoren auch der Hersteller ist. Das wundert mich hingegen nicht, schon früher gab es im "Flurfunk" einige Hersteller von deren Festplatten gewarnt wurde. Als Software-Firma tut man sich allerdings schwer die Namen solcher Firmen ohne zuverlässige Quellenangaben zu veröffentlichen. Deswegen stimme ich zu: es wäre schön gewesen, wenn Google die Namen genannt hätte. Immerhin haben sie ja eine echte Studie mit zuverlässigen Angaben.

16. Februar 2007 um 21:30

Webcasts – die etwas andere Erfahrung

Gestern versuchte ich zum ersten Mal bei einem Webcast teilzunehmen: "Versionierung & Deployment von Datenbankänderungen". Dabei geht es um die neue "Visual Studio Team Edition for Database Professionals".

Leider stellte ich fest, dass auf dem Internet-Rechner in der Firma der Ton nicht klappte. Ich bekam die Meldung, dass zum Audio-Server keine Verbindung aufgebaut werden kann. Die Folien zu sehen ohne ton, war irgendwie nicht so prickelnd. Nachdem ich alle Tipps von MS durchprobiert hatte, inkl. Installation der neuesten Patches und diversen Konfigurationen, habe ich dann aufgegeben. Heute habe ich die Info bekommen, welchen Proxi unserer Firma ich dafür nehmen muss und schon klappte es.

Ich bin schon auf den nächsten Versuch gespannt…
Wer noch mit aufspringen will: Offenbar hatte der Referent keine Lust mehr, nachdem ich weggegangen war. Das Ganze wurde dann abgebrochen und auf den 22.2. um 14 Uhr vertagt…

MSDN Webcast: Versionierung & Deployment von Datenbankänderungen – Team System und die Database Professional Rolle (Level 200)

Hier ist die aktuelle Liste aller deutschsprachigen WebCasts in nächster Zeit. Die meisten kann man auch nachträglich ansehen.

16. Februar 2007 um 21:20

Anti-Werbung von Sybase

Heute bekam ich schon wieder eine Einladung doch als Referent auf der Sybase TechWave 2007 aufzutreten. Aber nicht, weil ich so tolle Schulungen halte, sondern weil sie das jedem schicken, der mal auf einer von ihren Konferenzen als Teilnehmer war. Ich finde es ja schon eher peinlich, dass sie so um Referenten betteln müssen. Bei SQL-Server-Veranstaltungen von Microsoft gibt es genug "Berater", die gerne für sich Werbung machen.

Noch unangenehmer finde ich schon, dass sie mit folgenden Argument versuchen Referenten zu gewinnen:

Be Selected – This is a terrific opportunity to have your solution showcased in front of a select group of peers.

Genau solche Vorträge verleiden mir die Teilnahme an Konferenzen: Jede Werbeveranstaltung ist eine zu viel. Und die machen auch noch Werbung damit…