Glorf.it

Glorf IT

Bedenkliches aus dem IT-Alltag

27. März 2007 um 18:47

Power-Tools für DB-Pro

Ich tobe mich gerade etwas mit der "Visual Studio Team Edition for Database Professionals" (DBPro) aus. Da kommt mir die Ankündigung, dass es bald Power-Tools für DBPro geben soll, ganz gelegen. Die komplette Liste steht in der MSDN.

Meine Favoriten sind:

  • "SP Rename Generation" – damit kann man das Refactoring-Skript auch in einem Trafo einsetzen.
  • "Data / Schema Compare Build Tasks" – der Compare endlich auch als Batch. Das finden die MS-ler selber so gut, dass die es glatt doppelt nennen.
  • "Dependency Tree" – die Abhängigkeiten als Grafik

Leider wird kein Datum angegeben…

The following Power Tools are planned to be delivered in the future and some will be included in future versions of Visual Studio Team System.

14. Februar 2007 um 20:35

Testdaten generieren

Im Dr. Web Weblog wurde vor einiger Zeit mal der Data Generator beschrieben. Damit kann man sich für einzelne Tabellen Testdaten generieren lassen. Das funktionierte schon ganz gut, verschiedene "Typen" sind möglich. Im Typ "Mailadresse" kam bei meinem Test aber ein Semikolon vor.

Das erinnert mich daran, dass ich mich am liebsten sofort mit den Unit-Test für Stored-Procedures beschäftigen würde, die im Rahmen der "Visual Studio 2005 Team Edition for Database Professionals" angeboten werden. Für diese Tests bietet das Werkzeug ebenfalls eine automatische Test-Daten-Generierung an. Einfach traumhaft.

Details werden im Abschnitt "Data Generation" des Artikels "What Microsoft Visual Studio 2005 Team Edition for Database Professionals Can Do for You" beschrieben.

9. Januar 2007 um 19:42

Management-Studio: Datei-Dialog anpassen

Heute habe ich mir mal angesehen, wie man im "SQL Server Management Studio" (SSMS) beim Dialog zum "Datei öffnen" die Icon-Bar auf der linken Seite mit seinen eigenen Lieblingslinks "enhancen" kann: Neben dem "Desktop" und "MyProjects" beispielsweise noch "Schulungen" und "Skript-Pool" (siehe Bild).
Ich fand leider noch keine Möglichkeit das mittels eines Optionsdialogs zu tun, aber mein Freund RegMon konnte helfen.

File Open

Aber man kann sich recht einfach eine REG-Datei erstellen und darin die eigenen Vorstellungen umsetzen. Hier ein Beispiel, um obiges Ergebnis zu erreichen:

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\90\Tools\Shell\Open Find\Places\UserDefinedPlaces]
"Show"="1"

[HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\90\Tools\Shell\Open Find\Places\UserDefinedPlaces\Places1]
"Name"="Schulungen"
"SortAscending"=dword:00000001
"Path"="d:\\schulungen"

[HKEY_CURRENT_USER\Software\Microsoft\Microsoft SQL Server\90\Tools\Shell\Open Find\Places\UserDefinedPlaces\Places2]
"Name"="Skript-Pool"
"SortAscending"=dword:00000001
"Path"="E:\\MyProjects\\SQL-Scripts"

Die Datei steht auch zum Download bereit. Bitte Inhalt anpassen und dann die Endung in "Reg" umbenennen.

Anleitung: obigen Inhalt in eine Text-Datei schreiben, den eigenen Wünschen anpassen, speichern. Die Datei in "irgendwas.REG" umbenennen und Kontextmenü "Zusammenführen" ausführen.
Falls es nicht klappt, könnte das daran liegen, dass von Ihrem Browser die geraden doppelten Anführungszeichen nicht richtig dargestellt wurden und beim Copy&Paste falsch rüber kamen. In diesem Fall bitte die Beispiel-Datei speichern und verwenden.

