Rechercher dans ce blog

lundi 9 mai 2011

11gR2 : proteger une bd par le clusterware oracle

Sur  serveur  aix_rac2  j ai   créer  une  db standalone  MG, je  souhaite  utiliser le  clusterware  pour  la protéger   au  sens  reboot de serveur, kill de process.

1         Prerequis   :

Il   faut  que les  datafiles,controlfiles,redologs  et  spfile  soient sur   des disques  partagés (ACFS,ASM…)

1.1       Constat :

Comme  le  clusterware oracle   était  déjà démarrée au  moment de la creation de  l instance MG   la  base   est  automatiquement  enregistrée et protégée  (cf annexe 1),  mais  elle  ne bascule  pas  d’un nœud a l autre automatiquement  car :
1 – les  fichiers  bd (datafiles,controlfiles,spfile …) ne sont  pas sur  des ressources  partagées,
2- La ressource clusterware n ai  pas prévue pour basculer
3- Le nœud  1  a  un défaut de  configuration  (init,directory,oratab…..)

2         Passage de la  bd   de  fs  a  ASM:

L’  idée  est  de  restaurer  la base sur    l ASM .
On commence  par  faire  un backup db  sur FS   par  le  recovery  manager (rman).
On doit  repérer  les  fileid  de la base et  les redologs  afin  de  pouvoir  faire   la copie  et  le  rename des datafiles par  rman.
Requête  en  annexe pour  reperer  tous  ça.
Une   fois  fait  on commence :

1 – le  controlfile  et spfile

Startup  nomount;
Restore  controlfile  to  ‘+DATA’  from  ‘/u01/app/oracledata/ MG_ctrl_03mbj2ns_1_1_750357244.bkp’;
On  peut  vérifier la  restore   dans l asm a partir  de l autre  nœud  :
Asmcmd
ls –l +DATA/MG/CONTROLFILE/
current.265.750357729
arrêt  de la bd
shutdown  immediate  et  modification du  pfile  pour  y mettre le nouveau  controlfile.
Startup  mount  (avec  le nouveau controlfile)

2.1        restore les  datafiles

run {
set newname for datafile 1 to '+DATA';
set newname for datafile 2 to '+DATA';
set newname for datafile 3 to '+DATA';
set newname for datafile 4 to '+DATA';
restore  database;
switch  datafile  all;
}
Alter  database open;
La  base a ce moment  a le controlfile  et  les  datafiles  sur ASM

2.2       Passage des  redo  et  du  spfile  sur ASM.

2.2.1       Le spfile :

Create  spfile=’+DATA’ from  pfile;
Modification  du pfile  sur les  2  nœuds    (par  asmcmd j ai  checké le nom)
spfile='+data/MG/PARAMETERFILE/spfile.274.750424535'
Création du  répertoire  adump  sur les  2  noeuds.

2.2.2       Les  redologs

Ajout des  nouveau  redologs
Alter  database MG  add  logfile  group 4 ‘+DATA’;
Alter  database MG  add  logfile  group 5 ‘+DATA’;
Alter  database MG  add  logfile  group 6 ‘+DATA’;
Drop des anciens  redologs :
Alter  database  MG  drop logfile  group 1;
Alter  database  MG  drop logfile  group 2;
Alter  database  MG  drop logfile  group 3;
La bd   est  sur shared  disque .

3         Stop et  remove de  la ressource  MG

On va récupérer  la ressource  clusterware    afin de la  restaurer  au  cas ou et  on va la modifier.
Puis  on va supprimer la ressource  du  clusterware et  la réenregistrée  avec  l  action scripts qui passe  les  commandes  (stop/start/check/kill)

·         Récupère  la  configuration  de  la ressource  telle  qu’enregistrée par le  clusterware :
#crsctl status  resource  ora.mg.db -p>crs/11.2.0/HA_scripts/myResource.txt
En   fait   on recupere  la configuration  par  cette   commande   (en  annexe  la  configuration d’origine).

