Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

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… 😉

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).

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"… 🙂

11. Mai 2009 um 21:59

SQL-PASS Franken: Security

SQL-PASSBereits am morgigen Dienstag, am 12.5.2009, findet in Nürnberg wieder der nächste Vortrag der SQL-PAS Franken statt. Diesmal gehen wir auf Nummer "sicher".

Der genaue Titel lautet: "Sicherheitsketten im SQL Server – Rätsel gelöst?".
Sprecher ist der nicht ganz unbekannte Ralf Dietrich. Er ist Dank seiner vielen Vorträge und seiner Tätigkeit im Vorstand der SQL-PASS sehr bekannt. Über das Thema schreibt er selber:

Rätselhafte Einstellung: Datenbankübergreifende Besitzverkettung aktivieren?
Ja/Nein … was will der SQL Server hier von mir? Was verbirgt sich dahinter
und warum gibt es das auch innerhalb einer Datenbank? Wie kann ich es
nutzbar machen und welche Alternativen hat ein Entwickler? Welche
Fallstricke gilt es zur überwinden?

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… 😉

9. Mai 2009 um 22:36

Ist das ein deutscher oder englischer SQL Server?

Um automatisch entscheiden zu können welchen Service-Pack (SP) oder Cummulative-Update-Package (CU) man einspielen muss, muss man wissen, ob der SQL-Server ein deutscher oder englischer ist. Früher hatten wir es schon einfacher, weil wir da immer nur mit englischen SQL-Servern zu tun hatten, damals noch von Sybase. Seit dem Umstieg auf Microsoft setzen wir immer den korrekten, landessprachlichen SQL-Server ein: auf deutschem Windows ist ein deutscher SQL-Server und auf einem englischen ein englischer.

Das haben wir der Auskunft des Microsoft-Supports zu verdanken, dass sie immer nur die landessprachlichen Versionen des SQL-Servers auf den entsprechenden Windows-Systemen testen, aber keine Mixe, wie z.B. den englischen SQL-Server auf einem deutschen Windows. Und nur diese Kombinationen werden von ihnen supportet. Aber ich will nicht lamentieren, so ist es einfach. Wir testen schließlich auch nicht jede denkbare Kombination unserer Software mit verschiedenen Sprachversionen von Windows.

Um herauszubekommen, was für einen SQL-Server man vor sich hat, kann man die XP xp_msver verwenden. Sie gibt einem neben der Sprache (im Datensatz "Language") und Produktversion und sogar Product Key, auch Infos zum Windows-System aus (z.B. Hauptspeicher, Version, Anzahl Prozessoren). Um nur einen einzigen dieser Werte in eine Variable zu bekommen, die man dann auswerten kann, muss man das Result-Set in eine Tabellenvariable schreiben und dann gezielt auslesen, z.B. so:

DECLARE @MSVer TABLE (ID int, Name sysname, Internal_Value int, Value nvarchar(512));
INSERT @MSVer (ID, Name, Internal_Value, Value)
EXEC master.dbo.xp_msver N'Language';

SELECT Value AS [Language]
FROM @MSVer
WHERE Name = N'Language';

Lässt man die Optionsangabe hinter xp_msver weg, dann werden alle Optionen mit Wert ausgegeben.

PS: Habe ich schon erwähnt, dass diese XP jeder ausführen darf? Die Gruppe "public" hat Ausführungsrechte. Man könnte sich überlegen diese Rechte nicht jedem geben zu wollen… 😉

6. Mai 2009 um 21:04

"Lock Pages In Memory" als Feature der Standard Edition

Heute wurde ich auf den Artikel "Lock Pages In Memory in SQL Server Standard Edition" in WesleyB's Blog aufmerksam. Die Quintessenz ist, dass ab dem CU4 für SQL Server 2005 SP3 und ab CU2 für SQL Server 2008 SP1 auch in der Standard-Edition die Option "Lock Pages In Memory" mittels Trace-Flag erlaubt wird. Beide kummulativen Patches sollen im Juni erscheinen.

In dem Artikel sind auch ein paar gute Links auf weiterführende Artikel enthalten, wie z.B. der Erklärung des Features von Slava Oks: "Q and A: Using Lock Pages In memory on 64 bit platform " und "Be Aware: Using AWE, locked pages in memory, on 64 bit ". Beide finde ich sehr interessant, weil wir tatsächlich AWE auf Windows-64-Bit einsetzen.

4. Mai 2009 um 23:50

IDENTITY mit negativen Werten?

In einem MSDN-Forum beschwert sich ein Kollegen im Artikel "Bug in SQL Server 2008 SP1?" darüber, dass negative Identity-Inkremente nicht mehr gehen.

Ich muss zugeben, dass ich auf diese Idee gar nicht erst gekommen bin, weil ich IDENTITY schon ewig kenne. Und "früher" wurde immer um Eins rauf gezählt. Aber seit ein paar Versionen (SQL-Server-2005?) kann man ja den Seed und das Inkrement frei wählen. Freilich gehen dann auch negative Werte. Aber möglicherweise kamen die Entwickler genau so wenig auf diese Idee und vergaßen in der Doku zu schreiben, dass die Werte positiv sein sollen? Deswegen entspricht die Angabe von negativen Seeds und Inkrementen tatsächlich den Spezifikationen: In den Books-Online steht nicht drin, dass die beiden positiv sein müssen.

Es werden noch Wetten angenommen: Ist das ein Bug oder "works as designed"? Ich gehe im Zweifelsfall von Letzterem aus… 😉

PS: Ich habe hier daheim gerade keinen 2008er SQL-Server, daher habe ich nicht ausprobiert, ob da wirklich ein Bug kommt.

29. April 2009 um 23:41

Start in Minimalkonfiguration

Wir suchten dieser Tage eine gute Lösung für einen Supportproblem: Beim "Reconfigure" nach dem Ändern einer Konfigurationsoption kommt immer die Fehlermeldung, dass der SQL-Server das Recht "Lock Page in Memory" nicht habe.
Wenn man die Ursache erst mal kennt, dann ist die Lösung nahe liegend:
Vor Ort beim Kunden wurde "AWE enabled" eingeschaltet, dann viel später wurde der SQL-Server in einem anderem Benutzerkontext gestartet und dieser Benutzer hat nicht das Recht "Lock Page in Memory". Dann wird die Option beim Server-Start automatisch nicht als "Run-Value" gesetzt, aber als "Config-Value".

Wenn man nun irgendetwas anderes konfiguriert, dann bekommt man oben genannte FEhlrmeldung beim ausführen von "Reconfigure". Wenn man dann versucht das AWE auszuschalten, dann muss man dazu zunächst "show Advanced options" einschalten. Aber das geht nicht, weil ja schließlich das RECONFIGURE fehlschlägt. Was tun?

1. Abhilfe: Den User-Account das verlangte Recht geben. Das ist schnell erledigt, aber die Lösung ist ja viel zu einfach. Deswegen schauen wir uns die andere Lösung an:
2. Abhilfe: Den SQL Server mit dem Parameter "-f" ("minimal konfiguration") starten. Dann sind immer alle Konfigurationsoptionen zugänglich und man kann einfach "AWE enabled" ausschalten. Schon praktisch…