Wenn man das hinterher mittels RegEdit ändern oder löschen will, dann ist eine Sicherung der Registry Pflicht! An dieser Stelle muss ich einfach einen Hinweis auf meinen Kollegen geben, der bei geöffnetem RegEdit mit seiner Orange herumspielte. Plötzlich entglitt sie ihm und rollte so unglücklich von links oben nach rechts unten über die Tastatur, dass sie zuerst über DEL und später auch über J und SPACE rollte. Aus Gründen des Anstands nenne ich keinen Namen.
Danach war die Registry sehr aufgeräumt.

Update: Mein Kollege wies mich darauf hin, dass ich den Sachverhalt völlig falsch dargestellt habe. Es handelte sich in Wirklichkeit um einen großen Pfirsich. Er vermutet, dass eine Orange gar nicht die nötige Masse aufgebracht hätte, um so viel Schwung zu bekommen, möchte seine These aber nicht austesten…
🙂

Wenn man wirklich will, hier noch ein Hinweis: Nach dem ersten Aufruf verschwindet der Wert "Path" und wird durch "Pidl" ersetzt. Will man den Pfad nachträglich ändern, dann muss man "Pidl" löschen und einen neuem "Path" eintragen. Wenn man neben den Einträgen "Name", "Path", etc, weitere benötigt, dann kann man sich an den Tipps im Dokument zu Office orientieren.

Standard-Dialoge der anderen Anwendungen

Wenn man hingegen die Standard-Dialoge der anderen Programme verändern will, dann geht das (etwas eingeschränkt) mit dem Common dialog im "TeawkUI für XP" (aus den PowerToys). Wer selbst Hand anlegen will, kann sich ja mal den Registry-Key
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\comdlg32\PlacesBar ansehen.

Wenn man den Dialog in Microsoft Office verändern will, dann findet man bei Microsoft im Artikel "How to customize the My Places bar in both the Open and the Save As dialog boxes in Office" Rat.

Wie es beim Visual-Studio geht, schreibe ich morgen. Ich muss jetzt los…

28. Dezember 2006 um 17:25

SQL2005: TableDiff

Selbst wenn man sich die neue DevStudio-Edition "DBPro" (inkl. der netten Werkzeuge) nicht leisten mag/kann und einem die 180-Tage-Testversion zu groß ist, dann muss man nicht auf die Funktion TableDiff verzichten.

Dieses kleine Programm kommt mit dem SQL-Server-2005 mit und ist eigentlich für die Replikation gedacht. Es steht unter ":\Programme\Microsoft SQL Server\90\COM\tablediff.exe" zur Verfügung. Damit kann man den Inhalt einer Tabelle intelligent von einer DB in die andere kopieren.

Es bietet auch die Möglichkeit, einen echten Diff zwischen zwei Tabellen durchzuführen, auch zwischen 2000 und 2005. Im folgenden Beispiel habe ich der Übersichtlichkeit halber die Befehlszeile umgebrochen:

"C:\Programme\Microsoft SQL Server\90\COM\tablediff.exe"
-sourceserver "MyBigPC\MyYukon" -sourcedatabase "Northwind"
-sourceschema "dbo" -sourcetable "Orders"
-sourceuser sa -sourcepassword samplepwd
-destinationserver "MyBigPC\MyLittleSQL" -destinationdatabase "Northwind"
-destinationschema "dbo" -destinationtable "Orders"
-destinationuser sa -destinationpassword samplepwd
-f
Microsoft (R) SQL Server Replication Diff Tool
Copyright (C) 1988-2005 Microsoft Corporation. All rights reserved.

User-specified agent parameter values:
-sourceserver MyBigPC\MyYukon
-sourcedatabase Northwind
-sourceschema dbo
-sourcetable Orders
-sourceuser sa
-sourcepassword samplepwd
-destinationserver MyBigPC\MyLittleSQL
-destinationdatabase Northwind
-destinationschema dbo
-destinationtable Orders
-destinationuser sa
-destinationpassword samplepwd
-f

