Outils personnels

RAC database sur Enterprise Edition : Différence entre versions

De wikiGite

(Installer Clusterware)
Ligne 774 : Ligne 774 :
 
  # cd /u01/crs/oracle/product/10.2.0/crs/bin
 
  # cd /u01/crs/oracle/product/10.2.0/crs/bin
 
  # ./vipca
 
  # ./vipca
* Cliquer sur « Next » sur l'écran d'accueil.
+
** Cliquer sur « Next » sur l'écran d'accueil.
* Sélectionner eth0 et cliquer sur « Next »
+
** Sélectionner eth0 et cliquer sur « Next »
* Entrer les adresse IP  virtuelles de chaque noeud.
+
** Entrer les adresse IP  virtuelles de chaque noeud.
* Accepter le résumé en cliquant sur « Finish ».
+
** Accepter le résumé en cliquant sur « Finish ».
 
Attendre la fin de l'installation pour valider le résultat en cliquant sur « Exit ».
 
Attendre la fin de l'installation pour valider le résultat en cliquant sur « Exit ».
  

Version du 11 février 2011 à 10:54

Composants de RAC

Dans le cadre d’un cluster RAC, la couche cluster peut être gérée par une couche logicielle provenant de fournisseurs tiers :

  • Sun Cluster
  • IBM HACMP
  • Veritas Cluster ...

Oracle fournit sa propre couche cluster dénommée Cluster Ready Services ou CRS (ClusterWare depuis la version 10g)

Les processus principaux

L’ensemble de processus constituant le CRS est composé :

  • de 3 processus d’arrière plans (CRS, CSS et EVM)
  • d’un ensemble de processus supplémentaires gérant la communication avec les autres couches du cluster (Base de données, applications etc.)

NB : Sous Windows, les processus sont des threads rattachés au processus oracle.exe.

le processus CRS

Le processus CRS (CRS pour Cluster Ready Services) est la brique maîtresse du clusterWare Oracle. C’est ce processus qui gère les opérations de haute disponibilité dans le cluster. Le CRS gère l’ensemble des applications intégrées au cluster (Database, instance, service, listener etc.) définies et référencées dans l’OCR (cf définition plus loin).

Le CRS détecte les changements d’états de ressources. C’est le processus CRS qui redémarre automatiquement les ressources en cas de faute. Et ce, si la définition de la ressource dans l’OCR l’en autorise.

  • Ce processus est propriété de l’utilisateur root.
  • Son démarrage est piloté dans l’inittab du serveur par des scripts d’init.
  • Il redémarre automatiquement en cas d’arrêt.
  • Sous unix, il apparait dans la liste des processus sous le nom : crsd.bin

Par défaut, les fichiers de journaux et de trace de ce processus sont stockés dans : $CRS_HOME/log/$HOSTNAME/crsd/crsd.log

le processus CSS

Le processus CSS (CSS pour Cluster Synchronisation Services) gère la configuration du cluster dans l’évolution de l’appartenance (et de la non-appartenance) des noeuds au cluster.

C’est ce processus qui informe les autres noeuds la présence de nouveau noeud, ou du retrait d’anciens noeuds.

  • Ce processus est propriété de l’utilisateur oracle
  • Son démarrage est piloté dans l’inittab du serveur par des scripts d’init.
  • Son arrêt inopiné engendre le redémarrage du noeud.
  • Sous unix, il apparait dans la liste des processus sous le nom : ocssd.bin

Par défaut, les fichiers de journaux et de trace de ce processus sont stockés dans : $CRS_HOME/log/$HOSTNAME/cssd/ocssd.log

le processus EVM

Le processus EVM (EVM pour EVent Management) enregistre tous les événements enregistrés dans le cluster. Ce processus va publier les événements que le CRS génère. Pour cela, il va enregistrer ces événements dans le répertoire du logger ($CRS_HOME/evm/log) et exécuter (via le processus evmlogger, fils du processus evmd) les appels demandés.

  • Ce processus est propriété de l’utilisateur oracle
  • Son démarrage est piloté dans l’inittab du serveur par des scripts d’init.
  • Sous unix, il apparait dans la liste des processus sous le nom : evmd.bin.

Par défaut, les fichiers de journaux et de trace de ce processus sont stockés dans : $CRS_HOME/log/$HOSTNAME/evmd/log/evmd.log

Les fichiers d’événements sont dans $CRS_HOME/evm/log

Les processus annexes

OPROCD

Oprocd est un processus résident en mémoire. Ce processus surveille le cluster et réalise le "fencing" du cluster, (le Fencing est un isolement primitif d’un noeud lors d’une défaillance de celui-ci.). Lors de ce fencing, oprocd effectue des vérifications de fonctionnement, puis se fige. Si le reveil de l’OProcd n’a pas lieu avant une durée configurée, celui-ci procède au redémarrage du noeud du cluster.

RACG

Les processus RACG étendent le fonctionnement du clusterWare aux besoins des produits Oracle.

ONS (Oracle Notification Service)

ONS est un service simple fonctionnement en PUSH permettant la diffusion de message à tous les noeuds du cluster.

Les fichiers ou disques de gestion

le registre du cluster ou Oracle Cluster Registry ou OCR

Le registre du cluster ou OCR est un fichier ou disque partagé du cluster qu’il convient de sécuriser (réplication baie, multiplexage).

Cet OCR contient la définition des éléments constitutifs du cluster ainsi que leur état.

On y trouvera entre autres : la définition noeuds, les interfaces réseaux, les adresses VIP, les bases de données, la définition et le paramétrage des ressources, leur dépendances etc etc.

Ce fichier est mis à jour automatiquement lorsque l’administrateur utilise les outils de configurations comme srvctl, crs_register, crsctl).

On obtient les informations sur l’OCR par la commande ocrcheck :

# $CRS_HOME/bin/ocrcheck 
Status of Oracle Cluster Registry is as follows : 
       Version                  :          2 
       Total space (kbytes)     :     513652 
       Used space (kbytes)      :       5152 
       Available space (kbytes) :     508500 
       ID                       : 1318599504 
       Device/File Name         : /dev/rdsk/c3t8d0s1 
                                  Device/File integrity check succeeded 
       Device/File Name         : /dev/rdsk/c4t10d0s1 
                                  Device/File integrity check succeeded 

       Cluster registry integrity check succeeded 

NB : Lorsqu’on reconfigure un service comme vu dans cet article , on modifie directement les entrées de la ressource définie dans l’OCR

Le disque votant ou Voting Disk

