RAC et ASM 11g sur Linux en pratique (Enfin !)

You can access the content of this post in English here

Après des semaines sans pouvoir y consacrer le temps que j’aurais voulu, ça y est enfin ! J’ai installé aujourd’hui RAC sur Oracle EL5 et rien de spécial à signaler !

La seule difficulté que j’ai rencontrée n’a pas de lien direct avec l’installation ; pour que les droits des devices soient positionnés au démarrage de Oracle EL5 ou RHEL5, il faut creer un fichier dans /etc/udev/rules.d mais j’en ai déjà parlé dans mon post précédent au sujet des raw devices

A part ça, tout est aussi simple qu’en 10g et une fois les pré-requis validés ; en 1H30, c’est bouclé, pour 2 noeuds au moins ; Côté nouveautés, je n’ai rien vu de révolutionnaire mais quand même quelques points utiles ; J’explique !

Point #1 : pas besoin de lancer VIPCA manuellement si votre réseau public est sur une classe d’adresses réservées. Ça c’est quand même confortable parce que mine de rien dans 80% des cas, les réseaux Oracle sont en 192.168.x.x ou 10.x.x.x ! Ils ont même corrigés le Cluster Verify Utility qui n’affiche plus une erreur mais simplement un avertissement quand ça arrive :

Interfaces found on subnet "192.168.245.0" that are likely
candidates for a private interconnect:
sacha eth1:192.168.245.2

WARNING:
Could not find a suitable set of interfaces for VIPs.

Remarquez qu’en revanche il faut toujours une GATEWAY pingable sur l’adresse publique et que le CVU ne semble pas le valider. La punition sinon, c’est que votre VIP ne démarrera pas.

Point #2 : plus besoin d’aucun RAW DEVICES. Les OCR et Voting Disks peuvent être directement dans les partitions (C’est même la configuration désormais recommandée !) ; j’en avais parlé. Il en est de même pour les disques ASM ! Il suffit de changer la chaîne de découverte par « /dev/sdb* » par exemple et vous pouvez ajouter vos devices mode bloc directement sans ASM avec DBCA

Point #3 : Il existe une commande pour vérifier l’état de tous les noeuds du cluster

./crsctl check cluster
sacha ONLINE
kilian ONLINE

Point #4 : Il existe une commande pour faire une sauvegarde manuelle de l’OCR . Ca va etre pratique avant d’ajouter un noeud dans le cluster :

./ocrconfig -manualbackup

sacha 2007/09/16 08:09:13
/u01/crs/cdata/arkz/backup_20070916_080913.ocr

./ocrconfig -showbackup manual

sacha 2007/09/16 08:09:13
/u01/crs/cdata/arkz/backup_20070916_080913.ocr

Point #5 : OPROCD remplace hangcheck-timer. J’en avais parlé ; c’est vérifié !

ps -ef |grep oproc
root 5580 4625 0 07:38 ? 00:00:00 /bin/sh/etc/init.d/init.cssd oprocd
root 6142 5580 0 07:38 ? 00:00:00 /u01/crs/bin/oprocd run -t 1000 -m 500

lsmod |grep hangcheck

Point #6 : ASMCMD offre désormais la commande « cp ». Ça permet d’en faire n’importe quoi comme ci-dessous (mes instances fonctionnent) et ça marche

. oraenv
ORACLE_SID = [oracle] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1 is /u01/app/oracle

asmcmd
ASMCMD> cd DATA/ORCL/CONTROLFILE

ASMCMD> pwd
+DATA/ORCL/CONTROLFILE

ASMCMD> cp Current.260.633428899 +DATA/ORCL/CONTROLFILE/gark.ctl
source +DATA/ORCL/CONTROLFILE/Current.260.633428899
target +DATA/ORCL/CONTROLFILE/Gark.ctl
copying file(s)...
file, +DATA/orcl/controlfile/gark.ctl, copy committed.

ASMCMD> ls
Current.260.633428899
gark.ctl

Point #7 : La commande lsdsk permet de voir les disques associés à ASM. Par exemple avec l’option -d, cette commande permet de voir les disques associés à un DiskGroup :

. oraenv
ORACLE_SID = [oracle] ? +ASM1
The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1 is /u01/app/oracle

asmcmd
ASMCMD> lsdsk -k -d DATA
Total_MB Free_MB OS_MB Name Failgroup Path
1529 864 1529 DATA_0000 DATA_0000 /dev/sdb5
2337 1306 2337 DATA_0001 DATA_0001 /dev/sdb7

Quelques remarques :

  • Il est possible de lancer ASMCMD lorsque ASM est arrêté ; Le message suivant « ASMCMD-08103: failed to connect to ASM; ASMCMD running in non-connected mode » indique que vous allez travailler directement sur les entêtes de disques
  • Pour une raison que j’imagine liée au fait que dans mon cas le paramètre suivant n’a pas la valeur par défaut : asm_diskstring=’/dev/sdb*’ , lsdsk ne semble pas fonctionner en mode non-connecté
  • Les nouvelles commandes de ASMCMD semblent très intéressantes et notamment md_backup, md_restore et remap. Merci de vos remarques ou commentaires ; c’est trop pour aujourd’hui !

