Wie gehe ich als DBA beim Übergang von Oracle zu SQL Server vor?

32

Ich bin ein Oracle DBA, der auch Sybase-Erfahrung hat.

Was sind die wichtigsten architektonischen und konzeptionellen Unterschiede zwischen den beiden RDBMS-Plattformen?

Eine Antwort ähnlich der SQL Server-> Oracle Frage hier wäre am nützlichsten sein.

Philᵀᴹ
quelle
3
bisschen Humor (sorry wenn OT), hast du getroffen? dba.stackexchange.com/questions/9765/…
booyaa

Antworten:

49

Ich habe in den letzten Jahren zwischen der Arbeit an Oracle und SQL Server gewechselt und einen Klappentext geschrieben, wie man hier den umgekehrten Weg beschreitet . Es gibt eine Reihe von idiomatischen und architektonischen Unterschieden und verschiedene Begriffe werden von den Anbietern und Entwicklern / DBA-Communities, die die einzelnen Produkte umgeben, unterschiedlich verwendet.

Physikalische Architektur

SQL Server organisiert verschiedene Dinge ein bisschen anders als Oracle und hat ein oder zwei Schlüsselkonzepte, die keine direkten Analoga in Oracle haben.

  • Eine 'Datenbank' ist ein separates Element in SQL Server mit eigenen Benutzerberechtigungen, Schemas / Namensräumen und Speicher. Wenn Sie mit Sybase vertraut sind, funktionieren sie aufgrund der gemeinsamen Ursprünge des Produkts ähnlich wie Datenbanken in Sybase.

  • Dateigruppen entsprechen in etwa Tabellenbereichen, obwohl sie für eine Datenbank lokal sind.

  • Ein Schema unterscheidet sich von einem Datenbankbenutzer in SQL Server, obwohl Benutzer ein Standardschema haben können.

  • MVCC funktioniert in SQL Server etwas anders. Es ist eine relativ neue Funktion, bei der verschiedene Kopien einer Zeile beibehalten werden, bis die Sperren der alten Version aufgehoben werden. SQL Server hat keine direkte Entsprechung zu einem Rollback-Segment. In SQL Server-Datenbanken ist es standardmäßig nicht aktiv.

  • Tempdb wird in SQL Server viel häufiger verwendet. Das System verwendet es für temporäre Tabellen und Zwischenergebnisse von Verknüpfungen. Mehr zu Tempdb später.

  • Die Tabellenpartitionierung ist etwas umständlicher als bei Oracle. Sie müssen eine Partitionsfunktion einrichten, die einen Partitionsschlüssel aus dem erstellt, was Sie bereitstellen, und dann ein Partitionsschema über diese Partitionsfunktion erstellen. Das Partitionsschema verhält sich ein bisschen wie eine Dateigruppe, indem Sie die Tabelle im Partitionsschema erstellen.

    Um Partitionen ein- und auszutauschen, müssen Sie eine Einschränkung für eine leere Tabelle in der richtigen Struktur einrichten. Die Einschränkung stellt sicher, dass die Partitionsschlüsselwerte für die Partition geeignet sind, in die Sie wechseln möchten.

  • Materialisierte Ansichten werden in SQL Server als indizierte Ansichten bezeichnet. Die GROUP BYKlausel hat einen CUBEOperator, und die Dokumentation spielt auf eine Funktion zum Umschreiben von Abfragen an. Diese Funktionalität ist jedoch nicht gut dokumentiert und möglicherweise nicht besonders ausgereift. YMMV.

  • SQL Server unterstützt keine autonomen Transaktionen, obwohl es ein zweiphasiges Festschreiben über XA- oder OLEDB-Transaktionsprotokolle unterstützt.

  • Clustered-Indizes unterscheiden sich geringfügig von indexierten Tabellen in Oracle, da nicht alle Spalten in der Tabelle für die Teilnahme am Clustered-Index erforderlich sind. Sie werden in der SQL Server-Architektur viel häufiger verwendet als IOTs in Oracle.

  • SQL Server unterstützt das Abdecken von Indizes, verfügt jedoch nicht über Verknüpfungsindizes. Bitmap-Indizes werden nicht unterstützt, obwohl es einen Operator für Indexschnittstellen / Sterntransformation gibt, mit dem Schnittmengen berechnet werden können, ohne die Faktentabelle zu treffen.

  • Sequenzen sind eine relativ neue Erweiterung von SQL Server. Traditionell werden automatisch inkrementierte Schlüssel über Identitätsspalten erstellt. Sie können Werte in eine Identitätsspalte über laden set identity_insert on.