Table [Northwind].[dbo].[Orders] on MyBigPC\MyYukon and Table [Northwind].[dbo].[Orders] on MyBigPC\MyLittleSQL are identical.
The requested operation took 0,46875 seconds.

Wenn ein Unterschied besteht, dann sieht der Output so aus:

Table [Northwind].[dbo].[Orders] on MyBigPC\MyYukon and Table [Northwind].[dbo].
[MyOrders] on MyBigPC\MyLittleSQL have 26 differences.
Fix SQL written to DIFFIX.633029232857656250.sql.
Err OrderID Col
Src. Only 11052
Src. Only 11053
Src. Only 11054
Src. Only 11055
Src. Only 11056
Src. Only 11057
Src. Only 11058
Src. Only 11059
Src. Only 11060
Src. Only 11061
Src. Only 11062
Src. Only 11063
Src. Only 11064
Src. Only 11065
Src. Only 11066
Src. Only 11067
Src. Only 11068
Src. Only 11069
Src. Only 11070
Src. Only 11071
Src. Only 11072
Src. Only 11073
Src. Only 11074
Src. Only 11075
Src. Only 11076
Src. Only 11077
The requested operation took 0,296875 seconds.

Und in der "Fix-Datei" steht dann (gekürzt):

-- Host: MyBigPC\MyLittleSQL
– Database: [Northwind]
– Table: [dbo].[Orders]
SET IDENTITY_INSERT [dbo].[Orders] ON
INSERT INTO [dbo].[Orders] ([CustomerID],[EmployeeID],[Freight],[OrderDate],[OrderID],[RequiredDate],[ShipAddress],[ShipCity],[ShipCountry],[ShipName],[ShippedDate],[ShipPostalCode],[ShipRegion],[ShipVia]) VALUES ('HANAR',3,67,2600,'1998-04-27 00:00:00.000',11052,'1998-05-25 00:00:00.000','Rua do Paço, 67','Rio de Janeiro','Brazil','Hanari Carnes','1998-05-01 00:00:00.000','05454-876','RJ',1)
INSERT INTO [dbo].[Orders] ([CustomerID],[EmployeeID],[Freight],[OrderDate],[OrderID],[RequiredDate],[ShipAddress],[ShipCity],[ShipCountry],[ShipName],[ShippedDate],[ShipPostalCode],[ShipRegion],[ShipVia]) VALUES ('PICCO',2,53,0500,'1998-04-27 00:00:00.000',11053,'1998-05-25 00:00:00.000','Geislweg 14','Salzburg','Austria','Piccolo und mehr','1998-04-29 00:00:00.000','5020',NULL,2)

INSERT INTO [dbo].[Orders] ([CustomerID],[EmployeeID],[Freight],[OrderDate],[OrderID],[RequiredDate],[ShipAddress],[ShipCity],[ShipCountry],[ShipName],[ShippedDate],[ShipPostalCode],[ShipRegion],[ShipVia]) VALUES ('RATTC',1,8,5300,'1998-05-06 00:00:00.000',11077,'1998-06-03 00:00:00.000','2817 Milton Dr.','Albuquerque','USA','Rattlesnake Canyon Grocery',NULL,'87110','NM',2)
SET IDENTITY_INSERT [dbo].[Orders] OFF

Wenn man auch Unterschiede in den Datensätzen ("auf Spaltenebene") sehen will, dann ist die Option "-c" interessant.

Nützlich, oder?

19. Dezember 2006 um 22:00

Entwicklungsvorgehen mit DBPro

Mir gefällt am DBPro (Visual Studio Team Edition for Database Professionals) einfach unheimlich gut, dass man damit jetzt endlich auch in der Microsoft-Welt so Datenbanken entwickeln kann, wie man es mit der Software macht: offline, lokal getestet, archiv-unterstützt und im Team.

