Dienstag, April 23, 2013

Oracle-Funktionalitäten im SQL Server nachbilden

Bei der Arbeit mit dem SQL Server ist mir dieser Tage wieder einmal klar geworden, was für eine tolle Datenbank der Oracle Server doch ist... Hier eine kurze Liste mit Oracle-Funktionalitäten, die ich mir zuletzt im SQL Server 2008 mit mehr oder minder plausiblen Verfahren nachbauen musste:
  • Autonome Transaktionen: brauchte ich, um Nachrichten in eine Log-Tabelle zu schreiben und dafür zu sorgen, dass diese Informationen ein Rollback der umgebenden Transaktion überstehen. Im SQL Server kann man zu diesem Zweck einen loopback linked server einrichten. Dazu liefert Dmitry Tolpeko eine instruktive Anleitung.
  • External Table mit Preprozessor: hätte ich gerne verwendet, um die Dateien eines OS-Directories aufzulisten, wie ich es gelegentlich hier skizziert habe. Im SQL Server scheint mir die plausibelste Alternative die Verwendung einer c#-Assembly und einer CLR table valued function zu sein, wie sie Diana Moldovan beschreibt.
  • Sequences: im SQL Server 2012 gibt es Sequences, aber in älteren Versionen muss man sie durch eine (Identity-)Spalte in einer Hilfstabelle emulieren, wie Rohit Khare zeigt. Beim parallelen Zugriff auf diese handgefertigten Sequenzwerte kommt man allerdings - je nach Vorgehen bei der Implementierung - recht schnell zu deadlocks.
  • Robuster csv-Import: wieder ein Fall für External Tables - und natürlich hat der SQL Server auch ein paar bewährte Verfahren zur Integration von csv-Daten (BCP, BULK INSERT und diverse DTS/SSIS-Mechanismen). Im Fall relativ einfacher Definitionen sind die SQL Server Varianten völlig ausreichend (und im ersten Moment zugänglicher als die External Tables), aber bei etwas komplexeren Fällen fehlen mir ein paar nützliche Features (z.B. OPTIONALLY ENCLOSED BY).
Ich will natürlich nicht ausschließen, dass es für einige dieser Punkte noch geeignetere Lösungen gegeben hätte, aber für meine Zwecke sind die workarounds erst mal ausreichend.

Kommentare:

  1. Zu (2) gibt's in SQL Server 2012 eine recht nette Funktionalität FileTable
    http://msdn.microsoft.com/en-us/library/ff929144.aspx

    AntwortenLöschen
  2. Danke für den Hinweis - sieht interessant aus. Ich nehm's als Bestätigung meiner Theorie, dass die großen RDBMS immer stärker konvergieren. Davon abgesehen scheint der SQL Server 2012 ziemlich viel Neues zu bringen.

    AntwortenLöschen