Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

30. Juli 2008 um 00:10

Paul Randal antwortet

In der neuesten Ausgabe des TechNet Magazine August 2008 beantwortet Paul Randal wieder ein paar interessante Fragen:

  • Wie kann ich eine 2005er Datenbank auf einen 2000er SQL-Server transportieren? (Export/Import)
  • Wann nutzt Partitionierung?
  • Welche Konsistenzprüfungen eignen sich wann?

Ich fand das ganz interessant. Hier steht es.

Außerdem gibt er noch Tipps für eine effektive Datenbankwartung. Dieser Artikel enthält echte Hardcore-Infos für den angehenden SQL-Server-Fachmann. Wer diesen Artikel nicht liest ist selber schuld…

30. Juli 2008 um 00:08

SQL-Server-2008 versus Oracle-11g

Als ich auf das Whitepaper von Microsoft stieß war ich natürlich ungeheuer gespannt welches System bei diesem neutralen und unabhängigen Vergleich besser anschneidet… 😉

"SQL Server 2008 Compared to Oracle Database 11g"

Die große Überraschung steht schon in der Zusammenfassung: SQL-Server ist in allen Punkten besser.

Microsoft SQL Server has steadily gained ground on other database systems and now surpasses the competition in terms of performance, scalability, security, developer productivity, business intelligence (BI), and compatibility with the 2007 Microsoft Office System. It achieves this at a considerably lower cost than does Oracle Database 11g.

Schade, dass hier nicht wenigstens im Ansatz eine differenzierte Betrachtung durchgeführt wurde. Die hätte mich tatsächlich interessiert. Man hätte ja wenigstens erwähnen können, das Oracle auf mehr Plattformen läuft. Stattdessen wird "Windows-Server-2008 versus Linux" auch gleich mit in den Vergleich einbezogen. Vermutlich gibt es auch noch ein paar andere Dingen in denen Oracle die Nase vorn hat.

Meiner Ansicht nach eignet sich das Papier nur dafür Pluspunkte zu sammeln, falls man sich nachträglich für seine Entscheidung für SQL-Server rechtfertigen muss.

22. Juli 2008 um 18:56

Auf welchen Systemen läuft der SQL-Server?

Neulich stellte ich doch die Frage, ob der SQL-Server auch auf den neuen Netbooks läuft… Wie sich herausstellte ist das zwar eigentlich eine technische Frage, die aber juristisch beantwortet werden kann…

Im Handbuch zum SQL-Server-2005 sind mehr oder weniger genau die die Voraussetzungen für einen Support beschrieben:

Die SQL Server 2005-Software kann auf Hardware ausgeführt werden, die für die Verwendung des Betriebssystems Microsoft zertifiziert ist. Weitere Informationen zu der für die Verwendung mit dem Betriebssystem Windows zertifizierten Hardware finden Sie auf dieser Microsoft Website: Products Designed for Microsoft Windows – Windows Catalog and HCL (in Englisch).

Wenn man dem Link folgt, dann sieht man, dass zum Beispiel der HP 2133 (mit VIA CPU) für Windows XP designed wurde und daher der SQL-Server darauf supported wird. Details hier (der Inhalt ist nur sichtbar, wenn man einen politisch korrekten Browser aus Sicht von Microsoft einsetzt). Der Asus Eee PC (mit Intel Atom CPU) ebenfalls, er steht nur unter einen anderen Category.

Ob dabei dann aber Fehler auftreten oder nicht, muss man aber wohl selber herausfinden. Ich sehe schon wie die armen Softwarenentwickler ihre Chefs bearbeiten, um solche Testgeräte anschaffen zu dürfen. 😉

21. Juli 2008 um 18:35

Windows-Logo-Zertifikat mit SQL-Server erst ab CU8

Ich musste mich nun etwas mit dem Windows-Logo-Zertifikat beschäftigen. Daher fiel mir heute ins Auge, dass es da mit dem SQL-Server ein Problem gibt. Das betrifft freilich nur Firmen, die ihre Software zertifizieren wollen.

Das Problem ist im Artikel "FIX: SQL Server 2005 Express Edition cannot pass the Windows logo certification when you install an ISV application on a Windows Vista-based computer or on a Windows Server 2008-based computer" beschrieben: Wenn eine Software den SQL-Server (Express-Edition) mitbringt, dann fällt sie durch den Windows-Logo-Test. Erst ab CU8 besteht der SQL-Server diesen Test…

Spannend, oder?

18. Juli 2008 um 18:32

Der ist von uns…

Als ich heute mal wieder die aktuellen KB-Artikel zum SQL-Server checkte fiel mir der Artikel ins Auge: "FIX: When you use SQL Native Client to retrieve data from a column of the sql_variant data type in SQL Server 2005, an incorrect data type is returned".

Der Fehler ist von uns. Sogar das Repro ganz unten ist von uns! Mein Kollege Erich hat den Hotfix durchgeboxt…

17. Juli 2008 um 20:29

SQL-Server mit Solid-State-Disks

