Instanz und Datenbank (Oracle vs SQL Server)

7

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.

tiongmaru
quelle
Dieser Beitrag könnte hilfreich sein.
Vérace
nicht wirklich. Ich weiß, was es in Oracle bedeutet, aber ich frage nach SQL Server - Systemdatenbank für mehrere Benutzer Datenbank.
tiongmaru
Hmm ... Sie haben geschrieben "Normalerweise wird eine Instanz einer Datenbank zugeordnet". Dies ist nicht der Fall - einer Instanz können mehrere Datenbanken (dh Schemata) zugeordnet sein. Dies geht aus Ihrer Frage nicht hervor. Auf vielen Produktionssystemen wird auf der Instanz möglicherweise nur ein Schema ausgeführt (z. B. Oracle Business Suite).
Vérace
ja. Eine Instanz wird einer Datenbank in Oracle zugeordnet. Innerhalb einer Datenbank können viele Schemas vorhanden sein. aber in SQL Server scheint es, als ob eine Instanz viele Datenbanken haben kann
tiongmaru
Ein Schema ist eine Datenbank, da die meisten Menschen das Konzept verstehen - dh eine Sammlung verknüpfter Tabellen (mit FK-Beziehungen und ACID). FKs und ACID werden nicht zwischen verschiedenen Schemas auf derselben Instanz unterstützt - daher handelt es sich um "Datenbanken" (wie vom Laien verstanden). Wir tanzen hier vielleicht um den Kopf einer Stecknadel, aber ich finde es gut, dass diese Fragen geklärt sind.
Vérace

Antworten:

17

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:

  1. System, in dem sich die Systemansichten befinden.
  2. msdb-Datenbank, die auch systembezogene Informationen enthält. In der Regel finden Sie dort Ihre Backups-bezogenen Daten. Zumindest zum Löschen alter Sicherungsdatensätze ist ein wenig Wartung erforderlich.
  3. model, die treffend benannte Datenbank, die als Modell für jede neue Datenbank verwendet wird, die Sie erstellen. Es ist eine gute Idee, die Einstellungen für Datendateien (automatische Erweiterung, Anfangsgröße, Sicherungsmodus) zu ändern, damit alle neuen Datenbanken davon profitieren.
  4. Tempdb entwickelt unten.

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:

Instance->User1->Schema1(named User1)->Tablespace1
                                     ->Tablespace2
        ->User2->Schema2(named User2)->Tablespace3
        ->User3->Granted "read only"->schema2.table1

SQL Server:

Instance->Database1->Schema1
        ->Database2->Schema2
        ->User1
        ->User2

        ->User1->Granted "owner"->Database1
        ->User2->Granted "read only"->Database2->Schema2

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.

Nicolas de Fontenay
quelle
Gute Antwort! Früher habe ich Oracle-DBAs SQL Server beigebracht, und sie finden die "zusätzliche Ebene" immer sehr verwirrend.
Spaghettidba
wunderbare Erklärung, also enthalten die "Systemdatenbanken" Metadaten nicht nur für 1 Benutzerdatenbank, sondern für ein Vielfaches davon?
tiongmaru
Genau. Insbesondere enthält die Mastersystemdatenbank die Metadaten für Datenbanken, Anmeldungen, Instanzkonfiguration und jedes andere Objekt auf Instanzebene. Msdb enthält die Konfiguration für den SQL Server-Agenten (den Scheduler) und andere nicht relationale Funktionen.
Spaghettidba
Ja. Ich habe gerade festgestellt, dass ich völlig vergessen habe, den SQL Server-Agenten hinzuzufügen, der in SQL Server sehr zentral ist. Ich habe auch vergessen, über Verfahren zu sprechen, die auch in SQL Server bevorzugt werden. Wird diese später hinzufügen.
Nicolas de Fontenay
@ Tiongmaru das ist richtig.
Nicolas de Fontenay
5

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.

BuahahaXD
quelle
danke für die antwort, ich habe meine
hauptfrage
5

Manchmal sagt ein Bild mehr als tausend Worte: SQL Server-Instanzen

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:

  1. Eigene Binärdateien (in Oracle können Sie mehrere Datenbanken mit denselben Binärdateien ausführen). Dies bedeutet auch, dass jede Instanz eine andere Version / Edition von SQL Server sein kann.
  2. Eigener Serverprozess
  3. Eine Reihe von Systemdatenbanken (Master, Modell, MSDB und TempDB)
  4. Eigene Konfiguration (Dienste, Registrierungsschlüssel ...)
spaghettidba
quelle
in der Tat sagt ein Bild tausend Worte ... in der Tat ... kann ich in diesem Fall auch sagen, dass ich für eine konsistente Sicherung / Wiederherstellung die "System" -Datenbanken zusammen mit den "Benutzerdatenbanken" sichern müsste?
tiongmaru
Jede Datenbank ist für sich konsistent: separate Datendateien, separate Transaktionsprotokolldateien, separate Sicherung usw. Wenn die gesamte Instanz einen Hardwarefehler aufweist und wiederhergestellt werden muss, benötigen Sie Sicherungen für jede Datenbank, einschließlich der Systemdatenbanken. Die einzige Ausnahme ist Tempdb, die weder gesichert noch wiederhergestellt werden kann
Spaghettidba
Entschuldigung, aber ich dachte, die Systemdatenbank enthält Metadaten zu den Benutzerdatenbanken? Wenn ich also an Tag 1 eine Backup-Systemdatenbank und eine Benutzerdatenbank habe, habe ich am Tag 2 eine andere Benutzerdatenbank2 und am Tag3 eine Backup-Benutzerdatenbank2 erstellt. Angenommen, an Tag 4 liegt ein Fehler vor und die Benutzerdatenbank2 muss wiederhergestellt werden. Kann ich die Sicherung der Benutzerdatenbank2 zusammen mit der Sicherung der Systemdatenbank von Tag1 wiederherstellen?
tiongmaru
Es sind nicht nur Metadaten. Systemdatenbanken enthalten auch Konfigurationsdaten für die Instanz und andere Funktionen, z. B. den SQL Server-Agenten. Datenbanken können unabhängig voneinander gesichert und wiederhergestellt werden. Wenn Sie also ab Tag 1 eine Systemdatenbanksicherung und ab Tag 2 eine Benutzerdatenbanksicherung haben, können Sie diese unabhängig wiederherstellen. Durch das Wiederherstellen einer Benutzerdatenbank werden auch die Metadaten erstellt, wenn diese fehlen.
Spaghettidba
So können wir eine Benutzerdatenbank mit einer völlig älteren / nicht verwandten / neuen Systemdatenbank wiederherstellen?
tiongmaru
0

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.

Gandolf989
quelle