Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

8. Juli 2009 um 20:41

Gute Artikel zum Thema Service Broker bei Rusanu.com

Meine Kollege Matthias machte mich auf den Blog rusanu.com aufmerksam. Hier findet man recht tiefgehende Informationen zum Thema "Microsoft SQL Server". Remus Rusanu schreibt über sich selber:

I’ve been working professionally with databases since 1994. For more than 6 years I’ve been a developer with Microsoft, member of the SQL Server team in Redmond, WA.

I have hands-on real-life experience in troubleshooting some of the most difficult problems database deployments encounters. My troubleshooting approach is a methodological one rooted in experience and a deep understanding of how SQL Server works.

Nach der Lektüre einiger seiner Artikel glaube ich ihm. Er hat wirklich Ahnung von dem was er schreibt. Sein Steckenpferd scheint der SQL Service Broker zu sein…

7. Juli 2009 um 22:35

freie eBooks zu BI und VB

Klaus fand ein paar interessante eBooks zum freien Download, die ich im O-Ton gerne weitergebe:

Danke, Klaus!

5. Juli 2009 um 23:27

SQL-PASS Franken: Neuerungen in den Analysis Services 2008

SQL-PASSAm Dienstag, den 07.07.2009 um 18:30 Uhr, findet in Nürnberg der nächste Vortrag der SQL-PAS Franken statt. Stefanie Goss (plus-IT) berichtet uns über die Neuerungen in den Analysis Services 2008. Die offizielle Beschreibung liest sich so:

Bereits mit den Analysis Services 2005 können leistungsfähige Business Intelligence-Lösungen zur Analyse und Vorhersage erstellt werden.
Auch die multidimensionale Engine des SQL Server 2008 – Analysis Services 2008 – hat wiederum sehr interessante neue Werkzeuge und Features erhalten, die zum Teil erst auf dem zweiten Blick sichtbar werden.
Steffi Goss stellt in dem Vortrag neue Werkzeuge und ausgewählte Funktionalitäten der Analysis Services 2008 vor und zeigt wie sie sinnvoll genutzt werden können. Als Highlight werden folgende Themen angesprochen:

1) Dimensionen
- Änderungen im Assistenten zur Dimensions-Erstellung
- Erstellen der Attributsbeziehungen
2) Cubes
- Änderungen im Assistenten zur Cube-Erstellung
- Geänderter Aggregationsentwurf
- Erweiterte Eigenschaften bei benannten Mengen
3) Datamining
- Änderungen im Mininggenauigkeitsdiagramm
4) Features, die in künftigen Versionen nicht mehr unterstützt werden
5) Backup: interne Verbesserungen

Da in vielen Unternehmen die Analysis Services 2000 im Einsatz sind, werden die wichtigen Änderungen gegenüber den Analysis Services 2008 aufgezeigt:
1) Das UDM (Unified Dimensional Model)
2) Dimensionen mit Attributen und Hierarchien
3) Cubes
- mehrere Faktentabellen
- neue Aggregationsmöglichkeiten (Semiadditive Measures)
- Dimensionsverwendung
4) Bereitstellung der OLAP-Datenbanken auf dem Server

Gastgeber ist wieder einmal die plus-IT GmbH im Eurocom Center (Lina-Ammon-Str. 3, Gebäude 3 / 3. Stock, 90471 Nürnberg).

Und wie jedes Mal so ist auch diesmal der Eintritt frei, auch Nicht-Mitglieder sind herzlich eingeladen. Bitte dennoch bei Klaus Oberdalhoff unter kob(ät)sqlpass.de anmelden, damit er weiß, wie viele Stühle ungefähr benötigt werden.

24. Juni 2009 um 21:09

SQL Server 2008: eingeschränkter Single-User-Mode

Heute entdeckte ich zufällig ein extrem nützliches neues Feature in den Startup Options des "SQL Server 2008". Wer schon mal den SQL-Server im Single-User-Modus startete und dann mit dem "SQL Server Management Studio" (SSMS) eine Verbindung für ein Abfragefenster herstellte, der bekam vermutlich eine Fehlermeldung, dass nur eine Verbindung erlaubt sei. Diese eine mögliche Verbindung wird dann in der Regel vom Objekt-Explorer gehalten, den man dann erst mal schließen muss. Wenn man Pech hatte, dann war einem aber möglicherweise ein Kollege zuvorgekommen und der hatte nun die eine mögliche Verbindung.

