S’applique à :
Base de données Oracle : Oracle 12cR1 12.1.0.1.0 Enterprise Edition
Système(s) d’exploitation : Oracle Linux 6.4 avec noyau 2.6.39-400.109.17.1.el6uek.x86-64 et
Red Hat Enterprise Linux avec noyau 2.6.32-431.el6.x86_64
Plateforme(s) de stockage : Dell EqualLogic PS 5000 et Dell EqualLogic PS 6110
Problème :
Comment se connecter à des bases de données enfichables dans Oracle RAC 12cR1 ?
Solution :
Il existe quatre façons d’établir une connexion avec les bases de données enfichables (PDB).
- À l’aide du service par défaut portant le même nom que la pdb, automatiquement créé par le logiciel de base de données.
- À l’aide de services définis par l’utilisateur, créés avec la propriété pdb à l’aide de l’utilitaire SRVCTL, qui associe le service aux bases de données enfichables.
- À l’aide de la commande alter session, en configurant le conteneur sur le conteneur souhaité.
- À l’aide d’Enterprise Manager Express.
1. Utilisation du service par défaut pour la connexion à la PDB
Pour établir une connexion avec la PDB à l’aide du service par défaut, vous devez effectuer les opérations suivantes.
- Une entrée doit être ajoutée au fichier tnsnames.ora, qui définit les adresses des bases de données qui nous permettent d’identifier une connexion à la base de données.
- L’état de la pdb doit être défini sur le mode lecture-écriture et non sur monté.
Entrée à ajouter au fichier tnsnames.ora :
Dans le cas d’Oracle RAC 12c, bien qu’un service par défaut portant le même nom que celui de la base de données enfichable soit automatiquement créé par le logiciel de base de données, le fichier tnsnames.ora est néanmoins généré avec une seule entrée pour la base de données globale. Par exemple, dans le cas d’une base Oracle RAC 12c à deux nœuds, où cpdb est la base de données globale, pdb1 et pdb2 sont les deux bases de données enfichables créées et cpdb1 et cpdb2 sont les deux instances, l’entrée par défaut dans le fichier tnsnames.ora est la suivante :
CPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = OracleRACscan.dbase.lab)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = cpdb.dbase.lab)
)
)
Il est donc nécessaire de créer des entrées pertinentes pour le nom de service par défaut des bases de données enfichables dans le fichier tnsnames.ora, comme indiqué ci-dessous :
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)
)
)
Modification de l’état de la base de données enfichable :
Lorsque les pdb sont créées, par défaut, l’open_mode est « Mounted ». Cela peut être déterminé comme suit :
SQL> select name, open_mode from v$pdbs ;
NAME OPEN_MODE
PDB$SEED READ ONLY
PDB1 MOUNTED
PDB2 MOUNTED
La commande suivante ouvre toutes les bases de données enfichables en mode lecture/écriture.
SQL> Alter pluggable database all open ;
Ensuite, la
connexion peut être établie avec la base de données à l’aide de sqlplus, comme suit :
[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. Utilisation du service défini par l’utilisateur pour la connexion à la PDB
Le service par défaut décrit ci-dessus doit être utilisé uniquement à des fins d’administration et ne doit pas être utilisé pour les applications. Pour les applications, vous devez toujours utiliser les services définis par l’utilisateur, car ils peuvent être personnalisés pour répondre aux exigences des applications. L’établissement d’une connexion à l’aide de services définis par l’utilisateur implique les opérations suivantes :
- Créer un service de base de données avec la propriété PDB à l’aide de l’utilitaire SRVCTL
- Créer une entrée dans le fichier tnsnames.ora pour le service créé
- Démarrer le service
- Se connecter à la base de données à l’aide du service avec la propriété PDB, créée à l’étape a
a. Créer un service de base de données avec la propriété PDB à l’aide de l’utilitaire SRVCTL
Les commandes suivantes de l’utilitaire SRVCTL créent deux services de base de données, hr1 et sales1, à associer à la base de données enfichable 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 propriété pdb peut être consultée à partir de la vue du dictionnaire de données all_services.
SQL> SELECT NAME, PDB FROM all_services;
NAME PDB
pdb1.dbase.lab PDB1
hr1 PDB1
sales1 PDB1
La commande $ srvctl config service –db <databasename> répertorie également les services disponibles.
b. Créer une entrée dans le fichier tnsnames.ora pour le service de base de données créé
Nous pouvons créer les noms de service Internet HR_PDB1 et SALES_PDB1, que l’application hr et l’application sales peuvent utiliser, respectivement, pour se connecter à la base de données enfichable PDB1, comme suit :
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. Démarrer le service
[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
Le démarrage du service associé à une pdb ouvre automatiquement la pdb en mode lecture-écriture.
d. Se connecter au service de base de données
Un utilisateur se connecte à la pdb à l’aide d’un service de base de données avec la propriété pdb.
Par exemple, l’utilisateur SYS peut se connecter à la pdb1 à l’aide du service de base de données HR_PDB1 associé à pdb1, comme suit :
SQL> connect sys/oracle@HR_PDB1 AS SYSDBA
Connected.
SQL> SHOW CON_ID;
CON_ID
3
SQL> SHOW CON_NAME;
CON_NAME
PDB1
3. Utilisation de la commande Alter Session pour la connexion à la PDB
Par défaut, lorsque vous vous connectez à l’instance RAC, vous vous connectez à CDB$ROOT. Chaque instance RAC ouvre l’intégralité de la PDB et une seule image système est disponible. Lorsque vous souhaitez modifier la session sur une pdb, vous pouvez modifier la session et configurer le conteneur sur le conteneur souhaité. La requête show con_name peut être utilisée pour vérifier le nom du conteneur actif.
[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.
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
Les descriptions de l’ID du conteneur sont les suivantes :
ID de conteneur |
Description |
0 |
ID de conteneur |
1 |
CDB$ROOT |
2 |
PDB$SEED |
3 vers 254 |
PDB |
Tableau 1 : Description des ID de conteneur
Dans cet exemple spécifique, con_id 3 représente la pdb1 et con_id 4 représente la 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. Utilisation d’Enterprise Manager (EM) Express pour la connexion à la PDB
Lorsque la base de données est créée à l’aide de l’Assistant de configuration de base de données (DBCA), au moment de l’achèvement, l’URL d’EM Express est fournie par le DBCA. L’URL est au format http://<hostname>:portnumber/em, avec 5500 comme ID de port parr défaut.
Avant d’accéder à l’URL d’EM Express, il est nécessaire d’émettre l’instruction SQL suivante pour confirmer le port d’EM Express :
SQL> SELECT dbms_xdb_config.gethttpsport from dual;
GETHTTPSPORT
5500
Si le résultat est tel qu’illustré ci-dessus, vous pouvez vous connecter à l’URL affichée par le DBCA.
Toutefois, si le résultat est nul, tel que
GETHTTPSPORT
il faut exécuter la procédure PL/SQL, DBMS_XDB_CONFIG.SETHTTPSPORT pour définir le port HTTPS pour EM Express. Par exemple :
SQL> exec dbms_xdb_config.sethttpsport(5500);
Procédure PL/SQL réussie.
Ensuite, essayez d’accéder à EM Express à l’aide de l’URL.
Un port HTTP peut également être configuré pour EM Express, comme indiqué ci-dessous :
SQL> select dbms_xdb_config.gethttpport from dual;
SQL> exec dbms_xdb_config.sethttpport(8080);
Pour définir le port EM Express pour les pdbs, vous devez remplacer le conteneur des pdbs correspondantes et exécuter la procédure PL/SQL pour définir le port de ce conteneur.
Ensuite, vous pouvez vérifier le port HTTP pour les cpdb,pdb1 et pdb2, comme suit :
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
Remarque : Si vous ne parvenez toujours pas à vous connecter à l’URL d’EM Express, rechargez le contrôle d’écoute en tant qu’utilisateur de la grille, puis réessayez.