Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

14. August 2009 um 21:12

Joe Celko über die 3-wertige Logic

Wer sich mit den Feinheiten von SQL befasst, der kommt um die drei-wertige Logik nicht herum: neben TRUE und FALSE gibt es eben auch noch "UNBEKANNT" (NULL). Joe Celko beschreibt bei simple-talk.com sehr ausführlich die beachtenswerten Infos dazu. Leider fängt er bei den einfachen Dingen an. deswegen hätte ich den Artikel fast nicht bis zum Ende gelesen und richtig spannende Infos versäumt…

Hier ist der Artikel: "SQL and the Snare of Three-Valued Logic"

11. August 2009 um 22:11

Microsoft SQL Server 2008 R2 CTP zum Download

Ich habe lange überlegt, ob ich zu dem CTP etwas schreiben soll: Einerseits dürften sich morgen alle Newsletter mit Infos zu der Vorabversion überschlagen, andererseits habe ich mich in den letzten Wochen viel intensiver damit beschäftigen müssen als mir lieb war… 😉

Also ab morgen ist die erste öffentliche CTP-Version (Community Technology Preview) des "Microsoft SQL Server 2008 R2" bei Microsoft verfügbar. Experten bekamen bereits Ende letzten Jahres eine allererste Fassung und dann noch mal im März. Bis vor kurzen firmierte die Version noch unter dem Codenamen "Kilimanjaro" und war als "SQL Server 2010" angekündigt.

Neu ist vor allem, dass es nun eine echte Zwischenversion "R2" für den SQL-Server gibt, für Windows-Server gibt es das ja schon länger. Erfahrungsgemäß hat die R2-Version dort den gleichen Produktlebenzyklus wie die Hauptversion. Der Upgrade des Server-Systems kostete in der Regel Geld, aber für die CALs war kein Upgrade nötig. Wie das mit dem SQL-Server wird, erfahren wir wohl erst im kommenden Jahr, wenn die Version kurz vor der Freigabe steht.

Die Änderungen der R2-Version liegen vor allem im Bereich der BI. Wer kein BI einsetzt, für den ist die Version R2 vermutlich nicht interessant. Es sei denn jemand betreibt sehr große Server-Farmen. Gespannt bin ich auf den "Report Builder 3.0", der deutliche Verbesserungen enthalten soll. Wer sich über die Neuerungen informieren will, der sollte zu den SQL-PASS-Treffen zu dem Thema in diesem bzw. nächsten Monat gehen. Die genauen Termine stehen im letzten PASS-Newsletter auf Seite 3.

Bereits in diesem Monat will Microsoft weitere Vorabversionen herausgeben, darunter die CTPs für StreamInsight und die SQL Azure Datenbank. Mal abwarten.

10. August 2009 um 21:57

LINQ-to-SQL oder ADO.NET Entity Framework

Wer sich gerade mit der Frage beschäftigt, ob er lieber LINQ-to-SQL oder ADO.NET Entity Framework einsetzen will, dem kommt sicher der Artikel bei Heise-Developer ganz recht: "Verwirrung um objekt-relationale Mapper: LINQ-to-SQL oder ADO.NET Entity Framework?". Darin beschriebt Holger Schwichtenberg recht vollständig die Unterschiede und Schwerpunkte der beiden "neuen" Datenbank-Zugriffsschichten von Microsoft. Gut gefallen mir auch die Seitenhiebe auf die Luftblasen "Object Spaces" und "WinFS", die Beide von Microsoft ewig angekündigt und der Fachwelt sehnlichst erwartet wurden, aber dann plötzlich von Microsoft eingestampft wurden. Er beschreibt auch warum zwei ähnliche Produkte konkurrierend entstanden und wo deren Stärken liegen.

Der Artikel ist angenehm zu lesen und gleichermaßen unterhaltsam und informativ. Schön finde ich auch die Gegenüberstellung ganz am Ende.

4. August 2009 um 18:15

Welche Version hat welcher SP bzw. CU?

Auf der Seite "SQL Server Version" pflegt SQLTeam.com eine sehr vollständige Liste aller SQL-Server-Versionen mit allen SPs und CUs. Das finde ich extrem nützlich. Meinen Dank an die Kollegen…

1. August 2009 um 18:22

SQL-PASS Franken: gemütliches Treffen

SQL-PASSAm 11.8.2009 – also mitten in den Sommerferien – treffen sich die "Daheimgebliebenen" SQL PASS'ler im Biergarten an der Burg im "Hexenhäusle". Reserviert ist ab 18:15 Uhr. Ehepartner und Freunde sind ausdrücklich gerne gesehen.

Hexenhäusle, Vestnertorgraben 4
(am Rücken der Nürnberger Kaiserburg / direkt am Bürgermeistersteg)
Anzahl Plätze: Außen Biergarten: ca. 380, Innen: ca. 80

