L’utilitaire SRVCTL

L’utilitaire permet automatiquement de gérer tous les composants qui ont inscrits dans la liste de gestion du service Oracle Restart. Plusieurs opérations de création des éléments créés manuellement sans utiliser un utilitaire Oracle, comme par exemple la création d’une base de données manuellement, n’ajoutent pas ces éléments dans la liste. Il est possible dans ce cas de les ajouter à l’aide de l’utilitaire « SRVCTL ».

en savoir

Chaque fois que créez une base de données manuellement à l’aide des scripts, vous devez par la suite l’ajouter à la configuration du service Oracle Restart. Pour ajouter une configuration de base de données, vous devez renseigner le nom unique « db_unique_name », le nom de la base « db_name » s’il est différent du nom unique, le nom du domaine si « db_domain » à été renseigné, ainsi que le répertoire d'origine « ORACLE_HOME ».

[oracle@saturne ~]$ . oraenv

ORACLE_SID = [+ASM] ? rubis

The Oracle base remains unchanged with value /u01/app/oracle

[oracle@saturne ~]$ ls $ORACLE_HOME/dbs/orapwrubis

/u01/app/oracle/product/12.1.0/db_home/dbs/orapwrubis

[oracle@saturne ~]$sqlplus / as sysdba

SYS@rubis>select name,value from v$parameter

  2  where name in ('db_name','db_unique_name','db_domain','spfile') ;

 

NAME            VALUE

--------------- -----------------------------------------------------------

spfile          /u01/app/oracle/product/12.1.0/db_home/dbs/spfilerubis.ora

db_domain       olimp.fr

db_name         rubis

db_unique_name  rubis

SYS@rubis> create pfile from spfile;

Fichier créé.

SYS@rubis> shutdown immediate

Base de données fermée.

Base de données démontée.

Instance ORACLE arrêtée.

SYS@rubis>create spfile='+GD_DONNEES/rubis/spfilerubis.ora' FROM

  2  pfile='/u01/app/oracle/product/12.1.0/db_home/dbs/initrubis.ora';

Fichier créé.

SYS@rubis>exit

[oracle@saturne ~]$ rm $ORACLE_HOME/dbs/spfilerubis.ora

[oracle@saturne ~]$ echo "SPFILE='+GD_DONNEES/rubis/spfilerubis.ora'" > $ORACLE_HOME/dbs/initrubis.ora

[oracle@saturne ~]$ cat $ORACLE_HOME/dbs/initrubis.ora

SPFILE='+GD_DONNEES/rubis/spfilerubis.ora'

[oracle@saturne ~]$ orapwd file=+GD_DONNEES/rubis/orapwrubis dbuniquename=rubis force=y format=12

 

Enter password for SYS: XXXX

[oracle@saturne ~]$ . oraenv

ORACLE_SID = [rubis] ? +ASM

The Oracle base remains unchanged with value /u01/app/oracle

[oracle@saturne ~]$ srvctl add database -db rubis -oraclehome /u01/app/oracle/product/12.1.0/db_home -domain olimp.fr -spfile +GD_DONNEES/rubis/spfilerubis.ora -pwfile +GD_DONNEES/rubis/orapwrubis     -startoption OPEN -stopoption IMMEDIATE -dbname rubis -policy AUTOMATIC    -diskgroup "GD_DONNEES,GD_RECUPERATIONS,GD_ARCHIVES"

[oracle@saturne ~]$ srvctl start database -db rubis

[oracle@saturne ~]$ srvctl config database -db rubis

Nom de base de données unique : rubis

Nom de la base de données : rubis

Répertoire d'origine Oracle Home : /u01/app/oracle/product/12.1.0/db_home

Utilisateur Oracle : oracle

Fichier SPFILE : +GD_DONNEES/rubis/spfilerubis.ora

Fichier de mots de passe : +GD_DONNEES/rubis/orapwrubis

Domaine : olimp.fr

Options de démarrage : open

Options d'arrêt : immediate

Rôle de base de données : PRIMARY

Stratégie de gestion : AUTOMATIC

Instance de base de données : rubis

Groupes de disques : GD_DONNEES,GD_RECUPERATIONS,GD_ARCHIVES

Services :

[oracle@saturne ~]$ srvctl config listener

Nom : LISTENER

