Blog - comments

Thanks a lot Franck. I agree to use FRA and RMAN deletion policy to manage standby site archived log...
RIck CHEN
I still say that you don't have to delete archivelogs because they are managed by oracle. That's the...
I don't know any documentation about those EC and ECJ. And I'm sorry I don't know the consequence of...
Hi Franck thanks for clarifying this. I was already wondering about the difference between EC and EC...
Reiner
Sometimes with a group of transactions generating many archived logs, shipped and applied on standby...
Rick Chen
Blog Olivier Toussaint Oracle Database 12c : démarrage automatique des Pluggable Databases

dbi services Blog

Welcome to the dbi services Blog! This IT blog focuses on database, middleware, and OS technologies such as Oracle, Microsoft SQL Server & SharePoint, EMC Documentum, MySQL, PostgreSQL, Sybase, Unix/Linux, etc. The dbi services blog represents the view of our consultants, not necessarily that of dbi services. Feel free to comment on our blog postings.

  • Home
    Home This is where you can find all the blog posts throughout the site.
  • Categories
    Categories Displays a list of categories from this blog.
  • Tags
    Tags Displays a list of tags that have been used in the blog.
  • Bloggers
    Bloggers Search for your favorite blogger from this site.

Oracle Database 12c : démarrage automatique des Pluggable Databases

Dans ce blog post, nous allons nous intéresser à la gestion des PDBs (Pluggable Database) dans Oracle 12c. Plus exactement, nous allons nous pencher sur l'arrêt et le démarrage automatiques des PDBs en utilisant le Server Control (srvctl) du Grid Infrastructure de la 12c.


Le contexte

Au préalable, il faut avoir installé Grid Infrastructure et créé une CDB (Container Database) avec une PDB. Nous allons utiliser le processus d'Oracle Restart pour gérer l'arrêt et le démarrage de notre PDB.

Pour cela, il nous faut:

  • Un conteneur : TST12C
  • Une PDB : PDB1
  • Un Grid  Infrastructure : +ASM

 

Regardons le contenu de nos services côté Grid Infrastructure après installation:

 

oracle@vmtest12c1:/home/oracle/ [+ASM] crsctl stat res -t

--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.FRA.dg
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.asm
               ONLINE  ONLINE       vmtest12c1               Started,STABLE
ora.ons
               OFFLINE OFFLINE      vmtest12c1               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       vmtest12c1               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       vmtest12c1               STABLE
ora.tst12c.db
      1        ONLINE  ONLINE       vmtest12c1               Open,STABLE
--------------------------------------------------------------------------------

 

Nous disposons :

  • De deux diskgroups ASM (DATA et FRA)
  • D'un listener LISTENER.lsnr
  • D'une base de données tst12c.db

 

Point de vérification:

Avant de commencer, vérifions l'état de notre Pluggable par un SELECT:

 

 SQL> select name, open_mode from v$pdbs;

NAME                              OPEN_MODE
------------------------------    ----------
PDB$SEED                           READ ONLY
PDB1                               MOUNTED

 

Cette pluggable PDB1 est bien présente en mode MOUNTED, état normal pour une PDB non démarée.

Passons aux choses sérieuses. Comme nous voulons gérer nos PDBs avec SRVCTL, il nous faut créer un service et une entrée dans le TNSNAMES.ora.

Les commandes de SRVCTL d'Oracle s'enrichissent avec cette nouvelle version 12c. Vous pouvez les consulter à la page suivante :

http://docs.oracle.com/cd/E16655_01/server.121/e17636/restart.htm#ADMIN5013

Vérifions les ervices avant de commencer sur notre Grid Infrastructure. Actuellement il n'y a aucun service sur notre base de données:



oracle@vmtest12c1:/home/oracle/ [TST12C] srvctl status service -db TST12C -verbose

Database TST12C does not have services


Création du service

Syntaxe : srvctl add service -db 'db_unique_name' -service 'service_name' -pdb 'Nom Pdb'

 oracle@vmtest12c1:/home/oracle/ [TST12C] srvctl add service -db TST12C -service -Mon_SRV -pdb pdb1


oracle@vmtest12c1:/home/oracle/
[TST12C]


Vérifions notre création et l'ensemble des services.

oracle@vmtest12c1:/home/oracle/ [TST12C] srvctl status service -db TST12C -verboseService Mon_SRV is running

oracle@vmtest12c1:/home/oracle/[+ASM] crsctl stat res -t

--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.FRA.dg
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.asm
               ONLINE  ONLINE       vmtest12c1               Started,STABLE
ora.ons
               OFFLINE OFFLINE      vmtest12c1               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       vmtest12c1               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       vmtest12c1               STABLE
ora.tst12c.db
      1        ONLINE  ONLINE       vmtest12c1               Open,STABLE
ora.tst12c.mon_srv.svc
      1        OFFLINE OFFLINE      vmtest12c1               STABLE
--------------------------------------------------------------------------------

 