Mit der Erweiterung der Option um den die Angabe zu den erlaubten Clients kann man das stärker einschränken. So kann man beispielsweise bestimmen, dass nur Verbindungen mittels "sqlcmd" möglich sein sollen: -m"sqlcmd"
Oder man legt fest, dass sich nur ein Abfragefenster aus den SSMS verbinden darf: -m"Microsoft SQL Server Management Studio – Query".

Das finde ich echt praktisch!

16. Juni 2009 um 22:07

SQL_Latin1_General_CP1_CI_AS versus Latin1_General_CI_AS

In der Diskussion "Server Collation SQL_Latin1_General_CP1_CI_AS versus Latin1_General_CI_AS" in der MSDN-Gruppe "Getting started with SQL Server" wird ein sehr fortgeschrittenes Thema behandelt. Weil ich mich damit auch schon das eine oder andere Mal beschäftigen musste, möchte ich hier meine Erkenntnisse festhalten.

Unicode oder nicht?

Der wichtigste Unterschied besteht darin, dass die alten SQL-Collations, wie SQL_Latin1_General_CP1_CI_AS nur für Nicht-Unicode-Zeichenketten gelten. Sollte ich für ein NVARCHAR-Feld einer Tabelle diese Collation wählen, dann wird sie nicht verwendet. In Wirklichkeit wird dann automatisch Latin1_General_CI_AS verwendet.

Gemeinsamkeiten

Die Collation wirkt sich auf die Sortierungen, also auch auf Indexe, und die Gleichheit aus.

  • Generell haben beide Collations gemein, dass sie sich nur um die Sortierung der Zeichen aus der Codepage 1252, genauer "Latin1", kümmern. Bei Unicode werden darin nicht vorkommenden Zeichen komplett außerhalb sortiert.
  • Das "CI" steht für "case insensitiv", also große und kleine Buchstaben als gleich behandelt werden.
  • Käme noch ein "_Pref" im namen vor, dann gälte das auch aber bei ansonsten völlig gleichen Wörtern würden die Großbuchstaben zuerst kommen.
  • Das "AS" besagt, dass Akzente berücksichtigt werden, und Umlaute nicht wie die Basisbuchstaben behandelt werden, also "a"<>"ä". Die Umlaute folgen in der Sortierung aber unmittelbar nach den Vokalen.
  • Kürzere Zeichenketten stehen in der Sortierung vor ansonsten bis dahin gleichen. Angehängte Leerzeichen werden ignoriert.

Die Unterschiede liegen im Detail

Latin1_General_CI_AS ist eine Collation, die für Unicode und Nicht-Unicode verwendet werden kann. Sie ist ziemlich nahe an der DIN 5007-1, aber nicht ganz identisch. So gilt beispielsweise "ä" <> "ae", aber wegen des Zusatz "AS" auch "ä"<>"a".
Die Sortierung von zusammengesetzten Wörtern (wie "Glörfeld & Co KG") und Zahlen weicht leider etwas von der Norm ab, aber das wird selten bemerkt. Die Bindestrich-Wörter sind hingegen richtig ("aa" < "a-a" < "ab"). Als Besonderheit gegenüber der ansonsten ähnlichen SQL-Collation seit erwähnt, dass "ß" als Ligatur definiert ist und dementsprechend mit "ss" als gleichwertig behandelt wird. Hier gibt es zwischen Beiden also keine Präferenz. Die Reihenfolge bei ansonsten gleichwertigen Zeichenketten ist daher zufällig. SQL_Latin1_General_CP1_CI_AS gilt ausschließlich für Nicht-Unicode-Strings. Hier gilt zudem "ss" wird vor "ß", aber "ß" vor "st" sortiert. Bei gibt es ein schönes Collation Chart, dass die Sortierung der ersten Zeichen darstellt. Man muss aber bedenken, dass die Sortierung auch vom Folgebuchstaben abhängen kann.

Server-Collation, Datenbank-Collation oder pro Feld?

Selbst wenn man das weiß, dann kann es einem doch versehentlich passieren… Wenn man beim Anlegen einer Tabelle nicht bei jedem Zeichenkettenfeld (CHAR, NCHAR, VARCHAR und NVARCHAR) die Collation explizit angibt, dann wird die aktuelle Default-Collation der Datenbank verwendet. Wenn man beim Anlegen einer Datenbank keine Collation explizit angibt, dann wird die aktuelle Default-Collation des Servers verwendet.

Der folgende SQL-Befehl ermittelt die Default-Collation eines SQL Servers:
select SERVERPROPERTY ( 'Collation') as "Collation"