Programmierung

Idiomatisches T-SQL weist einige Unterschiede zu idiomatischem PL / SQL auf. Es funktioniert so unterschiedlich, dass einige der paradigmatischen Unterschiede genauer erklärt werden müssen.

  • T-SQL hat kein Konzept für ein Paket. Alle gespeicherten Prozeduren und Funktionen in einer Datenbank befinden sich in einem gemeinsamen Namespace, obwohl Schemata verwendet werden können, um dies aufzulösen, und der Namespace lokal für eine Datenbank ist.

  • Machen Sie sich ein Bild davon, wie temporäre Tabellen verwendet werden, und SELECT INTO. T-SQL-Code, der tatsächlich einen Cursor benötigt, ist ziemlich selten anzutreffen. Mit temporären Tabellen können Operationen in Schritte unterteilt werden, die mit festgelegten Operationen ausgeführt werden können. SELECT INTOin tempdb wird nur minimal protokolliert, und es wird auch in bestimmten Wiederherstellungsmodi in Benutzerdatenbanken nur minimal protokolliert. Daher ist es genauso schnell wie der Abfrageoperator, der ein zwischenzeitliches Verknüpfungsergebnis beibehält.

    Idiomatic T-SQL verwendet temporäre Tabellen in der Art von Rollen, die Sie in PL / SQL als Cursorvariablen sehen würden, nutzt jedoch Set-Operationen viel stärker. Temporäre Tabellen können jedoch einen ziemlich stumpfen Code ergeben. Gehen Sie daher vorsichtig vor.

  • Das Systemdatenwörterbuch war in älteren Versionen viel stumpfer als das von Oracle, in SQL Server 2005 wurde es jedoch viel besser. Obwohl die von Microsoft bereitgestellten Tools eine ganze Menge Introspection-Funktionen im SSMS-Explorer enthalten, lohnt es sich, Ihre Kenntnisse zu erweitern Weg um das Datenwörterbuch. Es unterscheidet nicht zwischen ALL, USERund DBABlick auf die DB - Objekte, though.

  • In SSMS ist ein Abfrageplan-Viewer integriert.

  • Bezeichner in T-SQL-Code können mit [] in Anführungszeichen gesetzt werden und können alle Arten von Müll enthalten, wenn sie in Anführungszeichen gesetzt werden. Wenn wir aber Sie fangen eine Spalte ‚Direkt / Transfer‘ nennen, wir werden Ihren Darm herausreißen.

  • SQL Server verfügt über Fensterfunktionen (seit 2005 IIRC), sodass Sie jetzt innerhalb von Gruppen bestellen, Summen ausführen und dergleichen können.

  • T-SQL hat keine direkte Entsprechung zu CONNECT BY, obwohl die Rekursion über rekursive CTEs erfolgen kann.

  • Wenn Sie Code schreiben müssen, der datenbankübergreifend ist (im Gegensatz zu Schemata in einer Datenbank), sollten Sie öffentliche Synonyme verwenden, um die Objekte als Alias ​​für etwas Lokales zu verwenden, und auf die Aliase im Code verweisen. Dadurch werden fest codierte Abhängigkeiten von Datenbanknamen vermieden.

  • Wenn Sie fest codierte Abhängigkeiten von Datenbanknamen vermeiden, können Sie mit Datenbanken problemlos mehrere Umgebungen auf demselben Server verwalten.

  • Einige Dinge, wie z. B. benutzerdefinierte Aggregatfunktionen, können nur mit CLR-Sprocs implementiert werden. Wenn Sie sich aus einem Transaktionskontext entfernen möchten (z. B. um eine autonome Transaktion für die rollbacksichere Fehlerprotokollierung vorzutäuschen), können Sie einen CLR-Sproc verwenden, da er eine lokale Verbindung außerhalb des aktuellen Transaktionskontexts herstellen kann.

Sicherheit

