Van toepassing op:
Oracle Database - Oracle 12cR1 12.1.0.1.0 Enterprise Edition
Besturingssysteem – Oracle Linux 6.4 met kernel 2.6.39-400.109.17.1.el6uek.x86-64 en
Red Hat Enterprise Linux met kernel 2.6.32-431.el6.x86_64
Storageplatform(s) - Dell EqualLogic PS 5000 en Dell EqualLogic PS 6110
Probleem:
Hoe kan ik verbinding maken met Pluggable Databases in Oracle RAC 12cR1?
Oplossing:
Er zijn vier manieren waarop een verbinding met de pluggable databases (PDB's) kan worden gemaakt.
- Met behulp van de standaardservice met dezelfde naam als de PDB-naam, die automatisch wordt gemaakt door de databasesoftware.
- Met behulp van door de gebruiker gedefinieerde services, die zijn gemaakt met de eigenschap pdb met behulp van het hulpprogramma SRVCTL dat de service koppelt aan de pluggable databases
- Met behulp van de opdracht alter session en het instellen van de gewenste container
- De Enterprise Manager Express gebruiken
1. De standaardservice gebruiken om verbinding te maken met de PDB
Als u een verbinding met de PDB wilt maken met behulp van de standaardservice, moet u het volgende doen.
- Er moet een vermelding worden gemaakt in het bestand tnsnames.ora dat databaseadressen definieert waarmee een verbinding met de database kan worden gemaakt.
- De status van de PDB moet worden gewijzigd van gekoppeld naar lees-schrijf-modus.
Deze vermelding moet worden gemaakt in het bestand tnsnames.ora:
In het geval van Oracle RAC 12c maakt de databasesoftware automatisch een standaardservice met dezelfde naam als de pluggable databasenaam. Desondanks wordt het bestand tnsnames.ora gegenereerd met slechts één vermelding die betrekking heeft op de algemene database. Voorbeeld: in het geval van een Oracle RAC 12c met twee knooppunten, waarbij cpdb de algemene database is, pdb1 en pdb2 de twee pluggable databases zijn die zijn aangemaakt en cpdb1 en cpdb2 de twee instanties zijn, is de standaardvermelding in het bestand tnsnames.ora zoals hieronder weergegeven:-
CPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cpdb.dbase.lab)
)
)
Er moeten dus relevante vermeldingen worden gemaakt voor de standaardservicenaam van pluggable databases in het bestand tnsnames.ora, zoals hieronder wordt weergegeven:
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)
)
)
De status van de pluggable database wijzigen:
Wanneer de pdb's worden gemaakt, is de open_mode standaard alleen 'Mounted'. Dit kan als volgt worden gecontroleerd:
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED
Met de volgende opdracht worden alle pluggable databases in een lees-schrijf-modus geopend.
SQL> Alter pluggable database all open;
Hierna kan als volgt een
verbinding kan worden gemaakt met de database met behulp van sqlplus:
[oracle@node1 bin]$ sqlplus sys/oracle@pdb1 as sysdba
SQL*Plus: release 12.1.0.1.0 Production op dinsdag 8 oktober 11:23:32 2013
Copyright (c) 1982, 2013, Oracle. Alle rechten voorbehouden.
Connected to: (Verbonden met:)
Oracle-database 12c Enterprise Edition release 12.1.0.1.0-64-bits Production met opties voor partitionering, echte applicatieclusters, automatisch storagebeheer, OLAP, geavanceerde analyses en het testen van echte applicaties
2. De door de gebruiker gedefinieerde service gebruiken om verbinding te maken met de PDB
De hierboven beschreven standaardservice mag alleen worden gebruikt voor administratieve doeleinden en niet voor applicaties. Altijd door de gebruiker gedefinieerde services moeten worden gebruikt voor applicaties, omdat de door de gebruiker gedefinieerde services kunnen worden aangepast aan de vereisten van de applicaties. Het opzetten van een verbinding met de door de gebruiker gedefinieerde services omvat de volgende stappen:
- Maak een database-service met de eigenschap PDB met behulp van het hulpprogramma SRVCTL
- Maak een vermelding in het bestand tnsnames.ora voor de gemaakte service
- Service starten
- Maak verbinding met de database met behulp van de service met de eigenschap pdb, zoals gemaakt in stap a
a. Een database-service met de eigenschap PDB maken met behulp van het hulpprogramma SRVCTL
Maak met behulp van de volgende opdrachten in het hulpprogramma SRVCTL twee database-services hr1 en sales1 om te worden gekoppeld aan de pluggable database pdb1:
[[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
De eigenschap pdb kan worden weergegeven vanuit de datawoordenlijstweergave van all_services.
SQL> SELECT NAME, PDB FROM all_services;
NAME PDB
pdb1.dbase.lab PDB1
hr1 PDB1
sales1 PDB1
De opdracht $ srvctl config service –db geeft ook de beschikbare services weer.
b. Een vermelding in het bestand tnsnames.ora maken voor de gemaakte service
We kunnen de HR_PDB1 en SALES_PDB1, netservicenamen maken die respectievelijk gebruikt kunnen worden door de applicaties hr en sales om als volgt verbinding met de pluggable database pdb1 te maken:
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. De service starten
[oracle@nsnode1 bin]$ srvctl status service -db cpdb -service hr1
Service hr1 is niet actief
[oracle@nsnode1 bin]$ srvctl start service -db cpdb -service hr1
Wanneer de service die is gekoppeld aan een pdb wordt gestart, wordt de pdb automatisch geopend in een lees-schrijf-modus.
d. Verbinding maken met de database-service
Een gebruiker maakt verbinding met de pdb met behulp van een database-service met de eigenschap pdb.
Zo kan de SYS-gebruiker bijvoorbeeld als volgt verbinding maken met de pdb1 met behulp van de database-service HR_PDB1 die is gekoppeld aan pdb1:
SQL> connect sys/oracle@HR_PDB1 AS SYSDBA
Verbonden.
SQL> SHOW CON_ID;
CON_ID
3
SQL> SHOW CON_NAME;
CON_NAME
PDB1
3. De opdracht Alter Session gebruiken om verbinding te maken met de PDB
Wanneer u verbinding maakt met de RAC-instantie, kunt u standaard verbinding maken met de CDB$ROOT. Elke RAC-instantie opent de PDB als geheel en er is één systeemimage beschikbaar. Wanneer u de sessie wilt wijzigen in een pdb, kunt u dit doen door de sessie te wijzigen en de gewenste container in te stellen. De query show con_name kan worden gebruikt om de naam van de huidige container te verifiëren.
[oracle@node1 bin]$ sqlplus / as sysdba
SQL*Plus: release 12.1.0.1.0 Production op woensdag 9 oktober 13:56:27 2013
Copyright (c) 1982, 2013, Oracle. Alle rechten voorbehouden.
Connected to: (Verbonden met:)
Oracle database 12c Enterprise Edition release 12.1.0.1.0 - 64-bits Production
Met opties voor partitionering, echte applicatieclusters, automatisch storagebeheer, OLAP,
geavanceerde analyses en het testen van echte applicaties
SQL> show con_name;
CON_NAME
CDB$ROOT
SQL> ALTER SESSION SET CONTAINER = PDB1;
Sessie gewijzigd.
SQL> SHOW CON_NAME;
CON_NAME
PDB1
SQL> ALTER SESSION SET CONTAINER = PDB2;
Sessie gewijzigd.
SQL> SHOW CON_ID;
CON_ID
4
SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;
Sessie gewijzigd.
SQL> SHOW CON_NAME;
CON_NAME
CDB$ROOT
De omschrijving van de container-ID is als volgt:
Container-ID |
Beschrijving |
0 |
Hele CDB |
1 |
CDB$ROOT |
2 |
PDB$SEED |
3 tot 254 |
PDB's |
Tabel 1: Omschrijvingen van container-ID
In dit specifieke voorbeeld wordt pdb1 vertegenwoordigd door con_id 3 en pdb2 door con_id 4.
[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 op woensdag 9 oktober 13:51:39 2013
Copyright (c) 1982, 2013, Oracle. Alle rechten voorbehouden.
Connected to: (Verbonden met:)
Oracle database 12c Enterprise Edition release 12.1.0.1.0 - 64-bits Production
Met opties voor echte applicatieclusters en automatisch storagebeheer
SQL> show con_id;
CON_ID
0
SQL> show con_name;
CON_NAME
Niet geconsolideerd
4. De Enterprise Manager (EM) Express gebruiken om verbinding te maken met de PDB
Wanneer de database wordt gemaakt met behulp van de Database Configuration Assistant (DBCA), wordt op het moment van voltooiing de URL voor de EM Express geleverd door DBCA. De URL heeft de indeling http://:poortnummer/em met 5500 als de standaardpoort-ID.
Voordat u naar die URL gaat om toegang te krijgen tot de EM Express, moet u de volgende SQL-instructie geven om de poort voor de EM Express te bevestigen:
SQL> SELECT dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
5500
Als de uitvoer is zoals hierboven weergegeven, kunt u verbinding maken met de URL die wordt weergegeven door de DBCA.
Maar als de output null is, zoals
GETHTTPSPORT
moet u vervolgens de PL/SQL-procedure uitvoeren, DBMS_XDB_CONFIG.SETHTTPSPORT om de HTTPS-poort voor de EM Express in te stellen. Bijvoorbeeld:
SQL> exec dbms_xdb_config.sethttpsport(5500);
De PL/SQL-procedure is voltooid.
Probeer daarna de EM Express te openen met behulp van de URL.
Een HTTP-poort kan ook worden geconfigureerd voor de EM Express, zoals hieronder is aangegeven:
SQL> select dbms_xdb_config.gethttpport from dual;
SQL> exec dbms_xdb_config.sethttpport(8080);
Om de EM Express-poort voor de pdb's in te stellen, moet u de container wijzigen in de respectievelijke pdb's en de PL/SQL-procedure uitvoeren om de poort voor die container in te stellen.
Wanneer u dat hebt gedaan, kunt u de HTTP-poort voor de cpdb, pdb1 en pdb2 als volgt controleren:
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8080
SQL> alter session set container = pdb1;
Sessie gewijzigd.
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8081
SQL> alter session set container = pdb2;
Sessie gewijzigd.
SQL> select dbms_xdb_config.gethttpport from dual;
GETHTTPPORT
8082
Opmerking: Als u nog steeds geen verbinding kunt maken met de URL voor EM Express, herlaadt u de listener control als netgebruiker en probeert u het opnieuw.