Le disque votant est un périphérique disque partagé permettant de gérer l’appartenance au cluster. De ce fait, il est intimement lié au processus CSS. De plus, il permet les arbitrage d’appartenance au cluster lorsque tous les liens d’interconnexions sont rompus.

On obtient les informations des disques votant avec la commande crsctl :

# $CRS_HOME/bin/crsctl query  css votedisk 
0.     0    /dev/rdsk/c3t8d0s3 
1.     0    /dev/rdsk/c4t10d0s3 
2.     0    /dev/rdsk/c3t9d0s3 

located 3 votedisk(s). 

Il est recommandé de multiplexer de manière impaire le disque votant. Si il est unique, alors la redondance du support devra être assurée (par une baie, ou tout autre mécanisme).

Sa taille est d’environ 50Mo par fichier.

Principes

Sur les noeuds du cluster

Certains éléments sont spécifiques à chaque noeud du cluster, d'autres son partagés par tous.

Stockage

Les noeuds (2 ou plus) disposent chacun, individuellement, des binaires Oracle, ainsi que des fichiers d'initialisation (PFILE ou SPFILE selon la configuration de départ).

Tous les noeuds partagent les disques OCR et Voting Disk. Ils partagent également les disques de données (où sont stockés les fichiers des bases en cluster).

Adresses réseau

Chaque serveur dispose de 3 adresses réseau : Une adresse publique sur le réseau local, utilisée pour accéder à la machine en dehors d'Oracle Une adresse virtuelle (VIP), dans la même plage d'adresse du réseau local, initialisée par Oracle lorsque le cluster démarre, utilisée par les clients Oracle pour accéder aux bases en RAC (cf plus bas configuration des clients) Une adresse privée, dédiée au lien entre les noeuds du cluster. Cette adresse est dans une plage non utilisée sur le réseau local ; le lien peut passer par le réseau (non conseillé) ou être un lien croisé (entre deux noeuds) ou un « mini »-réseau dédié entre plusieurs noeuds.

Listeners

Deux modes sont disponibles, sans être exclusifs (les deux peuvent être activés simultanément) :

  • FAILOVER (TAF : Transparent Application Failover)

Oracle RAC propose le FAILOVER en configurant un listener par noeud du cluster afin de gérer les requêtes de connexion à un même service (un service représente une base de données enregistrée auprès des listener du cluster). Si un noeud ou une interconnexion échoue, l'adresse IP virtuelle (VIP) est réallouée à un noeud survivant, permettant la notification de panne rapide aux clients connectés par cette VIP. Si le client (ET l'application) sont compatibles et configurés pour le TAF, le client est reconnecté à un noeud actif.

  • LOAD BALANCING

Oracle RAC propose l'équilibrage de charge en distribuant les connexions entre les DISPATCHERS des noeuds du cluster, qui eux-même répartissent ces requêtes sur les instances des bases en cluster des noeuds les moins chargés.

Plusieurs LISTENER sont donc déclarés, au moins un par noeud. Chaque noeud connait son propre LISTENER et les LISTENER des autres noeuds. Exemple de configuration sur le premier noeud d'un cluster :

LISTENER_RAC1= 
 (DESCRIPTION_LIST =
 (DESCRIPTION= 
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521)(IP = FIRST))
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)(IP = FIRST)))
SID_LIST_LISTENER_RAC1= 
  (SID_LIST= 
    (SID_DESC= 
      (SID_NAME=) 
      (ORACLE_HOME=/u01/app/oracle/11/db_1) 

Il en va de même pour les clients.

Sur les clients

Le tableau suivant résume les options disponibles pour le TNSNAMES.ORA (le client doit obligatoirement être en version 10g minimum).

OptionParameter Setting
Try each address, in order, until one succeedsFAILOVER=on
Try each address, randomly, until one succeeds
Note: This option is not enabled if Use Options Compatible with Net8 8.0 Clients is selected in Oracle Net Manager.
LOAD_BALANCE=on
FAILOVER=on
Try one address, selected at random
Note: This option is not enabled if Use Options Compatible with Net8 8.0 Clients is selected in Oracle Net Manager.
LOAD_BALANCE=on
Use each address in order until destination reachedSOURCE_ROUTE=on
Use only the first address
Note: This option is not enabled if Use Options Compatible with Net8 8.0 Clients is selected in Oracle Net Manager.
LOAD_BALANCE=off
FAILOVER=off
SOURCE_ROUTE=off

TAF (Transparent Application Failover)

Exemples de configuration (source : http://download.oracle.com/docs/cd/B28359_01/network.111/b28316/advcfg.htm) :

Example: TAF with Connect-Time Failover and Client Load Balancing

Implement TAF with connect-time failover and client load balancing for multiple addresses. In the following example, Oracle Net connects randomly to one of the protocol addresses on sales1-server or sales2-server. If the instance fails after the connection, the TAF application fails over to the other node's listener, reserving any SELECT statements in progress.

sales.us.example.com=
 (DESCRIPTION=
  (LOAD_BALANCE=on) 
  (FAILOVER=on) 
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales2-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.example.com) 
     (FAILOVER_MODE=
       (TYPE=select) 
       (METHOD=basic))))

Example: TAF Retrying a Connection

TAF also provides the ability to automatically retry connecting if the first connection attempt fails with the RETRIES and DELAY parameters. In the following example, Oracle Net tries to reconnect to the listener on sales1-server. If the failover connection fails, Oracle Net waits 15 seconds before trying to reconnect again. Oracle Net attempts to reconnect up to 20 times.

sales.us.example.com=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.example.com) 
     (FAILOVER_MODE=
       (TYPE=select) 
       (METHOD=basic)
       (RETRIES=20)
       (DELAY=15))))

Example: TAF Pre-Establishing a Connection

A backup connection can be pre-established. The initial and backup connections must be explicitly specified. In the following example, clients that use net service name sales1.us.example.com to connect to the listener on sales1-server are also preconnected to sales2-server. If sales1-server fails after the connection, Oracle Net fails over to sales2-server, preserving any SELECTstatements in progress. Likewise, Oracle Net preconnects to sales1-server for those clients that use sales2.us.example.com to connect to the listener on sales2-server.

sales1.us.example.com=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales1-server)  
      (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.example.com) 
     (INSTANCE_NAME=sales1) 
     (FAILOVER_MODE=
       (BACKUP=sales2.us.example.com) 
       (TYPE=select) 
       (METHOD=preconnect))))