·         Arrêt de la  db  et  remove  du clusterware :
#srvctl  stop database -d MG
#srvctl  remove  database -d MG
Remove the database MG? (y/[n]) y

4         Ressource  plus  générale à créer :

4.1       Action script :

Le  script  doit être créer  dans  la  même  arborescence  sur les  2  nœuds  et  doit être  exécutable.
En  fait  selon l’os  et  le  shell  il y a des  ajustements  a  faire
#!/usr/bin/sh

export ORACLE_HOME=/u01/app/oracle/11.2.0
export ORACLE_SID=MG

case "$1" in
start)
  $ORACLE_HOME/bin/sqlplus /nolog <<EOF
  connect / as sysdba
  startup
EOF
  RET=0
  ;;

stop)
  $ORACLE_HOME/bin/sqlplus /nolog <<EOF
  connect / as sysdba
  shutdown immediate
EOF
  RET=0
  ;;

clean)
  $ORACLE_HOME/bin/sqlplus /nolog <<EOF
  connect / as sysdba
  shutdown abort
EOF
  RET=0
  ;;

check)
   ok=`ps -ef | grep smon | grep $ORACLE_SID | wc -l`
   if [ $ok = 0 ]; then
     RET=1
   else
     RET=0
   fi
   ;;
'*')
  RET=0
  ;;
esac

if [ $RET -eq 0 ]; then
   exit 0
else
   exit 1
fi

4.2       Le fichier de  configuration de la  nouvelle  resource :

TYPE=cluster_resource
DESCRIPTION=Oracle Database resource
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_SCRIPT=/home/oracle/crs/11.2.0/HA_scripts/my_ActivePassive_Cluster.sh
PLACEMENT=restricted
ACTIVE_PLACEMENT=0
AUTO_START=restore
CARDINALITY=1
CHECK_INTERVAL=10
DEGREE=1
ENABLED=1
HOSTING_MEMBERS=aix_rac1 aix_rac2
LOGGING_LEVEL=1
RESTART_ATTEMPTS=1
START_DEPENDENCIES=hard(ora.DATA.dg,ora.FRA.dg) weak(type:ora.listener.type,uniform:ora.ons) pullup(ora.DATA.dg,ora.FRA.dg)
START_TIMEOUT=600
STOP_DEPENDENCIES=hard(intermediate:ora.asm,shutdown:ora.DATA.dg,shutdown:ora.FRA.dg)
STOP_TIMEOUT=600
UPTIME_THRESHOLD=1h

·         Enregistrement   de la  ressource  :
crsctl add resource DB.db  -type cluster_resource -file /home/oracle/crs/11.2.0/HA_scripts/myNewResource.txt
A ce moment  c est  ok la  base est  up a  une resource cluster.
·         Modification du spfile :
On  doit  faire  une  modification au  niveau local_listener  afin de  pouvoir se connecter  des 2 nœuds  sur le port  1421 :
local_listener=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST =aix-vip1)(PORT = 1421))(ADDRESS = (PROTOCOL = TCP)(HOST =aix-vip2)(PORT = 1421)))'
Création d’un service  applicatif   pour  le  test   qui se nomme  DU.

5         Aspect  client  et  test :

5.1       Le  tnsnames.ora

Tns  client
DU=
  (DESCRIPTION =
     (ADDRESS_LIST =             
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.102)(PORT = 1421))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.103)(PORT = 1421))
     )
      (LOAD_BALANCE = yes)
        (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = DU)
       (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5))
    )
  )

Au   niveau des  hosts  on doit mettre  les  vip  ou le  scan pas  les adresse  fixe des  serveurs  (cf le  fichier  hosts cote  serveurs).

5.2        Le  test :

On va   lancer  une  requête  select   a  partir  du  client  et  durant  le  select  on va faire un relocate de  la resource .
Il faut  une requete  longue .
Requete  cliente :
select  *   from  dba_segments,dba_tables;
etat de la  resource  bd   au début  :
#crsctl  status  resource -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CLWARE.dg
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.DATA.dg
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.FRA.dg
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.asm
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2                 Started
ora.eons
               ONLINE  OFFLINE      aix_rac1
               ONLINE  OFFLINE      aix_rac2