Répertoire d'origine : /u01/app/oracle/product/12.1.0/db_home

Adresses : TCP:1521

[oracle@saturne ~]$ srvctl config asm

Répertoire d'origine ASM : /u01/app/oracle/product/12.1.0/gr_home

Fichier de mots de passe : +S_ASM/orapwasm

Processus d'écoute ASM : LISTENER

Fichier SPFILE : +S_ASM/ASM/ASMPARAMETERFILE/registry.253.840462859

Chaîne de repérage du groupe de disques ASM : /dev/oracleasm/disks

[oracle@saturne ~]$ srvctl config

opale

rubis

saphir

Pour arrêter les ressources il faut procéder dans l’ordre de leurs dépendances, ainsi vous ne pouvez arrêter un group de disques ou directement l’instance ASM sans arrêter d’abord les bases de données qui ont besoin de cette ressource. Par contre si vous demandez le démarrage d’une ressource alors le service Oracle Restart s’assure de démarrage de toutes les ressources nécessaires. Ainsi le démarrage des la base de données « rubis », stockée dans l’instance ASM et référencée par le processus LISTENER démarre automatiquement l’instance ASM et le processus LISTENER précédemment arrêtés.

[oracle@saturne ~]$ srvctl stop asm

PRCR-1065 : Echec de l'arrêt de la ressource ora.asm

CRS-2529: Unable to act on 'ora.asm' because that would require stopping or relocating 'ora.GD_ARCHIVES.dg', but the force option was not specified

[oracle@saturne ~]$ srvctl stop listener

[oracle@saturne ~]$ srvctl stop database -d rubis

[oracle@saturne ~]$ srvctl stop database -d opale

[oracle@saturne ~]$ srvctl stop database -d saphir

[oracle@saturne ~]$ srvctl stop diskgroup -g S_ASM

[oracle@saturne ~]$ srvctl stop diskgroup -g GD_ARCHIVES

[oracle@saturne ~]$ srvctl stop diskgroup -g GD_DONNEES

[oracle@saturne ~]$ srvctl stop diskgroup -g GD_RECUPERATIONS

[oracle@saturne ~]$ srvctl stop asm

[oracle@saturne ~]$ srvctl start database -d rubis

[oracle@saturne ~]$ srvctl status listener

Le processus d'écoute LISTENER est activé

Le processus d'écoute LISTENER est en cours d'exécution sur les noeuds : saturne

[oracle@saturne ~]$ srvctl status asm -a

ASM est en cours d'exécution sur saturne

ASM est activé.

[oracle@saturne ~]$ srvctl start database -d opale

[oracle@saturne ~]$ srvctl start database -d saphir

Les composants sont démarrés avec la configuration qui a été définie dans le référentiel du service Oracle Restart. Il est possible pour chaque ressource de définir un ensemble de variables d’environnement qui seront stockées dans le référentiel du service Oracle Restart et vous n’avez plus besoin de les redéfinir.

[oracle@saturne ~]$ srvctl config database -d rubis

Nom de base de données unique : rubis

Nom de la base de données : rubis

Répertoire d'origine Oracle Home : /u01/app/oracle/product/12.1.0/db_home

Utilisateur Oracle : oracle

Fichier SPFILE : +GD_DONNEES/rubis/spfilerubis.ora            <------

...

[oracle@saturne ~]$ . oraenv

ORACLE_SID = [+ASM] ? rubis

[oracle@saturne ~]$ sqlplus / as sysdba

SYS@rubis>show parameter spfile

NAME       TYPE        VALUE

---------- ----------- ----------------------------------

spfile     string     +GD_DONNEES/rubis/spfilerubis.ora

