Gilt für:
Oracle Database – Oracle 12cR1 12.1.0.1.0 Enterprise Edition
Betriebssystem(e) – Oracle Linux 6.4 mit Kernel 2.6.39-400.109.17.1.el6uek.x86-64 &
Red Hat Enterprise Linux mit Kernel 2.6.32-431.el6.x86_64
Storage-Plattform(en) – Dell EqualLogic PS 5000 & Dell EqualLogic PS 6110
Problem:
Wie kann ich eine Verbindung zu austauschbaren Datenbanken in Oracle RAC 12cR1 herstellen?
Lösung:
Es gibt vier Möglichkeiten, eine Verbindung mit austauschbaren Datenbanken (PDBs) herzustellen.
- Verwendung des standardmäßigen Dienstes mit einem Namen, der dem Namen der austauschbaren Datenbank entspricht, der von der Datenbank-Software automatisch erstellt wird.
- Verwendung von benutzerdefinierten Diensten, die mit der Eigenschaft der austauschbaren Datenbank und mithilfe des Dienstprogramms SRVCTL erstellt werden.
- Verwenden des Befehls "alter session" und Festlegen des Containers als gewünschten Container
- Verwenden von Enterprise Manager Express
1. Verwendung des Standarddienstes für die Verbindung mit der PDB
Um eine Verbindung mit der PDB mithilfe des Standarddienstes herzustellen, führen Sie folgende Schritte durch.
- In der Datei "tnsnames.ora" muss ein Eintrag erfolgen, der die Datenbankenadressen bestimmt, die uns die Erstellung einer Verbindung zur Datenbank ermöglichen.
- Der Status der austauschbaren Datenbank muss vom Modus "mounted" zu Lese-/Schreibmodus geändert werden.
Folgender Eintrag muss in der Datei tnsnames.ora erfolgen:
Im Fall von Oracle RAC 12c wird zwar von der Datenbanksoftware automatisch ein Standarddienst mit demselben Namen wie der Name der austauschbaren Datenbank erstellt, die Datei tnsnames.ora wird jedoch nur mit einem einzigen Eintrag generiert, der sich auf die globale Datenbank bezieht. Beispiel: Im Fall eines Oracle RAC 12c mit zwei Nodes, wobei cpdb die globale Datenbank ist, sind pdb1 und pdb2 die zwei erstellten austauschbaren Datenbanken und cpdb1 und cpdb2 die beiden Instanzen. Der Standardeintrag in der Datei tnsnames.ora lautet wie folgt:-
CPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cpdb.dbase.lab)
)
)
Daher müssen relevante Einträge für den Standarddienstnamen von austauschbaren Datenbanken in der Datei tnsnames.ora erstellt werden, wie unten gezeigt:
PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1.dbase.lab)
)
)
PDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP) (HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb2.dbase.lab)
)
)
Ändern des Status der austauschbaren Datenbank:
Wenn die pdbs erstellt werden, lautet der open_mode standardmäßig nur „Mounted“. Dies kann wie folgt überprüft werden:
SQL> select name, open_mode von v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED
Der folgende Befehl öffnet alle austauschbaren Datenbanken im Lese-/Schreibmodus.
SQL> Alter pluggable database all open;
Anschließend
kann die Verbindung mit der Datenbank mithilfe von sqlplus wie folgt hergestellt werden:
[oracle@node1 bin]$ sqlplus sys/oracle@pdb1 as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Tue Oct 8 11:23:32 2013
Copyright (c) 1982, 2013, Oracle. Alle Rechte vorbehalten
Verbunden mit:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 – 64-Bit-Produktion mit Partitionierung, Real Application Clusters, Automatic Storage Management, OLAP, erweiterte Analyse und Testoptionen für reale Anwendungen
2. Verwenden des nutzerdefinierten Dienstes für die Verbindung mit der PDB
Der oben beschriebene Standarddienst sollte nur zu administrativen Zwecken und nicht für Anwendungen verwendet werden. Benutzerdefinierte Services müssen immer für Anwendungen verwendet werden, da benutzerdefinierte Dienste an die Anforderungen der Anwendungen angepasst werden können. Die Einrichtung einer Verbindung mit benutzerdefinierten Diensten umfasst die folgenden Schritte:
- Erstellen eines Datenbankdienstes mit Eigenschaft der austauschbaren Datenbank mithilfe des Dienstprogramms SRVCTL
- Erstellen eines Eintrags in der Datei "tnsnames.ora" für den erstellten Dienst.
- Den Dienst starten
- Erstellen der Verbindung zur Datenbank über den Dienst mit der Eigenschaft der austauschbaren Datenbank, die in Schritt a erstellt wurde.
a. Erstellen eines Datenbankdienstes mit Eigenschaft der austauschbaren Datenbank mithilfe des Dienstprogramms SRVCTL
Mithilfe des SRVCTL-Dienstprogramms und der folgenden Befehle erstellen Sie die zwei Datenbankdienste hr1 und sales1, die der austauschbaren Datenbank pdb1 zugeordnet werden sollen:
[[oracle@node1 bin]$ srvctl add service -db cpdb -service hr1 -pdb pdb1 -preferred cpdb1 -available cpdb2
[oracle@node1 bin]$ srvctl add service -db cpdb -service sales1 -pdb pdb1 -preferred cpdb1 -available cpdb2
Die Eigenschaft pdb kann über die Datenkatalogansicht all_services angezeigt werden.
SQL> SELECT NAME, PDB FROM all_services;
NAME PDB
pdb1.dbase.lab PDB1
hr1 PDB1
sales1 PDB1
Der Befehl $ srvctl config service –db <databasename> listet auch die verfügbaren Dienste auf.
b. Erstellen eines Eintrags in der Datei tnsnames.ora für den erstellten Datenbankdienst
Wir können die net-Dienstnamen HR_PDB1 und SALES_PDB1 erstellen, die in der HR- bzw. die Sales-Anwendung verwendet werden können, um eine Verbindung zur austauschbaren Datenbank pdb1 herzustellen. Folgen Sie hierzu den folgenden Schritten:
HR_PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = hr1.dbase.lab)
)
)
SALES_PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales1.dbase.lab)
)
)
c. Den Dienst starten
[oracle@nsnode1 bin]$ srvctl status service -db cpdb -service hr1
Service hr1 is not running
[oracle@nsnode1 bin]$ srvctl start service -db cpdb -service hr1
Das Starten des mit einer PDB verknüpften Dienstes öffnet die PDB automatisch in einem Lese-/Schreibmodus.
d. Herstellen einer Verbindung zum Datenbankdienst
Ein Nutzer stellt über einen Datenbankdienst mit der Eigenschaft PDB eine Verbindung zur PDB her.
Beispielsweise kann der SYS-Nutzer eine Verbindung zur pdb1 über den Datenbankdienst HR_PDB1, der pdb1 zugeordnet ist, wie folgt herstellen:
SQL> connect sys/oracle@HR_PDB1 AS SYSDBA
Connected.
SQL> SHOW CON_ID;
CON_ID
3
SQL> SHOW CON_NAME;
CON_NAME
PDB1
3. Verwenden des Befehls „Alter Session“ für die Verbindung mit der PDB
Wenn Sie eine Verbindung zur RAC-Instanz herstellen, stellen Sie standardmäßig eine Verbindung zum CDB$ROOT her. Jede RAC-Instanz öffnet die austauschbare Datenbank als Ganzes und es steht ein einzelnes System-Image zur Verfügung. Wenn Sie die Sitzung in eine austauschbare Datenbank ändern möchten, können Sie dies tun, indem Sie die Sitzung ändern und den Container auf den gewünschten Container festlegen. Die Abfrage „show con_name“ kann verwendet werden, um den Namen des aktuellen Containers zu überprüfen.
[oracle@node1 bin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Wed Oct 9 13:56:27 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Verbunden mit:
Oracle Database 12c Enterprise Edition Version 12.1.0.1.0 – 64-Bit-Produktion
Mit Partitionierung, Real Application Clusters, Automatic Storage Management, OLAP,
erweiterte Analyse und Testoptionen für reale Anwendungen
SQL> show con_name;
CON_NAME
CDB$ROOT
SQL> ALTER SESSION SET CONTAINER = PDB1;
Session altered.
SQL> SHOW CON_NAME;
CON_NAME
PDB1
SQL> ALTER SESSION SET CONTAINER = PDB2;
Session altered.
SQL> SHOW CON_ID;
CON_ID
4
SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;
Session altered.
SQL> SHOW CON_NAME;
CON_NAME CDB$ROOT
Die Container-ID-Beschreibungen lauten wie folgt:
Container-ID |
Beschreibung |
0 |
Gesamte CDB |
1 |
CDB$ROOT |
2 |
PDB$SEED |
3 bis 254 |
PDBs |
Tabelle 1: Container-ID-Beschreibungen
In diesem spezifischen Beispiel steht con_id 3 für pdb1 und con_id 4 für pdb2.
[grid@node1 bin]$ echo $ORACLE_HOME
/u01/app/12.1.0/grid
[grid@node1 bin]$ echo $ORACLE_SID
+ASM1
[grid@node1 bin]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Wed Oct 9 13:51:39 2013
Copyright (c) 1982, 2013, Oracle. Alle Rechte vorbehalten.
Verbunden mit:
Oracle Database 12c Enterprise Edition Version 12.1.0.1.0 – 64-Bit-Produktion
Mit Real Application Clusters und Automatic Storage Management
SQL> show con_id;
CON_ID
0
SQL> show con_name;
CON_NAME
Non Consolidated
4. Verwenden von Enterprise Manager (EM) Express für die Verbindung mit der PDB
Wenn die Datenbank mit Database Configuration Assistant (DBCA) erstellt wird, wird die URL für EM Express zum Zeitpunkt der Fertigstellung des DBCA bereitgestellt. Die URL hat das Format http://<hostname>:portnumber/em mit 5500 als Standardport-ID.
Bevor Sie zu dieser URL gehen, um auf EM Express zuzugreifen, muss die folgende SQL-Anweisung ausgegeben werden, um den Port für EM Express zu bestätigen:
SQL> SELECT dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
5500
Wenn die Ausgabe wie oben angezeigt wird, kann eine Verbindung mit der vom DBCA angezeigten URL hergestellt werden.
Wenn die Ausgabe jedoch null ist, wie z. B.
GETHTTPSPORT, dann sollte das PL/SQL-Verfahren DBMS_XDB_CONFIG.SETHTTPSPORT ausgeführt werden, um den HTTPS-Port für EM Express festzulegen.
dann muss man den PL/SQL-Vorgang ausführen: DBMS_XDB_CONFIG. SETHTTPSPORT, um den HTTPS-Port für EM Express festzulegen. Beispiel:
SQL> exec dbms_xdb_config.sethttpsport(5500);
PL/SQL procedure successfully completed.
Versuchen Sie danach, über die URL auf EM Express zuzugreifen.
Auch ein HTTP-Port kann für EM Express konfiguriert werden, wie unten angegeben:
SQL> select dbms_xdb_config.gethttpport from dual;
SQL> exec dbms_xdb_config.sethttpport(8080);
Um den EM Express-Port für die pdbs festzulegen, muss der Container in die entsprechenden pdbs geändert und das PL/SQL-Verfahren zum Festlegen des Ports für diesen Container ausgeführt werden.
Danach kann der HTTP-Port für cpdb, pdb1 und pdb2 wie folgt überprüft werden:
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8080
SQL> alter session set container = pdb1;
Session altered.
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8081
SQL> alter session set container = pdb2;
Session altered.
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8082
HINWEIS: Wenn Sie weiterhin keine Verbindung zur EM Express-URL herstellen können, laden Sie die Empfängersteuerung als Grid-Nutzer neu und versuchen Sie es dann erneut.