Und so wird die Default-Collation der aktuellen Datenbank ermittelt:
SELECT CAST(DATABASEPROPERTYEX(db_name(), 'Collation') AS sysname) AS "Collation"

Collation ändern?

Wenn man die Collation der Felder ändern will, dann reicht es dementsprechend nicht, einfach die Datenbank-Default-Collation zu ändern. Das hat nur Einfluss auf danach angelegte Felder, die ohne explizite Angabe erstellt werden…
Um die Collation von bestehenden Feldern zu ändern, muss man zunächst alle Indexe auf die Zeichenketten entfernen, das gilt freilich auch für Primärschlüssel, Unique-Constraints, etc. Dann muss man mittels ALTER TABLE pro Feld die Collation ändern. Dann kann man die Indexe wieder anlegen.

Es versteht sich von selber, dass das verlustfrei nur mit Unicode-Feldern klappt… 😉

12. Juni 2009 um 23:04

SQL-PASS Franken: SQL Server 2008 für DBAs

SQL-PASSAm 16.6.2009, findet in Nürnberg der nächste Vortrag der SQL-PAS Franken statt. Diesmal berichtet uns Herr Oliver Goletz (Microsoft), Technologie- und Lösungsberater für Datenbanken & Business Intelligence, über Neuigkeiten der Administration des SQL Servers 2008.

Der Vortrag gibt einen Überblick über die neuen Möglichkeiten von SQL Server 2008 und wie sie genutzt werden können, um die Administration von SQL Server zu vereinfachen.

Schwerpunkt ist dabei das neue Policy-based Management, das eine richtlinienbasierte Konfiguration und Verwaltung von SQL Server-Instanzen ermöglicht, ähnlich wie Gruppenrichtlinien in Windows. Des Weiteren wird die Möglichkeit gezeigt mittels der neuen Performance Data Collection Leistungsdaten einer einzelnen SQL Server Instanz bis hin zu ganzen Servergruppen zentral zu sammeln und auszuwerten. Multi-Server-Administration, Activity-Monitor, ObjectSearch, IntelliSense und der neue integrierte T-SQL Debugger sind einige weitere wichtige Erweiterungen des Management Studios, die ebenfalls gezeigt werden. Zum Abschluss wird demonstriert, wie mit dem Resource Governor eine Priorisierung und explizite Zuteilung von Ressourcen für wichtige Datenbankanwendungen innerhalb einer Instanz realisiert werden kann.

Der SQL Server 2008 bietet viele neue Möglichkeiten zur Leistungsoptimierung, Änderungsverfolgung und Verschlüsselung, die in diesem Vortag vorgestellt werden. Den Anfang machen die neuen Verfahren zur Data und Backup Compression, welche die Möglichkeit bieten physikalischen Speicherplatz deutlich effizienter zu nutzen bei gleichzeitig höheren Leistungswerten. Mit Auditing und transparent Data Encryption werden die erweiterten Möglichkeiten zur Abdeckung aktueller Sicherheitsanforderungen vorgestellt. Zum Abschluss wird noch ein Einblick in die neue Powershell Integration von SQL Server gegeben und anhand eines Beispiels gezeigt, wie Richtlinien mittels Powershell gegen SQL Server 2000/2005 automatisiert werden können.

Naja, vielleicht gibt uns der Referent auch ein paar Einblicke in die Neuerungen des angekündigten "SQL Server 2008 R2". Mal abwarten…

Gastgeber ist wieder die plus-IT GmbH im Eurocom Center (Lina-Ammon-Str. 3, Gebäude 3 / 3. Stock, 90471 Nürnberg).

Wie immer ist der Eintritt frei, auch Nicht-Mitglieder sind herzlich eingeladen. Weil es bei dem Thema und Referenten garantiert sehr, sehr voll wird, bitte bei Klaus Oberdalhoff unter kob(ät)sqlpass.de anmelden, damit er weiß, ob die Stühle reichen. Wer zu spät kommt oder sich nicht anmeldet, muss eben stehen… 😉

11. Juni 2009 um 11:32

Interview mit Jim Melton

Mein Kollege Matthias machte mich gestern auf den Podcast mit einem Interview mit Jim Melton aufmerksam. Jim Melton gehört zum "Urgestein" von SQL. Er ist offiziell "SQL Specification Lead", d.h. Mitglied im SQL-Standardisierungsgremium, und das seit über 20 Jahren.

Vom Interview war ich ehrlich gesagt etwas enttäuscht. Möglicherweise ist es für Leute interessant, die noch nicht oder nur wenig von SQL wissen. Jim Melton hat sicher viel zu sagen, aber die Fragen sind doch sehr oberflächlich. Da hat man einen der SQL-Gurus und lässt sich bloß die grundlegenden Konzepte erklären… Schade.