sales2.us.example.com=
 (DESCRIPTION=
  (ADDRESS=
       (PROTOCOL=tcp)  
       (HOST=sales2-server)  
       (PORT=1521)) 
  (CONNECT_DATA=
     (SERVICE_NAME=sales.us.example.com) 
     (INSTANCE_NAME=sales2)
     (FAILOVER_MODE=
       (BACKUP=sales1.us.example.com) 
       (TYPE=select) 
       (METHOD=preconnect))))

LOAD BALANCING

Exemples de configuration (même source que ci-dessus) :

The following example shows a TNSNAMES.ORA file configured for client load balancing:

sales.us.example.com=
 (DESCRIPTION=
  (ADDRESS_LIST=
  (LOAD_BALANCE=on)
   (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) 
   (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
  (CONNECT_DATA=
    (SERVICE_NAME=sales.us.example.com))) 

The following example shows a tnsnames.ora file configured for connect-time failover:

sales.us.example.com=
 (DESCRIPTION=
  (ADDRESS_LIST=
   (LOAD_BALANCE=off)
   (FAILOVER=ON)
   (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-server)(PORT=1521)) 
   (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-server)(PORT=1521)))
  (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)))

Installation

L'installation sera documentée avec les éléments suivants :

  • 2 noeuds dans le cluster (« rac1 » et « rac2 »), serveur 64 bits
  • chaque noeud est un serveur sous Linux CentOS 5 x86_64
  • le cluster est géré par Clusterware d'Oracle 10g
  • ils disposent chacun d'un disque interne, et de 4 disques partagés par des liens fibre
  • Les disques partagés sont gérés par ASM (Automatique Storage Management) d'Oracle, au dessus de partitions RAW DEVICE.
  • les réseau publiques et VIP sont dans la plage 10.1.86
  • le réseau privé est dans la plage 192.168.1
  • On se connectera « root » dans un premier temps pour paramétrer le système.

IMPORTANT : CentOS n'étant pas officiellement reconnu par Oracle, il faut « faire passer » le système pour un RedHat. Editer le fichier /etc/redhat-release et remplacer le contenu par « redhat-4 » sur tous les noeuds du futur cluster.

Obtenir les logiciels

Les logiciels suivants seront utilisés :

  • Oracle 10g (10.2.0.1) CRS (10201_clusterware_linux_x86_64.zip)
  • Oracle DB software (10201_database_linux_x86_64.zip)
  • Oracle patch upgrade to 10.2.0.4 (p6810189)

Clusterware et Oracle Database seront donc en version 10.2.0.4 à la fin de l'installation.

IMPORTANT : S'assurer qu'on dispose des versions correspondant au système : 32 ou 64 bits !

Configurer les disques partagés

Les disques partagés sont gérés sur les deux serveurs par les outils MULTIPATH compatibles avec les liens fibres multiples.

Après différents tests, la procédure correcte de configuration est la suivante.

Vérifier que les disques sont visibles sur les 2 serveurs.

Commande multipath sur le noeud 1 :

# multipath -ll 
mpath3 (36006016009c12200a2307179ff5cdf11) dm-10 DGC,RAID 5 
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
\_ round-robin 0 [prio=2][active] 
 \_ 2:0:1:3 sdj 8:144  [active][ready] 
 \_ 3:0:1:3 sdv 65:80  [active][ready] 
\_ round-robin 0 [prio=0][enabled] 
 \_ 2:0:0:3 sdd 8:48   [active][ready] 
 \_ 3:0:0:3 sdp 8:240  [active][ready] 
mpath2 (36006016009c12200902740c0ff5cdf11) dm-9 DGC,RAID 5 
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
\_ round-robin 0 [prio=2][active] 
 \_ 2:0:0:2 sdc 8:32   [active][ready] 
 \_ 3:0:0:2 sdo 8:224  [active][ready] 
 \_ round-robin 0 [prio=0][enabled] 
 \_ 2:0:1:2 sdi 8:128  [active][ready] 
 \_ 3:0:1:2 sdu 65:64  [active][ready] 
mpath1 (36006016009c1220056b037e9fe5cdf11) dm-8 DGC,RAID 5 
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
\_ round-robin 0 [prio=2][active] 
 \_ 2:0:0:1 sdb 8:16   [active][ready] 
 \_ 3:0:0:1 sdn 8:208  [active][ready] 
\_ round-robin 0 [prio=0][enabled] 
 \_ 2:0:1:1 sdh 8:112  [active][ready] 
 \_ 3:0:1:1 sdt 65:48  [active][ready] 
mpath4 (36006016009c122008c806e0f005ddf11) dm-11 DGC,RAID 5 
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
\_ round-robin 0 [prio=2][active] 
 \_ 2:0:1:4 sdk 8:160  [active][ready] 
 \_ 3:0:1:4 sdw 65:96  [active][ready] 
\_ round-robin 0 [prio=0][enabled] 
 \_ 2:0:0:4 sde 8:64   [active][ready] 
 \_ 3:0:0:4 sdq 65:0   [active][ready]

Commande multipath sur le noeud 2 :

# multipath -ll
mpath2 (36006016009c12200a2307179ff5cdf11) dm-9 DGC,RAID 5 
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
\_ round-robin 0 [prio=2][active] 
 \_ 2:0:1:3 sdh 8:112 [active][ready] 
 \_ 3:0:1:3 sdp 8:240 [active][ready] 
\_ round-robin 0 [prio=0][enabled] 
 \_ 2:0:0:3 sdd 8:48  [active][ready] 
 \_ 3:0:0:3 sdl 8:176 [active][ready] 
mpath0 (36006016009c12200902740c0ff5cdf11) dm-7 DGC,RAID 5 
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
\_ round-robin 0 [prio=2][active] 
 \_ 2:0:0:1 sdb 8:16  [active][ready] 
 \_ 3:0:0:1 sdj 8:144 [active][ready] 
\_ round-robin 0 [prio=0][enabled] 
 \_ 2:0:1:1 sdf 8:80  [active][ready] 
 \_ 3:0:1:1 sdn 8:208 [active][ready] 
mpath3 (36006016009c1220056b037e9fe5cdf11) dm-6 DGC,RAID 5 
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
\_ round-robin 0 [prio=2][active] 
 \_ 2:0:0:0 sda 8:0   [active][ready] 
 \_ 3:0:0:0 sdi 8:128 [active][ready] 
\_ round-robin 0 [prio=0][enabled] 
 \_ 2:0:1:0 sde 8:64  [active][ready] 
 \_ 3:0:1:0 sdm 8:192 [active][ready] 