Neulich las ich in dem SQL-Server-Magazin den sehr interessanten Artikel "Solid State Storage For SQL Server " (frei zugänglich). Dort wird beschrieben in welchen Situationen sich Solid-State-Disk lohnen. Die Tipps stammen meist aus einem Artikel von dem genannten Hersteller. Die Tipps leuchten mir teilweise ein (z.B. TempDB und Tranlogs auf die SSDs).

Deswegen habe ich mal geschaut, wie weit die Technologie ist. Und ich war sehr erstaunt. Das scheien ja echte RAID-Systeme zu sein. Beispiel ist die "RamSan-500". Das sagt der Hersteller darüber:

The World's Fastest Storage®
Cached Flash RAID for the Enterprise.
1TB to 2TB Flash RAID.
16GB to 64GB DDR Cache.
100,000 random I/Os per second sustained (reads from flash)
2 GB per second sustained bandwidth (to flash)
Full array of hardware redundancy to ensure availability.

Leider fand ich keine aktuelle Angabe was so ein Teil wohl kosten könnte. Vor fast einem Jahr war das der Preis:

Until now, a RamSan-400 cost approximately $90,000 for a base unit with 128GB of RAM–more than $700 per gigabyte. A RamSan-500 in a 2TB configuration, however, can be purchased for less than $300,000, which is $150 per gigabyte.

Selbst wenn sich der Preis inzwischen halbiert haben sollte, dann bewegt sich das noch in solchen Regionen, dass unsere Kunden sich das sicher nicht kaufen werden…

15. Juli 2008 um 18:48

Beiträge in 5-Sekunden-Intervallen zusammenfassen

Gestern fragte mich meine Kollegin Olga nach einem Trick, wie man Datensätze, die in 5-minütigen Intervallen eingefügt wurden mittels GROUP-BY gruppieren kann. Die Frage gefällt mir unheimlich gut, weil sie mit SQL-Server-2005 nur mit ein paar Kniffen zu lösen ist. Man muss das Datum und Uhrzeit nach relevanten Teilen aufsplitten und die Minuten ganzzahlig durch 5 dividieren. Danach muss man dann gruppieren.

Weil ich gerade keine Testtabellen zur Hand habe, nehme ich einfach die Views sys.objects, die in jeder SQL-Server-Datenbank (ab Version 2005) drin ist:

SELECT
CONVERT(nvarchar(12), modify_date, 104) AS "date",
DATEPART(hh, modify_date) AS "hour",
DATEPART(mi, modify_date) AS "minute",
CAST((DATEPART(ss, modify_date)/5)*5 AS NVARCHAR(2))
+' – '+CAST(((DATEPART(ss, modify_date)/5)+1)*5-1 AS NVARCHAR(2)) AS "5 seconds interval",
COUNT(*) AS "num"
FROM sys.objects
GROUP BY
CONVERT(nvarchar(12), modify_date, 104),
DATEPART(hh, modify_date),
DATEPART(mi, modify_date),
DATEPART(ss, modify_date)/5

So finde ich es noch etwas hübscher:

SELECT
date,
hour,
minute,
CAST((second/5)*5 AS NVARCHAR(2))
+' – '+CAST(((second/5)+1)*5-1 AS NVARCHAR(2)) AS "5 seconds interval",
COUNT(*) AS "num"
FROM (SELECT
CONVERT(nvarchar(12), modify_date, 104) AS "date",
DATEPART(hh, modify_date) AS "hour",
DATEPART(mi, modify_date) AS "minute",
DATEPART(ss, modify_date) AS "second"
FROM sys.objects) AS Int
GROUP BY
date,
hour,
minute,
second/5

Natürlich ist das ohne WHERE-Bedingung ziemlich langsam. Aber auch mit kann es nicht besonders schnell sein, weil erst eine Funktion ausgeführt werden muss, bevor die Gruppierung durchgeführt wird. Will man es schnell haben, dann muss man die einzelnen Bestandteile in eigene Spalten legen und einen (clustered) Index darauf legen.

11. Juli 2008 um 18:30

SQL: Paging

Als uns letzte Woche Darius Parys das neue Entity-Framework von Microsoft vorstellte, warfen wir auch einen Blick auf das (unter der Haube) produzierte SQL. Dabei viel mir auf, dass dort das Paging-Problem – Die Daten werden in Häppchen von SQl-Server angefordert und gelesen – mittels ROW_NUMBER gelöst wird. Das ist natürlich ein sehr pragmatischer Ansatz, der aber nur dann wirklich performant klappen kann, wenn auf dem Ordnungskriterium (meist dem Schlüssel) auch wirklich der Clustered-Index liegt. Die Variante von Microsoft war jedenfalls erheblich komplizierter als der gängige, deswegen kann ich den auch nicht auswendig hinschrieben.

In der Regel würde ich aber sowieso empfehlen den Clustered-Index aber eher auf fachliche Kriterien zu legen, damit alle Datensätze, die zugleich bearbeitet werden auf den gleichen (oder benachbarten) Datenseiten liegen. Damit ist aber fast jede Art des Paging auf den technischen Schlüsseln langsam.

