1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
|
#!/bin/sh
# Script de duplication de base
# Propriete de Guillaume HARRY - DSI - CNRS
#
#Syntaxe de la commande
syntaxe() {
echo " "
echo "Syntaxe : $0 SID_cible cible_fichiers pfile_cible SID_source source_fichiers [\"until_time\" [\"nls_format\"]]"
echo " "
}
###########
# PARAMETRES #
###########
if [ $# -lt 5 -o $# -gt 7 ]
then
syntaxe
exit
fi
# $1 = nom de l instance cible
export BASE_CIBLE=$1
. /usr/local/bin/ORAENV $BASE_CIBLE
if [ "$ORACLE_HOME" = "" -o "$ORACLE_SID" = "" ]
then
echo " "
echo "ERREUR : $BASE_CIBLE inconnue dans /etc/oratab"
syntaxe
exit
else
echo "Base cible : $ORACLE_SID ( $ORACLE_HOME )"
fi
# $2 = repertoire cible de duplication
export CIBLE=$2
if [ ! -d $CIBLE ]
then
echo " "
echo "ERREUR : repertoire $CIBLE inexistant"
syntaxe
exit
else
echo "Repertoire cible : $CIBLE"
fi
# $3 = pfile cible
export PFILE=$3
if [ ! -r $PFILE ]
then
echo " "
echo "ERREUR : fichier de demarrage $PFILE inexistant"
syntaxe
exit
else
echo "Fichier de demarrage : $PFILE"
fi
# $4 instance base source
export BASE_SOURCE=$4
echo "Base source : $BASE_SOURCE"
# $5 repertire base source
export SOURCE=$5
echo "Repertoire source : $SOURCE"
#$6 until time
#$7 date format
export UNTILTIME=$6
export FORMATDATE=$7
if [ "$FORMATDATE" = "" ]
then
FORMATDATE="dd/mm/yyyy HH24:MI:SS"
fi
if [ "$UNTILTIME" != "" ]
then
echo "Date de reference : $UNTILTIME (format : $FORMATDATE)"
fi
# fichier LOCK
export LOCK=${CIBLE}/rman_${BASE_CIBLE}.lck
echo "Fichier verrou : $LOCK"
# fihcier log rman
export LOGRMAN=${CIBLE}/rman_${BASE_CIBLE}_dupli.log
echo "Fichier de log RMAN : $LOGRMAN"
###########
# FONCTIONS #
###########
#terminer proprement la procedure
fin() {
echo " "
echo " "
echo "FIN DUPLICATION $BASE_SOURCE VERS $BASE_CIBLE : $(date +%x" "%R)"
echo " "
if [ -f ${LOCK} ]
then
rm $LOCK
fi
exit
}
dupli() {
echo "run "
echo "{ "
if [ "$UNTILTIME" != "" ]
then
echo "set until time \"to_date('$UNTILTIME','$FORMATDATE')\";"
fi
echo "duplicate target database to $BASE_CIBLE "
echo "db_file_name_convert=('$SOURCE','$CIBLE') "
echo "logfile "
echo "'$CIBLE/redolog1.log' size 5M, "
echo "'$CIBLE/redolog2.log' size 5M, "
echo "'$CIBLE/redolog3.log' size 5M; "
echo "RECOVER DATABASE NOREDO; "
echo "} "
}
############
# DUPLICATION #
############
echo " "
echo "DEBUT DUPLICATION $BASE_SOURCE VERS $BASE_CIBLE : $(date +%x" "%R)"
echo " "
# LOCK
if [ -f ${LOCK} ]
then
echo "ERREUR : Operation en cours (Verrou $LOCK present)"
cat ${LOCK}
echo " "
echo "FIN : $(date +%x" "%R)"
echo " "
else
echo "$ORACLE_SID : Duplication $(date +%x" "%R)" > $LOCK
fi
echo "Preparation de la base cible $ORACLE_SID"
echo " "
sqlplus -s "/as sysdba" <<!
shutdown abort;
exit;
!
rm -Rf ${CIBLE}/*.dbf ${CIBLE}/*.log ${CIBLE}/*.ctl
if [ "$PFILE" != "${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora" ]
then
rm -Rf ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
ln -s ${PFILE} ${ORACLE_HOME}/dbs/init${ORACLE_SID}.ora
fi
rm -Rf ${ORACLE_HOME}/dbs/spfile${ORACLE_SID}.ora
sqlplus -s "/as sysdba" <<!
startup nomount pfile='$PFILE';
exit;
!
echo " "
echo "Duplication : $(date +%x" "%R)"
echo "$(dupli)"
rman target sys/$BASE_SOURCE@$BASE_SOURCE LOG=$LOGRMAN auxiliary / <<!
$(dupli)
exit;
!
NBFICHIERS=$(ls ${CIBLE}/*|grep -v rman_|wc -l)
if [ $NBFICHIERS -gt 1 ]
then
echo " $NBFICHIERS fichiers dupliques"
else
echo "ERREUR : $NBFICHIERS fichier duplique"
fin
fi
echo "Redemerrage : $(date +%x" "%R)"
sqlplus "/as sysdba" <<!
shutdown immediate;
startup mount pfile='$PFILE';
alter database open resetlogs;
shutdown immediate;
create spfile from pfile='$PFILE';
startup mount;
alter database noarchivelog;
alter database open;
alter tablespace temp add tempfile '$CIBLE/temp01.dbf' size 100M;
exit;
!
fin |
Partager