mpath1 (36006016009c122008c806e0f005ddf11) dm-8 DGC,RAID 5 
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
\_ round-robin 0 [prio=2][active] 
 \_ 2:0:1:2 sdg 8:96  [active][ready] 
 \_ 3:0:1:2 sdo 8:224 [active][ready] 
\_ round-robin 0 [prio=0][enabled] 
 \_ 2:0:0:2 sdc 8:32  [active][ready] 
 \_ 3:0:0:2 sdk 8:160 [active][ready] 

Les périphériques sont visibles à la fois en tant que /dev/mpath/mpathXX, et /dev/dm-XX.

On voit cependant que les disques ne correspondent pas, sur les deux serveurs, aux mêmes numéros de périphériques mpath. Par exemple, le disque partagé ayant l'identifiant « 36006016009c12200902740c0ff5cdf11 » est reconnu comme « mpath2 » sur le noeud 1, et « mpath0 » sur le noeud 2.

Afin de faciliter l'administration, il convient tout d'abord de renommer les périphériques mpath. Dans /etc/multipath.conf, ajouter un bloc « multipaths » avec une déclaration « multipath » par périphérique à renommer, en s'appuyant sur les IDs repérés avec « multipath -ll » .

Exemple sur le noeud 1 :

multipaths { 
       multipath { 
#              mpath2 = dm-9 = OCR
               wwid			36006016009c12200902740c0ff5cdf11 
               alias			ocr1 
	}
	multipath { 
#              mpath1 = dm-8 = ASM1 
               wwid			36006016009c1220056b037e9fe5cdf11 
               alias			asm1 
	}
       multipath { 
#               mpath4 = dm-11 = VOTING 
                wwid                    36006016009c122008c806e0f005ddf11 
                alias                   voting1 
        } 
        multipath { 
#               mpath3 = dm-10 = ASM2 
                wwid                    36006016009c12200a2307179ff5cdf11 
                alias                   asm2 
        } 
} 

Le noeud 2 sera configuré de la même façon, avec les IDs correspondants.

Après redémarrage, « multipath -ll » donnera sur le noeud 1 :

# multipath -ll
asm2 (36006016009c12200a2307179ff5cdf11) dm-10 DGC,RAID 5 
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
...
ocr1 (36006016009c12200902740c0ff5cdf11) dm-9 DGC,RAID 5 
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
...
asm1 (36006016009c1220056b037e9fe5cdf11) dm-8 DGC,RAID 5 
[size=20G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
...
voting1 (36006016009c122008c806e0f005ddf11) dm-11 DGC,RAID 5 
[size=10G][features=1 queue_if_no_path][hwhandler=1 emc][rw] 
...

Les périphériques sont vus désormais dans /dev/mpath/<LIBELLE>.

Créer des partitions sur ces disques. Sur un des deux noeuds, lancer fdisk sur chaque périphérique.

Exemple pour OCR1 sur rac1 :

# fdisk /dev/mpath/ocr1

The number of cylinders for this disk is set to 1305. 
There is nothing wrong with that, but this is larger than 1024, 
and could in certain setups cause problems with: 
1) software that runs at boot time (e.g., old versions of LILO) 
2) booting and partitioning software from other OSs 
   (e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/mpath/ocr1: 10.7 GB, 10737418240 bytes 
255 heads, 63 sectors/track, 1305 cylinders 
Units = cylinders of 16065 * 512 = 8225280 bytes

           Device Boot      Start         End      Blocks   Id  System 

Command (m for help): n
   Command action
      e   extended
      p   primary partition (1-4)
   p
   Partition number (1-4): 1
   First cylinder (1-1305, default 1):
   Using default value 1
   Last cylinder or +size or +sizeM or +sizeK (1-1305, default 1305):
   Using default value 1305

   Command (m for help): p

Disk /dev/mpath/ocr1: 10.7 GB, 10737418240 bytes 
255 heads, 63 sectors/track, 1305 cylinders 
Units = cylinders of 16065 * 512 = 8225280 bytes 

           Device Boot      Start         End      Blocks   Id  System 
/dev/mpath/ocr1p1               1        1305    10482381   83  Linux 
 Command (m for help): w
   The partition table has been altered!

   Calling ioctl() to re-read partition table.

   WARNING: Re-reading the partition table failed with error 22: Invalid argument.
   The kernel still uses the old table.
   The new table will be used at the next reboot.
   Syncing disks.

L'erreur à l'écriture de la table de partitions est dûe au fait que fdisk gère mal le multipath. Cependant, les partitions doivent apparaître dans /dev/mpath, sous le nom des périphériques auxquels sont ajoutés le numéro de partition créée (ici, « p1 ») :

# ls -l /dev/mpath 
total 0 
...
lrwxrwxrwx 1 root root 7 Oct 21 12:37 asm1 -> ../dm-8 
lrwxrwxrwx 1 root root 8 Oct 21 12:37 asm1p1 -> ../dm-15 
lrwxrwxrwx 1 root root 8 Oct 21 12:37 asm2 -> ../dm-10 
lrwxrwxrwx 1 root root 8 Oct 21 12:37 asm2p1 -> ../dm-13 
lrwxrwxrwx 1 root root 7 Oct 21 12:37 ocr1 -> ../dm-9 
lrwxrwxrwx 1 root root 8 Oct 21 12:37 ocr1p1 -> ../dm-14 
lrwxrwxrwx 1 root root 8 Oct 21 12:37 voting1 -> ../dm-11 
lrwxrwxrwx 1 root root 8 Oct 21 12:37 voting1p1 -> ../dm-16 

Créer les RAW DEVICES

Oracle crée ses volumes ASM obligatoirement au-dessus de disques en raw device.

Editer le fichier /etc/sysconfig/rawdevices sur chaque noeud, et ajouter :

/dev/raw/raw1 /dev/mapper/ocr1p1 
/dev/raw/raw2 /dev/mapper/voting1p1 
/dev/raw/raw3 /dev/mapper/asm1p1 
/dev/raw/raw4 /dev/mapper/asm2p1 

Relancer le service rawdevices (qui exécute des commandes « raw » en fonction de la configuration de /etc/sysconfig/rawdevices), et vérifier qu'il sera relancé au prochain redémarrage :

# service rawdevices restart
# chkconfig --level 2345 rawdevices on

Editer /etc/rc.local pour donner les bon propriétaire et droits à ces devices. Ajouter :

chown oracle.oinstall /dev/raw/raw1 
chown oracle.oinstall /dev/raw/raw2 
chown oracle.oinstall /dev/raw/raw3 
chown oracle.oinstall /dev/raw/raw4 
chmod 600 /dev/raw/raw1 
chmod 600 /dev/raw/raw2 
chmod 600 /dev/raw/raw3 
chmod 600 /dev/raw/raw4 

On ne peut pas lancer manuellement ces commandes pour l'instant car l'utilisateur « oracle » et le groupe « oinstall » n'existent pas forcément sur ces serveurs, tant qu'oracle n'a pas été installé.

Par contre, il convient d' « initialiser » ces raw devices pour s'assurer qu'Oracle trouvera des partitions vierges (l'installation peut échouer pratiquement à la fin s'il y a un doute à la création de l'OCR et du Voting Disk). La commande

