Utilisez le script de cette section pour créer une solution libre-service permettant de maintenir une bibliothèque d'instantanés à jour pour votre environnement Oracle Enterprise Performance Management Cloud. Vous avez besoin d'un environnement dédié à la mise à niveau et à la maintenance d'une bibliothèque d'instantanés à jour.
EPM Cloud prend en charge la compatibilité des instantanés pour un seul cycle mensuel. Vous pouvez migrer les instantanés de maintenance de l'environnement de test vers l'environnement de production, et inversement. Cependant, les exigences d'audit de certains clients peuvent nécessiter la restauration des instantanés de plusieurs années sur le dernier environnement, ainsi que l'accès à l'application sur une courte période.
Vous devez planifier l'exécution de ce script une fois par mois pour convertir les instantanés disponibles et les rendre compatibles avec le dernier niveau de patch EPM Cloud. Oracle vous recommande d'exécuter le script après le troisième vendredi du mois afin de s'assurer que tous les problèmes de l'environnement de production aient été résolus.
Remarque :
Vous ne pouvez pas utiliser ce script pour mettre à jour les instantanés Narrative Reporting, Account Reconciliation et Oracle Enterprise Data Management Cloud.
Fonctionnement du script
Pour chaque instantané stocké par le client, le script de mise à niveau réalise les tâches suivantes à l'aide d'EPM Automate :input.properties
.recreate
pour restaurer l'environnement.Artifact Snapshot
dans un dossier. Si vous avez recréé un environnement 18.05 en chargeant des instantanés à partir de snapshots/18.05
, Artifact Snapshot
est téléchargé dans snapshots/18.06
.Exécution du script
input.properties
et mettez-le à jour avec les informations relatives à votre environnement. Enregistrez le fichier dans un répertoire local. Ce répertoire est nommé parentsnapshotdirectory
dans cette discussion. Le contenu de ce fichier varie en fonction du système d'exploitation.
Assurez-vous que vous disposez de privilèges d'écriture sur ce répertoire. Pour Windows, vous devrez peut-être démarrer PowerShell à l'aide de l'option Exécuter en tant qu'administrateur afin de pouvoir exécuter les scripts.
upgradeSnapshots.ps1
(Windows PowerShell) ou upgradeSnapshots.sh
(Linux/UNIX), puis enregistrez-le dans le répertoire parentsnapshotdirectory
, où se trouve input.properties
.snapshots
, dans le répertoire parentsnapshotdirectory
.snapshots
), créez un sous-répertoire pour l'instantané mensuel à convertir afin de le rendre compatible avec le niveau de patch EPM Cloud en cours. Nommez le répertoire en respectant le format YY.MM
. Par exemple, 18.05
pour le répertoire stockant les instantanés de mai 2018.snapshots/18.05
../upgradeSnapshots.sh
.upgradeSnapshots.ps1
.Windows
Créez le fichier input.properties
et le script upgradeSnapshots.ps1
en copiant les scripts de cette section.
Création du fichier input.properties
username=exampleAdmin userpassword=examplePassword serviceurl=exapleURL proxyserverusername=proxyServerUserName proxyserverpassword=proxyPassword proxyserverdomain=proxyDoamin parentsnapshotdirectory=C:/some_directory/snapshots emailtoaddress=exampleAdmin@oracle.com
Mise à jour du fichier input.properties
Remarque :
Si l'authentification au niveau du serveur proxy
n'est pas activée pour votre environnement réseau Windows, enlevez les propriétés proxyserverusername
, proxyserverpassword
et proxyserverdomain
du fichier input.properties
.
Tableau 3-8 Paramètres du fichier input.properties
Paramètre | Description |
---|---|
username |
Nom d'utilisateur d'un administrateur de service. |
userpassword |
Mot de passe de l'administrateur de service. |
serviceurl |
URL de l'environnement utilisé pour cette activité. |
proxyserverusername |
Nom d'utilisateur permettant d'authentifier une session sécurisée avec le serveur proxy qui contrôle l'accès à Internet. |
proxyserverpassword |
Mot de passe pour l'authentification de l'utilisateur auprès du serveur proxy. |
proxyserverdomain |
Nom du domaine défini pour le serveur proxy. |
parentsnapshotdirectory |
Chemin absolu du répertoire à utiliser en tant que parent du répertoire de stockage des instantanés à traiter. Utilisez la barre oblique (/) comme séparateur de répertoires. |
emailtoaddress |
(Facultatif) Adresse électronique à laquelle les résultats de la recréation d'anciens environnements doivent être envoyés. Les résultats ne sont envoyés par courriel que si cette valeur est indiquée.
Exemple : |
Remarque :
Si votre mot de passe contient des caractères spéciaux, reportez-vous à la section Gestion des caractères spéciaux.
Création du script upgradeSnapshots.ps1
Utilisez cet exemple de script pour créer upgradeSnapshots.ps1
.
# Script for recreating an old EPM Cloud environment # read in key/value pairs from input.properties file $inputproperties=ConvertFrom-StringData(Get-Content ./input.properties -raw) # Global variables $parentsnapshotdirectory="$($inputproperties.parentsnapshotdirectory)" $username="$($inputproperties.username)" $userpassword="$($inputproperties.userpassword)" $serviceurl="$($inputproperties.serviceurl)" $proxyserverusername="$($inputproperties.proxyserverusername)" $proxyserverpassword="$($inputproperties.proxyserverpassword)" $proxyserverdomain="$($inputproperties.proxyserverdomain)" $emailtoaddress="$($inputproperties.emailtoaddress)" $operationmessage="EPM Automate operation:" $operationfailuremessage="EPM Automate operation failed:" $operationsuccessmessage="EPM Automate operation completed successfully:" $epmautomatescript="epmautomate.bat" $workingdir="$pwd" $logdir="$workingdir/logs/" $logfile="$logdir/epmautomate-upgradesnapshots.log" function LogMessage { $message=$args[0] $_mydate=$(get-date -f dd_MM_yy_HH_mm_ss) echo "[$_mydate] $message" >> $logfile } function LogAndEchoMessage { $message=$args[0] $_mydate=$(get-date -f dd_MM_yy_HH_mm_ss) echo "[$_mydate] $message" | Tee-Object -Append -FilePath $logfile } function LogOutput { $_mydate=$(get-date -f dd_MM_yy_HH_mm_ss) $op=$args[0] $opoutput=$args[1] $returncode=$args[2] #If error if ($returncode -ne 0) { $failmessage="[$_mydate] $operationfailuremessage $op" LogMessage $failmessage LogMessage $opoutput LogMessage "return code: $returncode" } else { $successmessage="[$_mydate] $operationsuccessmessage $op" LogMessage $successmessage LogMessage $opoutput LogMessage "return code: $returncode" } } function ExecuteCommand { $op=$args[0] $epmautomatecall="$epmautomatescript $op" $date=$(get-date -f dd_MM_yy_HH_mm_ss) LogMessage "$operationmessage $epmautomatecall" $operationoutput=iex "& $epmautomatecall" >> $logfile 2>&1 LogOutput $op $operationoutput $LastExitCode } function ProcessCommand { $command=$args[0] $date=$(get-date -f dd_MM_yy_HH_mm_ss) if (!([string]::IsNullOrWhitespace($command))) { if (!($command.StartsWith("#"))) { ExecuteCommand $command } } } function Init { $logdirexists=Test-Path $logdir if (!($logdirexists)) { mkdir $logdir 2>&1 | out-null } # removing existing epmautomate debug logs rm ./*.log $logfileexists=Test-Path $logfile # remove existing log file if ($logfileexists) { rm $logfile } } function GetNextDate { $latestyearmonth=$args[0] LogMessage "latest year.month: $latestyearmonth" $latestyear,$latestmonth=$latestyearmonth.split('\.') LogMessage "latest year: $latestyear" LogMessage "latest month: $latestmonth" $intlatestyear=[int]$latestyear $intlatestmonth=[int]$latestmonth if ($intlatestmonth -eq 12) { $intnextmonth=1 $intnextyear=$intlatestyear+1 } else { $intnextmonth=$intlatestmonth+1 $intnextyear=$intlatestyear } $nextyear="{0:D2}" -f $intnextyear $nextmonth="{0:D2}" -f $intnextmonth echo "$nextyear.$nextmonth" } function ProcessSnapshot { $snapshotfile=$args[0] LogMessage "snapshotfile: $snapshotfile" $nextdate=$args[1] LogMessage "nextdate: $nextdate" $snapshotfilename=$snapshotfile.split('/')[-1] LogMessage "snapshotfilename: $snapshotfilename" $snapshotname=$snapshotfilename.split('.')[0] LogMessage "snapshotname: $snapshotname" ProcessCommand "login $username $userpassword $serviceurl $proxyserverusername $proxyserverpassword $proxyserverdomain" ProcessCommand "recreate -f" ProcessCommand "uploadfile $snapshotfile" ProcessCommand "importsnapshot $snapshotname" ProcessCommand "runDailyMaintenance skipNext=true -f" ProcessCommand "downloadfile 'Artifact Snapshot'" ProcessCommand "deletefile $snapshotname" ProcessCommand "logout" $nextdatedirexists=Test-Path $parentsnapshotdirectory/$nextdate if (!($nextdatedirexists)) { mkdir $parentsnapshotdirectory/$nextdate 2>&1 | out-null } LogMessage "Renaming 'Artifact Snapshot.zip' to $snapshotname.zip and moving to $parentsnapshotdirectory/$nextdate" mv $workingdir/'Artifact Snapshot.zip' $workingdir/$snapshotname.zip >> $logfile 2>&1 mv $workingdir/$snapshotname.zip $parentsnapshotdirectory/$nextdate >> $logfile 2>&1 } function callSendMail { $logfile=$logfile -replace "\\", "/" $elements=$logfile.split('/') $logfilename=$elements[-1] if (${emailtoaddress} -match "@") { epmautomate.bat login ${username} ${userpassword} ${serviceurl} epmautomate.bat uploadFile "$logfile" epmautomate.bat sendMail $emailtoaddress "Recreating An Old EPM Cloud Environment results" Body="The results of recreating an old EPM Cloud Environment are attached." Attachments=$logfilename epmautomate.bat deleteFile "$logfilename" epmautomate.bat logout } } #----- main body of processing date Init LogAndEchoMessage "Starting upgrade snapshots processing" $snapshotdirs=@(Get-ChildItem -Directory "$parentsnapshotdirectory" -name) LogMessage "snapshot directories: $snapshotdirs" $latestreleasedate=$snapshotdirs[-1] LogMessage "latest release date: $latestreleasedate" $latestreleasesnapshotdir="$parentsnapshotdirectory/$latestreleasedate" LogMessage "latest release snapshot dir: $latestreleasesnapshotdir" $nextdate=$(GetNextDate "$latestreleasedate") $snapshotfiles=@(Get-ChildItem -File "$latestreleasesnapshotdir") if ($snapshotfiles.length -eq 0) { LogAndEchoMessage "No snapshot files found in directory $latestreleasesnapshotdir. Exiting script." exit } foreach ($snapshotfile in $snapshotfiles) { LogAndEchoMessage "Processing snapshotfile: $snapshotfile" ProcessSnapshot $latestreleasesnapshotdir/$snapshotfile $nextdate } LogAndEchoMessage "Upgrade snapshots processing completed" date callSendMail
Linux/UNIX
Créez upgradeSnapshots.sh
et input.properties
en copiant les scripts suivants.
Création du fichier input.properties
pour Linux/UNIX
Remarque :
Si votre réseau n'est pas configuré de façon à utiliser un serveur proxy pour accéder à Internet, enlevez les propriétés proxyserverusername
, proxyserverpassword
et proxyserverdomain
du fichier input.properties
.
username=exampleAdmin userpassword=examplePassword serviceurl=exapleURL proxyserverusername= proxyserverpassword= proxyserverdomain= jdkdir=/home/user1/jdk160_35 epmautomatescript=/home/exampleAdmin/epmautomate/bin/epmautomate.sh parentsnapshotdirectory=/home/exampleAdmin/some_directory/snapshots emailtoaddress=exampleAdmin@oracle.com
Mise à jour du fichier input.properties
Tableau 3-9 Paramètres du fichier input.properties
Paramètre | Description |
---|---|
username |
Nom d'utilisateur d'un administrateur de service. |
userpassword |
Mot de passe de l'administrateur de service. |
serviceurl |
URL de l'environnement utilisé pour cette activité. |
proxyserverusername |
Nom d'utilisateur permettant d'authentifier une session sécurisée avec le serveur proxy qui contrôle l'accès à Internet. |
proxyserverpassword |
Mot de passe pour l'authentification de l'utilisateur auprès du serveur proxy. |
proxyserverdomain |
Nom du domaine défini pour le serveur proxy. |
jdkdir |
Emplacement de JAVA_HOME . |
epmautomatescript |
Chemin absolu de l'exécutable EPM Automate (epmautomate.sh ). |
parentsnapshotdirectory |
Chemin absolu du répertoire à utiliser en tant que parent du répertoire de stockage de l'instantané à traiter. |
emailtoaddress |
(Facultatif) Adresse électronique à laquelle les résultats de la recréation d'anciens environnements doivent être envoyés. |
Remarque :
Si votre mot de passe contient des caractères spéciaux, reportez-vous à la section Gestion des caractères spéciaux.
Création du script upgradeSnapshots.sh
Utilisez cet exemple de script pour créer upgradeSnapshots.sh
.
#!/bin/sh . ./input.properties workingdir=$(pwd) logdir="${workingdir}/logs" logfile=epmautomate-upgradesnapshots.log operationmessage="EPM Automate operation:" operationfailuremessage="EPM Automate operation failed:" operationsuccessmessage="EPM Automate operation completed successfully:" logdebugmessages=true if [ ! -d ${jdkdir} ] then echo "Could not locate JDK/JRE. Please set value for "jdkdir" property in input.properties file to a valid JDK/JRE location." exit fi if [ ! -f ${epmautomatescript} ] then echo "Could not locate EPM Automate script. Please set value for "epmautomatescript" property in the input.properties file." exit fi export JAVA_HOME=${jdkdir} debugmessage() { # logdebugmessages is defined (or not) in testbase input.properties if [ "${logdebugmessages}" = "true" ] then logmessage "$1" fi } logmessage() { local message=$1 local _mydate=$(date) echo "[$_mydate] ${message}" >> "$logdir/$logfile" } echoandlogmessage() { local message=$1 local _mydate=$(date) echo "[$_mydate] ${message}" | tee -a ${logdir}/${logfile} } logoutput() { date=`date` op="$1" opoutput="$2" returncode="$3" #If error #if grep -q "EPMAT-" <<< "$2" if [ $returncode -ne 0 ] then failmessage="[${date}] ${operationfailuremessage} ${op}" logmessage "${failmessage}" logmessage "${opoutput}" logmessage "return code: ${returncode}" else successmessage="${operationsuccessmessage} ${op}" logmessage "${successmessage}" logmessage "${opoutput}" logmessage "return code: ${returncode}" fi } getLatestReleaseSnapshotDir() { local snapshotdirs=$(find ${parentsnapshotdirectory} -type d | sort) debugmessage "snapshot directories: ${snapshotdirs}" local latestreleasesnapshotdir=$(echo ${snapshotdirs##*$\n} | rev | cut -d' ' -f1 | rev) debugmessage "latest release snapshot dir: ${latestreleasesnapshotdir}" echo "${latestreleasesnapshotdir}" } getNextDate() { local thisyearmonth=$1 local thisyear=$(echo ${thisyearmonth} | cut -d'.' -f1) local thismonth=$(echo ${thisyearmonth} | cut -d'.' -f2) intthismonth=$(bc <<< ${thismonth}) intthisyear=$(bc <<< ${thisyear}) if [ ${intthismonth} -eq 12 ] then local intnextmonth=1 local intnextyear=$((intthisyear+1)) else local intnextmonth=$((intthismonth+1)) local intnextyear=${intthisyear} fi nextmonth=$(printf "%02d\n" ${intnextmonth}) nextyear=$(printf "%02d\n" ${intnextyear}) debugmessage "next date: ${nextyear}.${nextmonth}" echo "${nextyear}.${nextmonth}" } init() { if [ ! -d "$logdir" ] then mkdir $logdir fi # removing existing epmautomate debug logs if ls ./*.log >/dev/null 2>&1 then rm ./*.log fi # remove existing log files if [ -f "${logdir}/${logfile}" ] then rm ${logdir}/${logfile} fi } processCommand() { op="$1" date=`date` logmessage "$operationmessage $op" operationoutput=`eval "$epmautomatescript $op"` logoutput "$op" "$operationoutput" "$?" } processSnapshot() { local snapshotfile="$1" local nextdate="$2" local snapshotname=$(echo "${snapshotfile}" | rev | cut -d'/' -f1 | rev | cut -d'.' -f1) processCommand "login ${username} ${userpassword} ${serviceurl} ${proxyserverusername} ${proxyserverpassword}" processCommand "recreate -f" processCommand "uploadfile ${snapshotfile}" processCommand "importsnapshot \"${snapshotname}\"" processCommand "runDailyMaintenance skipNext=true -f" processCommand "downloadfile \"Artifact Snapshot\"" processCommand "deletefile \"${snapshotname}\"" processCommand "logout" if [ ! -d ${parentsnapshotdirectory}/${nextdate} ] then mkdir ${parentsnapshotdirectory}/${nextdate} fi runDailyMaintenance -f logmessage "Renaming \"Artifact Snapshot.zip\" to ${snapshotname}.zip and moving to ${parentsnapshotdirectory}/${nextdate}" mv "${workingdir}/Artifact Snapshot.zip" "${workingdir}/${snapshotname}.zip" >> "$logdir/$logfile" 2>&1 mv "${workingdir}/${snapshotname}.zip" ${parentsnapshotdirectory}/${nextdate} >> "$logdir/$logfile" 2>&1 } callSendMail() { if [[ "${emailtoaddress}" == *"@"* ]] then ${epmautomatescript} login ${username} ${userpassword} ${serviceurl} ${epmautomatescript} uploadFile "$logdir/$logfile" ${epmautomatescript} sendMail $emailtoaddress "Recreating An Old EPM Cloud Environment results" Body="The results of recreating an old EPM Cloud Environment are attached" Attachments=$logfile ${epmautomatescript} deleteFile "$logfile" ${epmautomatescript} logout fi } #----- main body of processing date echoandlogmessage "Starting upgrade snapshots processing" init latestreleasesnapshotdir=$(getLatestReleaseSnapshotDir) latestreleasedate=$(echo "${latestreleasesnapshotdir}" | rev | cut -d'/' -f1 | rev) debugmessage "latest release date: ${latestreleasedate}" nextdate=$(getNextDate ${latestreleasedate}) snapshotfiles=$(find ${latestreleasesnapshotdir} -type f -name \*.zip | tr "\n" "|") if [ ${#snapshotfiles} -eq 0 ] then echoandlogmessage "No snapshot files found in directory ${latestreleasesnapshotdir}" fi IFS="|" for snapshotfile in $snapshotfiles do echoandlogmessage "Processing snapshotfile: ${snapshotfile}" processSnapshot ${snapshotfile} ${nextdate} done unset IFS echoandlogmessage "Upgrade snapshots processing completed." callSendMail