Als ich Jim Melton erstmals wahrnahm, las ich seinen gemeinsamen Artikel "A Critique of ANSI SQL Isolation Levels" mit dem verschollenen Jim Gray aus dem Jahre 1995. Jim Melton war damals noch bei Sybase, jetzt ist er meines Wissens bei Oracle.

Die Uni Trier hat eine Liste seiner Bücher zusammengestellt.

2. Juni 2009 um 22:50

64-Bit OLEDB-Provider für Jet-Engine

Heute haben wir ziemlich lange nach einem 64-Bit OLEDB-Provider für die Jet-Engine gesucht. Kann es tatsächlich sein, dass es die Jet-Engine (und folglich dessen OLEDB-Provider) wirklich nur als 32-Bit-Version gibt? Das würde bedeuten, dass man keine 64-Bit-Software schreiben kann, die auf die Jet-Engine zugreifen kann. Kann doch gar nicht sein.

Aber an mehreren Stellen im Internet fand ich die gleiche Frage genau so beantwortet. Hier zum Beispiel.

Hintergrund ist übrigens, dass wir den SQL-Server an einer Stelle mittels OpenRowSet etwas in eine Access-Datenbank schreiben lassen. Der 64-Bit-SQL-Server verwendet dann freilich nur 64-Bit-OLEDB-Provider… 🙁

Update 3.6.2009: Im Artikel "Data Access Technologies Road Map" schreibt es Microsoft ganz deutlich: "There is no 64-bit version of the Jet Database Engine, the Jet OLEDB Driver, the Jet ODBC Drivers, or Jet DAO available." Und das ist sogar aktuell (OK, Stand Dezember 2008).

28. Mai 2009 um 22:41

Frage an das Orakel: Was wird aus MySQL?

In dem heutigen Artikel fragt die Computerwoche "Was wird aus MySQL?". Leider konnte ich keine neuen Fakten oder Äußerungen von Oracle oder Sun rauslesen. Dafür wird die aktuelle Situation sehr schön zusammengefasst. Falls es unter Euch Datenbanker gibt, die da noch nicht alle Details kennen, dann ist das Pflichtlektüre… 😉

16. Mai 2009 um 10:54

standardisierte Rechte generieren

Normalerweise sollen die Anwender nur über die vorgegebenen Schnittstellen Daten aus der Datenbank auslesen oder ändern. Daher arbeiten etliche Anwendungen über SQL-Funktionsuser oder Application-Roles. Wenn die Kunden aber einen Teil der Daten direkt lesen müssen, dann lohnt es sich dafür spezielle Views einzurichten, die quasi eine Schnittstelle liefern, die man über die Versionszyklen konstant halten kann, egal wie sich die zugrunde liegende Tabellenstruktur verändert. Dann kann man Datenbank-Rollen einrichten, die auf diese Views Zugriff haben. Zu Beginn der Woche diskutierten wir in einem Kurs, ob man die Rechte für die Gruppe dann automatisch generieren kann.

Wenn man die Views anhand des Names erkennen kann, dann ja. Dazu muss man die Systemtabellen auslesen und eine entsprechende Rolle anlegen. Die GRANT-Befehle kann man ganz einfach generieren. Dabei muss man nur beachten, dass seit SQL-Server-2005 immer "Schema.Name" angegeben wird, nicht mehr "Owner.Name":

SELECT N'GRANT SELECT ON ['+s.name+N'].['+o.name+N'] TO [Reader_Role] -- Owner: '
+user_name(ISNULL(o.principal_id,s.principal_id)) AS [SqlCmd]
FROM sys.objects AS o
JOIN sys.schemas AS s
ON (o.schema_id=s.schema_id)
WHERE o.type = 'V'
AND o.name LIKE 'Reader[_]%'

Im folgenden Beispiel wird auch noch die Rolle angelegt und der komplete SQL-Batch als Ergebnis geliefert:

SELECT [SqlCmd]
FROM (
SELECT 0 AS OrderNo, N'IF user_id(''[Reader_Role]'') IS NULL
CREATE ROLE [Reader_Role] AUTHORIZATION Thomas;' AS [SqlCmd]
UNION ALL
SELECT ROW_NUMBER() OVER (ORDER BY s.name+o.name) AS OrderNo,
N'GRANT SELECT ON ['+s.name+N'].['+o.name+N'] TO [Reader_Role]; – Owner: '
+user_name(ISNULL(o.principal_id,s.principal_id)) AS [SqlCmd]
FROM sys.objects AS o
JOIN sys.schemas AS s
ON (o.schema_id=s.schema_id)
WHERE o.type = 'V'
AND o.name LIKE 'Reader[_]%'
) AS T
ORDER BY OrderNo

Das Ergebnis muss man dann nur noch auffangen und von einem Benutzer mit ausreichenden Rechten ausführen lassen, z.B. dem Besitzer der Datenbank oder einen anderen DDL-Admin. Das sieht zum Beispiel so aus:

IF user_id('[Reader_Role]') IS NULL
CREATE ROLE [Reader_Role] AUTHORIZATION Thomas;
GRANT SELECT ON [Music].[Reader_Albums] TO [Reader_Role]; – Owner: Thomas
GRANT SELECT ON [Music].[Reader_Songs] TO [Reader_Role]; – Owner: Thomas
GRANT SELECT ON [Music].[Reader_Singers] TO [Reader_Role]; – Owner: Thomas

Viel Erfolg.

14. Mai 2009 um 21:48

Homepage des "Microsoft SQL Server 2008 R2"

Mein Kollege Markus machte mich heute darauf aufmerksam, dass der "Microsoft SQL Server 2008 R2" nun auch eine eigene Homepage hat. Dort findet sich neben der Beschreibung der Features auch ein Video und ein Notifikationangebot, das einem über das Erscheinen des CTP informiert.

In ihrem Beitrag "TechEd 2009; More SQL Server 2008 R2 News" schreibt Sheila Molnar, dass ihr Fausto Ibarra ("director of product management for SQL Server") als Freigabetermin des "Microsoft SQL Server 2008 R2" die zweite Hälfte 2010 sagte. Es bleibt also spannend, wann der Release kommt. Er nennt die Versionen übrigens einen "incremental release". Heißt das, dass der Update kostenlos ist? Mal abwarten… 😉

11. Mai 2009 um 22:11

SQL Server 2008 R2 noch in 2009?

Das schreibt Microsoft Deutschland. Aber was ist gemeint? Eigentlich war doch nur ein CTP im Herbst geplant und die Freigabe in 2010. Aber heute verschickte Microsoft über den Presseverteiler folgende Info:

Sehr geehrte(r) Herr Glörfeld,

auf der heutigen Tech Ed North America 2009 stellt Microsoft IT-Professionals und Entwicklern den Release Candidate des Windows Server 2008 R2 vor, dessen Client-Version gemeinsam mit Windows 7 entwickelt wurde.
[…]
Zusätzlich informierte Microsoft darüber, dass der SQL Server 2008 R2 (bisher unter dem Codenamen "Kilimanjaro" bekannt) in der zweiten Jahreshälfte 2009 verfügbar ist. Diese Version wird es den Nutzern möglich machen, bessere Entscheidungen durch automatisierte BI-Prozesse zu treffen.

Jetzt ist es also offiziell, das Kind heißt "SQL Server 2008 R2". Das erleichtert mich sehr. Der Name "SQL Server 2010", der gerade anfingt durch die Blogs zu geistern, hätte den Markt nur unnötig verschreckt. Mit einem Minor-Release ist aber alles in Ordnung, niemand muss mit Investitionen warten, sondern kann getrost weitermachen und sich auf die Neuerungen im Bereich BI freuen.

Bei darkreading.com steht hingegen, dass auf der heutigen TechEd lediglich ein CTP für den "SQL Server 2008 R2" in der zweiten Hälfte von 2009 angekündigt wurde. Ob da jemand bei der deutschen Presseabteilung dieses Detail nicht richtig mitbekommen hat? Auf dem SQL Server News Blog wird letztere Lesart bestätigt:

The first Community Technology Preview (CTP) of SQL Server 2008 R2 will be available in the second half of 2009 and we are on track to ship SQL Server 2008 R2 in the first half of calendar year 2010.

Dort werden auch die wesentlichen neuen Features des R2 beschrieben:

  • Master Data Services that provides information workers with a single authoritative data source to ensure the integrity of the data they use to make critical business decisions.
  • Application and Multi-Server Management that reduces the complexity of developing, deploying, and managing applications across multiple instances of SQL Server; a new central management point helps scale database management and identify consolidation opportunities.
  • Support for greater than 64 logical processors that provides customers with greater choice for delivering high performance and scalability and enables customers to take advantage of multi-core technologies.

Dann freuen wir uns mal auf den CTP des des "R2"… 🙂