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 Fusion Cloud Enterprise Performance Management. Você precisa de um ambiente dedicado à atualização e manutenção de uma biblioteca de instantâneos atualizados.
O Cloud EPM 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 Cloud EPM. 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, Account Reconciliation e do Oracle Fusion Cloud Enterprise Data Management.
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 Cloud EPM. 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-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 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 Cloud EPM 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 Cloud EPM Environment results" Body="The results of recreating an old Cloud EPM 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-10 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 Cloud EPM Environment results" Body="The results of recreating an old Cloud EPM 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