Utilizzare lo script descritto in questa sezione per creare una soluzione self-service per mantenere aggiornata una libreria di snapshot per l'ambiente Oracle Enterprise Performance Management Cloud in uso. È necessario un ambiente dedicato ai fini dell'aggiornamento e della gestione di una libreria di snapshot aggiornati.
EPM Cloud supporta la compatibilità degli snapshot solo per un ciclo mensile; è possibile migrare gli snapshot di manutenzione dall'ambiente di test all'ambiente di produzione e viceversa. Tuttavia, i requisiti di auditing di alcuni clienti potrebbero richiedere il ripristino di snapshot di più anni nell'ambiente più recente e l'accesso all'applicazione in un breve periodo di tempo.
È consigliabile programmare l'esecuzione di questo script una volta al mese allo scopo di convertire gli snapshot disponibili e renderli compatibili con l'ultimo livello di patch di EPM Cloud. Oracle consiglia di eseguire lo script dopo il terzo venerdì del mese per assicurarsi di aver risolto tutti i problemi nell'ambiente di produzione.
Nota:
Non è possibile utilizzare questo script per aggiornare gli snapshot di Narrative Reporting, Account Reconciliation e Oracle Enterprise Data Management Cloud.
Funzionamento dello script
Per ogni snapshot memorizzato dal cliente, lo script di aggiornamento completa i seguenti task utilizzando EPM Automate.input.properties
.recreate
per ricreare l'ambiente.Artifact Snapshot
(lo snapshot di manutenzione) in una cartella. Se è stato ricreato un ambiente 18.05 mediante il caricamento di snapshot da snapshots/18.05
, Artifact Snapshot
viene scaricato in snapshots/18.06
.Esecuzione dello script
input.properties
e aggiornarlo con le informazioni relative all'ambiente in uso. Salvare il file in una directory locale. La directory viene indicata come parentsnapshotdirectory
nel corso di questa descrizione. Il contenuto di questo file varia a seconda del sistema operativo.
Assicurarsi di avere i privilegi di scrittura in questa directory. Per Windows, potrebbe essere necessario avviare PowerShell utilizzando l'opzione Esegui come amministratore per poter essere in grado di eseguire gli script.
upgradeSnapshots.ps1
(Windows PowerShell) o upgradeSnapshots.sh
(Linux/UNIX) e salvarlo in parentsnapshotdirectory
dove si trova il file input.properties
.snapshots
, in parentsnapshotdirectory
.snapshots
), creare una sottodirectory per lo snapshot mensile da convertire in modo da renderlo compatibile con il livello patch corrente di EPM Cloud. Denominare la directory utilizzando il formato AA.MM
; ad esempio, 18.05
per la directory in cui memorizzare gli snapshot di maggio 2018.snapshots/18.05
../upgradeSnapshots.sh
.upgradeSnapshots.ps1
.Windows
Creare input.properties
e lo script upgradeSnapshots.ps1
copiando gli script in questa sezione.
Creazione di input.properties
username=exampleAdmin userpassword=examplePassword serviceurl=exapleURL proxyserverusername=proxyServerUserName proxyserverpassword=proxyPassword proxyserverdomain=proxyDoamin parentsnapshotdirectory=C:/some_directory/snapshots emailtoaddress=exampleAdmin@oracle.com
Aggiornamento di input.properties
Nota:
Se l'autenticazione a livello di server proxy
non è abilitata per l'ambiente di rete Windows, rimuovere le proprietà proxyserverusername
, proxyserverpassword
e proxyserverdomain
dal file input.properties
.
Tabella 3-8 Parametri di input.properties
Parametro | Descrizione |
---|---|
username |
Nome utente di un amministratore del servizio. |
userpassword |
Password dell'amministratore del servizio . |
serviceurl |
URL dell'ambiente utilizzato per questa attività. |
proxyserverusername |
Il nome utente per l'autenticazione di una sessione sicura con il server proxy che controlla l'accesso a Internet. |
proxyserverpassword |
La password per autenticare l'utente con il server proxy. |
proxyserverdomain |
Il nome del dominio definito per il server proxy. |
parentsnapshotdirectory |
Percorso assoluto della directory da utilizzare come directory padre della directory in cui sono memorizzati gli snapshot da elaborare. Utilizzare le barre (/) come separatori di directory. |
emailtoaddress |
(Facoltativo) Indirizzo e-mail a cui devono essere inviati i risultati ottenuti ricreando vecchi ambienti. I risultati vengono inviati vie e-mail solo se viene specificato questo valore.
Esempio: |
Nota:
Se la password contiene caratteri speciali, fare riferimento alla sezione Gestione dei caratteri speciali.
Creazione di upgradeSnapshots.ps1
Utilizzare questo script di esempio per creare 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
Creare upgradeSnapshots.sh
e input.properties
copiando i seguenti script.
Creazione di input.properties
per Linux/UNIX
Nota:
Se la rete non è configurata per l'accesso a Internet tramite un server proxy, rimuovere le proprietà proxyserverusername
, proxyserverpassword
e proxyserverdomain
dal file 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
Aggiornamento di input.properties
Tabella 3-9 Parametri di input.properties
Parametro | Descrizione |
---|---|
username |
Nome utente di un amministratore del servizio. |
userpassword |
Password dell'amministratore del servizio . |
serviceurl |
URL dell'ambiente utilizzato per questa attività. |
proxyserverusername |
Il nome utente per l'autenticazione di una sessione sicura con il server proxy che controlla l'accesso a Internet. |
proxyserverpassword |
La password per autenticare l'utente con il server proxy. |
proxyserverdomain |
Il nome del dominio definito per il server proxy. |
jdkdir |
Posizione di JAVA_HOME . |
epmautomatescript |
Percorso assoluto dell'eseguibile di EPM Automate (epmautomate.sh ). |
parentsnapshotdirectory |
Percorso assoluto della directory da utilizzare come directory padre della directory in cui è memorizzato lo snapshot da elaborare. |
emailtoaddress |
(Facoltativo) Indirizzo e-mail a cui devono essere inviati i risultati ottenuti ricreando vecchi ambienti. |
Nota:
Se la password contiene caratteri speciali, fare riferimento alla sezione Gestione dei caratteri speciali.
Creazione di upgradeSnapshots.sh
Utilizzare questo script di esempio per creare 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