Verwenden Sie das Skript in diesem Abschnitt, um eine Selfservicelösung zu erstellen, mit der eine aktuelle Bibliothek von Snapshots für Ihre Oracle Enterprise Performance Management Cloud-Umgebung verwaltet werden kann. Sie benötigen eine Umgebung, die speziell für die Aktualisierung und Wartung einer Bibliothek mit aktuellen Snapshots eingerichtet ist.
EPM Cloud 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 EPM Cloud-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 Enterprise Data Management Cloud 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 EPM Cloud-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-8 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 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
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-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. |
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 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