Ich habe Oracle bis jetzt verwendet, wo:
- Instanz -> Prozess + Speicher
- Datenbank -> physische Datendateien
Normalerweise wird eine Instanz einer Datenbank zugeordnet. Innerhalb einer Datenbank kann es viele Tablespaces geben (System, Benutzer usw.).
Bei SQL Server bin ich mir jedoch nicht so sicher. Es scheint mir, dass für SQL Server eine Instanz = mehrere Datenbanken? Oder eine Instanz = mehrere Schemata?
In Oracle enthält eine Datenbank das System, sysaux, temporäre Tabellenbereiche und den Benutzertabellenbereich. Kurz gesagt, sowohl System als auch Benutzer befinden sich in derselben Datenbank.
In SQL Server scheint es eine Systemdatenbank zu geben, die mehrere Benutzerdatenbanken bedienen kann.
sql-server
oracle
tiongmaru
quelle
quelle
Antworten:
Ich bin ein DBA auf Oracle und SQL Server.
Die Verwirrung ist auf eine Nichtübereinstimmung der Semantik und eine zusätzliche Ebene in der SQL Server-Hierarchie zurückzuführen, aber es gibt noch mehr!
Beachten Sie, dass wir in beiden Fällen nur über Einzelinstanzdatenbanken sprechen (Wortspiel beabsichtigt).
Instanzen
In Oracle wird einer Instanz eine Speichermenge zugewiesen (SGA / PGA) und Prozesse erzeugt (smon, pmon dw0X usw.). Es gibt Systemansichten zur Überwachung aller Elemente, die erstellt und verwendet werden (V $ - und dba_-Ansichten).
Dies ist die Struktur, mit der wir im Orakel vertraut sind.
Und Sie haben es bereits erwähnt, in der Datenbank befinden sich die physischen Dateien. Normalerweise macht der Wechsel zu RAC den Unterschied deutlich.
In SQL Server funktioniert die Instanz auf die gleiche Weise: Es wird eine Menge Speicher zugewiesen, und es gibt Systemansichten (sys.), Um all diese Dinge zu überwachen.
Die Instanz verfügt über 4 Systemdatenbanken:
Die Systemdatenbank enthält Metadateninformationen für jede andere Datenbank in SQL Server.
Temp Raum
In Oracle:
Temporärer Tabellenbereich (temporären Tabellenbereich erstellen). In Oracle ist der temporäre Tablespace eine Überlaufzone für Vorgänge, die nicht in den PGA passen (Prozessspeicher, standardmäßig 200 MB (bis zu 11 g), Ihr Hash-Join beispielsweise, wenn mehr als 200 MB im temporären Tablespace verschüttet werden. Dies ist im Allgemeinen eine Ursache der langsam laufenden Abfrage).
In SQL Server befindet sich im Abschnitt "Systemdatenbanken" eine Tempdb-Datenbank, die sehr aktiv verwendet wird, viel mehr als in Oracle. Legen Sie es auf sehr schnelle Festplatten (SSD oder Glasfaser kommen in den Sinn)
Damit kommt der 2. große Unterschied:
Objekte
In SQL Server:
Die Objekte (Tabelle, Ansichten) sind nicht wie in Oracle an einen Benutzer gebunden, sondern an eine "Datenbank". Die "Datenbank" enthält (nicht eigene) die Objekte. Zum Zeitpunkt der Erstellung der Datenbank wird eine Datendatei zum Speichern dieser Objekte erwähnt.
Im Orakel:
Ein Benutzer erstellt Objekte, die in einem gleichnamigen Schema landen. Die sorgfältige Benennung der Benutzer wird wichtig.
Und hier kommt der 3. große Unterschied:
Sicherheit
Im Orakel:
Benutzer werden erstellt und erhalten zumindest das Recht, Sitzungen zu erstellen, damit sie auf Objekte zugreifen können, die ihnen gestattet wurden. Oder sie haben das Recht, Objekte in ihrem eigenen Schema (Ressourcenrolle) zu erstellen, die dann ein Schema in diesem Namen erstellen.
Sie können einen Tabellenbereich erstellen und ihn als Standard für jeden Benutzer festlegen, der Objekte erstellen kann. Wenn dies nicht getan wird, wird ein Standardtabellenbereich verwendet, im Allgemeinen "USER_DATA".
In SQL Server:
Da die Objekte keinem bestimmten Benutzer in einem Schema gehören, müssen zuerst Benutzer erstellt und dann Berechtigungen zugewiesen werden. In der Regel erhält jeder, der der Hauptbenutzer für die Objekterstellung ist, die Rolle "Eigentümer" für eine bestimmte Datenbank.
Dieser Benutzer in SQL Server entspricht dem Oracle eines Schemabesitzers, es kann jedoch mehr als einen Eigentümer geben.
Sicherheit ist der Punkt, an dem SQL Server über Oracle steht: Die Sicherheit von SQL Server kann an Active Directory gebunden werden, das die Desktopbenutzer verwaltet. Diese Desktop-Benutzer können an eine Benutzergruppe gebunden sein, die "schreibgeschützt" sagt. Es ist möglich, diese Active Directory-Gruppe zu SQL Server hinzuzufügen und ihr einen schreibgeschützten Zugriff auf Ihre Datenbank zu gewähren.
Wenn ein Benutzer Ihr Unternehmen verlässt, löscht der Active Directory-Administrator diesen Benutzer und der Zugriff auf die Datenbank geht ebenfalls verloren.
Oracle kann LDAP verwenden, aber seien wir ehrlich, es ist nicht sehr oft gut an die Windows-Desktop-Benutzer gebunden.
Der 4. große Unterschied.
Semantik
SQL Server verfügt über eine zusätzliche Ebene. In einer SQL Server-Datenbank können Objekte in Schemas organisiert sein. Schemata können auch Eigentümer haben. Es führt auch mehr Feinkornsicherheit ein, aber während es verwendet wird, ist es nicht üblich. Ich würde sagen, es ist auch empfehlenswert, Ihre Objekte zu Beginn der Entwicklungsphase nach Schema zu gruppieren, um später bei Bedarf von zusätzlichen Sicherheitsfunktionen zu profitieren.
Protokolle / Archivierte Protokolle
Schließlich funktionieren archivierte Protokolle in Oracle und SQL Server unterschiedlich. In SQL Server wird für jede Datenbank eine Protokolldatei erstellt, während in Oracle der Archivprotokollmodus auf Instanzebene aktiviert ist.
Hier verschwimmt die Linie. Für einige Aspekte sind die SQL Server-Datenbanken tatsächlich Datenbanken. In anderen Fällen ähneln sie eher Schemata.
Die Archivierung in SQL Server wird mit der Option Sicherungsmodus auf Voll gesetzt. Anschließend werden sie durch Ausführen einer Protokollsicherung archiviert. Für die Protokollsicherung ist eine vollständige Sicherung erforderlich, bevor sie funktioniert.
In Oracle werden archivierte Protokolle automatisch archiviert und anschließend an einem Remotestandort gesichert.
Zusammenfassung
Orakel:
SQL Server:
Dies sind die Dinge, die mir einfallen, wenn ich beide vergleichen kann. Ich würde gerne mehr von anderen hören und diese Antwort ergänzen / korrigieren.
Ich habe auch keine besondere Vorliebe dafür. Ich denke, beide machen einen tollen Job und ich arbeite sehr gerne mit beiden.
quelle
Ich kenne Oracle nicht, aber ich werde klarstellen, was es in SQL Server bedeutet.
Auf einem Windows Server können mehrere Instanzen von SQL Server vorhanden sein (unabhängige Installationen).
Jede Instanz verfügt über eigene Datenbanken (Benutzerdatenbanken und Systemdatenbanken).
Es ist wichtig zu wissen, dass jede Instanz ihre eigenen Systemdatenbanken hat (Master, Modell, MSDB, TempDB). Instanzen können unterschiedliche SQL Server-Editionen und -Versionen verwenden und unterschiedliche Produkte installieren.
Einige SQL Server-Komponenten werden von Instanzen auf einem Server gemeinsam genutzt (z. B. SQL Browser).
Um von Instanz B aus auf Instanz A zuzugreifen, müssen Sie auf Instanz B einen Verbindungsserver erstellen, der Instanz A zugeordnet ist. Mit diesem Mechanismus können Sie auch SQL Server mit Oracle verbinden.
Jede Datenbank kann mehrere Schemas haben. Schemas gruppieren Tabellen, Prozeduren, Ansichten und andere Datenbankobjekte.
quelle
Manchmal sagt ein Bild mehr als tausend Worte:
In SQL Server stellt eine Instanz eine einzelne Installation des Produkts dar und wird als eindeutiger Serverprozess ausgeführt. Jeder Computer kann mehrere Instanzen von SQL Server hosten.
Jede Instanz hat:
quelle
Meiner Meinung nach wäre der beste Vergleich mit Oracle 12c. In Oracle 12c ähnelt die Datenbank einer SQL Server-Instanz, und jeder Container in dieser 12c-Datenbank ähnelt einer SQL Server-Datenbank. Sowohl in Oracle 12c mit Containern als auch in SQL Server können Sie einen Container oder eine Datenbank trennen und erneut mit einer anderen Instanz oder Datenbank verbinden. Ein wirklicher Unterschied besteht darin, dass Sie mit SQL Server so viele Datenbanken in einer Instanz erstellen können, wie Sie möchten. Wenn Sie jedoch Container in Oracle 12c erstellen möchten, müssen Sie für die Containerfunktion bezahlen. Möglicherweise benötigen Sie auch Enterprise.
quelle