Wie sich die SID vom Dienstnamen in Oracle tnsnames.ora unterscheidet


Antworten:


153

Zitat von @DAC

Kurz gesagt: SID = der eindeutige Name Ihrer Datenbank, ServiceName = der beim Herstellen der Verbindung verwendete Alias

Nicht unbedingt wahr. SID = eindeutiger Name der INSTANZ (z. B. der auf dem Computer ausgeführte Oracle-Prozess). Oracle betrachtet die "Datenbank" als die Dateien.

Dienstname = Alias ​​für eine INSTANZ (oder viele Instanzen). Der Hauptzweck davon ist, wenn Sie einen Cluster ausführen, der Client sagen kann "Verbinde mich mit SALES.acme.com", der DBA kann im laufenden Betrieb die Anzahl der Instanzen ändern, die für SALES.acme.com-Anforderungen verfügbar sind. oder verschieben Sie SALES.acme.com sogar in eine völlig andere Datenbank, ohne dass der Client Einstellungen ändern muss.


1
In Ihrem Beispiel gibt es also möglicherweise SIDs Sales1, Sales2und Sales3alle sind über den Dienstnamen verfügbar Sales?

1
Ich denke, das Gegenteil ist der Fall: Sie haben eine SID, die so viele Dienste zur Verfügung hat. Sie können dann einen der Dienste in Anspruch nehmen und auf eine andere SID / Datenbank verweisen.
Colin Nicholls

Können wir den Oracle SID-Namen mit dem TNS-Namen identisch haben? Wird es ein Problem sein?
user2441441

2
@ user2441441: Nach der Erklärung, die Matthew gegeben hat, denke ich, dass Sie zu Recht davon ausgehen, dass es mehrere SIDs und einen Dienst geben kann, der alle SIDs abstrahiert
Dwarak

26

Weitere Informationen finden Sie unter: http://www.sap-img.com/oracle-database/finding-oracle-sid-of-a-database.htm

Was ist der Unterschied zwischen Oracle SIDs und Oracle SERVICE NAMES? Ein Konfigurationstool sucht nach SERVICE NAME und das nächste nach SIDs! Was ist los?!

Oracle SID ist der eindeutige Name, der Ihre Instanz / Datenbank eindeutig identifiziert, wobei als Dienstname der TNS-Alias ​​angegeben wird, den Sie angeben, wenn Sie eine Remoteverbindung zu Ihrer Datenbank herstellen. Dieser Dienstname wird in der Datei Tnsnames.ora auf Ihren Clients aufgezeichnet und kann der sein wie SID und Sie können ihm auch einen beliebigen anderen Namen geben.

SERVICE_NAME ist die neue Funktion ab Oracle 8i, mit der sich die Datenbank beim Listener registrieren kann. Wenn die Datenbank auf diese Weise beim Listener registriert ist, können Sie den Parameter SERVICE_NAME in tnsnames.ora verwenden. Andernfalls verwenden Sie die SID in tnsnames.ora.

Auch wenn Sie OPS (RAC) haben, haben Sie für jede Instanz einen anderen SERVICE_NAME.

SERVICE_NAMES gibt einen oder mehrere Namen für den Datenbankdienst an, mit dem diese Instanz verbunden ist. Sie können mehrere Dienstnamen angeben, um zwischen verschiedenen Verwendungen derselben Datenbank zu unterscheiden. Beispielsweise:

SERVICE_NAMES = sales.acme.com, widgetsales.acme.com

Sie können auch Dienstnamen verwenden, um einen einzelnen Dienst zu identifizieren, der mithilfe der Replikation aus zwei verschiedenen Datenbanken verfügbar ist.

In einer Oracle Parallel Server-Umgebung müssen Sie diesen Parameter für jede Instanz festlegen.

Kurz gesagt: SID = der eindeutige Name Ihrer DB-Instanz, ServiceName = der beim Herstellen der Verbindung verwendete Alias


Ich bin verwirrt. Sollte es nicht sein, dass Sie in RAC für jede Instanz unterschiedliche "INSTANCE_NAME" haben? Und ein SERVICE_NAME kann mehreren Instanzen zugeordnet sein?
Iwan Satria

20

Ich weiß, dass dies uralt ist, aber wenn es um knifflige Tools, Verwendungen, Benutzer oder Symptome bei der Benennung von Sid- und Diensten geht, kann man Ihren tnsnames-Einträgen ein wenig Flexibilität hinzufügen, wie:

mySID, mySID.whereever.com =
(DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = myHostname)(PORT = 1521))
  )
  (CONNECT_DATA =
    (SERVICE_NAME = mySID.whereever.com)
    (SID = mySID)
    (SERVER = DEDICATED)
  )
)

Ich dachte nur, ich würde dies hier belassen, da es für die Frage leicht relevant ist und hilfreich sein kann, wenn ich versuche, einige weniger als eindeutige Eigenheiten der Orakel-Vernetzung zu umgehen.


5

Was ist eine SID und ein Dienstname?

Bitte schauen Sie in die Dokumentation von Orakel unter https://docs.oracle.com/cd/B19306_01/network.102/b14212/concepts.htm

Falls der obige Link in Zukunft nicht mehr zugänglich ist, werden Sie zum Zeitpunkt des Schreibens dieser Antwort über den obigen Link zum Thema "Datenbankdienst und Identifizierung von Datenbankinstanzen" im Kapitel "Konnektivitätskonzepte" des "Administratorhandbuchs für Database Net Services" weitergeleitet. . Dieses Handbuch wird von oracle als Teil von "Oracle Database Online Documentation, 10g Release 2 (10.2)" veröffentlicht.

Wann muss ich den einen oder anderen benutzen? Warum brauche ich zwei davon?

Betrachten Sie die folgende Zuordnung in einer RAC-Umgebung.

SID SERVICE_NAME
bob1 bob
bob2 bob
bob3 bob
bob4 bob

Wenn der Lastausgleich konfiguriert ist, verteilt der Listener die Arbeitslast auf alle vier SIDs. Selbst wenn der Lastenausgleich konfiguriert ist, können Sie jederzeit eine Verbindung zu bob1 herstellen, wenn Sie die SID anstelle von SERVICE_NAME verwenden möchten.

Weitere Informationen finden Sie unter https://community.oracle.com/thread/4049517


0

Gemäß Oracle Glossar:

SID ist ein eindeutiger Name für eine Oracle-Datenbankinstanz. ---> Um zwischen Oracle-Datenbanken zu wechseln, müssen Benutzer die gewünschte SID <--- angeben. Die SID ist in den CONNECT DATA-Teilen der Connect-Deskriptoren in einer TNSNAMES.ORA-Datei und in der Definition des Netzwerk-Listeners in der LISTENER.ORA-Datei enthalten. Wird auch als System-ID bezeichnet. Der Oracle-Servicename kann wie "MyOracleServiceORCL" beschrieben werden. In Windows können Sie Ihren Dienstnamen unter Windows-Diensten als Dienst ausführen.

Sie sollten SID in TNSNAMES.ORA als besseren Ansatz verwenden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.