Anmeldungen werden auf der SQL Server-Instanzebene definiert, aber jede Anmeldung wird keiner oder mehreren Datenbanken als 'Datenbankbenutzer' zugeordnet. Berechtigungen können sowohl Anmeldungen (Server) als auch Benutzern (Datenbank) zugewiesen werden, in einer Datenbank werden jedoch normalerweise Rollen verwendet. Benutzer gehören zu Rollen, Berechtigungen werden Rollen zugewiesen. SQL Server 2012 fügt Serverrollen hinzu.

  • SQL Server 2012 führt ein Konzept mit der Bezeichnung "teilweise enthaltene Datenbanken" ein, mit dem Benutzer- und Rolleninformationen lokal in dieser Datenbank gespeichert werden können.

  • Innerhalb einer Datenbank ist das Konzept von Benutzer und Schema getrennt. Ein Benutzer oder eine Rolle kann einem Schema zugewiesen werden, und ein Schema besitzt Datenbankobjekte.

  • Die Windows-Authentifizierung verwendet Anmeldeinformationen im Hintergrund, um einen Benutzer auf einem Computer oder einer Domäne bei einer SQL Server-Anmeldung zu authentifizieren. Die IIRC-Unterstützung ist für Oracle optional.

  • Eine besondere Rolle, 'dbo' (kurz für 'Datenbankeigentümer'), hat eine Art Superuser-Privileg innerhalb einer bestimmten Datenbank. Jede Datenbank hat eine "Dbo" -Rolle und Benutzer können der "Dbo" -Rolle in einer bestimmten Datenbank zugewiesen werden.

  • Es gibt auch ein Standardschema 'dbo'. Objekte gehören möglicherweise dem DBO-Schema. Objekte, die von Benutzern mit der Rolle "DBO" (oder systemweiten Administratorberechtigungen) erstellt wurden, gehören standardmäßig dem DBO-Schema, sofern nicht ausdrücklich ein anderes Schema angegeben wird.

  • Sicherheitsinformationen werden bei einer Sicherung einer einzelnen Datenbank nicht aufbewahrt. Benutzer müssen und Rollen müssen explizit auf dem Server konfiguriert werden, auf dem die Sicherung wiederhergestellt wird. Mit SQL Server 2012 können Benutzer- und Rollendaten mit einer neuen Funktion "Teilweise enthaltene Datenbanken" lokal in einer Datenbank gespeichert werden.

  • In SQL Server 2005 können gespeicherte Prozeduren im Sicherheitskontext des Aufrufers, des Erstellers, des Besitzerschemas oder eines angegebenen Benutzers ausgeführt werden.

  • In einer Ansicht auf SQL Server basieren die Berechtigungen für zugrunde liegende Tabellen auf den Berechtigungen des Schemas, dem die Ansicht gehört. Benutzerberechtigungen für die zugrunde liegenden Tabellen sind nicht an der Sicherheit beteiligt, obwohl eine Ansichtsdefinition Filter enthalten kann, die Informationen aus der Sitzung abrufen. In Oracle können sich die Benutzerberechtigungen für die zugrunde liegenden Tabellen abhängig von der Konfiguration der Berechtigungen auf die Ansicht auswirken.

Überwachung und Abstimmung

TBA - Speicherarchitektur vs. SGA etc. in Oracle

Sicherung und Wiederherstellung

TBA

Werkzeug