ora.gsd
               OFFLINE OFFLINE      aix_rac1
               OFFLINE OFFLINE      aix_rac2
ora.net1.network
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.ons
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
MG.db
      1        ONLINE  ONLINE       aix_rac1
ggatevip
      1        ONLINE  ONLINE       aix_rac2
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       aix_rac2
ora.aix_rac1.vip
      1        ONLINE  ONLINE       aix_rac1
ora.aix_rac2.vip
      1        ONLINE  ONLINE       aix_rac2
ora.oc4j
      1        OFFLINE OFFLINE
ora.ractest.db
      1        OFFLINE OFFLINE                               Open
      2        OFFLINE OFFLINE
ora.ractest.testscan.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.ractest.xe.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.scan1.vip
      1        ONLINE  ONLINE       aix_rac2
Relocate de  la resource   durant  la  requete :
#crsctl  relocate  resource MG.db
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CLWARE.dg
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.DATA.dg
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.FRA.dg
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.LISTENER.lsnr
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.asm
               ONLINE  ONLINE       aix_rac1                 Started
               ONLINE  ONLINE       aix_rac2
ora.eons
               ONLINE  OFFLINE      aix_rac1
               ONLINE  OFFLINE      aix_rac2
ora.gsd
               OFFLINE OFFLINE      aix_rac1
               OFFLINE OFFLINE      aix_rac2
ora.net1.network
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
ora.ons
               ONLINE  ONLINE       aix_rac1
               ONLINE  ONLINE       aix_rac2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ggatevip
      1        ONLINE  ONLINE       aix_rac2
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       aix_rac2
ora.aix_rac1.vip
      1        ONLINE  ONLINE       aix_rac1
ora.aix_rac2.vip
      1        ONLINE  ONLINE       aix_rac2
ora.mg.db
      1        ONLINE  ONLINE       aix_rac2                 Open
ora.oc4j
      1        OFFLINE OFFLINE
ora.ractest.db
      1        ONLINE  ONLINE       aix_rac1                 Open
      2        ONLINE  ONLINE       aix_rac2
ora.ractest.testscan.svc
      1        ONLINE  ONLINE       aix_rac1
      2        ONLINE  ONLINE       aix_rac2
ora.ractest.xe.svc
      1        ONLINE  ONLINE       aix_rac1
      2        ONLINE  ONLINE       aix_rac2
ora.scan1.vip
      1        ONLINE  ONLINE       aix_rac2
La  bd  est  protégée  par  le  clusterware  exemple :
#ps  -ef | grep  pmon
      oracle 19071064        1   1 14:54:54      -  0:00 ora_pmon_MG
[aix_rac2:oracle:MG:/home/oracle]
#kill -9 19071064
[aix_rac2:oracle:MG:/home/oracle]
#ps  -ef | grep  pmon  àpas de  pmon_MG
    grid  7405802        1   0 13:52:52      -  0:00 asm_pmon_+ASM2
  oracle  9568308        1   0 13:54:53      -  0:00 ora_pmon_RACTEST2
  oracle 17891524 11796630   0 15:01:40  pts/0  0:00 grep pmon
[aix_rac2:oracle:MG:/home/oracle]
#ps  -ef | grep  pmon
  oracle 18612336        1  17 15:01:42      -  0:00 ora_pmon_MG

7         requête pour  repérer  les  fichiers  bd  a passer  sur asm :

sur la base source 
col CMD for a120
set line 200
set pages 0
=================================================================
restore  dans  une autre arborescence  a partir  de  RMAN
=================================================================
 sur la base source 
col CMD for a120
set line 200
set pages 0
select 'set newname for datafile ' ||file#||' to '|| ''''|| name ||''''||';' CMD from v$datafile_header;

pour les  redologs
select  'alter database  rename  file  '''||MEMBER||''' to  ''+DATA’'||substr(member,33,45)||''';'  from v$logfile;