SYS@rubis>!ls $ORACLE_HOME/dbs/*rubis.ora

/u01/app/oracle/product/12.1.0/db_home/dbs/initrubis.ora

SYS@rubis>!cat $ORACLE_HOME/dbs/initrubis.ora

SPFILE='+GD_DONNEES/rubis/spfilerubis.ora'

SYS@rubis>!rm $ORACLE_HOME/dbs/initrubis.ora

SYS@rubis>shutdown immediate

Base de données fermée.

Base de données démontée.

Instance ORACLE arrêtée.

SYS@rubis> startup

Instance ORACLE lancée.

...

Base de données montée.

Base de données ouverte.

SYS@rubis>show parameter spfile

NAME       TYPE        VALUE

---------- ----------- ----------------------------------

spfile     string      +GD_DONNEES/rubis/spfilerubis.ora

SYS@rubis>create pfile from spfile;

Fichier créé.

SYS@rubis>shutdown immediate

Base de données fermée.

Base de données démontée.

Instance ORACLE arrêtée.

SYS@rubis>create spfile from pfile;

Fichier créé.

SYS@rubis>!ls $ORACLE_HOME/dbs/*rubis.ora

/u01/app/oracle/product/12.1.0/db_home/dbs/initrubis.ora  /u01/app/oracle/product/12.1.0/db_home/dbs/spfilerubis.ora

SYS@rubis>startup

Instance ORACLE lancée.

...

Base de données montée.

Base de données ouverte.

SYS@rubis>show parameter spfile

NAME       TYPE        VALUE

---------- ----------- ----------------------------------

spfile     string      +GD_DONNEES/rubis/spfilerubis.ora

SYS@rubis>exit

[oracle@saturne ~]$ . oraenv

ORACLE_SID = [rubis] ? +ASM

The Oracle base remains unchanged with value /u01/app/oracle

[oracle@saturne ~]$ srvctl modify database -db rubis -spfile /u01/app/oracle/product/12.1.0/db_home/dbs/spfilerubis.ora

[oracle@saturne ~]$ srvctl config database -d rubis

Nom de base de données unique : rubis

Nom de la base de données : rubis

Répertoire d'origine Oracle Home : /u01/app/oracle/product/12.1.0/db_home

Utilisateur Oracle : oracle

Fichier SPFILE : /u01/app/oracle/product/12.1.0/db_home/dbs/spfilerubis.ora

...

Lorsque vous créez manuellement un processus LISTENER, vous ne pouvez plus l’ajouter dans la liste des éléments gérés par le service Oracle Restart. Il faut d’abord l’insérer dans la liste et ensuite configurer le fichier « listener.ora », les fichiers « tnsnames.ora » et aussi la base de données. Voici la démarche pour créer trois processus LISTENER, un pour chaque base de données existante sur le serveur.

[oracle@saturne ~]$ . oraenv

ORACLE_SID = [rubis] ? +ASM

The Oracle base remains unchanged with value /u01/app/oracle

[oracle@saturne ~]$ srvctl add listener -l lsnr_rubis -p TCP:1522 -o /u01/app/oracle/product/12.1.0/db_home

[oracle@saturne ~]$ srvctl add listener -l lsnr_opale -p TCP:1523 -o /u01/app/oracle/product/12.1.0/db_home

[oracle@saturne ~]$ srvctl add listener -l lsnr_saphir -p TCP:1524 -o /u01/app/oracle/product/12.1.0/db_home

[oracle@saturne ~]$ srvctl config listener -l lsnr_rubis

Nom : LSNR_RUBIS

Répertoire d'origine : /u01/app/oracle/product/12.1.0/db_home

Adresses : TCP:1522

[oracle@saturne ~]$ srvctl config listener -l lsnr_opale

Nom : LSNR_OPALE

Répertoire d'origine : /u01/app/oracle/product/12.1.0/db_home

Adresses : TCP:1523

[oracle@saturne ~]$ srvctl config listener -l lsnr_saphir

Nom : LSNR_SAPHIR

Répertoire d'origine : /u01/app/oracle/product/12.1.0/db_home

Adresses : TCP:1524

[oracle@saturne ~]$ echo "LSNR_RUBIS=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=saturne.olimp.fr)(PORT=1522)))">> $TNS_ADMIN/listener.ora

[oracle@saturne ~]$ echo "LSNR_OPALE=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=saturne.olimp.fr)(PORT=1523)))">> $TNS_ADMIN/listener.ora

[oracle@saturne ~]$ echo "LSNR_SAPHIR=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=saturne.olimp.fr)(PORT=1524)))">> $TNS_ADMIN/listener.ora

[oracle@saturne ~]$ cat $TNS_ADMIN/listener.ora

...

LSNR_RUBIS=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=saturne.olimp.fr)(PORT=1522)))

LSNR_OPALE=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=saturne.olimp.fr)(PORT=1523)))

LSNR_SAPHIR=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=saturne.olimp.fr)(PORT=1524)))

...

[oracle@saturne ~]$ srvctl start listener -l lsnr_rubis

[oracle@saturne ~]$ srvctl start listener -l lsnr_opale

[oracle@saturne ~]$ srvctl start listener -l lsnr_saphir

[oracle@saturne ~]$ srvctl status listener -l lsnr_rubis

Le processus d'écoute LSNR_RUBIS est activé

Le processus d'écoute LSNR_RUBIS est en cours d'exécution sur les noeuds : saturne

[oracle@saturne ~]$ srvctl status listener -l lsnr_opale

Le processus d'écoute LSNR_OPALE est activé

Le processus d'écoute LSNR_OPALE est en cours d'exécution sur les noeuds : saturne

[oracle@saturne ~]$ srvctl status listener -l lsnr_saphir

Le processus d'écoute LSNR_SAPHIR est activé

Le processus d'écoute LSNR_SAPHIR est en cours d'exécution sur les noeuds : saturne

[oracle@saturne ~]$ sqlplus /nolog <<fin

> connect sys/Razvanpwd3@rubis as sysdba

> alter system set local_listener=

> '(description=(address=(protocol=tcp)

>               (host=saturne.olimp.fr)(port=1522)))';

> connect sys/Razvanpwd3@opale as sysdba

> alter system set local_listener=

> '(description=(address=(protocol=tcp)

>               (host=saturne.olimp.fr)(port=1523)))';

> connect sys/Razvanpwd3@saphir as sysdba

> alter system set local_listener=

> '(description=(address=(protocol=tcp)

>               (host=saturne.olimp.fr)(port=1524)))';

> exit;

> fin

[oracle@saturne ~]$ lsnrctl status lsnr_rubis

...

Le service "rubis.olimp.fr" comporte 1 instance(s).

  L'instance "rubis", statut READY, comporte 1 gestionnaire(s) pour ce service...

[oracle@saturne ~]$ lsnrctl status lsnr_opale

...

Le service "opale.olimp.fr" comporte 1 instance(s).

  L'instance "opale", statut READY, comporte 1 gestionnaire(s) pour ce service...

[oracle@saturne ~]$ lsnrctl status lsnr_saphir

...

Le service "saphir" comporte 1 instance(s).

  L'instance "saphir", statut READY, comporte 1 gestionnaire(s) pour ce service...

L’utilitaire « srvctl » permet de créer et d’attacher dans le référentiel un service de base de données afin d’être démarré automatiquement au démarrage de la base de données.

[oracle@saturne ~]$ srvctl add service -db opale -s quartz.olimp.fr -policy automatic

[oracle@saturne ~]$ srvctl start service -db opale -s quartz.olimp.fr

[oracle@saturne ~]$ srvctl status service -db opale -s quartz.olimp.fr

Le service quartz.olimp.fr est en cours d'exécution

[oracle@saturne ~]$ srvctl config service -db opale -s quartz.olimp.fr

Nom de service : quartz.olimp.fr

Le service est activé

Cardinalité : SINGLETON

Déconnexion : False

Rôle du service : PRIMARY

Stratégie de gestion : AUTOMATIC

...

[oracle@saturne ~]$ sqlplus / as sysdba

SYS@opale>select name,network_name from dba_services;

 

NAME               NETWORK_NAME

------------------ -----------------

SYS$BACKGROUND    

SYS$USERS         

opaleXDB           opaleXDB

opale.olimp.fr     opale.olimp.fr

quartz.olimp.fr    quartz.olimp.fr

 

SYS@opale>connect system/Razvanpwd3@//saturne.olimp.fr:1521/quartz.olimp.fr

Connecté.

SYSTEM@quartz> select name,open_mode,db_unique_name,instance_name,

  2  host_name,version from v$database,v$instance;

 

NAME OPEN_MODE    DB_UNIQUE_NA INSTANCE_NAM HOST_NAME    VERSION

-------- ------------ ------------ ------------ ---------------- ----------

OPALE      READ WRITE   opale        opale    saturne.olimp.fr 12.1.0.1.0

SYSTEM@quartz> exit

[oracle@saturne ~]$ srvctl stop database -db opale

[oracle@saturne ~]$ srvctl start database -db opale

[oracle@saturne ~]$ srvctl status service -db opale -s quartz.olimp.fr

Le service quartz.olimp.fr est en cours d'exécution