Microsoft bündelt eine Reihe von Umgebungstools mit SQL Server. Einige der wichtigsten gelieferten Artikel sind:

  • SQL Server Management Studio (SSMS): Diese Funktion ähnelt SQL Developer unter Oracle. Sie bietet einen Editor und eine Codeausführungsfunktion. Einige nützliche Funktionen umfassen einen Datenbankobjekt-Browser und einen Abfrageplan-Viewer.

  • SQL Server Analysis Services (SSAS): Dies ist ein OLAP-Server, der sich vom Datenbankserver unterscheidet. Es verwendet eine eigene Abfragesprache (MDX) und API (XML / A) für die Client-Server-Kommunikation. Es kann nicht mit SQL abgefragt werden. SSMS verfügt über eine Funktion zum Bearbeiten von MDX- und unformatierten XMLA-Abfragen und zum Anzeigen der Ergebnisse. Ein Befehlszeilen-Abfragetool namens ASCMD.EXE wird ebenfalls mitgeliefert.

  • SQL Server Reporting Services (SSRS): Dies ist ein webbasiertes Berichtstool zum Veröffentlichen von Berichten. Berichte können mit BI Development Studio (BIDS) oder Report Builder erstellt und in einem Webportal veröffentlicht werden. Der SSRS-Server selbst verfügt über eine Webdienst-API zum programmgesteuerten Verwalten des Servers. Beachten Sie, dass SSRS-Berichte Daten aus verschiedenen Quellen verwenden können, nicht nur aus SQL Server. Zum programmgesteuerten Verwalten von SSRS-Servern wird ein Befehlszeilentool mit dem Namen RS.EXE bereitgestellt.

  • SQL Server Integration Services (SSIS): Dies ist ein ETL-Tool, das mit SQL Server geliefert wird. In der Architektur unterscheidet es sich erheblich von OWB oder ODI, da es sich nicht um ein Tool zur Codegenerierung handelt. Die Laufzeitumgebung befindet sich clientseitig und kann sich auf einem anderen Computer als der Datenbankserver befinden. SSIS-Pakete können mit BIDS entwickelt und unabhängig mit einem Befehlszeilentool namens DTEXEC.EXE ausgeführt werden.

  • BI Development Studio (BIDS): Dies ist eine auf Visual Studio basierende Umgebung zum Entwickeln von Berichten, SSIS-Paketen und SSAS-Cubes. Wenn ein anderes VS-basiertes Entwicklungstool installiert ist (z. B. VS Professional), kann das Tool in eine einzelne Umgebung und eine gemeinsame Projektgruppierung integriert werden.

  • Massenkopie (BCP): Ein Befehlszeilen-Massen-Tool zum Einfügen / Extrahieren, das SQL * Loader ähnelt

  • SQLCMD: Ein Befehlszeilen-Abfragetool ähnlich wie SQL * plus

  • SQL Profiler: Ein Ablaufverfolgungs- und Profilerstellungstool, mit dem Ablaufverfolgungsinformationen von SQL Server, SSAS und anderen Tools der Suite erfasst und ausgewertet werden können.

  • SQL Server-Agent: Ein Dienstprogramm zur Auftragsplanung, mit dem regelmäßige Aufträge einer anderen Art ausgeführt werden können.

Betroffen vonTunbridgeWells
quelle
1
Unter T-SQL im Vergleich zu PL / SQL: T-SQL hat keine unterschiedlichen Programmierkontexte wie PL / SQL, sodass Sie reine SQL- und T-SQL-Anweisungen frei mischen können. Beispielsweise können Sie eine TRUNCATE TABLE ...parallele DML ausführen, ohne dass Sie das Äquivalent von ausführen müssen EXECUTE IMMEDIATE. In T-SQL können Sie SELECTneben anderen Operationen auch Ergebnismengen an den Client zurückgeben , während Sie in PL / SQL die Ausgabe von s in eine Tabelle oder ein anderes Ziel leiten müssenSELECT . In Oracle kann nur reines SQL eine Ergebnismenge an den Client zurückgeben.
Nick Chammas
1
Beachten Sie auch, dass gespeicherte Prozeduren, deren Name mit "sp_" beginnt, besonders behandelt werden. Nennen Sie Ihre gespeicherten Prozesse nicht so, es sei denn, Sie portieren eine Systemprozedur von einer neueren Version von SQL Server. Sie können dies technisch nutzen, um datenbankweite gespeicherte Prozeduren zu erstellen. Dies wird jedoch nicht empfohlen, da zukünftige Versionen möglicherweise eine neue gespeicherte Systemprozedur mit demselben Namen erstellen.
Kevin Cathcart
1
Lohnt es sich, hier etwas über die Sperreneskalation hinzuzufügen? Ich denke, es wäre eine Überraschung, wenn Oracle-Leute unbegrenzte Reihen-Level-Sperren
Jack Douglas,
8

Unser Hauptprodukt funktioniert sowohl auf SQL Server als auch auf Oracle. Hier sind einige andere Unterschiede, die wir umgehen mussten, und es ist möglicherweise sinnvoll, Folgendes zu beachten:

  • Das Handling von Datum und Uhrzeit ist sehr unterschiedlich: Unterschiedliche Präzisionen, unterschiedliche Funktionen

  • Leere Zeichenfolgen sind in Oracle NULL und nicht in SQL Server

  • Der Umgang mit Zeichenkodierung und Unicode ist sehr unterschiedlich. In SQL Server können normale ( varchar) oder Unicode ( nvarchar) Spalten in derselben Datenbank gemischt werden. In Oracle entscheiden Sie auf Datenbankebene, welche Art der Codierung verwendet werden soll.

MiMo
quelle
Oracle ermöglicht auch das Mischen von char / varchar2- und nchar / nvarchar2-Typen mit zwei verschiedenen Codierungen - siehe Unicode-Zeichen können auf zwei Arten in einer Oracle-Datenbank gespeichert werden .
George3