Um die Standbyumgebung mit der Primärumgebung auf dem neuesten Stand zu halten, verwenden Sie diese Skripte zum Klonen der Primärumgebung von Oracle Enterprise Performance Management Cloud auf die Standbyumgebung, sobald die tägliche Wartung der Primärumgebung abgeschlossen ist.
Diese benutzerdefinierten Skripte ermitteln, ob die geplante tägliche Wartung für den Tag abgeschlossen ist, und klonen dann die Umgebung.
Windows-Skript
Erstellen Siedailyclone.ps1
, indem Sie das folgende PowerShell-Skript kopieren.
# Clone Environment script # # Update the following parameters # ------------------------------- $users_and_predefined_roles="false" $daily_maintenance_start_time="true" $data_management="true" $app_audit="true" $job_console="true" $stored_snapshots_and_files="false" # ------------------------------- $source_username=$args[0] $source_password=$args[1] $source_url=$args[2] $target_username=$args[3] $target_password=$args[4] $target_url=$args[5] if ($($args.count) -ne 6) { echo "Usage: ./dailyclone.ps1 <SOURCE USERNAME> <SOURCE PASSWORD> <SOURCE URL> <TARGET USERNAME> <TARGET PASSWORD> <TARGET 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 deleteArtifactSnapshotIfExists { if (artifactSnapshotExists) { $command_del=$(epmautomate.bat deletefile "Artifact Snapshot") } } function artifactSnapshotExists { $filelist=$(epmautomate.bat listfiles) if ("$filelist".contains("Artifact Snapshot")) { return $true else return $false } } function cloneEnvironment { echo "Checking to see if daily maintenance processing has completed ..." while ($true) { if (artifactSnapshotExists) { echo "Daily maintenance processing has completed ..." break } else { echo "Sleeping for 30 seconds before the next check to see if daily maintenance processing has completed ..." Start-Sleep -Seconds 30 } } echo "Encrypting target password ..." epmautomate.bat encrypt "${target_password}" "oracleKey" "target_password.epw" echo "Cloning environment ..." epmautomate.bat cloneEnvironment "${target_username}" "target_password.epw" "${target_url}" "SnapshotName=Artifact Snapshot" "UsersAndPreDefinedRoles=${users_and_predefined_roles}" "DataManagement=${data_management}" "appAudit=${app_audit}" "jobConsole=${job_console}" "storedSnapshotsAndFiles=${stored_snapshots_and_files}" "dailyMaintenanceStartTime=${daily_maintenance_start_time}" } echo "Beginning clone environment script." echo "Logging into server ..." epmautomate.bat login ${source_username} ${source_password} ${source_url} $amwtime=getDailyMaintenanceStartTime goToSleep ($amwtime) deleteArtifactSnapshotIfExists cloneEnvironment echo "Logging out of server ..." epmautomate.bat logout echo "Clone environment script processing has completed."
Linux-/UNIX-Skript
Erstellen Siedailyclone.sh
, indem Sie das folgende Skript kopieren.
#!/bin/bash # Update the following parameters # ------------------------------- epmautomatescript="LOCATION_EPM_AUTOMATE_EXECUTABLE" javahome="LOCATION_JAVA_HOME" users_and_predefined_roles="false" data_management="true" app_audit="true" job_console="true" stored_snapshots_and_files="false" daily_maintenance_start_time="true" # ------------------------------- source_username="$1" source_password="$2" source_url="$3" target_username="$4" target_password="$5" target_url="$6" export JAVA_HOME=${javahome} if [ "$#" -ne 6 ]; then echo "Usage: ./dailyclone.sh SOURCE_USERNAME SOURCE_PASSWORD SOURCE_URL TARGET_USERNAME TARGET_PASSWORD TARGET_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 } deleteArtifactSnapshotIfExists() { found=1 filelist=$(${epmautomatescript} listfiles) if [[ ${filelist} == *"Artifact Snapshot"* ]] then command_del=$(${epmautomatescript} deletefile "Artifact Snapshot") fi } artifactSnapshotExists() { found=1 filelist=$(${epmautomatescript} listfiles) if [[ ${filelist} == *"Artifact Snapshot"* ]] then found=0 else found=1 fi echo ${found} } cloneEnvironment() { local found=1 while true do found=$(artifactSnapshotExists) if [[ ${found} -eq 0 ]] then echo "Daily maintenance processing has completed ..." break else echo "Sleeping for 30 seconds before the next check to see if daily maintenance processing has completed ..." sleep 30 fi done echo "Encrypting target password ..." ${epmautomatescript} encrypt "${target_password}" "oracleKey" "target_password.epw" echo "Cloning environment ..." ${epmautomatescript} cloneEnvironment "${target_username}" "target_password.epw" "${target_url}" "SnapshotName=Artifact Snapshot" "UsersAndPreDefinedRoles=${users_and_predefined_roles}" "DataManagement=${data_management}" "appAudit=${app_audit}" "jobConsole=${job_console}" "storedSnapshotsAndFiles=${stored_snapshots_and_files}" "dailyMaintenanceStartTime=${daily_maintenance_start_time}" } echo "Beginning clone environment script." echo "Logging into server ..." ${epmautomatescript} login ${source_username} ${source_password} ${source_url} getDailyMaintenanceStartTime goToSleep deleteArtifactSnapshotIfExists cloneEnvironment echo "Logging out of server ..." ${epmautomatescript} logout echo "Clone environment script processing has completed."
Groovy-Skript
Erstellen Sie das Groovy-Skriptdailyclone
, indem Sie den folgenden Code kopieren.
// Clone Environment script // Update the following parameters String source_username="USERNAME" String source_password="PASSWORD!" String source_url="URL OF THE SOURCE ENVIRONMENT" String target_username="USERNAME" String target_password="PASSWORD" String target_url="URL OF THE TARGET ENVIRONMENT" String snapshot_name="Artifact Snapshot" // ------------------------------- // Do not update the following parameters String users_and_predefined_roles="false" String data_management="true" String app_audit="true" String job_console="true" String stored_snapshots_and_files="false" String daily_maintenance_start_time="true" // ------------------------------- 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) } boolean artifactSnapshotExists(EpmAutomate automate,String snapshot_name) { LogMessage("Operation: listfiles") EpmAutomateStatus listfilesstatus = automate.execute('listfiles') String filelist=(listfilesstatus.getItemsList()) LogOperationStatus(listfilesstatus) if (filelist.contains(snapshot_name)) { return true } else { return false } } def deleteArtifactSnapshotIfExists(EpmAutomate automate,String snapshot_name){ if (artifactSnapshotExists(automate,snapshot_name)) { LogMessage("Operation: deletefile " + snapshot_name) EpmAutomateStatus deletefilestatus = automate.execute('deletefile',snapshot_name) LogOperationStatus(deletefilestatus) } } def waitForDailyMaintenanceToComplete(EpmAutomate automate,String snapshot_name) { LogMessage("Checking to see if daily maintenance processing has completed ...") while (true) { if (artifactSnapshotExists(automate,snapshot_name)) { LogMessage("Daily maintenance processing has completed ...") break } else { LogMessage("Sleeping for 30 seconds before the next check to see if daily maintenance processing has completed ...") sleep(30000) } } } LogMessage("Clone environment script processing beginning ...") EpmAutomate automate = getEpmAutomate() LogMessage("Operation: login " + source_username + " " + source_password + " " + source_url) EpmAutomateStatus status = automate.execute('login',source_username,source_password,source_url) LogOperationStatus(status) String amwtime = getDailyMaintenanceStartTime(automate) goToSleep (amwtime) deleteArtifactSnapshotIfExists(automate,snapshot_name) waitForDailyMaintenanceToComplete(automate,snapshot_name) LogMessage("Operation: encrypt " + target_password + " oracleKey target_password.epw") status = automate.execute('encrypt',target_password,'oracleKey','target_password.epw') LogOperationStatus(status) LogMessage("Operation: cloneEnvironment " + target_username + " target_password.epw " + target_url + " SnapshotName=" + snapshot_name + " UsersAndPreDefinedRoles=" + users_and_predefined_roles + " DataManagement=" + data_management + " appAudit=" + app_audit + " jobConsole=" + job_console + " storedSnapshotsAndFiles=" + stored_snapshots_and_files + " dailyMaintenanceStartTime=" + daily_maintenance_start_time) EpmAutomateStatus cloneenvironmentstatus = automate.execute('cloneEnvironment',target_username,"target_password.epw",target_url,"SnapshotName=" + snapshot_name,"UsersAndPreDefinedRoles=" + users_and_predefined_roles,"DataManagement=" + data_management,"appAudit=" + app_audit,"jobConsole=" + job_console,"storedSnapshotsAndFiles=" + stored_snapshots_and_files,"dailyMaintenanceStartTime=" + daily_maintenance_start_time) LogOperationStatus(cloneenvironmentstatus) LogMessage("Operation: logout ") status = automate.execute('logout') LogOperationStatus(status) LogMessage ("Clone environment script processing has completed.")
Skripte ausführen
dailyclone.ps1
, dailyclone.sh
oder das Groovy-Skript dailyclone
, indem Sie ein Skript aus einem der vorherigen Abschnitte kopieren.Update für dailyclone.sh
:
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"
dailyclone.ps1
und dailyclone.sh
:
users_and_predefined_roles
: Setzen Sie diesen Wert auf true
, um Benutzer und ihre vordefinierten Rollenzuweisungen zu klonen (Gruppen für die Zugriffskontrolle werden immer geklont).data_management
: Setzen Sie diesen Wert auf false
, um Datensätze der Datenintegration nicht zu klonen. Beachten Sie, dass Datensätze der Datenintegration nur geklont werden können, wenn für die Quell- und Zielumgebung dieselbe monatliche Aktualisierung gilt oder wenn die Zielumgebung genau eine neuere Aktualisierung aufweist als die Quellumgebung. Beispiel: Sie können die Datenmanagement-Datensätze für 22.01 nur in eine andere 22.01-Umgebung oder in eine 22.02-Umgebung klonen.
Wird für Narrative Reporting- und Oracle Enterprise Data Management Cloud-Umgebungen ignoriert.
app_audit
: Setzen Sie diesen Wert auf false
, wenn die Anwendungsauditdaten für Planning-, FreeForm- und Enterprise Profitability and Cost Management-Anwendungen nicht geklont werden sollen.
Auditdaten für Financial Consolidation and Close und Tax Reporting werden immer geklont.
job_console
: Setzen Sie diesen Wert auf false
, wenn Jobkonsolendaten nicht geklont werden sollen.stored_snapshots_and_files
: Setzen Sie diesen Wert auf true
, wenn Sie den Inhalt der Ordner der obersten Ebene in der Inbox und der Outbox der Quellumgebung klonen möchten (Unterordner werden nie geklont).daily_maintenance_start_time
: Setzen Sie diesen Wert auf false
, wenn die Startzeit für die Wartung der geklonten Zielumgebung nicht auf die Startzeit der Quellumgebung zurückgesetzt werden soll.dailyclone
:
source_username
ist der Benutzername eines Serviceadministrators. Die Rolle Identitätsdomainadministrator ist zum Klonen von Benutzern und vordefinierten Rollen erforderlich.source_password
ist das Kennwort des durch SOURCE_USERNAME
bestimmten Benutzers.source_url
ist die URL der Umgebung, die Sie klonen möchten.target_username
ist der Benutzername eines Serviceadministrators. Die Rolle Identitätsdomainadministrator ist zum Klonen von Benutzern und vordefinierten Rollen erforderlich.target_password
ist das Kennwort des durch TARGET_USERNAME
bestimmten Benutzers.target_URL
ist die URL der Zielumgebung.dailyclone.ps1
, dailyclone.sh
oder das Groovy-Skript dailyclone
aus:
Windows
dailyclone.ps1
gespeichert ist../dailyclone.ps1 SOURCE_USERNAME SOURCE_PASSWORD SOURCE_URL TARGET_USERNAME TARGET_PASSWORD TARGET_URL
. Beschreibungen dieser Werte finden Sie in der folgenden Tabelle.Table 3-7 Beschreibung der Parameter
Parameter | Beschreibung |
---|---|
SOURCE_USERNAME |
Der Benutzername eines Serviceadministrators. Zudem muss dieser Benutzer auch über die Rolle Identitätsdomainadministrator verfügen, um Benutzer und vordefinierte Rollen zu klonen. |
SOURCE_PASSWORD |
Das Kennwort des durch SOURCE_USERNAME bestimmten Benutzers. |
SOURCE_URL |
Die URL der Umgebung, die Sie klonen möchten. |
TARGET_USERNAME |
Der Benutzername eines Serviceadministrators in der Zielumgebung. Zudem muss dieser Benutzer auch über die Rolle Identitätsdomainadministrator verfügen, um Benutzer und vordefinierte Rollen zu klonen. |
TARGET_PASSWORD |
Das Kennwort des durch TARGET_USERNAME bestimmten Benutzers. |
TARGET_URL |
Die URL der Zielumgebung. |
dailyclone.sh
gespeichert ist../dailyclone.sh SOURCE_USERNAME SOURCE_PASSWORD SOURCE_URL TARGET_USERNAME TARGET_PASSWORD TARGET_URL
. Beschreibungen dieser Werte finden Sie in der vorherigen Tabelle.Informationen finden Sie unter Befehle ohne Installation von EPM Automate ausführen.