8          La  configuration de  la  ressource  enregistrée par  le  Clusterware :

La   configuration au  moment de la créations de la base MG.
NAME=ora.mg.db
TYPE=ora.database.type
ACL=owner:oracle:rwx,pgrp:oinstall:rwx,other::r--
ACTION_FAILURE_TEMPLATE=
ACTION_SCRIPT=
ACTIVE_PLACEMENT=1
AGENT_FILENAME=%CRS_HOME%/bin/oraagent%CRS_EXE_SUFFIX%
AUTO_START=restore
CARDINALITY=1
CHECK_INTERVAL=1
CHECK_TIMEOUT=600
CLUSTER_DATABASE=false
DB_UNIQUE_NAME=MG
DEFAULT_TEMPLATE=PROPERTY(RESOURCE_CLASS=database) PROPERTY(DB_UNIQUE_NAME= CONCAT(PARSE(%NAME%, ., 2), %USR_ORA_DOMAIN%, .)) ELEMENT(INSTANCE_NAME= %GEN_USR_ORA_INST_NAME%)
DEGREE=1
DESCRIPTION=Oracle Database resource
ENABLED=1
FAILOVER_DELAY=0
FAILURE_INTERVAL=60
FAILURE_THRESHOLD=1
GEN_AUDIT_FILE_DEST=/u01/app/oracle/admin/MG/adump
GEN_USR_ORA_INST_NAME=
GEN_USR_ORA_INST_NAME@SERVERNAME(aix_rac2)=MG
HOSTING_MEMBERS=
INSTANCE_FAILOVER=0
LOAD=1
LOGGING_LEVEL=1
MANAGEMENT_POLICY=AUTOMATIC
NLS_LANG=
NOT_RESTARTING_TEMPLATE=
OFFLINE_CHECK_INTERVAL=0
ORACLE_HOME=/u01/app/oracle/11.2.0
PLACEMENT=restricted
PROFILE_CHANGE_TEMPLATE=
RESTART_ATTEMPTS=2
ROLE=PRIMARY
SCRIPT_TIMEOUT=60
SERVER_POOLS=ora.MG
SPFILE=
START_DEPENDENCIES=weak(type:ora.listener.type,uniform:ora.ons,uniform:ora.eons)
START_TIMEOUT=600
STATE_CHANGE_TEMPLATE=
STOP_DEPENDENCIES=
STOP_TIMEOUT=600
UPTIME_THRESHOLD=1h
USR_ORA_DB_NAME=MG
USR_ORA_DOMAIN=
USR_ORA_ENV=
USR_ORA_FLAGS=
USR_ORA_INST_NAME=MG
USR_ORA_OPEN_MODE=open
USR_ORA_OPI=false
USR_ORA_STOP_MODE=immediate
VERSION=11.2.0.1.0

9         Fichier  ORATAB  surles  2  serveurs :

[aix_rac1:oracle:RACTEST1:/home/oracle/crs/11.2.0/HA_scripts]
#cat  /etc/oratab
#Backup file is  /u01/app/oracle/11.2.0/srvm/admin/oratab.bak.aix_rac1 line added by Agent
+ASM1:/u01/app/grid/11.2.0:N            # line added by Agent
MG:/u01/app/oracle/11.2.0:N             # line added by Agent
RACTEST:/u01/app/oracle/11.2.0:N                # line added by Agent

10    Fichiers  hosts des  serveurs :

127.0.0.1       loopback localhost      # loopback (lo0) name/address
172.16.21.180   rac1-priv #interconnect rac1
172.16.21.181   rac2-priv #interconnect rac2
172.16.22.180   rac1_nim
172.16.22.202   srv-nov-nim1
192.168.100.180 aix_rac1
192.168.100.181 aix_rac2
192.168.100.102 aix-vip1
192.168.100.103 aix-vip2
192.168.100.204 aix-scan1  aix-scan
#192.168.100.205 aix-scan2  aix-scan
#192.168.100.206 aix-scan3  aix-scan

1 commentaire: