Verwenden Sie das Skript in diesem Abschnitt, um eine Selfservicelösung zu erstellen, mit der eine aktuelle Bibliothek von Snapshots für Ihre Oracle Fusion Cloud Enterprise Performance Management-Umgebung verwaltet werden kann. Sie benötigen eine Umgebung, die speziell für die Aktualisierung und Wartung einer Bibliothek mit aktuellen Snapshots eingerichtet ist.
Cloud EPM unterstützt die Snapshot-Kompatibilität nur für einen monatlichen Zyklus. Sie können Wartungs-Snapshots von der Testumgebung in die Produktionsumgebung migrieren und umgekehrt. Die Auditing-Anforderungen einiger Kunden können jedoch die Wiederherstellung von Snapshots aus mehreren Jahren in der neuesten Umgebung und den Zugriff auf die Anwendung in kurzer Zeit erforderlich machen.
Dieses Skript sollte einmal im Monat ausgeführt werden, um die verfügbaren Snapshots zu konvertieren und sie mit der neuesten Cloud EPM-Patchebene kompatibel zu machen. Oracle empfiehlt, das Skript nach dem dritten Freitag im Monat auszuführen, um sicherzustellen, dass alle Probleme in der Produktionsumgebung behoben sind.
Hinweis:
Sie können dieses Skript nicht verwenden, um Snapshots für Narrative Reporting, Account Reconciliation und Oracle Fusion Cloud Enterprise Data Management zu aktualisieren.
Funktionsweise des Skripts
Für jeden vom Kunden gespeicherten Snapshot führt das Upgradeskript die folgenden Aufgaben mit EPM Automate aus:input.properties wird die Anmeldung in einer Umgebung durchgeführt.recreate, um die Umgebung wiederherzustellen.Artifact Snapshot (Wartungs-Snapshot) in einen Ordner herunter. Wenn Sie eine 18.05-Umgebung durch das Hochladen von Snapshots aus Snapshots/18.05 erstellt haben, wird Artifact Snapshot in Snapshots/18.06 heruntergeladen.Skripte ausführen
input.properties, und aktualisieren Sie sie mit Informationen für Ihre Umgebung. Speichern Sie die Datei in einem lokalen Verzeichnis. Hierbei handelt es sich um das Verzeichnis, das in dieser Erörterung als parentsnapshotdirectory referenziert wird. Die Inhalte dieser Datei unterscheiden sich je nach Betriebssystem.
Stellen Sie sicher, dass Sie Schreibrechte in diesem Verzeichnis haben. Unter Windows müssen Sie möglicherweise PowerShell mit der Option Als Administrator ausführen starten, um Skripte ausführen zu können.
upgradeSnapshots.ps1 (Windows PowerShell) oder das Skript upgradeSnapshots.sh (Linux/UNIX), und speichern Sie es im Verzeichnis parentsnapshotdirectory, in dem sich input.properties befindet.parentsnapshotdirectory ein Unterverzeichnis, z.B. snapshots.snapshots) ein Unterverzeichnis für den monatlichen Snapshot, den Sie konvertieren möchten, um ihn mit der aktuellen Cloud EPM-Patchebene kompatibel zu machen. Benennen Sie das Verzeichnis im Format YYY.MM, z.B. 18.05 für das Verzeichnis zum Speichern der Snapshots vom Mai 2018.snapshots/18.05../upgradeSnapshots.sh aus.upgradeSnapshots.ps1 aus.Windows
Erstellen Sie das Skript input.properties und upgradeSnapshots.ps1 durch Kopieren der Skripte in diesem Abschnitt.
input.properties erstellen
username=exampleAdmin userpassword=examplePassword serviceurl=exapleURL proxyserverusername=proxyServerUserName proxyserverpassword=proxyPassword proxyserverdomain=proxyDoamin parentsnapshotdirectory=C:/some_directory/snapshots emailtoaddress=exampleAdmin@oracle.com
input.properties aktualisieren
Hinweis:
Wenn authentication at proxy server für Ihre Windows-Netzwerkumgebung nicht aktiviert ist, entfernen Sie die Eigenschaften proxyserverusername, proxyserverpassword und proxyserverdomain aus der Datei input.properties.
Tabelle 3-9 Parameter für "input.properties"
| Parameter | Beschreibung |
|---|---|
username |
Benutzername eines Serviceadministrators. |
userpassword |
Kennwort des Serviceadministrators. |
serviceurl |
URL der Umgebung, die für diese Aktivität verwendet wird. |
proxyserverusername |
Der Benutzername zum Authentifizieren einer sicheren Session auf dem Proxyserver, der den Zugriff auf das Internet steuert. |
proxyserverpassword |
Das Kennwort zur Authentifizierung des Benutzers beim Proxyserver. |
proxyserverdomain |
Der Name der Domain, die für den Proxyserver definiert ist. |
parentsnapshotdirectory |
Absoluter Pfad des Verzeichnisses, das als übergeordnetes Verzeichnis des Verzeichnisses verwendet werden soll, in dem die zu verarbeitenden Snapshots gespeichert werden. Verwenden Sie Schrägstriche (/) als Verzeichnistrennzeichen. |
emailtoaddress |
Optional, die E-Mail-Adresse, an die Ergebnisse der Neuerstellung alter Umgebungen gesendet werden sollen. Die Ergebnisse werden nur per E-Mail gesendet, wenn dieser Wert angegeben wurde.
Beispiel: |
Hinweis:
Wenn Ihr Kennwort Sonderzeichen enthält, finden Sie unter Sonderzeichen verarbeiten weitere Informationen.
upgradeSnapshots.ps1 erstellen
Verwenden Sie dieses Beispielskript zum Erstellen von 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
Erstellen Sie upgradeSnapshots.sh und input.properties durch Kopieren der folgenden Skripte.
input.properties für Linux/UNIX erstellen
Hinweis:
Wenn Ihr Netzwerk nicht für die Verwendung eines Proxyservers für den Internetzugriff konfiguriert ist, entfernen Sie die Eigenschaften proxyserverusername, proxyserverpassword und proxyserverdomain aus der Datei 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
input.properties aktualisieren
Tabelle 3-10 Parameter für "input.properties"
| Parameter | Beschreibung |
|---|---|
username |
Benutzername eines Serviceadministrators. |
userpassword |
Kennwort des Serviceadministrators. |
serviceurl |
URL der Umgebung, die für diese Aktivität verwendet wird. |
proxyserverusername |
Der Benutzername zum Authentifizieren einer sicheren Session auf dem Proxyserver, der den Zugriff auf das Internet steuert. |
proxyserverpassword |
Das Kennwort zur Authentifizierung des Benutzers beim Proxyserver. |
proxyserverdomain |
Der Name der Domain, die für den Proxyserver definiert ist. |
jdkdir |
Verzeichnis JAVA_HOME. |
epmautomatescript |
Absoluter Pfad der ausführbaren Datei für EPM Automate (epmautomate.sh). |
parentsnapshotdirectory |
Absoluter Pfad des Verzeichnisses, das als übergeordnetes Verzeichnis des Verzeichnisses verwendet werden soll, in dem der zu verarbeitende Snapshot gespeichert wird. |
emailtoaddress |
Optional, die E-Mail-Adresse, an die Ergebnisse der Neuerstellung alter Umgebungen gesendet werden sollen. |
Hinweis:
Wenn Ihr Kennwort Sonderzeichen enthält, finden Sie unter Sonderzeichen verarbeiten weitere Informationen.
upgradeSnapshots.sh erstellen
Verwenden Sie dieses Beispielskript zum Erstellen von 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