대기 환경을 기본 환경과 같은 최신 상태로 유지하려면 기본 환경에서 일별 유지관리가 완료된 직후 이 스크립트를 사용하여 Oracle Enterprise Performance Management Cloud 기본 환경을 대기 환경으로 복제합니다.
이러한 사용자정의 스크립트는 해당 날짜에 스케줄링된 일별 유지관리가 완료되었는지 확인한 후 환경을 복제합니다.
Windows 스크립트
다음 PowerShell 스크립트를 복사하여dailyclone.ps1
을 생성합니다.
# 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 스크립트
다음 스크립트를 복사하여dailyclone.sh
를 생성합니다.
#!/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 스크립트
다음 코드를 복사하여dailyclone
Groovy 스크립트를 생성합니다.
// 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.")
스크립트 실행
dailyclone.ps1
, dailyclone.sh
또는 dailyclone
Groovy 스크립트를 생성합니다.dailyclone.sh
에 대한 업데이트:
epmautomatescript
는 EPM Automate 실행파일의 위치로 업데이트합니다. 예: epmautomatescript="/home/utils/EPMAutomate/bin/epmautomate.sh"
javahome
은 EPM Automate에서 사용되는 JDK가 설치된 디렉토리로 업데이트합니다. 예: "/home/user1/jdk1.8.0_191"
dailyclone.ps1
및 dailyclone.sh
에 대한 업데이트:
users_and_predefined_roles
: 이 값을 true
로 설정하면 사용자와 해당 사용자의 사전 정의된 역할 지정이 복제됩니다(액세스 제어 그룹은 항상 복제됨).data_management
: Data Integration 레코드를 복제하지 않으려면 이 값을 false
로 설정합니다. Data Integration 레코드는 소스 환경과 타겟 환경 둘 다 월별 업데이트 버전이 동일하거나 타겟 환경이 소스 환경보다 업데이트 버전이 하나 더 최신인 경우에만 복제할 수 있습니다. 예를 들어 22.01 Data Management 레코드는 다른 22.01 환경 또는 22.02 환경에만 복제할 수 있습니다.
Narrative Reporting 및 Oracle Enterprise Data Management Cloud 환경에서는 무시됩니다.
app_audit
: Planning, FreeForm 및 Enterprise Profitability and Cost Management 애플리케이션에 대한 애플리케이션 감사 데이터를 복제하지 않으려면 이 값을 false
로 설정합니다.
Financial Consolidation and Close 및 Tax Reporting 감사 정보는 항상 복제됩니다.
job_console
: 작업 콘솔 데이터를 복제하지 않으려면 이 값을 false
로 설정합니다.stored_snapshots_and_files
: 소스 환경의 인박스 및 아웃박스에 있는 최상위 폴더의 콘텐츠를 복제하려면 이 값을 true
로 설정합니다(하위폴더는 복제되지 않음).daily_maintenance_start_time
: 복제된 타겟 환경의 유지관리 시작 시간을 소스 환경의 유지관리 시작 시간으로 재설정하지 않으려면 이 값을 false
로 설정합니다.dailyclone
Groovy 스크립트에 대한 업데이트:
source_username
은 서비스 관리자의 사용자 이름입니다. 사용자 및 사전 정의된 역할을 복제하려면 ID 도메인 관리자 역할이 있어야 합니다.source_password
는 SOURCE_USERNAME
에서 확인된 사용자의 비밀번호입니다.source_url
은 복제할 환경의 URL입니다.target_username
은 서비스 관리자의 사용자 이름입니다. 사용자 및 사전 정의된 역할을 복제하려면 ID 도메인 관리자 역할이 있어야 합니다.target_password
는 TARGET_USERNAME
에서 확인된 사용자의 비밀번호입니다.target_URL
은 타겟 환경의 URL입니다.dailyclone.ps1
, dailyclone.sh
또는 dailyclone
Groovy 스크립트를 실행합니다.
Windows
dailyclone.ps1
이 저장된 폴더로 이동합니다../dailyclone.ps1 SOURCE_USERNAME SOURCE_PASSWORD SOURCE_URL TARGET_USERNAME TARGET_PASSWORD TARGET_URL
명령을 실행합니다. 이러한 값에 대한 설명은 다음 테이블을 참조하십시오.Table 3-7 매개변수 설명
매개변수 | 설명 |
---|---|
SOURCE_USERNAME |
서비스 관리자의 사용자 이름입니다. 또한 이 사용자는 사용자 및 사전 정의된 역할을 복제하려면 ID 도메인 관리자 역할이 있어야 합니다. |
SOURCE_PASSWORD |
SOURCE_USERNAME 에서 확인된 사용자의 비밀번호입니다. |
SOURCE_URL |
복제할 환경의 URL입니다. |
TARGET_USERNAME |
타겟 환경에서 서비스 관리자의 사용자 이름입니다. 또한 이 사용자는 사용자 및 사전 정의된 역할을 복제하려면 ID 도메인 관리자 역할이 있어야 합니다. |
TARGET_PASSWORD |
TARGET_USERNAME 에서 확인된 사용자의 비밀번호입니다. |
TARGET_URL |
타겟 환경의 URL입니다. |
dailyclone.sh
가 저장된 디렉토리로 이동합니다../dailyclone.sh SOURCE_USERNAME SOURCE_PASSWORD SOURCE_URL TARGET_USERNAME TARGET_PASSWORD TARGET_URL
명령을 실행합니다. 이러한 값에 대한 설명은 위 테이블을 참조하십시오.EPM Automate를 설치하지 않고 명령 실행를 참조하십시오.