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 Fusion Cloud Enterprise Performance Management. Vous avez besoin d'un environnement dédié à la mise à niveau et à la maintenance d'une bibliothèque d'instantanés à jour.
Cloud EPM 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 Cloud EPM. 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 Fusion Cloud Enterprise Data Management.
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 Cloud EPM 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-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. |
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 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
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-10 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 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