Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

25. Februar 2010 um 19:55

Spickzettel-Sammlung: SQL Server Crib-Sheet Compendium

Erst heute bemerkte ich bei Simple-Talk das "SQL Server Crib-Sheet Compendium" als eBook. Ich finde es nicht schlecht, aber ich liege nicht in der Zielgruppe. Es richtet sich an Leute, die nur ab und an mit der Technologie zu tu haben, und sich dann einen schnellen Überblick verschaffen wollen, um gleich loszulegen.

Was mir fehlt ist so eine Kurzreferenz aller TSQL-Befehle als Taschenbuch. Für Sybase hatte ich mal so ein Teil, dass von Rob Verschoor erstellt und vertrieben wurde: "The Complete Sybase ASE Quick Reference Guide" – einfach klasse. Hier ist ein relevanter Ausschnitt als PDF.
Sybase selber bietet mit dem "Quick Reference Guide" mittlerweile etwas Ähnliches, wobei hier nur die reine Syntax drin steht.

Von Microsoft kenne ich das nicht. Gibt es so was und ich kenne es bloß nicht?

24. Februar 2010 um 19:19

Unterschiede der SQL Server – Microsoft und Sybase

Angeregt durch die Frage, wie Sybase wohl die Geschichte des SQL Servers beschreiben würde, fand ich bei Sybase eine außergewöhnlich detaillierte Beschreibung der technischen Unterschiede zwischen dem Sybase SQL Server und dem von Microsoft: "MS SQL to Sybase® ASE Migration Guide". Leider ist das Dokument inzwischen 4 Jahre alt, damals war die Version 15 aktuell. Kennt jemand einen aktuelleren Stand?

Dabei steht ASE für "Adaptive Server Enterprise". Sybase hat zwar immer noch die Namensrechte am Wort "SQL Server", aber dennoch in einem strategischen "Coup" gemeint Microsoft ein Schnippchen schlagen zu müssen. Weil Sybase nach der Trennung sehr viele neue Features in die Weiterentwicklung des SQL Server gesteckt hatte und mitansehen musste wie der damals auf einem älteren Stand basierende Microsoft SQL Server sich besser verkaufte als ihr System, wollte sie den MSlern ein Schnippchen schlagen. Sie dachten die Kunden könnten die Versionen nicht unterscheiden und sie dächten die neuen Sybase-Features seien auch im MS SQL Server. Tatsächlich sind viele der Innovationen von damals im MS-System auch heute noch nicht enthalten. Sybase wäre wohl nicht darauf gekommen, dass andere wesentliche Verkaufsargumente "uns" Kunden wichtig waren, z.B. die einfache Installation und gute Werkzeuge, außerdem war das Sybase "System 10" zu schnell auf den Markt geworfen worden, um Microsoft abzuhängen, und ein riesiges Bug-Desaster. Um den Unterschied deutlich zu machen, benannten sie Ihr System in "Adaptive Server Enterprise" um, was meiner Ansicht nach ihr größter Fehler war. Aber aus Stolz wollen sie das wohl nicht rückgängig machen. Eine Übersicht über die Versionen steht in der FAQ der Sybase User Group.

Beim kleinen Bruder, dem über Powersoft zugekauften Watcom SQL Server, den Sybase dann zügig "SQL Anywhere" nannte, haben sie den zwischenzeitlichen Schwenk nach "Adaptive Server Anywhere" zum Glück wieder rückgängig gemacht.

22. Februar 2010 um 19:06

Performance Troubleshooting mit SQL Server

Da gerade in letzter Zeit öfters Leute wegen verschiedener Performanceprobleme auf mich zu kommen, habe ich hier mal ein paar gute Links zu dem Thema gesammelt. Sie gehen von der Situation aus, dass das Kind schon in den Brunnen gefallen ist. Die Performance ist schlecht und nun geht es darum rauszufinden warum.