Blöd ist natürlich auch, dass Einfügevorgänge seltsame Nebenwirkungen haben können. Wenn ich z.B. eine "Seite" von Daten am Bildschirm sehe und dann eine Minute später die zweite abrufe, dann bekomme ich als ersten unter Umständen Sätze angezeigt, die ich schon auf der ersten Seite sah, wenn inzwischen Datensätze eingefügt wurden. Dito beim Löschen, nur umgekehrt. 🙂

Bei uns werden daher meistens die letzten IDs gespeichert und dann die danach folgenden Daten abgerufen. Mit TOP kann man dann steuern, wie viele man bekommen möchte. Wie gesagt, auch sollte wenigstens ein Index auf den Schlüssel liegen, am besten ein Clustered…

Tom Rizzo von Microsoft schlug uns 2002 hingegen vor, dass wir zu dem Zweck zwei verschachtelte TOPs verwenden, was auch wieder nur dann schnell ist, wenn der Index stimmt. 😀

10. Juli 2008 um 21:56

XML im SQL-Server: Links zum Thema

Als ich Dienstag Abend den Vortrag "XML im SQL-Server" hielt, machte mich Klaus auf eine gute Einsteiger-Serie zum Thema XML aufmerksam: Die Webcasts von Dirk Primbs und Frank Fischer.

Hier noch ein paar Links, falls sich jemand autodidaktisch einarbeiten will:

Viel Vergnügen beim Stöbern!

9. Juli 2008 um 20:56

SQL-Server: DBCC findet nicht alle Probleme

Vor einigen Monaten diskutierten wir mit Microsoft, weil unsere Kunden mehrere defekte Datenbanken hatten, die "unsere" Prüfung mittels DBCC CHECKDB nicht als defekt erkannte. Wenn ein Zugriff auf die Spalten über einen Index erfolgte, dann kam eine Fehlermeldung. Das passiert immer dann, wenn eine Statistik korrupt ist.

Wir wollten, dass die Kollegen in Redmond das DBCC so erweitern, dass diese Probleme ebenfalls erkannt werden. Stat dessen haben sie das verhalten jetzt im KB-Artikel 954467 beschrieben. Den Trick mit dem DBCC SHOW_STATISTICS verrieten sie uns damals nicht, aber so richtig doll ist das ja auch nicht. Eine echte Prüfung wäre schon schöner… 😉

7. Juli 2008 um 00:10

Nürnberg: XML mit SQL-Server

Morgen am 8.7.2008 gibt es in Nürnberg aktuelle Infos zu XML im SQL-Server. Den Vortrag halte ich. Er wird von der SQL-Pass Franken veranstaltet, der örtlichen SQL-Server-Anwendergruppe. Ich bringe jede Mange BEispiele zu vielen verschiedenen Aspekten mit. Welche Themen ich dann vertiefe, entscheiden wir vor Ort.

Wie immer ist der Eintritt kostenlos und hat auch sonst keine unangenehmen Nebenwirkungen. Bisher waren die Referenten sehr gut, aber natürlich kann jede Serie einmal abreißen… 😉 Aber wenigsten so interessant wie die Infos des Referenten sind in der Regel die Erfahrungen/Diskussionsbeiträge der Teilnehmer! Danach gibt es immer genug Möglichkeiten um sich auszutauschen und Kollegen kennen zu lernen.

Weitere Infos gibt es hier.

5. Juli 2008 um 12:49

Security-Hotfix für SQL-Server

Erstmals seit Juli 2003 gibt es wieder einen Security-Hotfix für den SQL Server. Der Fehler wird aber nicht als "critical", sondern bloß als "important" eingestuft. Wenn ich es richtig sehe, dann ist jede Version des SQL-Servers betroffen, die noch unterstützt wird! Die Liste seht im Dokument "Microsoft Security Bulletin Advance Notification for July 2008" im Abschnitt "Affected Software". Das Problem besteht darin, dass jemand sich höhere Rechte erschleichen kann, als er sollte ("Elevation of Privilege").

Die Detailinformationen wird Microsoft leider erst am 8.7.2008 veröffentlichen. Bei ENTmag.com fand ich dennoch schon einige Details:

The first important fix addresses an elevation-of-privilege problem in SQL Server. Hackers can gain back-door access into the database and change fields to configure user access parameters, giving themselves superuser or unlimited access to run amok on a network.

In the last week of June, Redmond issued a security advisory pertaining to certain components of SQL Server, citing a recent "escalation in a class of attacks targeting Web sites" and using the database application as an incursion vector. […]

The SQL patch affects Windows 2000 Service Pack 4 and Windows Server 2003 (SP1 and SP2), including 64-bit editions. Windows Internal Database (WYukon) is also affected as the patch relates to all versions of Windows Server 2008 except for Itanium-processor-based systems.

Das klingt so richtig garstig. Schade, dass damit die Serie der Jahre ohne Security-Hotfix für SQL-Server gebrochen ist. Echt sch…