Die tägliche Wartung von Oracle Enterprise Performance Management Cloud-Umgebungen dauert in der Regel deutlich weniger als die dafür vorgesehene eine Stunde.
Die tatsächliche Dauer der täglichen Wartung der Umgebung wird als Wert der Kennzahl für die Dauer der täglichen Wartung in Minuten im Abschnitt zu operativen Metriken des Aktivitätsberichts erfasst. Wenn Sie nicht eine Stunde warten möchten, bis Sie die Umgebung verwenden können, verwenden Sie eine benutzerdefinierte Version dieses Skripts, um Benutzer darüber zu informieren, dass die tägliche Wartung abgeschlossen ist, sodass sie ihre Aktivitäten fortsetzen können.
Windows-Skript
Erstellen Sie die Dateidaily_maintenance_completed.ps1
, indem Sie das folgende PowerShell-Skript kopieren. Informationen zum Aktualisieren des Skripts für die eigene Verwendung finden Sie unter Skripte ausführen.
# Daily Maintenance Completed Notification script # # Update the following parameters # ------------------------------- $emailaddresses=user1@oracle.com,user2@oracle.com # ------------------------------- $username=$args[0] $password=$args[1] $url=$args[2] if ($($args.count) -ne 3) { echo "Usage: ./daily_maintenance_completed.ps1 <USERNAME> <PASSWORD> <URL>" exit 1 } $amw_time="" function getDailyMaintenanceStartTime { $amwstring=$(epmautomate.bat getDailyMaintenanceStartTime) $elements=$amwstring.split(' ') $amwtime=$elements[0] return $amwtime } function goToSleep ($amw_time){ $current_mdy=Get-Date -AsUTC -UFormat "%m/%d/%Y" $current_date_time=Get-Date -AsUTC -UFormat "%m/%d/%Y %H:%M:%S" $current_epoch=Get-Date -Date $current_date_time -UFormat "%s" $target_date_time=[DateTime]"${current_mdy} ${amw_time}" $target_epoch=Get-Date -Date $target_date_time -UFormat "%s" $sleep_seconds=$target_epoch - $current_epoch # Today's AMW start time has already passed, so add 24 hours to sleep_seconds if ($sleep_seconds -lt 0) { $sleep_seconds=$sleep_seconds + 86400 } $sleep_ts=New-TimeSpan -Seconds ${sleep_seconds} $sleep_hms="${sleep_ts}" -replace '^\d+?\.' echo "Current time is ${current_date_time}. Sleeping for ${sleep_hms}, until daily maintenance start time of ${amw_time}." Start-Sleep -Seconds $sleep_seconds } function attemptLogin { $serverdown=$False while ($true) { epmautomate.bat login ${username} ${password} ${url} if ($?) { # login succeeded if ($serverdown) { # server has been brought down echo "Daily maintenance processing has completed ..." break } else { # server has not yet been brought down echo "Daily maintenance processing has not yet started. Sleeping for 2 minutes before the next check ..." Start-Sleep -Seconds 120 } } else { # login failed if ($serverdown) { # server has been brought down echo "Waiting for daily maintenance processing to complete. Sleeping for 2 minutes before the next check ..." Start-Sleep -Seconds 120 } else { # server has not yet been brought down echo "Daily maintenance processing is now beginning. Sleeping for 2 minutes before the next check ..." Start-Sleep -Seconds 120 $serverdown=$True } } } } function sendNotification { $servername=$url.split("/")[2]; $subject="Daily maintenance processing has completed" $formattedmessage="Daily maintenance processing has completed for server ${servername}" $emailaddresses=${emailaddresses}.replace(',',';') echo "Mailing report" epmautomate.bat sendmail "${emailaddresses}" "${subject}" Body="${formattedmessage}" } echo "Beginning daily maintenance completion notification script." echo "Logging into server ..." epmautomate.bat login ${username} ${password} ${url} $amwtime=getDailyMaintenanceStartTime goToSleep ($amwtime) attemptLogin sendNotification echo "Logging out of server ..." epmautomate.bat logout echo "Script processing has completed."
Linux-/UNIX-Skript
Erstellen Sie die Dateidaily_maintenance_completed.sh
, indem Sie das folgende Skript kopieren. Informationen zum Aktualisieren des Skripts für die eigene Verwendung finden Sie unter Skripte ausführen.
#!/bin/bash # Update the following parameters # ------------------------------- epmautomatescript="LOCATION_EPM_AUTOMATE_EXECUTABLE" javahome="LOCATION_JAVA_HOME" emailaddresses=EMAIL_ADDRESS_1,EMAIL_ADDRESS_2,EMAIL_ADDRESS_N # ------------------------------- username="$1" password="$2" url="$3" export JAVA_HOME=${javahome} if [ "$#" -ne 3 ]; then echo "Usage: ./daily_maintenance_completed.sh <USERNAME> <PASSWORD> <URL>" exit 1 fi amw_time="" getDailyMaintenanceStartTime() { amw_time=$(${epmautomatescript} getDailyMaintenanceStartTime | cut -d' ' -f1) } goToSleep() { current_mdy=$(date -u +%m/%d/%Y) current_date_time=$(date -u) current_epoch=$(date +%s) target_epoch=$(date -d "${current_mdy} ${amw_time}" +%s) sleep_seconds=$(($target_epoch - $current_epoch)) # Today's AMW start time has already passed, so add 24 hours to sleep_seconds if [[ ${sleep_seconds} -lt 0 ]] then sleep_seconds=$((sleep_seconds + 86400)) fi sleep_hms=$(date -d@${sleep_seconds} -u +%H:%M:%S) echo "Current time is ${current_date_time}. Sleeping for ${sleep_hms}, until daily maintenance start time of ${amw_time}." sleep $sleep_seconds } attemptLogin() { local serverdown=1 while true do ${epmautomatescript} login ${username} ${password} ${url} if [[ $? -eq 0 ]] # login succeeded then if [[ ${serverdown} -eq 0 ]] # server has been brought down then echo "Daily maintenance processing has completed" break else # server has not yet been brought down echo "Daily maintenance processing has not yet started. Sleeping for 2 minutes before the next check ..." sleep 120 fi else # login failed if [[ ${serverdown} -eq 0 ]] # server has been brought down then echo "Waiting for daily maintenance processing to complete. Sleeping for 2 minutes before the next check ..." sleep 120 else # server has not yet been brought down echo "Daily maintenance processing is now beginning. Sleeping for 2 minutes before the next check ..." sleep 120 serverdown=0 fi fi done } sendNotification() { local servername=$(echo "${url}" | cut -d '/' -f3- | rev | cut -d':' -f2- | rev) local subject="Daily maintenance processing has completed" local formattedmessage="Daily maintenance processing has completed for server ${servername}" local emailaddresses=$(echo ${emailaddresses} | sed "s/,/;/g") echo "Mailing report" ${epmautomatescript} sendmail "${emailaddresses}" "${subject}" Body="${formattedmessage}" } echo "Beginning daily maintenance completion notification script." echo "Logging into server ..." ${epmautomatescript} login ${username} ${password} ${url} getDailyMaintenanceStartTime goToSleep attemptLogin sendNotification echo "Logging out of server ..." ${epmautomatescript} logout echo "Script processing has completed."
Serverseitiges Groovy-Skript
Erstellen Sie das Groovy-Skript daily_maintenance_completed
, indem Sie den folgenden Code kopieren. Informationen zum Aktualisieren des Skripts für die eigene Verwendung finden Sie unter Skripte ausführen.
// Daily Maintenance Completed Notification script // Update the following parameters // ------------------------------- String username="USERNAME" String password="PASSWORD" String url="URL OF THE ENVIRONMENT" String emailaddresses="EMAIL_ADDRESS_1,EMAIL_ADDRESS_2,EMAIL_ADDRESS_N" // ------------------------------- def LogMessage(String message) { def date = new Date() def sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") println('[' + sdf.format(date) + '] ' + message); } def LogOperationStatus(EpmAutomateStatus opstatus) { def returncode = opstatus.getStatus() if (returncode != 0){ LogMessage(opstatus.getOutput()) } LogMessage('return code: ' + returncode) } def getDailyMaintenanceStartTime(EpmAutomate automate) { LogMessage("Operation: getDailyMaintenanceStartTime") EpmAutomateStatus amwtimestatus = automate.execute('getDailyMaintenanceStartTime') LogOperationStatus(amwtimestatus) def amwstring=(amwtimestatus.getOutput()) def elements=amwstring.split(' ') def amwtime=elements[0] return amwtime } def goToSleep(String amw_time){ def date = new Date() def current_mdy = new SimpleDateFormat("MM/dd/yyyy") def current_date_time = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss") float current_epoch = date.getTime() / 1000 def pattern = "MM/dd/yyyy HH:mm:ss" def input = current_mdy.format(date) + " " + amw_time + ":00" def target_date_time = Date.parse(pattern, input) float target_epoch = target_date_time.getTime() / 1000 int sleep_seconds = Math.round(target_epoch - current_epoch) //Today's AMW start time has already passed, so add 24 hours to sleep_seconds if (sleep_seconds < 0) { sleep_seconds = sleep_seconds + 86400 } def sleep_milliseconds = sleep_seconds * 1000 LogMessage("Current time is " + current_date_time.format(date) + ". Sleeping until daily maintenance start time of " + amw_time + ":00.") sleep(sleep_milliseconds) } def attemptLogin(EpmAutomate automate, String username, String password, String url) { def serverdown=1 while (true) { LogMessage("Operation: login " + username + " " + password + " " + url) EpmAutomateStatus status = automate.execute('login',username,password,url) def returncode = status.getStatus() if (returncode == 0) { if (serverdown == 0){ LogMessage("Daily maintenance processing has completed ...") break } else { LogMessage("Daily maintenance processing has not yet started. Sleeping for 2 minutes before the next check ...") sleep(120000) } } else { if (serverdown == 0){ LogMessage("Waiting for daily maintenance processing to complete. Sleeping for 2 minutes before the next check ...") sleep(120000) } else { LogMessage("Daily maintenance processing is now beginning. Sleeping for 2 minutes before the next check ...") sleep(120000) serverdown=0 } } } } def sendNotification(EpmAutomate automate, String url, String emailaddresses) { def servername=url.tokenize("/")[-1]; def subject="Daily maintenance processing has completed" def formattedmessage="Daily maintenance processing has completed for server " + servername def emailaddressesformatted = emailaddresses.replaceAll(',',';') LogMessage("Operation: sendmail " + emailaddressesformatted + " " + subject + " Body=" + formattedmessage) EpmAutomateStatus status = automate.execute('sendmail',emailaddressesformatted,subject,'Body=' + formattedmessage) LogOperationStatus(status) } LogMessage("Beginning daily maintenance completion notification script.") EpmAutomate automate = getEpmAutomate() LogMessage("Operation: login " + username + " " + password + " " + url) EpmAutomateStatus status = automate.execute('login',username,password,url) LogOperationStatus(status) String amwtime = getDailyMaintenanceStartTime(automate) goToSleep (amwtime) attemptLogin(automate,username,password,url) sendNotification(automate,url,emailaddresses) LogMessage("Operation: logout ") status = automate.execute('logout') LogOperationStatus(status) LogMessage ("Script processing has completed.")
Skripte ausführen
Windows und Linux/UNIXdaily_maintenance_completed.ps1
oder daily_maintenance_completed.sh
, indem Sie das Skript aus einem vorhergehenden Abschnitt kopieren.emailaddresses
mit einer kommagetrennten Liste von E-Mail-Adressen, die benachrichtigt werden sollen, wenn die tägliche Wartung abgeschlossen ist.epmautomatescript
mit dem Speicherort der ausführbaren Datei für EPM Automate. Beispiel: epmautomatescript="/home/utils/EPMAutomate/bin/epmautomate.sh"
javahome
mit dem Verzeichnis, in dem das von EPM Automate verwendete JDK installiert ist. Beispiel: "/home/user1/jdk1.8.0_191"
emailaddresses
mit einer kommagetrennten Liste von E-Mail-Adressen, die benachrichtigt werden sollen, wenn die tägliche Wartung abgeschlossen ist. Beispiel: jdoe@example.com,jane_doe@example.com
daily_maintenance_completed
gespeichert ist../daily_maintenance_completed.ps1 USERNAME PASSWORD URL
./daily_maintenance_completed.sh USERNAME PASSWORD URL
, wobei Folgendes gilt:
USERNAME
ist der Benutzername eines Serviceadministrators.PASSWORD
ist das Kennwort des Serviceadministrators.URL
ist die URL der EPM Cloud-Umgebung.daily_maintenance_completed.groovy
, indem Sie es aus einem vorhergehenden Abschnitt kopieren.username
mit dem Benutzernamen eines Serviceadministrators.password
mit dem Kennwort des Serviceadministratorsurl
mit der URL der EPM Cloud-Umgebung, für die die Benachrichtigung über den Abschluss der täglichen Wartung erfolgen muss. Beispiel: . Beispiel: https://testExample-idDomain.pbcs.us1.oraclecloud.com
emailaddresses
mit einer kommagetrennten Liste von E-Mail-Adressen, die benachrichtigt werden sollen, wenn die tägliche Wartung abgeschlossen ist.