Point #8 : Il est possible d’ajouter et de retirer des Voting Disks alors que le cluster fonctionne. Commençons par l’OCR qui marchait déjà me semble-t-il. Sous l’utilisateur root, vous pouvez ajoutez et supprimer un OCR Mirroir pendant que le clusterware fonctionne comme ceci :

cd /u01/crs/bin

./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 248724
Used space (kbytes) : 2252
Available space (kbytes) : 246472
ID : 433771587
Device/File Name : /dev/sdb8
Device/File integrity check succeeded

Device/File not configured

Cluster registry integrity check succeeded

./ocrconfig -replace ocrmirror /dev/sdb9

./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 248724
Used space (kbytes) : 2252
Available space (kbytes) : 246472
ID : 433771587
Device/File Name : /dev/sdb8
Device/File integrity check succeeded
Device/File Name : /dev/sdb9
Device/File integrity check succeeded

Cluster registry integrity check succeeded

./ocrconfig -replace ocrmirror

./ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 2
Total space (kbytes) : 248724
Used space (kbytes) : 2252
Available space (kbytes) : 246472
ID : 433771587
Device/File Name : /dev/sdb8
Device/File integrity check succeeded

Device/File not configured

Cluster registry integrity check succeeded

Vous pouvez faire de même avec le Voting Disk alors
que le clusterware fonctionne :

dd if=/dev/sdb10 of=/u01/crs/cdata/arkz/voting.copy bs=4k
62244+0 records in
62244+0 records out
254951424 bytes (255 MB) copied, 10.0618 seconds, 24.2 MB/s

./crsctl query css votedisk
0. 0 /dev/sdb10
Located 1 voting disk(s).

./crsctl add css votedisk /dev/sdb11
Successful addition of voting disk /dev/sdb11.

./crsctl add css votedisk /dev/sdb12
Successful addition of voting disk /dev/sdb12.

./crsctl query css votedisk
0. 0 /dev/sdb10
1. 0 /dev/sdb11
2. 0 /dev/sdb12
Located 3 voting disk(s).

# A première vue, il n'est pas possible ensuite de
# supprimer le Voting Disk numero 1 :
./crsctl delete css votedisk /dev/sdb10
Failure 8 with Cluster Synchronization Services while deleting voting disk.

# Dommage ! Mais on peut bien supprimer les autres
# Voting Disk et logiquement un probleme sur le Voting
# Disk 1 ne devrait par impacter le cluster
# re-Dommage, impossible de tester avec ma configuration
./crsctl delete css votedisk /dev/sdb11
Successful deletion of voting disk /dev/sdb11.

./crsctl delete css votedisk /dev/sdb12
Successful deletion of voting disk /dev/sdb12.

./crsctl query css votedisk
0. 0 /dev/sdb10
Located 1 voting disk(s).

Point #9 : On peut tuer des sessions clusterwide. Mince j’ai fait une gaffe dans mon précédent post à ce sujet ! il faut mettre le signe @ avant le numéro d’instance ; ça marche probablement bien en single instance (?)

# Session 1
sqlplus / as sysdba

grant select
on gv_$session
to scott;

# Session 2
sqlplus scott/tiger

select sid, serial#, inst_id
from gv$session
where audsid=sys_context('USERENV','SESSIONID');

SID SERIAL# INST_ID
--- ---------- ----------
67 610 1

# Session 1
alter system
kill session '67, 610, @1'
immediate;

# Session 2
/
select sid, serial#, inst_id
*
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 29700
Session ID: 67 Serial number: 610

Point #10 : Vous pouvez lancer un script AWR sur tout le RAC au lieu de Instance par Instance. Utilisez spawrrac.sql comme ci-dessous :

@?/rdbms/admin/spawrrac

Instances in this AWR schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Instance
DB Id DB Name Count
----------- ------------ --------
1161209635 ORCL 2

Enter value for dbid: 1161209635
Using 1161209635 for database Id

Specify the number of days of snapshots to choose from
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Entering the number of days (n) will result in the most recent
(n) days of snapshots being listed. Pressing without
specifying a number lists all completed snapshots.

Listing the last 31 days of Completed Snapshots

Snap Instance
DB Name Snap Id End Interval Time Level Count
------------ --------- ----------------- ----- --------
ORCL 1 16 Sep 2007 10:00 1 2
2 16 Sep 2007 11:00 1 2
3 16 Sep 2007 12:00 1 2

Specify the Begin and End Snapshot Ids
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter value for begin_snap: 1
Begin Snapshot Id specified: 1

Enter value for end_snap: 2
End Snapshot Id specified: 2

Specify the Report Name
~~~~~~~~~~~~~~~~~~~~~~~
The default report file name is spawrrac_1_2. To use this name,
press to continue, otherwise enter an alternative.

Enter value for report_name:

[...]

End of Report ( spawrrac_1_2.lst )