dd if=/dev/zero of=/dev/raw/raw1

lancée sur chacun des raw devices évite ce désagrément.

Préparer le système d'exploitation

Sur chacun des noeuds, commencer par supprimer les logiciels inutiles (s'ils ne sont pas nécessaires à une autre application sur le serveur) et installer les logiciels et librairies requises.

# yum remove –purge openoffice* php* http* mysql*
# yum update
# yum install setarch* compat-libstdc++* make-3* glibc-2* openmotif* compat-db-4* gcc compat-gcc* glibc-devel-2* libaio-0* 

Si le serveur est en 64 bits, ajouter

# yum install glibc-2*.i386 glibc-devel-2*.i386

Editer le fichier /etc/hosts pour déclarer les adresses de tous les noeuds :

127.0.0.1       localhost.localdomain   localhost
# Public IP address
10.1.86.2   rac1.localdomain        rac1
10.1.86.3   rac2.localdomain         rac2
#Private IP address
10.1.86.5   rac1-priv.localdomain   rac1-priv
10.1.86.6   rac2-priv.localdomain   rac2-priv
#Virtual IP address
192.168.1.1   rac1-vip.localdomain    rac1-vip
192.168.1.2   rac2-vip.localdomain    rac2-vip

IMPORTANT : sur tous les noeuds du cluster, les interfaces doivent porter le même nom. Si l'adresse publique correspond à eth0 sur un noeud, elle devra correspondre à eth0 sur tous les noeuds. Idem pour les adresses privées et vip.

Dans le cas contraire, durant l'installation de ClusterWare, on aura une erreur :

Thrown when the IP address os a host cannot be determined

Editer le fichier /etc/sysctl.conf, vérifier ou ajouter les paramètres suivants :

kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144

Et appliquer ces paramètres :

# /sbin/sysctl -p

Editer le fichier /etc/security/limits.conf, ajouter :

oracle           soft    nproc   2047 
oracle           hard    nproc   16384 
oracle           soft    nofile  1024 
oracle           hard    nofile  65536 

Editer (ou créer s'il n'existe pas) le fichier /etc/pam.d/login, y ajouter :

session    required     /lib/security/pam_limits.so

Dans le fichier /etc/selinux/config, s'assurer que SELinux est désactivé :

SELINUX=disabled

Lancer ou relancer le service ntp, et le configurer au démarrage

service ntpd restart
chkconfig --level 2345 ntpd on

Et enfin paramétrer le module « hangcheck-timer » dans /etc/modprobe.conf, ajouter :

options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

le charger pour la session en cours :

# modprobe -v hangcheck-timer

Préparer l'environnement Oracle

Créer les utilisateurs et groupes (l'utilisateur sera « oracle », répertoire personnel « /oracle ») :

# groupadd oinstall
# groupadd dba
# groupadd oper
# useradd -g oinstall -G dba -d /oracle oracle
# passwd oracle

et les répertoires (« crs » accueillera les binaires Clusterware, « db_1 » accueillera les binaires de Database Server) :

# mkdir -p /oracle/product/10.2.0/crs
# mkdir -p /oracle/product/10.2.0/db_1
# mkdir -p /oradata
# chown -R oracle.oinstall /oracle /oradata

L'utilisateur étant créé, on peut exécuter les commandes du fichier rc.local :

# /etc/rc.local

Configurer l'environnement de l'utilisateur. Editer /oracle/.bash_profile et ajouter :

# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME
ORACLE_SID=RAC1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

Configurer SSH pour le « User Equivalence »

Le « User Equivalence » désigne la possibilité d'accès et d'exécution de commandes d'un noeud à l'autre, par ssh, sans demande de mot de passe. Ouvrir nue console en tant qu'utilisateur « oracle » sur chacun des noeuds.

Créer sur chacun d'eux un jeu de clé DSA (ne PAS renseigner la passphrase, sinon ssh la demandera à la connexion, ce qu'on veut justement éviter) :

oracle$ mkdir ~/.ssh
oracle$ chmod 700 ~/.ssh
oracle$ /usr/bin/ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/oracle/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/oracle/.ssh/id_dsa.
Your public key has been saved in /home/oracle/.ssh/id_dsa.pub.
The key fingerprint is:
af:37:ca:69:3c:a0:08:97:cb:9c:0b:b0:20:70:e3:4a oracle@rac1.localdomain

Copier le contenu du fichier ~/.ssh/id_dsa.pub généré et le coller dans un fichier « ~/.ssh/authorized_keys » sur tous les noeuds. Localement d'abord :

oracle$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
oracle$ chmod 644 ~/.ssh/authorized_keys

Puis sur l'autre noeud :

oracle$ ssh oracle@rac2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
The authenticity of host 'ds2 (192.168.200.52)' can't be established.
RSA key fingerprint is d1:23:a7:df:c5:fc:4e:10:d2:83:60:49:25:e8:eb:11.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ds2,192.168.200.52' (DSA) to the list of known hosts.
oracle@ds2's password: 

oracle$ ssh oracle@rac2
oracle@ds2's password: 

oracle$ chmod 644 ~/.ssh/authorized_keys
oracle$ exit

Réaliser ces opérations sur chacun des noeuds, pour « croiser » les clés.

Vérifier que chacun se connecte localement et sur l'autre serveur par ssh sans demande de mot de passe. Exemple sur rac1 :

oracle$ hostname
rac1.localdomain

oracle$ ssh  rac1
Last login: Fri Oct 22 11:49:35 2010 from 10.1.86.201 
oracle$ exit
Connection to rac1 closed. 

oracle$ ssh rac2
Last login: Fri Oct 22 12:11:04 2010 from 10.1.86.201 
oracle$exit
Connection to rac2 closed. 

A partir du serveur sur lequel sera lancée l'installation de Clusterware, initialiser le « User Equivalence » (attention, cette équivalence n'est active que pour la session en cours) :

oracle$ exec /usr/bin/ssh-agent $SHELL
oracle$ /usr/bin/ssh-add
Identity added: /oracle/.ssh/id_dsa (/oracle/.ssh/id_dsa)

Installer Clusterware

Décompresser l'archive 10201_clusterware_linux_x86_64.zip, aller dans le répertoire ainsi créé et lancer l'installateur (attention, à partir d'une session ssh, le DISPLAY doit être initialisé pour accéder au poste client ; ou, éventuellement, lancer ssh avec l'option -X (X11 forwarding).

oracle$ unzip 10201_clusterware_linux_x86_64.zip
oracle$ cd clusterware
oracle$ ./runInstaller
  • Cliquer sur « Next »
  • Accepter le répertoire « oraInventory » par défaut.
  • Entrer le chemin correct pour l'ORACLE_HOME du cluster. Ici :
« /oracle/product/10.2.0/crs »
  • Attendre la vérification des pré-requis. Si une vérification échoue, régler le problème et cliquer sur « Retry ».

Il est possible de continuer en laissant un pré-requis mineur irrésolu, auquel cas un écran d'avertissement s'affiche.

  • L'écran suivant liste noeud correspondant au système local. Cliquer sur « Add » pour ajouter le second noeud.
  • Entrer les information du second noeud.
  • Une fois les deux noeuds définis, cliquer sur « Next ».
  • Définir l'usage des interfaces réseau : ici, on éditera « eth0 » (qui, contrairement à l'écran ci-joint, est pour notre exemple sur le réseau 10.1.86.0) pour lui donner le type « Public ».
    • Sélectionner eth0 et cliquer sur « Edit ».
    • Eth1 restera sur 192.168.1.0 en « Private ».
  • Pour l'emplacement du registre OCR, sélectionner « External redundancy », si la partition prévue est sécurisée par du RAID matériel (sinon, prévoir 2 ou 3 partitions, et demander à Oracle de gérer la redondance en sélectionnant « Normal redundancy »)
  • Idem pour le « Voting disk ».
  • Accepter le résumé si tout est correct,

et attendre la fin de l'installation.

A la fin de l'installation, lancer sur les 2 noeuds les scripts indiqués, en tant que « root ».

Le script orainstRoot.sh doit afficher ce type de messages :

# cd /u01/app/oracle/oraInventory
# ./orainstRoot.sh
Changing permissions of /u01/app/oracle/oraInventory to 770.
Changing groupname of /u01/app/oracle/oraInventory to oinstall.
The execution of the script is complete

Sur le premier noeud (celui sur lequel a été lancé runIstaller), root.sh initialise l'OCR et le Voting Disk (cf plus bas si des erreurs apparaissent au lancement de root.sh) :

# cd /u01/crs/oracle/product/10.2.0/crs
# ./root.sh
WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/crs/oracle/product' is not owned by root
WARNING: directory '/u01/crs/oracle' is not owned by root
WARNING: directory '/u01/crs' is not owned by root
WARNING: directory '/u01' is not owned by root
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now. 

Setting the permissions on OCR backup directory
Setting up NS directories
Oracle Cluster Registry configuration upgraded successfully
WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/crs/oracle/product' is not owned by root
WARNING: directory '/u01/crs/oracle' is not owned by root
WARNING: directory '/u01/crs' is not owned by root
WARNING: directory '/u01' is not owned by root
assigning default hostname rac1 for node 1.
assigning default hostname rac2 for node 2.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node <nodenumber>: <nodename> <private interconnect name> <hostname>
node 1: rac1 rac1-priv rac1
node 2: rac2 rac2-priv rac2
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Now formatting voting device: /dev/raw/raw2
Format of 1 voting devices complete.
Startup will be queued to init within 90 seconds.
Adding daemons to inittab
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
        rac1
CSS is inactive on these nodes.
        rac2
Local node checking complete.
Run root.sh on remaining nodes to start CRS daemons.

Les « WARNINGS » sur les propriétaires des répertoires peuvent être ignorés.

Sur l'autre noeuds, certaines opérations sont omises car déjà réalisées sur le noeud 1 :

# cd /u01/crs/oracle/product/10.2.0/crs
# ./root.sh
WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/crs/oracle/product' is not owned by root
WARNING: directory '/u01/crs/oracle' is not owned by root
WARNING: directory '/u01/crs' is not owned by root
WARNING: directory '/u01' is not owned by root
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now.

Setting the permissions on OCR backup directory
Setting up NS directories
Oracle Cluster Registry configuration upgraded successfully
WARNING: directory '/u01/crs/oracle/product/10.2.0' is not owned by root
WARNING: directory '/u01/crs/oracle/product' is not owned by root
WARNING: directory '/u01/crs/oracle' is not owned by root
WARNING: directory '/u01/crs' is not owned by root
WARNING: directory '/u01' is not owned by root
clscfg: EXISTING configuration version 3 detected.
clscfg: version 3 is 10G Release 2.
assigning default hostname rac1 for node 1.
assigning default hostname rac2 for node 2.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node <nodenumber>: <nodename> <private interconnect name> <hostname>
node 1: rac1 rac1-priv rac1
node 2: rac2 rac2-priv rac2
clscfg: Arguments check out successfully.

NO KEYS WERE WRITTEN. Supply -force parameter to override.
-force is destructive and will destroy any previous cluster
configuration.
Oracle Cluster Registry for cluster has already been initialized
Startup will be queued to init within 90 seconds.
Adding daemons to inittab
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
        rac1
        rac2
CSS is active on all nodes.
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
Oracle CRS stack installed and running under init(1M)
Running vipca(silent) for configuring nodeapps
The given interface(s), "eth0" is not public. Public interfaces should be used to configure virtual IPs.

En cas d'erreurs, sans sortir de runInstaller et de l'écran « Execute configuration scripts » (runInstaller sous Xwindow fonctionne en tâche de fond et ne bloque pas la console ssh à partir de laquelle il est lancé : appuyer sur « Entrée » pour retrouver le prompt), appliquer les corrections suivantes :

  • Erreur 1 :
PROT-1: Failed to initialize ocrconfig
Failed to upgrade Oracle Cluster Registry configuration

Il faut appliquer un patch spécifique aux systèmes 64 bits. Le patch 4679769 est téléchargeable sur le site d'Oracle Metalink. Il ne contient qu'un exécutable (clsfmt.bin) à placer dans le répertoire $ORACLE_HOME/bin (sauvegarder l'ancien clsfmt.bin avant de l'écraser).

  • Erreur 2 :
/u01/app/oracle/product/crs/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory

il faut éditer deux fichiers :

dans $ORACLE_HOME/vipca, commenter les lignes suivantes (aux alentours de la ligne 120) :

if [ "$arch" = "i686" -o "$arch" = "ia64" ]
then
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
fi

dans $ORACLE_HOME/srvctl, chercher et commenter également ces lignes :

#Remove this workaround when the bug 3937317 is fixed
LD_ASSUME_KERNEL=2.4.19
export LD_ASSUME_KERNEL
  • Erreur 3 : La dernière étape du script root.sh (lancement de « vipca » en mode silencieux) échoue la plupart du temps parce que l'adresse VIP est souvent dans une plage d'adresses privées (192.168.1) :
Error 0(Native: listNetInterfaces:[3])
[Error 0(Native: listNetInterfaces:[3])]

Il faut alors le relancer manuellement  :

# cd /u01/crs/oracle/product/10.2.0/crs/bin
# ./vipca
    • Cliquer sur « Next » sur l'écran d'accueil.
    • Sélectionner eth0 et cliquer sur « Next »
    • Entrer les adresse IP virtuelles de chaque noeud.
    • Accepter le résumé en cliquant sur « Finish ».

Attendre la fin de l'installation pour valider le résultat en cliquant sur « Exit ».

A ce moment, on retourne sur l'écran « Execute Configuration scripts », qu'on peut valider.

De la même manière, attendre la fin de l'installation pour valider en cliquent sur « Exit ».

Installer Database Server et créer l'instance ASM

IMPORTANT : si Oracle est déjà installé sur un ou plusieurs des serveurs constituant le cluster (exemple : Oracle 10g 10.2.0.1 est installé en « single » sur un serveur, on ne peut pas le mettre à jour pour des raisons de compatibilité avec une application. On installe Oracle 10g RAC 10.2.0.4 dans un ORACLE_HOME séparé), s'assurer que l'utilisateur qui lance l'installation de Database Server en RAC a les droits d'écriture sur le répertoire parent de son ORACLE_HOME.

Exemple : Oracle 10.2.0.1 est installé dans /oracle/product/10.2.0/db_1, on veut installer Oracle 10.2.0.4 en RAC dans /oracle/product/10.2.0/db_2. L'utilisateur doit avoir les droits d'écriture sur /oracle/product/10.2.0 pour créer son arborescence et copier ses fichiers.

S'assurer que ce même utilisateur a les droits d'écriture sur /etc/oratab

L'instance ASM est nécessaire pour la gestion par Oracle des volumes ASM qui contiendront les données des bases utilisateurs. Elle doit donc être créée avant toute autre base. Elle n'est constituée que d'une instance en mémoire, elle n'a pas de fichier de données sur disque, à part son SPFILE.

Comme pour Clusterware, décompresser l'archive et lancer runInstaller.

oracle$ unzip 10201_database_linux_x86_64.zip
oracle$ cd database
oracle$ ./runInstaller
  • Cliquer sur « Next » sur l'écran d'accueil
  • Sélectionner « Enterprise Edition » et cliquer sur « Next »
  • Indiquer le répertoire d'installation (ORACLE_HOME). Si une autre version d'Oracle est déjà installée et qu'il ne faut pas l'écraser, changer le nom et le répertoire (pour « db_2 » par exemple)
  • Sélectionner « Cluster Installation » et cocher les 2 noeuds du cluster
  • Vérifier les pré-requis, corriger les problèmes éventuels
  • Créer l'instance ASM, donner le mot de passe SYS de l'instance
    • Si la redondance doit être gérée par Oracle, sélectionner « High » (RAID5) ou « Normal » (RAID1) et indiquer les partitions à intégrer au RAID logiciel.
    • Si la sécurité est assurée par le matériel, sélectionner « External » et indiquer une ou plusieurs partitions (dont les tailles s'ajouteront, dans ce cas)
  • Valider le résumé en cliquant sur « Install ».

Attendre que l'installation se termine et la fin des assistants de configuration.

Exécuter le script « root.sh » comme indiqué sur tous les noeuds du cluster

Valider la fin de l'installation.

Oracle Database Server est désormais installé, et l'instance ASM créée. Les bases utilisateurs peuvent désormais être créées avec « dbca » (DataBase Configuration Assistant), en indiquant si on souhaite intégrer cette base au cluster, ou l'installer sulement en « single » sur un des noeuds.

Lors de l'installation, on indiquera le groupe ASM « DATA » comme destination de la base de données.

Mémento de commandes cluster RAC

  • Contrôler l’état des ressources du cluster

Pour cela on utilise la commande crs_stat du clusterWare :

(l'option -t sert à obtenir une sortie tabulée, l'option -v permet d'obtenir quelque chose de plus verbeux)

$ $CRS_HOME/bin/crs_stat -t -v 
Name           Type           R/RA   F/FT   Target    State     Host 
---------------------------------------------------------------------- 
ora....11.inst application    0/5    0/0    ONLINE    ONLINE    NODE1 
ora....12.inst application    0/5    0/0    ONLINE    ONLINE    NODE2 
ora....db1.srv application    0/0    0/0    ONLINE    ONLINE    NODE1 
ora....db2.srv application    0/0    0/0    ONLINE    ONLINE    NODE2 
ora....bsrv.cs application    0/0    0/1    ONLINE    ONLINE    NODE2 
ora.clustdb.db application    0/0    0/1    ONLINE    ONLINE    NODE1 
ora....SM1.asm application    0/5    0/0    ONLINE    ONLINE    NODE1 
ora....E1.lsnr application    0/5    0/0    ONLINE    ONLINE    NODE1 
ora....DE1.gsd application    0/5    0/0    ONLINE    ONLINE    NODE1 
ora....DE1.ons application    1/10   0/0    ONLINE    ONLINE    NODE1 
ora....DE1.vip application    0/0    0/0    ONLINE    ONLINE    NODE1 
ora....SM2.asm application    0/5    0/0    ONLINE    ONLINE    NODE2 
ora....E2.lsnr application    0/5    0/0    ONLINE    ONLINE    NODE2 
ora....DE2.gsd application    0/5    0/0    ONLINE    ONLINE    NODE2 
ora....DE2.ons application    3/10   0/0    ONLINE    ONLINE    NODE2 
ora....DE2.vip application    0/0    0/0    ONLINE    ONLINE    NODE2 
Si on veut obtenir le nom complet des ressources, il faut utiliser la commande crs_stat sans option. 
NB : Cette commande reflète l’état des ressources dans le OCR. 
  • Arrêt/démarrage d’une instance dans le cluster

pour arréter l'instance clustdb1 de la base de cluster clustdb :

$ $ORACLE_HOME/bin/srvctl stop instance -i clustdb1 -d clustdb 

pour démarrer l'instance clustdb2 de la base de cluster clustdb

$ $ORACLE_HOME/bin/srvctl start instance -i clustdb2 -d clustdb 
  • Arrêt/démarrage d’une ressource ASM (Automatic Storage Management)

pour arréter la ressource ASM sur le noeud NODE1

$ $ORACLE_HOME/bin/srvctl stop asm -n NODE1 

pour démarrer la ressource ASM sur le noeud NODE2

$ $ORACLE_HOME/bin/srvctl start asm -n NODE2 
  • Arrêt/démarrage d’une resource listener

pour arréter la ressource listener sur le noeud NODE2

$ $ORACLE_HOME/bin/srvctl stop listener -n NODE2 

pour démarrer la ressource listener sur le noeud NODE1

$ $ORACLE_HOME/bin/srvctl start listener -n NODE1 
  • Arrêt/démarrage de toutes les ressources d’un même noeud

pour arréter les ressources du noeud NODE2

$ $ORACLE_HOME/bin/srvctl stop nodeapps -n NODE2 

pour démarrer les ressources du noeud NODE1

$ $ORACLE_HOME/bin/srvctl start nodeapps -n NODE1 
  • Arrêt/démarrage d’une ressource particulière

pour arréter la ressource "ora.NODE1.ons"

$CRS_HOME/bin/crs_start ora.NODE1.ons 
Attempting to start `ora.NODE1.ons` on member `NODE1` 
Start of `ora.NODE1.ons` on member `NODE1` succeeded. 

pour démarrer la ressource "ora.NODE1.ons"

$CRS_HOME/bin/crs_stop ora.NODE1.ons 
Attempting to stop `ora.NODE1.ons` on member `NODE1` 
Stop of `ora.NODE1.ons` on member `NODE1` succeeded. 
  • Contrôler le clusterWare CRS (Cluster Ready Services)
    • Contrôler le statut des processus CRS
$CRS_HOME/bin/crsctl check crs 
CSS appears healthy 
CRS appears healthy 
EVM appears healthy 
    • Arréter et redémarrer le CRS

Attention, ces processus appartenant à root, ils doivent être réaliser par cet utilisateur. De plus, ces commandes sont asynchrones, veillez donc à contrôler l’état du CRS après avoir taper ces commandes.

Pour arréter le service :

# $CRS_HOME/bin/crsctl stop crs 

Pour démarrer le service :

# $CRS_HOME/bin/crsctl start crs 
  • Obtenir la localisation du ou des disques votant (ou voting disks)

Ceci s’effectue avec la commande suivante :

$ $CRS_HOME/bin/crsctl query css votedisk 
0.     0    /dev/rdsk/emcpower0g 

located 1 votedisk(s). 
  • Contrôle de l’OCR

L’OCR (Oracle Cluster Registry) contient, comme son nom l’indique, la défition du cluster : les noeuds, les bases, les instances, les services etc.

Il peut être décliné sous deux formes :

    • un simple fichier sur un système de fichiers en cluster (car il doit être accessible des deux noeuds)
    • une partition brute partagée (Shared Raw partition). De plus, ces fichiers/partitions peuvent être multiplexées sur différents axes. (Si il est unique, la redondance est laissée à un système tiers : RAID, mirroring de baies, SAN etc.

Il est donc important, dans la gestion de son cluster, de connaître les informations de l’OCR (localisation, taille, redondance etc.), mais aussi de savoir le sécuriser en le sauvegardant, et enfin de savoir le restaurer en cas de perte du volume/fichier.

    • Obtenir les infos de l’OCR

Les infos de l’OCR s’obtiennent avec la commande ocrcheck.

$ $CRS_HOME/bin/ocrcheck 
Status of Oracle Cluster Registry is as follows : 
      Version                  :          2            <----- Version du registre 
      Total space (kbytes)     :     51200             <----- Espace total alloué au registre 
      Used space (kbytes)      :       6220            <----- Taille du registre 
      Available space (kbytes) :     44980             <----- Espace disponible 
      ID                       :  507221704 
      Device/File Name         : /dev/rdsk/emcpower1g  <----- Emplacement 
                                                              du registre 
                                 Device/File integrity check succeeded 
                                        ^----- Vérification de 
                                             l'intégrité du périphérique 
                                       
                                 Device/File not configured                
                                        ^----- Définition de la deuxième 
                                             partition (si multipléxé) 
      Cluster registry integrity check succeeded 
  • Exporter et importer l’OCR

L’export et l’import de l’OCR se fait par la commande ocrconfig. Dans la mesure où l’OCR (qu’il soit fichier ou partition brute) est détenu par root, mais qu’il reste accessible en lecture aux utilisateur du groupe dba. Il est conseillé de réaliser l’export en tant qu’utilisateur oracle (par exemple). L’import doit, quant à lui, être réalisé par le root.

Le but de l’opération est donc de garder une copie de l’OCR (dans un format texte certes, mais peu lisible ;) ). Cette copie peut-être réalisé en cas de perte de la partition, ou de corruption des données du registre.

    • Export de l’OCR
$ $CRS_HOME/bin/ocrconfig -export export_File.dmp -s online 

l'option "-s online" permet d'effectuer cet export en ligne sans arréter le CRS.

    • Import de l’OCR

Eventuellement restaurer/recrer la partition, et ou le fichier.

# $CRS_HOME/bin/ocrconfig --import export_File.dmp 
    • Sauvegarder à froid l’OCR

La sauvegarde à froid de l’OCR, se réalise simplement :

    • par une copie de fichier, si l’OCR est matérialisé dans un ou plusieurs fichiers
    • par un ordre unix "dd", dans le cas d’une partition partagées. Pour l’import par dd, il suffit d’inverser l’input file (if) et l’output file (of) dans la commande dd :

pour exporter :

# dd if=/dev/rdsk/emcpower1g of=/HOME/ocr/backup/ocr_010507.bkp bs=1024 count=51200 

pour importer :

# dd if=/HOME/ocr/backup/ocr_010507.bkp of=/dev/rdsk/emcpower1g bs=1024 count=51200