Wie bei den normale Treffen bittet Klaus Oberdalhoff [kob(ät)sqlpass.de] um eine kurze Anmeldung, damit er die Reservierung "verfeinern" kann. Da bat ihn das Hexenhäusle ausdrücklich.

Was ist wichtig ?
Gute Laune, viel Durst und Appetit und Freu(n)de mitbringen

Vorankündigung: 15.09.2009 18:30 Uhr – Spezial Event 5 Jahre PASS – Neues Rund um den SQL Server 2008 R2 – Microsoft berichtet

29. Juli 2009 um 22:04

Prozeduren droppen

Neulich fragte mich ein Kollege, ob es sicherer sei die Existenz von Prozeduren auf herkömmliche Art zu prüfen und dann ggf. zu löschen:

IF schema_id('DDLMaster') IS NULL
EXEC ('CREATE SCHEMA [DDLMaster];');
go
IF object_id('[DDLMaster].[p_version]') IS NOT NULL
DROP PROCEDURE [DDLMaster].[p_version];
go
CREATE PROCEDURE [DDLMaster].[p_version]
AS
SELECT @@version

Oder doch einfach mal testweise zu löschen:

BEGIN TRY DROP PROCEDURE [DDLMaster].[p_version] END TRY
BEGIN CATCH END CATCH
go
CREATE PROCEDURE [DDLMaster].[p_version]
AS
SELECT @@version

Ich muss ehrlich sagen, dass ich keine Ahnung habe, was besser ist. Risiken und Nebenwirkungen sind auch gleich verteilt. Für mich ist es daher einfach Geschmackssache.

Die letzte Art sah ich erstmals bei meinem Kollegen Diethard vor ein paar Jahren und fand sie gleich sympatisch. Einfach weil das so abgedreht ist. Dennoch verwende ich immer noch die gute alte Überprüfung mittels IF. Im Normalfall sind bei unseren Skripten die Objekte schon da und daher dürfte die zweite Methode einen Tick schneller sein. Andererseits sind die SQL-Server heutzutage so schnell, dass wir hier über wenige Millisekunden reden… 😉

Beide Tricks gehen übrigens auch für andere Datenbank-Objekte.

24. Juli 2009 um 20:48

Schade um das SQL Server Magazine

Die letzten Ausgaben des SQL Server Magazine wurden immer dünner. Sowohl vom Umfang als auch von der Qualität der Artikel. In letzter Zeit wird den Lösungen der Leser ein immer größerer Stellenwert eingeräumt. Ich habe den Verdacht, dass es hier gar nicht darum geht eine Community aufzubauen, sondern eher die Seiten billig zu füllen. Leider fand ich die Lesertipps bisher eher nicht so interessant. Von den Autoren sind die Artikel von Itzik Ben-Gan zweifellos am besten. Sie sind einfach gut recherchiert. Allerdings werden seine Artikel so gestreckt und gedehnt, dass ein Thema auf drei oder vier Monatshefte aufgeteilt wurde. Das macht es dann schon wieder uninteressant. Da kann man sich lieber eines seiner Bücher kaufen…

Mittlerweile scheint auch das elektronische Medium der Zeitschrift den Bach runter zu gehen. Gestern bekam ich über deren Newsletter eine Mail in dem ein Artikel von Ben-Gan aus dem Jahre 2006 als Aufmacher und Betreff verwendet wurde: "Calculating the Median Gets Simpler in SQL Server 2005 ". Der Artikel beginnt mit den Worten "SQL Server 2005 introduces several new T-SQL enhancements". Der Artikel war damals gut, ohne Frage. Aber da jetzt das CTP vom SQL Server 2008 R2 vor der Tür steht, ist das schon nicht mehr ganz so eine bahnbrechende Neuheit…

23. Juli 2009 um 19:37

T-SQL-Bücher von Itzik Ben-Gan zum SQL-Server-2008

Zufällig bemerkte ich, dass Itzik Ben-Gan seine TSQL-Bücher auf den SQL-Server-2008 aktualisiert hat.

Inside Microsoft SQL Server 2008: T-SQL Querying von Itzik Ben-Gan, Lubor Kollar und Dejan Sarka, 38 Euro

Microsoft® SQL Server® 2008 T-SQL Fundamentals PRO-Developer von Itzik Ben-Gan, 38 Euro

Beide Bücher sind sehr detailliert geschrieben und ausgezeichnet recherchiert. Wer allerdings die Vorgängerversionen zum "SQL Server 2005" hat, muss die Bücher nicht unbedingt kaufen.

21. Juli 2009 um 21:17

Command-Timeout hinterlässt offene Transaktionen

