26 Juillet 2017
L'objectif de cet article est de découvrir une méthode simple permettant de modifier le nom du SCAN d'un cluster oracle RAC, dans mon exemple un RAC à 2 nodes sous Linux.
Le cluster est composé de 3 SCAN_LISTENER. Le scan actuel est nommé "clustbatman.batdomain.fr", et devra par la suite être "clustrobin.batdomain.fr"
Le premier réflexe est d'identifier les IP associées au SCAN, et donc du DNS qui permet la redirection depuis les serveurs applicatifs.
En utilisant l'environnement du Grid Infrastructure (ou ASM) depuis le compte unix qui a installé le logiciel (dans mon cas "oracle"), on lance la commande "srvctl config scan" pour avoir les informations associées au SCAN :
[SRVORA1]<oracle>/home/oracle[+ASM1]:srvctl config scan SCAN name: clustbatman.batdomain.fr, Network: 1/192.158.71.0/255.255.255.0/eth0 SCAN VIP name: scan1, IP: /clustbatman.batdomain.fr/192.158.71.62 SCAN VIP name: scan2, IP: /clustbatman.batdomain.fr/192.158.71.61 SCAN VIP name: scan3, IP: /clustbatman.batdomain.fr/192.158.71.60
On check ensuite la résolution DNS :
[SRVORA1]<oracle>/home/oracle[+ASM1]:nslookup clustbatman.batdomain.fr Name: clustbatman.batdomain.fr Address: 192.158.71.60 Name: clustbatman.batdomain.fr Address: 192.158.71.61 Name: clustbatman.batdomain.fr Address: 192.158.71.62
On vérifie maintenant que le futur scan (ou plutôt le DNS de ce futur scan) pointe bien vers les mêmes IP :
[SRVORA1]<oracle>/home/oracle[+ASM1]:nslookup clustrobin.batdomain.fr Name: clustrobin.batdomain.fr Address: 192.158.71.62 Name: clustrobin.batdomain.fr Address: 192.158.71.60 Name: clustrobin.batdomain.fr Address: 192.158.71.61
Ok, nous pouvons donc réaliser la modification, en débutant tout d'abord par l'arrêt des 3 listener_scan, et ensuite du scan :
[SRVORA1]<oracle>/home/oracle[+ASM1]:srvctl stop scan_listener [SRVORA1]<oracle>/home/oracle[+ASM1]:srvctl stop scan [SRVORA1]<oracle>/home/oracle[+ASM1]:srvctl status scan_listener SCAN Listener LISTENER_SCAN1 is enabled SCAN listener LISTENER_SCAN1 is not running SCAN Listener LISTENER_SCAN2 is enabled SCAN listener LISTENER_SCAN2 is not running SCAN Listener LISTENER_SCAN3 is enabled SCAN listener LISTENER_SCAN3 is not running [SRVORA1]<oracle>/home/oracle[+ASM1]:srvctl status scan SCAN VIP scan1 is enabled SCAN VIP scan1 is not running SCAN VIP scan2 is enabled SCAN VIP scan2 is not running SCAN VIP scan3 is enabled SCAN VIP scan3 is not running
On modifie maintenant le scan, mais pour ce faire il faut être en super user (root), en effet cette modification ce fait coté CRS, et agit sur des processus server lancé par root (crsd) :
[]<>/root[]:export ORACLE_HOME=/oracle/product/11.2.0/grid []<>/root[]:$ORACLE_HOME/bin/srvctl modify scan -n clustrobin.batdomain.fr
Ensuite, on revient sur le compte système du Grid ("oracle") pour relancer le scan, et ensuite les scan_listener :
[SRVORA1]<oracle>/home/oracle[+ASM1]:srvctl start scan [SRVORA1]<oracle>/home/oracle[+ASM1]:srvctl start scan_listener
Quelques vérifications, pour être sur que la modification soit bien effective :
[SRVORA1]<oracle>/home/oracle[+ASM1]:srvctl config scan SCAN name: clustrobin.batdomain.fr, Network: 1/192.158.71.0/255.255.255.0/eth0 SCAN VIP name: scan1, IP: /clustrobin.batdomain.fr/192.158.71.61 SCAN VIP name: scan2, IP: /clustrobin.batdomain.fr/192.158.71.62 SCAN VIP name: scan3, IP: /clustrobin.batdomain.fr/192.158.71.60
OK, on peut également, comme dernier test, se connecter sur la base de données cluster, depuis un poste distant en utilisant ce nouveau SCAN / DNS, soit en easy connect ou via tnsnames.
Dans mon cas je passe par tnsnames avec l'alias ci dessous :
NEW_SCAN_ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = clustrobin.batdomain.fr)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 20) (DELAY = 1) ) ) )
Je lance donc depuis mon PC un sqlplus sur cet Alias pour tester la connexion et vérifier :
C:\Users\Micka>tnsping NEW_SCAN_ORCL TNS Ping Utility for 64-bit Windows: Version 12.1.0.2.0 - Production on 12-SEPT.-2016 10:34:08 Copyright (c) 1997, 2014, Oracle. All rights reserved. Fichiers de paramÞtres utilisÚs : C:\Oracle\product\12.1.0\client_1\network\admin\sqlnet.ora Adaptateur TNSNAMES utilisÚ pour la rÚsolution de l'alias Tentative de contact de (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = clustrobin.batdomain.fr)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 20) (DELAY = 1)))) OK (90 msec) C:\Users\Micka>sqlplus system@NEW_SCAN_ORCL SQL*Plus: Release 12.1.0.2.0 Production on Lun. Sept. 12 10:34:26 2016 Copyright (c) 1982, 2014, Oracle. All rights reserved. Entrez le mot de passe : ConnectÚ Ó : Oracle Database 11g Release 11.2.0.3.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options SQL> select instance_name,host_name from v$instance; INSTANCE_NAME HOST_NAME ----------- ------------------ ORCL1 SRVORA1
C'est OK, mais il ne faut pas oublier de configurer le remote_listener de chaque instance Oracle, en passant par la modification du tnsnames.ora sur chaque nodes si la configuration du paramètre remote_listener fait appel à un ALIAS TNS.
SQL> alter system set remote_listener="clustrobin:1521" scope=both sid='*'; System altered.
Et voila ! Cette méthode reste assez simple, mais elle pourrait se compliquer quelque peu si en plus nous sommes dans un cas où les IP des VIPs devraient être modifiées, auquel cas il faudrait jouer avec oifcfg et réaliser plus d'actions
Cela fera l'objet d'un futur article why not !
@+
Micka