Overblog
Folge diesem Blog Administration + Create my blog
Blog von Olaf Helper

Microsoft SQL Server JDBC Driver 2.0 Community Technology Preview (January 2009)

30. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #Download MSSQL

Den JDBC Treiber in der Version 2.0 gibt es als CTP unter

http://www.microsoft.com/downloads/details.aspx?FamilyID=f914793a-6fb4-475f-9537-b8fcb776befd&DisplayLang=en

zum Download.

Weiterlesen

Free eBook: Microsoft SQL Server 2005 Integration Services

30. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #Free eBooks

Microsoft stellt noch ein weiteres Buch „Microsoft SQL Server 2005 Integration Services“ von Paul Turley, Joe Kasprzak, Scott Cameron, Satoshi Iizuka und Pablo Guzaman über 464 Seiten kostenlos im PDF Format zur Verfügung; vorausgesetzt man meldet sich zuvor über seine Windows Live-ID an:

https://profile.microsoft.com/RegSysProfileCenter/wizard.aspx?wizid=198603d0-b25b-442e-9f79-a4e7ed848c7b&lcid=1033

Weiterlesen

CeBit 2009: Forum-Bi-Bpm

30. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #Event

Im diesem Jahr findet die CeBit zwischen dem 03. – 08. März 2009 wie immer in Hannover statt.
Auch dieses mal gibt es wie in den vergangenen Jahren das spezielle Forum „Business Intelligence / Business Prozessmanagment“ mit diversen Vorträgen und Kurzseminare für Fachbesucher rund ums Thema Business Intelligence.

Links:
Forum BI-BPM

CeBit 2009

Weiterlesen

Free eBook: Mastering SQL Server Profiler

29. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #Free eBooks

Redgate bietet ein weiteres eBook “Mastering SQL Server Profiler“ von Brad McGehee (vorerst) kostenlos zum Download im PDF Format an:
 

http://www.red-gate.com/products/SQL_Response/offers/mastering_sql_profiler_ebook.htm?utm_source=ssc&utm_medium=blogpost&utm_content=profiler200901&utm_campaign=sqlresponse


Einfach nur dem Link „Download just the eBook“ folgen.

Weiterlesen

SQL Server 2008 System Views Map

29. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Wer nicht weiß, wie er sein Büro tapezieren soll:

Microsoft hat das Poster „SQL Server 2008 System Views Map“ im PDF und XPS Format veröffentlich. Die Fläche eines kleinern Büros dürfte das schon abdecken.

http://www.microsoft.com/downloads/details.aspx?FamilyID=531c53e7-8a2a-4375-8f2f-5d799aa67b5c&displaylang=en

Bisher konnte ich das PDF noch nicht ohne Fehler runter laden, nur das XPS

Weiterlesen

Free eBook: Introducing Microsoft SQL Server 2008

29. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #Free eBooks

Microsoft stellt kostenlos das Buch „Introducing Microsoft SQL Server 2008“ von Peter DeBetta, Greg Low und Mark Whitehorn im PDF Format zur Verfügung; vorausgesetzt man meldet sich zuvor über seine Windows Live-ID an:

http://csna01.libredigital.com/?urss1q2we6
Weiterlesen

Massendaten zwischen Tabellen schieben

28. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

Preisfrage: Wie verschiebt man in einer MS SQL Server Datenbank quasi im Bruchteil einer Sekunde mal eben ein paar Millionen Datensätze von einer Tabelle (Partition) in eine andere? BULK COPY vielleicht?
Das „Zauberwort“ heißt ALTER TABLE … SWITCH

 ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name
SWITCH [ PARTITION source_partition_number_expression ]
TO target_table
[ PARTITION target_partition_number_expression ]

 

Stellen wir uns mal folgendes Szenario vor:

Man hat ein Datawarehouse, lädt über einen ETL-Prozess Massendaten in eine Staging-Tabelle und modelliert die Daten so wie man sie dann final benötigt. Nun müssen „nur noch“ die Daten in die eigentliche Tabelle rüber.

Durch INSERT INTO … SELECT kann man sie rüber kopieren. Kopieren bedeutet dabei aber auch, dass man für einen Zeitraum die Daten doppelt hat und den entsprechenden doppelten Speicherplatz braucht, mit den LOG sogar das 3fache. Zudem beansprucht das je nach Menge entsprechend Zeit, in der es dann entsprechende Sperren auf der Tabelle gibt.

Dabei hat man die Daten doch schon in der Datenbank. Hier kommt die mit MS SQL Server 2005 eingeführte Option SWITCH PARTITION beim ALTER TABLE ins Spiel. Es biegt eigentlich nur die Zeiger der Datenseiten von der Quell- auf die Zieltabelle (Partition) um; verständlicherweise muss deshalb das Ziel leer sein.

