Si applica a:
Oracle Database - Oracle 12cR1 12.1.0.1.0 Enterprise Edition
Sistemi operativi - Oracle Linux 6.4 con kernel 2.6.39-400.109.17.1.el6uek.x86-64 e
Red Hat Enterprise Linux con kernel 2.6.32-431.el6.x86_64
Piattaforme di storage - Dell EqualLogic PS 5000 e Dell EqualLogic PS 6110
Problema:
Come connettersi ai database collegabili in Oracle RAC 12cR1?
Soluzione:
Esistono quattro modi in cui è possibile stabilire una connessione con i database collegabili (PDB).
- Utilizzando il servizio predefinito con lo stesso nome del PDB, che viene creato automaticamente dal software del database
- Utilizzando servizi definiti dall'utente, creati con la proprietà PDB mediante l'utilità SRVCTL che associa il servizio ai database collegabili
- Utilizzando il comando alter session e impostando il container desiderato
- Utilizzando Enterprise Manager Express
1. Utilizzando il servizio predefinito per la connessione al PDB
Per stabilire una connessione con il PDB utilizzando il servizio predefinito, effettuare le operazioni riportate di seguito.
- È necessario creare una voce nel file tnsnames.ora che definisce gli indirizzi di database che consentono di stabilire una connessione con il database.
- Lo stato del PDB deve poi essere modificato passando dalla modalità "mounted" alla modalità di lettura/scrittura.
Voce da creare nel file tnsnames.ora:
Nel caso di Oracle RAC 12c, anche se il software del database crea automaticamente un servizio predefinito con lo stesso nome del database collegabile, il file tnsnames.ora viene comunque generato con una sola voce riferita al database globale. Ad esempio, nel caso di un Oracle RAC 12c a due nodi, dove cpdb è il database globale, pdb1 e pdb2 sono i due database collegabili creati e cpdb1 e cpdb2 sono le due istanze, la voce predefinita nel file tnsnames.ora è la seguente:-
CPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cpdb.dbase.lab)
)
)
Pertanto, è necessario creare le voci pertinenti per il nome di servizio predefinito dei database collegabili nel file tnsnames.ora, come mostrato di seguito:
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)
)
)
Modifica dello stato del database collegabile:
Quando i PDB vengono creati, per impostazione predefinita, open_mode è solo "Mounted". Ciò può essere verificato come segue:
SQL> select name, open_mode from v$pdbs;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED
Il seguente comando apre tutti i database collegabili in modalità di lettura/scrittura.
SQL> Alter pluggable database all open;
Dopo questa operazione,
è possibile stabilire la connessione con il database utilizzando sqlplus come segue:
[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. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options
2. Utilizzando il servizio definito dall'utente per la connessione al PDB
Il servizio predefinito descritto sopra deve essere utilizzato solo per scopi amministrativi e non per le applicazioni. Occorre sempre utilizzare i servizi definiti dall'utente per le applicazioni, in quanto tali servizi possono essere personalizzati in base ai requisiti delle applicazioni. Stabilire una connessione mediante servizi definiti dall'utente comporta i seguenti passaggi:
- Creare un servizio di database con la proprietà PDB mediante l'utilità SRVCTL
- Creare una voce nel file tnsnames.ora per il servizio creato
- Avviare il servizio
- Connettersi al database mediante il servizio con la proprietà PDB creata nel primo passaggio
a. Creare un servizio di database con la proprietà PDB utilizzando l'utilità SRVCTL
I seguenti comandi che utilizzano l'utilità SRVCTL creano due servizi di database hr1 e sales1 da associare al database collegabile 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
La proprietà pdb può essere visualizzata dalla vista del dizionario dei dati all_services.
SQL> SELECT NAME, PDB FROM all_services;
NAME PDB
pdb1.dbase.lab PDB1
hr1 PDB1
sales1 PDB1
Anche il comando $ srvctl config service –db <databasename> elenca i servizi disponibili.
b.Creare una voce nel file tnsnames.ora per il servizio di database creato
È possibile creare i nomi dei servizi di rete HR_PDB1 e SALES_PDB1 che l'applicazione hr e l'applicazione sales possono utilizzare, rispettivamente, per connettersi al database collegabile pdb1, come indicato di seguito:
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. Avviare il servizio
[oracle@nsnode1 bin]$ srvctl status service -db cpdb -service hr1
Il servizio hr1 non è in esecuzione
[oracle@nsnode1 bin]$ srvctl start service -db cpdb -service hr1
L'avvio del servizio associato a un pdb apre automaticamente il pdb in modalità di lettura e scrittura.
d. Connettersi al servizio di database
Un utente si connette al PDB utilizzando un servizio di database con la proprietà PDB.
Ad esempio, l'utente SYS può connettersi al pdb1 utilizzando il servizio di database HR_PDB1 associato a pdb1, come indicato di seguito:
SQL> connect sys/oracle@HR_PDB1 AS SYSDBA
Connected.
SQL> SHOW CON_ID;
CON_ID
3
SQL> SHOW CON_NAME;
CON_NAME
PDB1
3. Utilizzando il comando Alter Session per la connessione al PDB
Per impostazione predefinita, quando ci si connette all'istanza RAC, ci si connette a CDB$ROOT. Ogni istanza RAC apre il PDB complessivo ed è disponibile un'unica immagine di sistema. Quando si desidera cambiare la sessione per un PDB, è possibile farlo modificando la sessione e impostando il contenitore desiderato. Per verificare il nome del container corrente, si può utilizzare la query show con_name.
[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. Tutti i diritti riservati.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options
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
Le descrizioni degli ID container sono le seguenti:
ID container |
Descrizione |
0 |
Intero CDB |
1 |
CDB$ROOT |
2 |
PDB$SEED |
Da 3 a 254 |
PDB |
Tabella 1. Descrizione degli ID container
In questo esempio specifico, con_id 3 rappresenta pdb1 e con_id 4 rappresenta 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. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options
SQL> show con_id;
CON_ID
0
SQL> show con_name;
CON_NAME
Non Consolidated
4.Utilizzando Enterprise Manager(EM) Express per la connessione al PDB
Quando il database viene creato utilizzando Database Configuration Assistant (DBCA), al momento del completamento l'URL per EM Express viene fornito da DBCA. L'URL ha il formato http://<hostname>:p ortnumber/em con 5500 come ID porta predefinito.
Prima di passare a tale URL per accedere a EM Express, è necessario rilasciare la seguente istruzione SQL per confermare la porta per EM Express:
SQL> SELECT dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
5500
Se l'output è come mostrato in precedenza, è possibile connettersi all'URL visualizzato da DBCA.
Tuttavia, se l'output è nullo, ad esempio
GETHTTPSPORT,
è necessario eseguire la procedura PL/SQL DBMS_XDB_CONFIG.SETHTTPSPORT per impostare la porta HTTPS per EM Express. Ad esempio:
SQL> exec dbms_xdb_config.sethttpsport(5500);
PL/SQL procedure successfully completed.
Dopo questa operazione, provare ad accedere a EM Express utilizzando l'URL.
Una porta HTTP può essere configurata per EM Express anche come indicato di seguito:
SQL> select dbms_xdb_config.gethttpport from dual;
SQL> exec dbms_xdb_config.sethttpport(8080);
Per impostare la porta EM Express per i PDB, è necessario modificare il container nei rispettivi PDB ed eseguire la procedura PL/SQL per impostare la porta per tale contenitore.
Dopo aver eseguito questa operazione, è possibile controllare la porta HTTP per cpdb, pdb1 e pdb2 come indicato di seguito:
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
NOTA: se non è ancora possibile connettersi all'URL di EM Express, ricaricare il controllo listener come utente grid e riprovare.