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.
Reference : http://blogs.oracle.com/xpsoluxdb/entry/clusterware_11gr2_setting_up_an_activepassive_failover_configuration
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
Salut Marc,
RépondreSupprimerBravo pour ce post .
Pierre