Wie funktioniert das nun in der Praxis? Gehen wir es mal anhand eines Beispieles durch; Script siehe unten. Zunächst legen wir eine neue Datenbank (kann auch in einer vorhandene erfolgen), sowie zwei identische Tabellen und füllen eine mit ein paar Daten. Möchte man es wegen der Performance mit mehr Daten testen, einfach die Schleife entkommentieren und die Anzahl der Loops anpassen.

Funktioniert doch super … und das sogar in der Express Edition (natürlich nicht mit Partitionen). Auf meinem einfachen Rechner dauert der SWITCH mit 100k DS ganz 90 ms.

Denkbare Einsatzszenarien sind z.B.:

 Datawarehouse, wie oben beschrieben

-  Faktentabelle Aktuell / Archivtabelle mit Partitionen über Zeitdaten (z.B. Jahr/Monat). Möchte man den zuletzt abgeschlossen Monat ins Archiv verschieben => in der Tabelle neue Partition anlegen und SWITCH; fertig.

-  Tabelle in andere Dateigruppe verschieben: Tabelle mit identischem Design unter anderem Namen in der Zieldateigruppe anlegen, SWITCH, alte Tabelle löschen und neue Umbenennen.

 

 -- Demo für (Partition) SWITCH  
 SET NOCOUNT ON  
 USE [master]  
 GO  
 -- Leere DB mit Defaults anlegen  
 CREATE DATABASE [PartitionSwitch] 
 GO  
 USE [PartitionSwitch] 
 GO  
   
 --Zwei identische Tabellen mit PK+Index anlegen  
 CREATE TABLE SourceTable  
  (ID int NOT NULL PRIMARY KEY CLUSTERED,  
  Datum datetime NOT NULL,  
  String char(100) NOT NULL);  
 CREATE INDEX IX_SourceTable_ID ON SourceTable(String);  
   
 CREATE TABLE DestTable  
  (ID int NOT NULL PRIMARY KEY CLUSTERED,  
  Datum datetime NOT NULL,  
  String char(100) NOT NULL);  
 CREATE INDEX IX_DestTable_ID ON DestTable(String);  
 GO  
   
 -- Minibeispiel für schnellen Test  
 INSERT INTO SourceTable VALUES (1, GETDATE(), 'A') 
 INSERT INTO SourceTable VALUES (2, GETDATE(), 'B') 
 INSERT INTO SourceTable VALUES (3, GETDATE(), 'C') 
 -- Und/oder eine größere Anzahl Datensätze  
 -- Einfach nur entkommentieren 
 /*DECLARE @iLoop int; SET @iLoop = 4; 
 WHILE @iLoop < 100000 -- Hier Anzahl DS anpassen! 
 BEGIN  
  INSERT INTO SourceTable  
  VALUES (@iLoop, Getdate(), CONVERT(varchar, @iLoop));  
  SET @iLoop = @iLoop + 1  
 END 
 */ 
 GO  
 -- Einmal zur Kontrolle  
 SELECT 'SRC' AS T, COUNT(*) AS A FROM SourceTable UNION ALL  
 SELECT 'DST' AS T, COUNT(*) AS A FROM DestTable;  
   
 -- Nun der Switch; selbst mit 1 Mio Datensätze  
 -- geht es im Sekunden-Bruchteil, da nur die Seiterzeiger  
 -- umgebogen werden 
 SELECT GetDate(); -- Wie lange dauert es? 

ALTER TABLE SourceTable SWITCH TO DestTable;

 GO 
 SELECT GetDate(); 
 GO  
   
 -- Alles verschoben? Ja !!!  
 SELECT 'SRC' AS T, COUNT(*) AS A FROM SourceTable UNION ALL  
 SELECT 'DST' AS T, COUNT(*) AS A FROM DestTable;  
 GO  
 -- Index auch? Klaro (Ausführungsplan anschalten!) 
 SELECT String FROM DestTable WHERE String = '100';  
 GO  
   
 -- Aufräumen  
 DROP TABLE SourceTable;  
 DROP TABLE DestTable;  
 GO  
 USE [master];  
 GO  
   
 DROP DATABASE PartitionSwitch;  
 GO  
Weiterlesen

T-SQL Objekt-Definitionen durchsuchen

22. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

Bei Designänderungen Im MS Sql Server muss man alle eventuellen Seiteneffekte beachten, spricht man muss prüfen, welche Auswirkungen die Änderungen auf abhängige Objekte haben. Natürlich hat man alles gut dokumentiert, so dass man schnell herausfindet, welche Objekte eben abhängig von einem anderen sind.

Aber nur um ganz sicher zu gehen ;-), kann man die Objekt-Definitionen auch in der Datenbank per SQL durchsuchen lassen, schließlich muss der SQL Server es ja am besten wissen, wie was zusammenhängt.

Mit dem folgenden Script kann man das erledigt. Wie immer gibt es eine kleine Einschränkung, verschlüsselt angelegte Objekte, also die mit der Option ENCRYPTION, können natürlich nicht im Klartext durchsucht werden; CLR Assemblies erst recht nicht; ist logo.
 

 SELECT OBJ.name, OBJ.xtype, PAR.name AS Parent, 
  COM.Text 
 FROM sys.syscomments AS COM 
  INNER JOIN 
  sys.sysobjects AS OBJ 
  ON COM.id = OBJ.id 
  LEFT JOIN  
  sys.sysobjects AS PAR 
  ON PAR.id = OBJ.parent_obj 
 WHERE OBJ.xtype IN ('P ', 'TR', 'FN', 'V ') 
  AND COM.Text LIKE '%SalesPerson%' 
 ORDER BY OBJ.xtype, OBJ.name, PAR.name 

 

Ergebnis:



Hier noch eine zweite Variante, die das Systemview sys.sql_modules verwendet:

 -- Objektdefinition nach Begriffen durchsuchen 
 SELECT OBJSCH.name AS ObjectSchema, OBJ.name AS ObjectName, 
  OBJ.type_desc AS ObjectType, 
  PARSCH.name AS ParentSchema, PAR.name AS ParentName, 
  PAR.type_desc AS ParentType, 
  MOD.definition,  
  OBJ.create_date, OBJ.modify_date 
 FROM sys.sql_modules AS MOD 
  INNER JOIN sys.objects AS OBJ 
  ON MOD.object_id = OBJ.object_id 
  INNER JOIN sys.schemas AS OBJSCH 
  ON OBJ.schema_id = OBJSCH.schema_id 
  LEFT JOIN sys.objects AS PAR 
  ON PAR.object_id = OBJ.parent_object_id 
  LEFT JOIN sys.schemas AS PARSCH 
  ON PAR.schema_id = PAR.schema_id 
 WHERE MOD.definition LIKE '%SalesPerson%' 
 ORDER BY OBJ.name, PAR.name 

 

Weiterlesen

Beispiel & Sourcen zu Wrox-Büchern

21. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #MSSQL

Um mich in MS SQL Server - Analysis Services und MDX einzuarbeiten, hatte ich mich nach Büchern zum Thema umgesehen. Da ich unter den deutschsprachigen keins gefunden hatte, was mich ansprach, habe ich mir vom amerikanischen Verlag Wrox das Buch Buch „Professional SQL Server Analysis Services 2005 with MDX" gekauft.


Obwohl mein (Fach-) Englisch (noch) nicht unbedingt das Allerbeste ist, lässt es sich wirklich sehr gut lesen (und ich lerne so das fehlende Fachvokabular hinzu).
Sehr gut finde ich die Best-Practice Tipps und die Hinweise, was man besser nicht macht oder nur mit Vorsicht zu genießen ist, weil es Performance-Einbusen bringen kann.

Wen es interessiert, zu diesem und anderen Büchern des Verlages kann man frei die Beispiel & Sourcen herunter laden, für das meine hier.

Wenn man aus der Übersicht, z.B. der für den MS SQL Server, die Details öffnet, findet man i.d.R. oben den Link „Download Code"

Weiterlesen

Wer blockiert wen … oder wird es vielleicht bald?

21. Januar 2009 , Geschrieben von Olaf Helper Veröffentlicht in #T-SQL

In den letzten Wochen ist es ein paar mal vorgekommen, das ein User einen längeren Prozess angestartet hatte, der Client bzw. die Citrix-Session brach ab, der Prozess auf dem SQL Server blieb bestehen und blockierte durch seine Sperren andere. Bis Helpdesk die Session rausgesucht und zwangsweise beendet hat, geht doch etwas Zeit ins Land. Da habe ich schneller den Prozess auf dem MSSQL beendet, so dass der Betrieb weiter gehen kann.

Nur auch der „Aktivitätsmonitor“ vom Management Studio ist etwas sehr träge und in so einem Fall muss man genauso erst suchen, bis man den Verursacher gefunden hat.

Ein kleines T-SQL Script dazu ist effizienter und das Ergebnis lässt sich fix per <F5> aktualisieren. Es listet alle blockierten Prozess und alle mit einer offenen Transaktion auf; man bekommt also immer den Verursacher mit seinen "Opfern" zu sehen.

 
-- Welcher Process blockiert welchen Process und das ggf. rekursive
 -- Ebenso werden alle Processe mit offenen Transaction angezeigt, 
 -- die somit zur Blockade werden könnte. 
 SELECT PRO.spid, PRO.blocked, 
PRO.waitresource, PRO.waittime,
  PRO.last_batch, PRO.status, 
PRO.open_tran, PRO.hostname,
  PRO.program_name, PRO.loginame, 
DBS.name as DatabaseName
 FROM sys.sysprocesses AS PRO 
  INNER JOIN sys.sysdatabases AS DBS 
  ON PRO.dbid = DBS.dbid 
 WHERE PRO.blocked <> 0  
  OR PRO.open_tran > 0 
 ORDER BY PRO.blocked ASC, PRO.spid ASC 
Weiterlesen
1 2 3 > >>