Eine Warnung muss ich allerdings vorwegschicken: Oft genug ist der SQL Server gar nicht der Flaschenhals. Bei einer kürzlichen Performance-Analyse stellte sich heraus, dass die Anwendung über einen bestimmten Mechanismus erreichte, das ein fachliches Objekt nur von einem Anwender gleichzeitig bearbeitet werden konnte. Das war über eine zentrale Sperrdatei am Server gelöst. Aber das gleiche Ergebnis würde es auch bringen, wenn diese Anwendungssynchronisierung über eine Tabelle gemacht würde. Ab einer bestimmten Anzahl an Benutzern wurde das System einfach langsam, weil hier die Anwendungssperren zu schlugen. In einem anderen Fall war das Performance-Bottleneck die Anwendung am Arbeitsplatz, hier dauerte das Aufbauen der Bildschirmelemente furchtbar lange, weil in den Oberflächenelementen immer alle Daten angezeigt wurden, z.B. die Liste der aller Kunden in einer Drop-Down-Box. Das wird nun man langsam, wenn das recht viele sind. Für solche Mengen war die Anwendung offensichtlich nicht ausgelegt. Um fest zustellen wo die Performance bleibt, hilft nur eine Analyse des Netzverkehrs. Dann sieht man genau auf welcher Seite des Netzes die Probleme sind, oder ob es gar das Netz selber ist…

Falls man sich dann sicher ist, das die Performance bei SQL-Server bleibt, dann empfehle ich als Einstieg das TechNet-Dokument "Troubleshooting Performance Problems in SQL Server 2008" von Sunil Agarwal und anderen. Inzwischen ist das Dokument schon fast ein Jahr erhältlich, aber immer noch aktuell.

Als Vertiefung empfehle ich das Buch "SQL Server 2008 Query Performance Tuning Distilled" von Grant Fritchey (aka ScaryDba) und Sajal Dam. Bei Google gibt es eine Vorschau. Das Buch ist aus meiner Sicht günstig für den gebotenen Stoff. Wenn es darum ginge schlechte Performance proaktiv zu vermeiden, dann würde ich eher die Bücher von Itzik Ben-Gan empfehlen.

Zuletzt empfehle ich auch immer gerne die Unterlagen von TechNet-Vorträgen. Franz Robeller und Oliver Goletz stellen auch Ihre Folien und Beispiele der TechNet-Vorträge vom November 2009 bereit. Hier der Download-Link.

22. Februar 2010 um 18:50

Tipps zur Wiederherstellung beschädigter Datenbanken von Paul Randal

Bevor die nächste Ausgabe des TechNet-Magazins erscheint, möchte ich noch auf die Tipps zur Wiederherstellung beschädigter Datenbanken, Empfehlungen zum Verkleinern von Datenbanken und mehr von Paul S. Randal hinweisen. Allerdings komme ich mit den deutschen Übersetzungen nicht so gut zurecht. Das Wort "Snapshotisolierung" könnte zwar noch schlimmer übersetzt werden, aber löst immer erst mal ein kurzes Nachdenken aus. Erst durch den Artikel erfuhr ich übrigens, dass er nun mit Kimberly (vermutlich Tripp) verheiratet ist. War wohl auch der Grund für seinen Rückzug von Microsoft… 😉

21. Februar 2010 um 14:14

SQL Server Denali – der Große

Über Klaus wurde ich auf einen durchgesickerten Life-Cycle-Plan von Microsoft-Produkten aufmerksam. Da vergaß der Microsoft-Entwickler Chris Green bei der Erstellung einer Product-Support-Life-Cycle-Übersicht offenbar die noch nicht veröffentlichten Infos rauszufiltern. Daher kann dort sehen, wie der aktuelle Stand der Planung zu verschiedenen Produkten ist. Chris nahm das Dokument inzwischen zwar aus dem Netz, aber bspw. bei Google und Softpedia.com findet man es noch. Darin findet man auch die Planung zu Windows 8 und anderen interessanten Produkten… 😉

Demnach wären für die SQL Server folgende "Product Support Life Cycles" zu erwarten:

  • SQL Server 2000: Dezember 2000 bis April 2013
  • SQL Server 2005: Januar 2006 bis April 2016
  • SQL Server 2008: November 2008 bis Januar 2019
  • SQL Server 2008 R2: Februar 2011 bis Juni 2020
  • SQL Server 2011: Juli 2011 bis Juli 2021

Neu daran sind freilich nur die zum 2008-R2 und 2011er. Aber gerade die sind für mich aktuell besonders spannend. Denn warum sollte man in 2010 mit dem Umstieg auf den SQL Server 2008 R2 beginnen, der in Bezug auf den SQL-Server-Core kaum Erweiterungen bringt, wenn ein Jahr später die richtige Version kommt? Wenn wir mit der Umstellung fertig wären, dann wäre zudem die nächste Version schon längst freigegeben… Blöd ist nur, dass die Zahlen schon jetzt nicht stimmen, denn der SQL Server 2008 R2 soll ja nun doch erst im Mai kommen. Wird dann aus den genannten verkaufspolitischen Gründen die Freigabe des 2011ers auch verschoben? Das wäre schade.

Im Artikel "Introducing Microsoft Codename Denali ‘the Great One’" auf Softpedia.com tragen sie weitere Puzzle-Teile zusammen. Beispielsweise, dass der SQL Server 2011 den Codenamen "Denali" trägt. Wikipedia sagt zum Mount McKinley:

Ein alternativ verwendeter Name des Berges ist Denali, ein Wort aus dem Athapaskischen, das der Große oder der Hohe bedeutet.

Soso, der große SQL Server kommt dann nächstes Jahr. Da freue ich mich dann schon drauf… 😉

21. Februar 2010 um 12:37

SQL-Insider

Wie ich heute sah, hat Klaus Oberdalhoff letzte Woche einen Blog gestartet: SQL-Insider.de. Darin geht es um Dinge rund um SQL Server. Bisher sind nur 2 Beiträge drin, aber es kommen sicher noch mehr. Viel Erfolg. Klaus!

Klaus ist bei uns in Franken recht bekannt, weil er seit Jahren die fränkische Regionalgruppe der SQL-PASS leitet. Durch seine freundliche, aber bestimmt Art konnte er bislang immer wieder viele hochkarätige Referenten gewinnen. Bei letzten Vortrag zum Thema Datensicherung mit SQL Server kamen beispielsweise 33 Teilnehmer.

PS: Hallo Klaus, wenn Dein Blog Kommentare erlauben würde, dann hätte ich auch dort gratuliert… 😉

20. Februar 2010 um 16:35

Die Tabelle ist mehrdeutig

Als mir mein Kollege Thomas ein Problem präsentierte, musste ich erst mal lange überlegen. Grund genug das hier festzuhalten, falls es auch anderen so geht. Im UPDATE-Befehl kann man einen JOIN auf eine andere Tabelle machen. Der UPDATE wird aber dennoch nur auf die Basistabelle durchgeführt. Bei einem Self-Join kann dabei ein Fehler kommen:

UPDATE test
SET fill= t2.fill
FROM test AS t1
JOIN test as t2
ON t1.refid=t2.id

Meldung 8154, Ebene 16, Status 1, Zeile 1
Die 'test'-Tabelle ist mehrdeutig.

Oder auf englisch: "The table '%.*s' is ambiguous." Die Lösung besteht darin, dass man im UPDATE über den Alias deutlich macht, auf welche Tabelle der UPDATE durchgeführt werden soll. Beispielsweise so:

UPDATE t1 /* <-- Hier den Alias verwenden */ SET fill= t2.fill FROM test AS t1 JOIN test as t2 ON t1.refid=t2.id

Das gilt freilich auch für ein DELETE-FROM.

Hier noch der Code für ein schnelles Repro:
USE tempdb
GO
IF object_id ('test') IS NULL
CREATE TABLE test (
id INTEGER NOT NULL PRIMARY KEY,
name NVARCHAR(100) NOT NULL,
refid INTEGER NULL REFERENCES test(id),
fill INTEGER NULL);
ELSE
DELETE FROM test;

INSERT INTO test (id, name, refid, fill)
SELECT 1, N'Bill', NULL, 10 UNION ALL
SELECT 2, N'Bob', NULL, 20 UNION ALL
SELECT 3, N'Hank', NULL, 30 UNION ALL
SELECT 4, N'Tom', 1, NULL UNION ALL
SELECT 5, N'Babs', 1, NULL UNION ALL
SELECT 6, N'Grit', 1, NULL UNION ALL
SELECT 7, N'Alex', 2, NULL UNION ALL
SELECT 8, N'Eric', 2, NULL UNION ALL
SELECT 9, N'Stan', 2, NULL UNION ALL
SELECT 10, N'Ole', 2, NULL UNION ALL
SELECT 11, N'Skye', 3, NULL UNION ALL
SELECT 12, N'Mary', 3, NULL UNION ALL
SELECT 13, N'Joe', 3, NULL UNION ALL
SELECT 14, N'Kurt', 3, NULL UNION ALL
SELECT 15, N'Karl', 3, NULL;
GO
UPDATE test
SET fill= t2.fill
FROM test AS t1
JOIN test as t2
ON t1.refid=t2.id
/*
Meldung 8154, Ebene 16, Status 1, Zeile 1
Die 'test'-Tabelle ist mehrdeutig.
*/
GO
UPDATE t1
SET fill= t2.fill
FROM test AS t1
JOIN test as t2
ON t1.refid=t2.id

17. Februar 2010 um 20:46

Die Geschichte des SQL Servers aus der Sicht von Microsoft

Da jetzt bald wieder eine neue Version des Microsoft SQL Servers auf den Markt kommt, möchte ich auf den Artikel SQL MythBusters – "SQL Server is really a Sybase product not a Microsoft one." hinweisen. Hier beschreibt Euan Garden die Geschichte des SQL Servers aus der Sicht von Microsoft. Da würde mich doch glatt die Sicht von Sybase interessieren…

Etwas differenzierter beschreibt es Kalen Delaney in dem ersten Kapitel des vergriffenen Buches "Inside SQL Server 2000", dass freundlicherweise nun im Internet als PDF zugänglich ist.

16. Februar 2010 um 20:48

NoSQL? Wie wäre es mit CouchDB?

Bei Heise Developer erschien aktuell ein interessanter Artikel über eine NoSQL-Datenbank: CouchDB – angesagter Vertreter der "NoSQL"-Datenbanken.

Ist es eine zufällige Häufung oder hat das derzeit überall aufkeimende Interesse der Community an NoSQL-Datenbanken etwas mit dem Aufkauf von MySQL durch Oracle zu tun? Auch ich bin unsicher, ob ich mein Interesse an MySQL jetzt nicht lieber auf andere Datenbanksysteme umleiten sollte…

15. Februar 2010 um 20:45

Datenbankfehler auf Datenbankhilfeseite

Zur Konfigurationsdatenbank kann keine Verbindung hergestellt werden.Verbindungsprobleme gehören bei uns schon zum alltäglichen Supportgeschäft. Meist liegt es schlicht daran, dass der SQL Server gestoppt ist und der Kunde das einfach nicht bemerkt. Dennoch fand ich es heute bemerkenswert, dass die "SQL Server FAQ" wegen eines Datenbankfehlers nicht erreichbar ist:

Zur Konfigurationsdatenbank kann keine Verbindung hergestellt werden.

Das kann freilich immer passieren, aber dennoch finde ich es irgendwie witzig. Etwa so wie wenn ein Zahnarzt Zahnschmerzen hat…

15. Februar 2010 um 20:24

Artikel über Deadlock-Grafen

Nachdem bei uns das Thema Deadlock wieder als Welle reinschwappt, freute ich mich über einen Einsteiger-Artikel zum Thema Deadlock-Grafen im SQL-Magazine. der Artikel ist frei zugänglich. Normalerweise muss man wenigstens registriert sein oder am besten gleich "Subscriber". Beides ist hier nicht nötig.

Wer weitere Infos zu dem Thema sucht, der findet am Ende Links auf deutlich tiefer gehende Artikel.

14. Februar 2010 um 20:02

Virtuelle Datenbanken

In dieser Woche wurde ich auf eine Werbung aufmerksam in der von virtuellen Datenbanken die Rede war. Die Idee ist ebenso einfach wie bestechend: Offenbar ist die Software in der Lage eine Backupdatei des Microsoft SQL Servers wie eine virtuelle Datenbank "anzuhängen" und zugreifbar zu machen. Das wäre schon echt klasse: Wenn bisher jemand versehentlich einen Bestand gelöscht hat, dann muss man die gesicherte Datenbank parallel zur bestehenden wiederherstellen und dann mit der Software die Daten eines Bestandes exportieren und in die aktuelle Datenbank importieren. Wenn man auf die virtuelle Datenbank nun mit der Anwendung wenigstens lesend drauf könnte, dann würde der Zwischenschritt des Wiederherstellens komplett entfallen. Das könnt die knapp 500 USD schon wert sein.

Andererseits kann ich mir nicht vorstellen, dass die Software die ganzen MS-APIs unterstützt, so heißt es aber in der Beschreibung ("Use all native and third-party tools to access virtual database"). Vermutlich kann man nur mit den Werkzeugen drauf oder denkt der SQL Server wirklich, das sei eine Datenbank? Hat schon jemand Erfahrung mit "SQL virtual database" von Idera? Das Video hat mich jedenfalls schwer beeindruckt. Leider weiß ich jetzt schon, dass es lange dauern wird, bis ich mich damit mal beschäftigen kann… 🙁