Utilice el script de esta sección para crear una solución de autoservicio para mantener una biblioteca actualizada de instantáneas para su entorno de Oracle Enterprise Performance Management Cloud. Necesita un entorno dedicado al propósito de actualizar y mantener una biblioteca de instantáneas actualizadas.
EPM Cloud soporta la compatibilidad con instantáneas solo para un ciclo mensual. Puede migrar instantáneas de mantenimiento del entorno de prueba al de producción y viceversa. Sin embargo, es posible que los requerimientos de auditoría de algunos clientes necesiten restaurar instantáneas de varios años en el entorno más reciente, y acceder a la aplicación en un periodo de tiempo breve.
Debe programar este script para que se ejecute una vez al mes a fin de convertir las instantáneas disponibles y hacerlas compatibles con el nivel de revisión más reciente de EPM Cloud. Oracle recomienda que ejecute un script después del tercer viernes del mes para asegurarse de que todos los problemas del entorno de producción se han resuelto.
Nota:
No puede utilizar este script para actualizar las instantáneas de Narrative Reporting, Account Reconciliation y Oracle Enterprise Data Management Cloud.
Funcionamiento del script
Por cada instantánea que el cliente almacena, el script actualizado realiza estas tareas mediante el uso de EPM Automate:input.properties
, se conecta a un entorno.recreate
volver a crear el entorno.Artifact Snapshot
(la instantánea de mantenimiento) en una carpeta. Si ha recreado un entorno 18.05 cargando instantáneas de snapshots/18.05
, Artifact Snapshot
se descarga en snapshots/18.06
.Ejecución del script
input.properties
y actualícelo con información de su entorno. Guarde el archivo en un directorio local. Este directorio lo denominaremos parentsnapshotdirectory
. El contenido de este archivo difiere según su sistema operativo.
Asegúrese de que tiene privilegios de escritura en este directorio. Para Windows, puede que necesite iniciar PowerShell mediante la opción Ejecutar como administrador para poder ejecutar los scripts.
upgradeSnapshots.ps1
(Windows PowerShell) o upgradeSnapshots.sh
(Linux/UNIX) y guárdelo en parentsnapshotdirectory
, donde se ubica input.properties
.snapshots
, en parentsnapshotdirectory
.snapshots
), cree un subdirectorio para la instantánea mensual que desea convertir para hacerla compatible con el nivel de parche de EPM Cloud actual. Asigne un nombre al directorio con el formato YY.MM
; por ejemplo, 18.05
para el directorio en el que se almacenan las instantáneas de mayo de 2018.snapshots/18.05
../upgradeSnapshots.sh
.upgradeSnapshots.ps1
.Windows
Cree los scripts input.properties
y upgradeSnapshots.ps1
copiando los scripts de esta sección.
Creación de input.properties
username=exampleAdmin userpassword=examplePassword serviceurl=exapleURL proxyserverusername=proxyServerUserName proxyserverpassword=proxyPassword proxyserverdomain=proxyDoamin parentsnapshotdirectory=C:/some_directory/snapshots emailtoaddress=exampleAdmin@oracle.com
Actualización de input.properties
Nota:
Si authentication at proxy server
no está activado para su entorno de red de Windows, elimine las propiedades proxyserverusername
, proxyserverpassword
y proxyserverdomain
del archivo input.properties
.
Tabla 3-8 Parámetros de input.properties
Parámetro | Descripción |
---|---|
username |
Nombre de usuario de un administrador del servicio. |
userpassword |
Contraseña del administrador de servicio. |
serviceurl |
URL del entorno que se usa en esta actividad. |
proxyserverusername |
Nombre de usuario utilizado para autentificar una sesión segura con el servidor proxy que controla el acceso a Internet. |
proxyserverpassword |
Contraseña para autentificar el usuario con el servidor proxy. |
proxyserverdomain |
Nombre del dominio definido para el servidor proxy. |
parentsnapshotdirectory |
Ruta de acceso absoluta del directorio que se utilizará como el directorio padre del directorio en el que se almacenan las instantáneas que se van a procesar. Utilice barras inclinadas (/) como separadores de directorio. |
emailtoaddress |
Opcionalmente, dirección de correo electrónico a la que se van a enviar los resultados de la nueva creación de entornos antiguos. El resultado se envía por correo electrónico solo si se especifica este valor.
Ejemplo: |
Nota:
Si su contraseña contiene caracteres especiales, consulte Manejo de caracteres especiales.
Creación de upgradeSnapshots.ps1
Utilice este script de ejemplo para crear 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
Cree upgradeSnapshots.sh
y input.properties
copiando los siguientes scripts.
Creación de input.properties
para Linux/UNIX
Nota:
Si su red no está configurada para utilizar un servidor proxy para acceder a Internet, elimine las propiedades proxyserverusername
, proxyserverpassword
y proxyserverdomain
del archivo 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
Actualización de input.properties
Tabla 3-9 Parámetros de input.properties
Parámetro | Descripción |
---|---|
username |
Nombre de usuario de un administrador del servicio. |
userpassword |
Contraseña del administrador de servicio. |
serviceurl |
URL del entorno que se usa en esta actividad. |
proxyserverusername |
Nombre de usuario utilizado para autentificar una sesión segura con el servidor proxy que controla el acceso a Internet. |
proxyserverpassword |
Contraseña para autentificar el usuario con el servidor proxy. |
proxyserverdomain |
Nombre del dominio definido para el servidor proxy. |
jdkdir |
Ubicación JAVA_HOME . |
epmautomatescript |
Ruta de acceso absoluta del ejecutable de EPM Automate (epmautomate.sh ). |
parentsnapshotdirectory |
Ruta de acceso absoluta del directorio que se utilizará como el directorio padre del directorio en el que se almacena la instantánea que se va a procesar. |
emailtoaddress |
Opcionalmente, dirección de correo electrónico a la que se van a enviar los resultados de la nueva creación de entornos antiguos. |
Nota:
Si su contraseña contiene caracteres especiales, consulte Manejo de caracteres especiales.
Creación de upgradeSnapshots.sh
Utilice este script de ejemplo para crear 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