So ist es von MS gedacht:

  • Man richtet pro Datenbank ein Projekt ein, dass an das Archiv (z.B. Team System) angebunden wird. Vorhandene Datenbanken können ganz leicht importiert werden.
  • Man bearbeitet seine Datenbank ohne direkt in einer konkreten Datenbank rum zu wurschteln, wie man es mit dem "Enterprise-Manager" (Friede seiner Asche) oder dem "Managament-Studio" machen würde.
  • Trotzdem hat man Syntax-Check und Konsistenz-Check für bspw. Stored-Procedures. Alle Fehler im Projekt werden in einer Übersicht angezeigt, vergleichbar mit dem Ergebnis eines Compilerlaufs.
  • In einem "Build"-Lauf kann man sich die Skripte zur Erstellung der Datenbank "from the scratch" zusammenbauen lassen, die man entweder selber mit sqlcmd.exe einspielen kann oder
  • mit einem "Deploy" gleich ausführen kann. Dann wird auf dem in den Projekt-Properties angegebenen Server die DB angelegt.
  • Dann kann man alles mit den Unit-Tests für SQL testen und nötigenfalls nachbessern.
  • Testdaten kann man sich dazu automatisch generieren lassen.
  • Ist man fertig, dann werden alle Änderungen ins Archiv übernommen und stehen für jeden zur Verfügung.
  • Um bestehende Datenbanken auf den neuen Stand zu transformieren, kann man sich Delta-Skripte erstellen lassen: zwischen zwei DBs oder zwischen zwei Ständen im Archiv oder zwischen einem Archiv-Stand und einer konkreten DB.

Einfach klasse, oder?

OK, nicht alles was glänzt ist gold und natürlich ist das eine 1.0er-Version. So habe ich auch schon ein paar Verbesserungswünsche auf der Platte, aber an dieser Richtung kommt man nicht mehr so leicht vorbei.

Siehe auch DBPro aka Data Dude Version 1.0 verfügbar mit Infos zur Entstehung
12. Dezember 2006 um 21:42

Forum für DBPro-Fragen

Notiz an mich selber:

Für die "Visual Studio Team Edition for Database Professionals" (DBPro) gibt es Forum mit reger Beteiligung der Entwickler. Dort kann man erst mal Fragen stellen und muss nicht gleich Mails an Gert Drapers Himself schreiben!

8. Dezember 2006 um 22:22

DBPro aka Data Dude Version 1.0 verfügbar

Hurra! Seit heute steht die Version 1.0 der "Visual Studio Team Edition for Database Professionals" in der MSDN zum Download bereit!

Man kann entweder die komplette DVD runter laden (sofern man eine MSDN-Subscription hat) (etwa 3 GB) oder falls man die "Visual Studio Team Suite" installiert hat, einfach die kostenlose x-Tage-Testversion installieren (20MB). Die Installation erkennt, dass man eine volle Lizenz hat und installiert damit auch die volle Version.

Es ist kein Upgrade der Projekte vor CTP6 möglich, man muss dann ein neues Projekt anlegen und die Files "en bloc" importieren. Mein mit CTP7 angelegtes Projekt wurde beim Öffnen automatisch von einem Wizzard transformiert. Danach ging alles wie vorher. Naja, vermutlich besser, aber ich hatte nicht so viel Zeit um die Feinheiten auszuprobieren.

Ich finde es spannend, was Gerd Drapers zur Entstehung schreibt:

It truly feels great to build a product from incubation to release within a year! 10358 check-ins; 315 daily builds; 7 CTP's; 19 developers, 14 testers; 4 program managers; 3 managers and one "DataDude" is what it took to get here. It has been a fun ride, but it ain't over, the "DataDude" is far from being done, there are many exciting new things coming your way. So please keep the feedback coming, we have and will continue to incorporate your feedback and requests in to the product, because we build this product only for you!

aus Data Dude : v1.0 RTM

Hier gibt es übrigens jede Menge Links zu dem Thema:
Database Professional Team Center