In der gestrigen Liste kommen jede Menge Timeouts vor, die zu einer Fehlermeldung bei der Bearbeitung von SQL-Befehlen führen können. Heute stellten wir fest, dass ein "Command Timeout" in der Anwendung (also am Client) am SQL-Server zu offenen Transaktionen führen können.

Beispiel: Die Anwendung schickt einen SQL-Batch an den SQL-Server der am Stück ausgeführt werden soll:

BEGIN TRANSACTION;
INSERT …. SELECT ….; – irgendetwas schrecklich Langes
COMMIT;

Wenn das zu lange dauert und das Client-API daher einen Command-Timeout wirft, dann schickt der Client per TDS einen "Cancel" zum Server. Das sah ich leider nur mit dem NetMon, nicht via Profiler. Der SQL-Server unterbricht dann sofort die Ausführung des aktuellen Batches. Aus dem Batch wird kein weiterer Befehl ausgeführt. Auch kein ROLLBACK, dass in einem CATCH-Block im SQL-Batch enthalten ist. Die Transaktion bleibt einfach offen. Damit hatte ich nicht gerechnet.

Daher muss man in der Fehlerbehandlung der Anwendung immer mal noch einen SQL-Befehl über die Connection schicken, selbst wenn die Transaktion komplett als Batch an den SQL-Server geschickt wurde. Das geht beispielsweise mit einem bedingten ROLLBACK:

IF @@TRANCOUNT > 0 ROLLBACK;

Ausprobiert haben wir ODBC und ADO.net. Bei beiden war es so. Bei ODBC mag es ja meistens noch gereicht haben die Connection einfach zu beenden, was zu einem Rollback führt. Bei ADO.net reicht das normalerweise nicht. Hier ist der bedingte ROLLBACK-Befehl fast immer nötig, weil bei ADO.net in der Regel Connection-Pooling verwendet wird: eine geschlossene Verbindung wandert zurück in den Pool, sie wird nicht wirklich geschlossen. Erst beim Rausholen aus dem Pool wird zum Zweck des Recycling ein "Reset" auf der Connection abgesetzt, dass alle Optionen zurücksetzt, Transaktionen schließt und Sperren freigibt. Diese Kombination kann dazu führen, dass Zombi-Sperren sehr lange gehalten werden und zu einem hübschen Blockierungsproblem führen… 😉

20. Juli 2009 um 21:03

verschiedene Timeouts bei der Abfrageausführung

Anlässlich einer aktuellen Frage fand ich dern Artikel "DBAs quick guide to timeouts – Watch your timeouts". Hier werden die verschiedenen Time-Outs beschrieben, die bei der Ausführung einer SQL-Abfrage am SQL-Server auftreten können:

  • ASP Script Timeout
  • COM+ Transaction Timeout
  • ADO Connection Timeout
  • ADO Command Timeout
  • SQL – Query Governor cost limit reached
  • SQL – Lock Timeout
  • SQL – Query Wait

Das fand ich richtig nützlich.

15. Juli 2009 um 20:54

Vortrag: SQL Server 2008 – ein Überblick für Entwickler

Neben der SQL-Pass, gibt es in Nürnberg auch eine recht rege .net-User-Group: dodned

Am 21.7. veranstalten sie um 20 Uhr den Vortrag "SQL Server 2008 – ein Überblick für Entwickler" :

Ähnlich wie es beim SQL Server 2005 der Fall war, bringt auch der SQL Server 2008 wieder eine ganze Vielfalt an Neuerungen und zusätzlichen Features mit sich. Insbesondere werden neben den traditionell von einer Datenbank unterstützten Datentypen mit dem SQL Server 2008 auch neue Datentypen für das Handling von unstrukturierten Daten und von Geodaten eingeführt. Dieser Vortrag gibt einen Überblick über die Neuerungen und Ideen für Anwendungs- und Einsatzmöglichkeiten. Der Schwerpunkt liegt dabei auf dem Thema "Beyond Relational".

Nähere Informationen finden sich hier. Das Thema ist gut, der Referent ist gut, kein Eintritt: Interessenten also besser mal hingehen!

9. Juli 2009 um 18:25

SQL Azure: Aus Raider wird Twix

Wer sich fragt, was denn nun SQL Azure ist, der kann sich beruhigt zurück lehnen. Da hieß bis gestern noch "Microsoft SQL Services". Aus "SQL Database Services" wurde in dem Zuge dann auch gleich "SQL Azure Database". Ehrlich gesagt fand ich das schon lange überfällig. Langsam blickte ja doch keiner mehr durch. Jetzt erkennt man wenigstens gleich am Namen in welche Ecke das gehört…

Details findet man hier.

Eigentlich könnte Microsoft auch gleich die unsäglichen Namen anderer Neuerungen im Datenbankbereich ändern: Master Data Services oder Self Service Analysis.