Nous avons bien à notre disposition le service ora.tst12c.mon_srv.svc, vous remarquerez que celui-ci est OFFLINE.

 

Création de l'Alias du TNSNAMES.ora

Afin que l'on puisse accéder à notre PDB, nous allons l'intégrer dans le TNSNAMES.ora une nouvelle entrée comme suit.

 

PDB1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = Mon_srv)
    )
  )

 

Comme pour une instance, il suffit d'utiliser le Service_name du service créé précédement et de lui donner un alias. Ce service nous permettra de nous connecter à cette PDB (connect sys@SRV_PDB1 as sysdba)

Vérifions côté LISTENER si nous voyons notre service.

 

oracle@vmtest12c1:/home/oracle/ [+ASM] lsnrctl statusServices Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "Mon_SRV" has 1 instance(s).
  Instance "TST12C", status READY, has 1 handler(s) for this service...
Service "TST12C" has 1 instance(s).
  Instance "TST12C", status READY, has 1 handler(s) for this service...
Service "TST12CXDB" has 1 instance(s).
  Instance "TST12C", status READY, has 1 handler(s) for this service...
The command completed successfully


Aucune trace du service.


Essayons de nous connecter à notre PDB avec connect sys@SRV_PDB1 as sysdba.

Que se passe t-il ?

SQL> connect sys@SRV_PDB1 as sysdbaEnter password:ERROR:ORA-12154:TNS:could not resolve the connect identifier specified

 

Warning: You are no longer connected to ORACLE.


Aucune connexion. Ceci est tout à fait normal puisque notre service ora.tst12c.mon_srv.srv et notre PDB ne sont toujours pas démarrés.


Démarrons le service :


oracle@vmtest12c1:/home/oracle/ [TST12C] srvctl start service -db TST12C -service "Mon_SRV" -verbose

oracle@vmtest12c1:/home/oracle/ [TST12C]

oracle@vmtest12c1:/home/oracle/ [TST12C] srvctl status service -db TST12C -verbose

Service Mon_SRV is running

 

Procédons aux vérifications de nos ressources cluster (HAS), Listener et connexion à notre PDB:

oracle@vmtest12c1:/home/oracle/[+ASM] crsctl stat res -t

--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.FRA.dg
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.asm
               ONLINE  ONLINE       vmtest12c1               Started,STABLE
ora.ons
               OFFLINE OFFLINE      vmtest12c1               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       vmtest12c1               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       vmtest12c1               STABLE
ora.tst12c.db
      1        ONLINE  ONLINE       vmtest12c1               Open,STABLE
ora.tst12c.mon_srv.svc
      1        ONLINE ONLINE        vmtest12c1               STABLE
--------------------------------------------------------------------------------

 

Notre service ora.tst12c.mon_srv.srv est bien ONLINE et STABLE, par-contre il nous affiche pas l'état "Open" de la PDB comme pour la base de données.

oracle@vmtest12c1:/home/oracle/ [+ASM] lsnrctl statusServices Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "Mon_SRV" has 1 instance(s).
  Instance "TST12C", status READY, has 1 handler(s) for this service...
Service "TST12C" has 1 instance(s).
  Instance "TST12C", status READY, has 1 handler(s) for this service...
Service "TST12CXDB" has 1 instance(s).
  Instance "TST12C", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
  Instance "TST12C", status READY, has 1 handler(s) for this service...
The command completed successfully

 
Nous avons bien le service "Mon_SRV" instancié.

SQL> connect sys@SRV_PDB1 as sysdbaEnter password:Connected.

 

SQL> select name,open_mode, con_id from v$pdbs;

NAME                              OPEN_MODE        CON_ID
---------------------------       -------------   ---------
PDB$SEED                      READ ONLY          2
PDB1                              READ WRITE         3

La PDB est bien démarré et nous pouvons intérroger la base de données

 

SQL> select property_name, property_value from database_properties
  2  where property_name like 'DEFAULT_%TABLE%';

PROPERTY_NAME                  PROPERTY_VALUE
------------------------------  --------------
DEFAULT_TEMP_TABLESPACE                  TEMP
DEFAULT_PERMANENT_TABLESPACE            USERS


Arrêtons le service :


oracle@vmtest12c1:/home/oracle/ [TST12C] srvctl stop service -db TST12C -service "Mon_SRV" -force -verbose

oracle@vmtest12c1:/home/oracle/ [TST12C]



Notre service  "Mon_SRV s'est arrêté sans message.

Vérifions les services.

--------------------------------------------------------------------------------
Name           Target  State        Server                   State details
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.DATA.dg
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.FRA.dg
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       vmtest12c1               STABLE
ora.asm
               ONLINE  ONLINE       vmtest12c1               Started,STABLE
ora.ons
               OFFLINE OFFLINE      vmtest12c1               STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.cssd
      1        ONLINE  ONLINE       vmtest12c1               STABLE
ora.diskmon
      1        OFFLINE OFFLINE                               STABLE
ora.evmd
      1        ONLINE  ONLINE       vmtest12c1               STABLE
ora.tst12c.db
      1        ONLINE  ONLINE       vmtest12c1               Open,STABLE
ora.tst12c.mon_srv.svc
      1        OFFLINE OFFLINE      vmtest12c1               STABLE
--------------------------------------------------------------------------------


Le service ora.tst12c.mon_srv.svc est bien arrêté.


Vérifions maintenant coté PDB.


SQL> select name,open_mode, con_id from v$pdbs;

NAME                           OPEN_MODE      CON_ID
----------------------------   -----------     ------
PDB$SEED                       READ ONLY            2
PDB1                           READ WRITE           3



Il y a certainement un problème. Relançons l'arrêt de la PDB pour vérifier. A priori l'arrêt de notre PDB ne fonctionne pas avec SRVCTL, pour confimer testons encore une fois l'arret.


oracle@vmtest12c1:/home/oracle/ [TST12C] srvctl stop service -db TST12C -service "Mon_SRV" -force -verbosePRCR-1005 : Resource ora.tst12c.mon_srv.svc is already stopped

 

SRVCTL nous informe bien qu'il est déjà arrêté, c'est exact mais ou en est l'état de notre PDB.

SQL> select name,open_mode, con_id from v$pdbs;

NAME                        OPEN_MODE    CON_ID
--------------------------- ----------   ------
PDB$SEED                    READ ONLY          2
PDB1                        READ WRITE        3


Décevant ! Notre PDB est toujours READ/WRITE.

Nous allons tenter d'arrêter cette PDB avec SQLPLUS.


Connected to:Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit ProductionWith the Partitioning, Automatic Storage Management, OLAP, Advanced Analyticsand Real Application Testing optionsSQL> alter pluggable database pdb1 close;Pluggable database altered.SQL> alter pluggable database pdb1 close;Pluggable database altered.

 

SQL> select name, open_mode, con_id from v$pdbs;

NAME                       OPEN_MODE      CON_ID
------------------------   ----------     ------
PDB$SEED                   READ ONLY           2
PDB1                       MOUNTED             3

 

SQL> connect sys@SRV_PDB1 as sysdbaEnter password:ERROR:ORA-12514: TNS:listener does not currently know of service requested in connect descriptor


Magnifique ! Opération réalisée avec succès mais sans SRVCTL.

Pour résumer la commande SRVCTL Start fonctionne à contrario de la commande SVRCTL Stop.

Si vous ne souhaitez pas utiliser Server Control pour gérer vos PDBs, il est possible d'utiliser des Triggers.


Voici un exemple :


CREATE TRIGGER Start_Pdb
     after startup on database
begin
     execute immediate 'alter pluggable database all open';
     -- alter pluggable database pdb 'Nom Pdb' open
end Start_Pdb;
/

 

Conclusion

La technologie Grid Infrastucture qui embarque ASM et Oracle Restart améliore la disponibilité de la base de données.

Oracle Restart intégre les composants pour démarrer et arréter les PDBs, il est juste dommageable que l'arrêt de nos PDBs ne fonctionne pas.

Si vous ne disposez pas de Grid Infrastructure, la gestion (Démarrage / Arrêt) de vos PDBs se fera par triggers comme évoqué dans ce blog. Neanmoins, dbi services est en train de développer une solution simple et efficace pour la gestion de vos PDBs basée sur l'outil DMK (Database Management Kit) qui facilitera votre quotidien avec les PDBs.

Rate this blog entry:
2

Olivier Toussaint is Consultant at dbi services. He has more than fifteen years of experience in Oracle and Microsoft SQL Server technologies. He is specialized in Oracle databases (installation, migration, best practices, performance analyses, audit, etc.) and has some Microsoft SQL Server expertise. Olivier Toussaint is Oracle Certified Associate 11g (OCA 11g). He is also ITIL Foundation V3 certified. Prior to joining dbi services, Olivier Toussaint was Oracle trainer (OURC), Consultant, and Team Leader at Easyteam in Lyon (F). His branch-related experience covers Insurances, Health, Media, Financial Services / Banking, E-Commerce, Luxury Goods, etc.

Comments

  • No comments made yet. Be the first to submit a comment

Leave your comment

Guest Monday, 24 November 2014
AddThis Social Bookmark Button
Deutsch (DE-CH-AT)   French (Fr)

Contact

Contact us now!

Send us your request!

Our workshops

dbi FlexService SLA - ISO 20000 certified.

dbi FlexService SLA ISO 20000

Expert insight from insiders!

Fixed Price Services

dbi FlexService SLA - ISO 20000 certified.

dbi FlexService SLA ISO 20000

A safe investment: our IT services at fixed prices!

Your flexible SLA

dbi FlexService SLA - ISO 20000 certified.

dbi FlexService SLA ISO 20000

ISO 20000 certified & freely customizable!

dbi services Newsletter