Use o script nesta seção para criar uma solução de autoatendimento a fim de manter uma biblioteca atualizada de instantâneos para o seu ambiente do Oracle Enterprise Performance Management Cloud. Você precisa de um ambiente dedicado à atualização e manutenção de uma biblioteca de instantâneos atualizados.
O EPM Cloud oferece suporte à compatibilidade de instantâneos para um ciclo mensal apenas; você pode migrar instantâneos do ambiente de teste para o ambiente de produção, e vice-versa. No entanto, os requisitos de auditoria de alguns clientes podem tornar necessária a restauração de instantâneos de vários anos no ambiente mais recente e o acesso de aplicativos durante um curto período.
Você deve agendar esse script para ser executado uma vez por mês para converter os instantâneos disponíveis e torná-los compatíveis com o nível de patch mais recente do EPM Cloud. A Oracle recomenda que você execute o script depois da terceira sexta-feira do mês para garantir que todos os problemas no ambiente de produção tenham sido resolvidos.
Nota:
Você não pode usar esse script para atualizar instantâneos do Narrative Reporting, do Account Reconciliation e do Oracle Enterprise Data Management Cloud.
Como o Script Funciona
Para cada instantâneo armazenado pelo cliente, o script de atualização completa essas tarefas usando o EPM Automate:input.properties
, faça logon em um ambienterecreate
para renovar o ambienteInstantâneo do Artefato
(o instantâneo de manutenção) em uma pasta. Se você recriou um ambiente 18.05 por meio do upload de instantâneos de snapshots/18.05
, o download do Instantâneo do Artefato
será feito em snapshots/18.06
.Execução do Script
input.properties
e atualize-o com informações do seu ambiente. Salve o arquivo em um diretório local. Nesta discussão, esse diretório é denominado parentsnapshotdirectory
. O conteúdo desse arquivo varia em função do seu sistema operacional.
Certifique-se de ter privilégios de gravação nesse diretório. Para Windows, pode ser que você precise iniciar o PowerShell usando a opção Executar como Administrador para poder executar scripts.
upgradeSnapshots.ps1
(Windows PowerShell) ou upgradeSnapshots.sh
(Linux/UNIX) e salve-o no diretório parentsnapshotdirectory
, onde input.properties
está localizado.snapshots
, no diretório parentsnapshotdirectory
.snapshots
), crie um subdiretório para o instantâneo mensal a ser convertido. Assim ele será compatível com o nível de patch do EPM Cloud atual. Atribua um nome ao diretório usando o formato YY.MM
; por exemplo, atribua o nome 18.05
ao diretório para armazenar instantâneos de 18 de maio.snapshots/18.05
../upgradeSnapshots.sh
.upgradeSnapshots.ps1
.Windows
Crie o arquivo input.properties
e o script upgradeSnapshots.ps1
copiando os scripts nesta seção.
Criação de input.properties
username=exampleAdmin userpassword=examplePassword serviceurl=exapleURL proxyserverusername=proxyServerUserName proxyserverpassword=proxyPassword proxyserverdomain=proxyDoamin parentsnapshotdirectory=C:/some_directory/snapshots emailtoaddress=exampleAdmin@oracle.com
Atualização de input.properties
Nota:
Se a autenticação no servidor proxy
não estiver habilitada para seu ambiente de rede Windows, remova as propriedades proxyserverusername
, proxyserverpassword
e proxyserverdomain
do arquivo input.properties
.
Tabela 3-8 Parâmetros de input.properties
Parâmetro | Descrição |
---|---|
username |
Nome de usuário de um Administrador de Serviço. |
userpassword |
Senha do Administrador do Serviço. |
serviceurl |
URL do ambiente que foi usado para essa atividade. |
proxyserverusername |
O nome do usuário para autenticar uma sessão segura no servidor proxy que controla o acesso à internet. |
proxyserverpassword |
A senha para autenticar o usuário no servidor proxy. |
proxyserverdomain |
O nome do domínio definido para o servidor proxy. |
parentsnapshotdirectory |
Caminho absoluto do diretório a ser usado como diretório pai do diretório que armazena os instantâneos a serem processados. Use barras (/) como separadores de diretório. |
emailtoaddress |
Opcionalmente, o endereço de e-mail para o qual os resultados da recriação de ambientes antigos serão enviados. Os resultados só serão enviados por e-mail se esse valor for especificado.
Exemplo: |
Nota:
Se sua senha contiver caracteres especiais, consulte Caracteres Especiais.
Criação do script upgradeSnapshots.ps1
Use esse script de amostra para criar o script 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
Crie o script upgradeSnapshots.sh
e o arquivo input.properties
copiando os scripts a seguir.
Criação de input.properties
para Linux/UNIX
Nota:
Se sua rede não estiver configurada para usar um servidor proxy a fim de acessar a internet, remova as propriedades proxyserverusername
, proxyserverpassword
e proxyserverdomain
do arquivo 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
Atualização de input.properties
Tabela 3-9 Parâmetros de input.properties
Parâmetro | Descrição |
---|---|
username |
Nome de usuário de um Administrador de Serviço. |
userpassword |
Senha do Administrador do Serviço. |
serviceurl |
URL do ambiente que está sendo usado para essa atividade. |
proxyserverusername |
O nome do usuário para autenticar uma sessão segura no servidor proxy que controla o acesso à internet. |
proxyserverpassword |
A senha para autenticar o usuário no servidor proxy. |
proxyserverdomain |
O nome do domínio definido para o servidor proxy. |
jdkdir |
Localização de JAVA_HOME . |
epmautomatescript |
Caminho absoluto do EPM Automate (epmautomate.sh ). |
parentsnapshotdirectory |
Caminho absoluto do diretório a ser usado como diretório pai do diretório que armazena o instantâneo a ser processado. |
emailtoaddress |
Opcionalmente, o endereço de e-mail para o qual os resultados da recriação de ambientes antigos serão enviados. |
Nota:
Se sua senha contiver caracteres especiais, consulte Caracteres Especiais.
Criação de upgradeSnapshots.sh
Use esse script de amostra para criar o script 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