From 87ea0cd1f251e07d2197b2a546a137df943d191f Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Mon, 9 Sep 2024 15:05:47 -0700 Subject: [PATCH 01/17] Create .gitkeep --- apps-unlimited/EBSR12.2onOCI/.gitkeep | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps-unlimited/EBSR12.2onOCI/.gitkeep diff --git a/apps-unlimited/EBSR12.2onOCI/.gitkeep b/apps-unlimited/EBSR12.2onOCI/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/.gitkeep @@ -0,0 +1 @@ + From 1e14a44543b195da78e6a7a1b596dcb56cb2274a Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Mon, 9 Sep 2024 15:12:53 -0700 Subject: [PATCH 02/17] Create .gitkeep --- apps-unlimited/EBSR12.2onOCI/Database/.gitkeep | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps-unlimited/EBSR12.2onOCI/Database/.gitkeep diff --git a/apps-unlimited/EBSR12.2onOCI/Database/.gitkeep b/apps-unlimited/EBSR12.2onOCI/Database/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/Database/.gitkeep @@ -0,0 +1 @@ + From d449f62a8a26c68ba85a17f5ee406581fabdacfd Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Mon, 9 Sep 2024 15:13:35 -0700 Subject: [PATCH 03/17] Create .gitkeep --- apps-unlimited/EBSR12.2onOCI/AppTier/.gitkeep | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/.gitkeep diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/.gitkeep b/apps-unlimited/EBSR12.2onOCI/AppTier/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/.gitkeep @@ -0,0 +1 @@ + From 894f80fa4a78e4486fbeb1b3a8e5be8bac178d64 Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Mon, 9 Sep 2024 16:10:26 -0700 Subject: [PATCH 04/17] Initial push --- .../EBSR12.2onOCI/Database/ChangeHomePath.sh | 75 ++++ .../EBSR12.2onOCI/Database/EBSCFG.env | 69 ++++ .../Database/EBS_DB_RoleChange.sh | 107 +++++ .../EBSR12.2onOCI/Database/callReConfig.sh | 58 +++ .../EBSR12.2onOCI/Database/stdfuncs.sh | 371 ++++++++++++++++++ 5 files changed, 680 insertions(+) create mode 100644 apps-unlimited/EBSR12.2onOCI/Database/ChangeHomePath.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/Database/EBSCFG.env create mode 100644 apps-unlimited/EBSR12.2onOCI/Database/EBS_DB_RoleChange.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/Database/callReConfig.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/Database/stdfuncs.sh diff --git a/apps-unlimited/EBSR12.2onOCI/Database/ChangeHomePath.sh b/apps-unlimited/EBSR12.2onOCI/Database/ChangeHomePath.sh new file mode 100644 index 0000000..c09805a --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/Database/ChangeHomePath.sh @@ -0,0 +1,75 @@ +############################################################################# +# ChangeHomePath.sh +# An include script holding the common routine that changes the oracle +# database home path if needed when switching a standby database to primary. +# +# This is an INCLUDE file. It is code to be included in an outer ksh +# script. It just holds the routine ReConfig, which calls the EBS code. +# +# Note: assumes all the database instances are present in gv_instance when +# the check is done in the main script. +# +# Requires user equivalency across all RAC nodes. +# +# No parameters passed in +# +# Rev: +# 8/23/24 Re-formed as a standard routine to access inside different scripts +# 1/15/24 DPresley Created +############################################################################# +# +ReConfig() +{ +LogMsg "Started ReConfig - Database Home Reconfiguration" + +LogMsg "DbName: $DbName" + +# Calling script has the apps password. Need to get the database password +GetLogon $DB_SECRET_NAME +DB_SECRET=$LOGON + +PERLBIN=`dirname $ORACLE_HOME/perl/bin/perl` +LogMsg "PERLBIN = $PERLBIN" + +PATH=${PERLBIN}:${PATH} + +PERL5LIB=$ORACLE_HOME/perl/lib/5.32.0:$ORACLE_HOME/perl/lib/site_perl/5.32.0:$ORACLE_HOME/appsutil/perl + +# Call the EBS script txkSuncDBConfig.pl +LogMsg "Running txkSyncDBConfig.pl" +{ echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkSyncDBConfig.pl \ + -dboraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -cdbsid=${ORACLE_SID} \ + -pdbname=${PDB_NAME} \ + -dbuniquename=${DB_UNIQUE_NAME} \ + -israc=YES \ + -virtualhostname=${VIRTUAL_HOSTNAME} \ + -logicalhostname=${LOGICAL_HOSTNAME} \ + -scanhostname=${SCAN_NAME} \ + -scanport=${SCAN_LISTENER_PORT} \ + -dbport=${DB_LISTENER_PORT} \ + -appsuser=${APPS_USERNAME} | tee -a ${LOG_OUT} + + +LogMsg "Running txkCfgUtlfileDir.pl with mode=setUtlFileDir" + +{ echo "$APPS_SECRET"; echo "$DB_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ + -contextfile=$CONTEXT_FILE \ + -oraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -mode=setUtlFileDir \ + -servicetype=opc | tee -a ${LOG_OUT} + +LogMsg "Running txkCfgUtlfileDir.pl with mode=syncUtlFileDir" + +{ echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ + -contextfile=$CONTEXT_FILE \ + -oraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -mode=syncUtlFileDir \ + -servicetype=opc | tee -a ${LOG_OUT} + +LogMsg "Completed ReConfig - Database Home Reconfiguration" +} + diff --git a/apps-unlimited/EBSR12.2onOCI/Database/EBSCFG.env b/apps-unlimited/EBSR12.2onOCI/Database/EBSCFG.env new file mode 100644 index 0000000..a166eb0 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/Database/EBSCFG.env @@ -0,0 +1,69 @@ +# EBSCFG.env +# This environment file is called by scripts on the DB nodes that execute EBS +# TXK commands to configure EBS metadata post switchover or failover. +# The scripts assume logical host names have been implemented for EBS R12.2. +# +# Environment variables in this env file: +# - SCRIPT_DIR: The directory where these scripts reside. +# - THIS_HOSTNAME: The logical host name for THIS host, without the .domain. +# - VIRTUAL_HOSTNAME: The logicalhostname.domain alias for the VIP on THIS node. +# This would be the VIP for the Grid listener or the VIP of a +# dedicated EBS listener. Use the command +# "srvctl config vip -n $HOSTNAME" to get this setting. +# - LOGICAL_HOSTNAME: The logical hostname.domain for THIS server. The EBS +# script txkSyncDBConfig.pl will use this variable to configure EBS +# on THIS node. +# - SCAN_NAME: The SCAN name for THIS cluster. Use the command: "srvctl config +# scan" to obtain the scan name. +# - SCAN_LISTENER_PORT: The listener port number for the SCAN listeners. Use +# the command "srvctl config scan_listener" to get this value. +# - DB_LISTENER_PORT: The listener port number for the database. This can be +# the Grid listener port or the listener port of a dedicated EBS +# listener if one is configured and running. +# - DB_HOSTS: Space-delimited list of network assigned / physical hostnames +# for the EBS RAC database, enclosed in double quotes. +# Do not use logical host names for this list. +# Example: "physicalhost1 physicalhost2 physicalhostN..." +# - CDB_NAME: The name of the database CDB as set by the database parameter +# DB_NAME. +# - DB_UNIQUE_NAME: The database unique name set by the database parameter +# DB_UNIQUE_NAME. +# - PDB_NAME: The name of the PDB that the EBS database resides in. +# - CONTEXT_FILE: $ORACLE_HOME/_.env +# - PDB_TNS_CONNECT_STRING: The TNS connect string for the PDB +# - DB_SECRET_NAME: The name of the secret in the OCI vault holding the +# database EBS_SYSTEM password/credential. +# - APPS_SECRET_NAME: The name of the secret in the OCI vault holding the APPS +# schema password/credential. +# - APPS_USERNAME: The name of the APPS schema, typically "APPS". +# - COMPARTMENT_OCID: The OCID of the OCI compartment that contains the OCI +# vault. +# - LOG_DIR: These scripts will write their execution logs in this directory + +SCRIPT_DIR=/home/oracle/ebscdb/coRoutines + +THIS_HOSTNAME=ebsdb1 +VIRTUAL_HOSTNAME=ebsdb1-vip.ebsdbprivateexa.ebsmaacloud2vcn.oraclevcn.com +LOGICAL_HOSTNAME=ebsdb1.ebsdbprivateexa.ebsmaacloud2vcn.oraclevcn.com +SCAN_NAME=iadexadb-bw5wn-scan.ebsexadbprivate.ebscloudmaavcn.oraclevcn.com + +SCAN_LISTENER_PORT=1521 +DB_LISTENER_PORT=1521 + +DB_HOSTS="iadexadb-bw5wn1 iadexadb-bw5wn2" +CDB_NAME=EBSCDB +DB_UNIQUE_NAME=EBSCDB_9cv_iad + +PDB_NAME=VISPRD +PDB_TNS_CONNECT_STRING=visprd +CONTEXT_FILE=${ORACLE_HOME}/${PDB_NAME}_${THIS_HOSTNAME} + +DB_SECRET_NAME=ebs-db-secret +APPS_SECRET_NAME=ebs-apps-secret +APPS_USERNAME=APPS + +COMPARTMENT_OCID="ocid1.compartment.oc1..aaaaaaaadynzghibxxo362cdebbtkqtuixd5ql24njdk3rd4mtil6qr5mgzq" + +LOG_DIR=${SCRIPT_DIR}/log +TNS_ALIAS=visprd + diff --git a/apps-unlimited/EBSR12.2onOCI/Database/EBS_DB_RoleChange.sh b/apps-unlimited/EBSR12.2onOCI/Database/EBS_DB_RoleChange.sh new file mode 100644 index 0000000..d124ce8 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/Database/EBS_DB_RoleChange.sh @@ -0,0 +1,107 @@ +#!/bin/ksh +############################################################################# +# EBS_DB_RoleChange.sh +# Spawn the scripts to reconfigure EBS on the database RAC nodes if required. +# +# Note: This script blocks when running the txk configuration scripts, so +# errors are caught here instead of floating around in the ether. +# +# Note: If the homes need to change: we're assuming all database instances +# are visible in gv$instance when this is executed. If an instance +# is down, that home will not be reconfigured. +# +# Requires user equivalency across all RAC nodes. +# +# Things to ignore or be aware of: +# stty: standard input: Inappropriate ioctl for device +# The random creation of +DATAC1 in your script directory (bug#: ...) +# Creation of logs in your script directory named mmddhhmm.log +# +# No parameters passed in +# +# Rev: +# 8/28/24 MPratt Simplified, added ksh coroutine for efficiency +# 1/15/24 DPresley Created +############################################################################# +# +. /home/oracle/EBSCDB.env +. ./EBSCFG.env +HostName=$(hostname) +MYHOST=$(hostname) + +. ${CONTEXT_FILE}.env + +# Call the standard functions routine +. $SCRIPT_DIR/stdfuncs.sh + +# Include the common code for reconfiguring the path. This will be +# executed both from this script and from the spawned shell scripts on other DB +. $SCRIPT_DIR/ChangeHomePath.sh + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_EBS_DB_RoleChange_${TS}.log + +LogMsg "EBS_DB_RoleChange.sh: Started" + +GetLogon $APPS_SECRET_NAME +APPS_SECRET=$LOGON + +# Start sqlplus in coroutine, logged in as apps user +LaunchCoroutine APPS $APPS_SECRET $PDB_TNS_CONNECT_STRING + +GetDbName + +sql="select XMLTYPE(t.text).EXTRACT('//ORACLE_HOME/text()').getStringVal() \ +from apps.fnd_oam_context_files t \ + where name = '` echo ${PDB_NAME}`_`echo ${THIS_HOSTNAME}`' \ + and node_name = '`echo ${THIS_HOSTNAME}`' \ + order by last_update_date desc \ + fetch first row only;" +EBS_DB_OH=`ExecSql "${sql}"` + +LogMsg "ORACLE_HOME: $ORACLE_HOME" +LogMsg "EBS_DB_OH: $EBS_DB_OH" + +# Only spawn the jobs if the oracle home path is different +if [ "${ORACLE_HOME}" != "${EBS_DB_OH}" ] +# TESTING: DO IT IF IT'S THE SAME +# if [ "${ORACLE_HOME}" = "${EBS_DB_OH}" ] +then + LogMsg "Oracle home paths are different. Reconfigure hosts" + + # Insert a row for each RAC node, then select those rows to drive the fix scripts. + # Need the rows in the table so the middle tiers can see configuration is not + # done yet across all instances. + + # Are we assuming all instances are up when this executes? Why, yes, we are... + + sql="INSERT INTO apps.xxx_EBS_role_change (host_name,rolechange_date) \ + SELECT host_name, sysdate \ + FROM gv\$instance; + commit;" + ExecSql "${sql}" + + LogMsg "DB_HOSTS: $DB_HOSTS" + LogMsg "MYHOST: $MYHOST" + + # DB_HOSTS is a configuration in your .env file + for i in ${DB_HOSTS} + do + if [ "${i}" == "${MYHOST}" ]; + then + LogMsg "Configuring database homes for EBS on local host ${i}" + ReConfig + else + LogMsg "Configuring database homes for EBS on remote host: ${i}" + LogMsg "ssh -t oracle@${i} cd ${SCRIPT_DIR}; ${SCRIPT_DIR}/callReConfig.sh" + ssh -t oracle@${i} "cd ${SCRIPT_DIR}; ${SCRIPT_DIR}/callReConfig.sh" + fi + + sql="DELETE FROM apps.xxx_EBS_role_change where host_name='${i}'; + commit;" + ExecSql "${sql}" + done +fi + +LogMsg "Completed: EBS_DB_RoleChange.sh." + diff --git a/apps-unlimited/EBSR12.2onOCI/Database/callReConfig.sh b/apps-unlimited/EBSR12.2onOCI/Database/callReConfig.sh new file mode 100644 index 0000000..7e3d4bc --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/Database/callReConfig.sh @@ -0,0 +1,58 @@ +#!/bin/ksh +############################################################################# +# callReConfig.sh +# Call the scripts to reconfigure EBS on the database RAC nodes on remote +# hosts. +# +# Requires user equivalency across all RAC nodes. +# +# This script establishes the environment, gets the apps password. +# then executes ReConfig on remote hosts. It's called remotely by +# EBS_DB_RoleChange.sh +# +# Rev: +# 8/29/24 MPratt Created +############################################################################# +# + +# echo "callReConfig.sh: You got in" +# echo "HOSTNAME: $HOSTNAME" +mypath=`pwd` +echo "mypath: $mypath" + +. /home/oracle/EBSCDB.env +. ${mypath}/EBSCFG.env +HostName=$(hostname) + +. ${CONTEXT_FILE}.env + +# Include the standard functions routines +. $SCRIPT_DIR/stdfuncs.sh + +# Include the common code for reconfiguring the path. This holds the +# code that is executed in this script for the DB nodes remote to the main +# driving script. +. $SCRIPT_DIR/ChangeHomePath.sh + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_callReConfig_${TS}.log + +LogMsg "callReConfig.sh: Started" + +# Get the apps password - needs to be set before executing ReConfig +GetLogon $APPS_SECRET_NAME +APPS_SECRET=$LOGON + +# Don't need to do this - not executing sqlplus for anything here +# Start sqlplus in coroutine, logged in as apps user +# LaunchCoroutine APPS $APPS_SECRET $PDB_TNS_CONNECT_STRING + +# for this script, ok to substitute HostName for DbName, which is used +# in LogMsg (else would need to launch the coroutine) +# GetDbName +DbName=$HostName + +ReConfig + +LogMsg "callReConfig.sh: Completed." + diff --git a/apps-unlimited/EBSR12.2onOCI/Database/stdfuncs.sh b/apps-unlimited/EBSR12.2onOCI/Database/stdfuncs.sh new file mode 100644 index 0000000..4a214ad --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/Database/stdfuncs.sh @@ -0,0 +1,371 @@ +############################################################################# +# std_funcs.sh +# Collection of standard functions. +# +# Rev: +# 8/13/24 MPratt Updated for simple cloud tooling +# 7/19/99 MPratt added GetLogon +# 1/17/96 MPratt added MultiThread and CkRun +# 8/23/95 MPratt created +############################################################################# +# GetLogon: +# Get the password for the user secret name passed in. Set the variable +# LOGON. In the calling routine, set the intended password variable. +# +############################################################################# + +GetLogon() +{ +uname=$1 + +SECRET_OCID=$(oci vault secret list -c $COMPARTMENT_OCID --raw-output --query "data[?\"secret-name\" == '$uname'].id | [0]") + +LOGON=$(oci secrets secret-bundle get --raw-output --secret-id $SECRET_OCID --query "data.\"secret-bundle-content\".content" | base64 -d ) + +if [ $? != 0 ]; then + LogMsg "GetLogon: Failed." + LogMsg "Compartment: $COMPARTMENT_OCID" + LogMsg "User name: $uname" + exit 1 +fi +} + +############################################################################# +# EnvSetup: +# Set up the unix and oracle environment as needed... +# +# Do we need this? Hohw should it be adjusted for modern era? +# Removed export of ORAENV_ASK=NO +# +############################################################################# + +EnvSetup() +{ +# set TS to the timestamp. Used to create the output directory for the run. +TS=`date +"%Y%m%d_%H%M%S"` + +# Set up the oracle environment. +# ORAENV_ASK=NO; . oraenv +} + +############################################################################# +# GetDbName +# Get the database name for this oracle sid +# +# Input: None +# Output: Sets DbName variable +# Return: None +############################################################################# + +GetDbName() +{ + sql="select name from v\$database;" + DbName=`ExecSql "${sql}"` +} + +############################################################################# +# LaunchCoroutine: +# Start a sqlplus session to pipe commands to from this shell session. +# +# Input: DB password secret needs to be set prior to calling +# Output: None, but the coroutine stays up and running +# Return: exits if error is detected. +############################################################################# + +LaunchCoroutine() +{ +uname=$1 +pwd=$2 +cxHost=$3 + +cxString=$uname/$pwd@$cxHost + +if [[ ! "$uname" || ! "$pwd" || ! "$cxHost" ]]; then + LogMsg "Usage: LaunchCoroutine user_name password host" + LogMsg "User name: $uname" + LogMsg "Password: $pwd" + LogMsg "Host: $cxHost" + LogMsg "Connection string: $cxString" + exit 1 +fi + +# Verify the Oracle connection +sqlplus -silent <$TMP_FILE 2>&1 +$cxString +! + +if [ $? != 0 ]; then + LogMsg "LaunchCoroutine: Unable to connect to Oracle." + LogMsg "LaunchCoroutine: Verify password, state of database" + cat $TMP_FILE | LogMsg + exit 1 +fi + +# Launch the coroutine itself. +sqlplus -s |& +echo -e "${cxString}" >&p +echo -e "set scan off\n" >&p +echo -e "set heading off\n" >&p +echo -e "set feedback off\n" >&p +echo -e "set pagesize 0\n" >&p +echo -e "set linesize 2000\n" >&p +echo -e "set long 65535\n" >&p +echo -e "select '<-DONE->' from dual;\n" >&p + +tmp="$IFS" +IFS="" + +# read from the coroutine's output 'til you see <-DONE-> +while [ "1" ]; do + read answer <&p + if [ "$answer" = "<-DONE->" ]; then + break + fi +done + + +IFS="$tmp" + +rm $TMP_FILE + +} + + +############################################################################# +# ExecSql +# Send a SQL statement to the sqlplus coroutine; return the result to the +# calling routine. +# +# Input: sql statement +# Output: result of sql statement +# Return: none +############################################################################# + +ExecSql () +{ +# send the statement to the coroutine with the "-p" + echo -e "$1\n" >&p + echo -e "select '<-DONE->' from dual;\n" >&p + + tmp="$IFS" + IFS="" + +# read from the coroutine's output 'til you see <-DONE-> + while [ "1" ]; do + read answer <&p + + if [ "$answer" = "<-DONE->" ]; then + break + else + echo -e "$answer" + fi + done + + IFS="$tmp" +} + + +############################################################################# +# DbConnect +# Connect to a different database. This needs a different routine than +# ExecSql. +# +# Input: connect string +# Output: result of sql statement +# Return: none +############################################################################# + +DbConnect () +{ + +# send the statement to the coroutine with the "-p" + printf -p "$1" + printf -p "select '<-DONE->' from dual;" + + tmp="$IFS" + IFS="" + +# read from the coroutine's output 'til you see <-DONE-> + while [ "1" ]; do + read -p answer + + if [ "$answer" = "<-DONE->" ]; then + printf "$answer" + break + fi + + if [ "$answer" = "ORA-03114: not connected to ORACLE" ]; then + LogMsg "DbConnect: ERROR: $answer" + exit 1 + fi + + if [ "$answer" = "ERROR: ORA-01034: ORACLE not available" ]; then + LogMsg "DbConnect: ERROR: $answer" + exit 1 + fi + + done + + IFS="$tmp" +} + + +############################################################################## +# +# Description: Echo a message to stdout and the run's log file. +# +# Usage: LogMsg "message text" +# +# Input: Message text +# Note: If message text = "-p", then input is read from stdin +# (so you can pipe to this). +# +# Output: Writes the timestamp, host name, database name, and message to +# stdout and to LOG_OUT. Requires LOG_OUT be already defined +# +# Return: None +# +############################################################################## + +LogMsg () +{ + LogMsgTimestamp=`date +"%m%d %T"` + +# If they are piping the message in to print from a command +# (eg, cat file | LogMsg), this requires resetting the interfield +# separator, After that, we read the message piece by piece from stdin. + if [ "$1" = "-p" ]; then + tmp="$IFS" + IFS="" + while read message + do + printf "${LogMsgTimestamp}|${HostName}|${DbName}| $message\n" + if [ ! -z "$LOG_OUT" ]; then + printf "${LogMsgTimestamp}|${HostName}|${DbName}| $message\n" >> $LOG_OUT + fi + done + IFS="$tmp" + +# Not piping anything to the message - just text passed straight in + else + printf "${LogMsgTimestamp}|${HostName}|${DbName}| $1\n" + if [ ! -z "$LOG_OUT" ]; then + printf "${LogMsgTimestamp}|${HostName}|${DbName}| $1\n" >> $LOG_OUT + fi + fi +} + +############################################################################## +# CkRun +# monitor running processes to see if any are still running. +# +# Input: 1: Unique thing to check on a ps line (required) +# 2: number of seconds to sleep between checks (required) +# 3: S if the run is to be relatively Silent +# Output: None. +# Return: Returns control when all monitored processes are complete. +############################################################################## +CkRun() +{ +ckit=$1 +thislong=$2 +silent=$3 +LogMsg "CkRun: Monitoring for $ckit" + +if [ "$ckit" = "" ] || [ "$thislong" = "" ]; then + LogMsg: "CkRun: ERROR: Insufficient arguments." + exit 1 +fi + +while true +do + if [ "$silent" != "S" ]; then + ps -ef | grep $ckit | grep -v grep | grep -v ckrun + fi + matches=`ps -ef | grep $ckit | grep $$ | grep -v grep | wc -l` + ts=`date +%m/%d/%y.%H:%M:%S` + printf "$ts: $matches matches" + printf "===================================================================" + if [ $matches = 0 ]; then + break; + fi + sleep $thislong +done + +LogMsg "CkRun: Returning control to calling routine." +} + + +############################################################################## +# MultiThread +# Submit multiple tasks in the background. "Mark time" until they are all +# complete, then return control to the calling routine. +# +# You provide a file which has command lines for the tasks, one task per line. +# These lines are "nohup'd" and run in the background. Control is returned +# to your calling routine when all the tasks are complete. +# +# You limit the number of tasks which can be run at once, and you provide a +# unique piece of info to "grep" for on a ps -ef line, to use to count the +# number of running tasks and determine whether or not there are tasks still +# running. +# +# Possible "gotchas": if you are vi'ing or otherwise accessing something +# which puts your "unique" grep field on the ps command line, this routine +# WILL NOT return control to the calling routine! +# +# Input: 1: name of a file which holds commands to run. one line per command. +# 2: max # processes to run at once +# 3: unique part of the command line to "grep" for when determining +# how many of these processes are running +# 4: number of seconds to sleep between checks for task completion +# 5: verbose mode (yes/no) +# Output: Your tasks are complete. +# Return: exit 1 if incomplete info is provided. +############################################################################## +MultiThread() +{ +tasks=$1 +max_processes=$2 +differentiator=$3 +sleep_time=$4 + +LogMsg "MultiThread: Starting multi-threaded execution of $tasks." +LogMsg "MultiThread: No more than $max_processes will run at once." +LogMsg "MultiThread: Using $differentiator for unique ps search." + +# read the tasks from the file. for each one: +cat $tasks | while read i +do + LogMsg "MultiThread: Starting $i" + nohup $i & +# count the number of jobs running already. + matches=`ps -ef | grep $differentiator | grep $$ | grep -v grep | \ + grep -v ckrun | wc -l` +# if the number of jobs running is >= max_processes, fall into this loop. +# otherwise go through the outer loop again to kick off another job. + until [ $matches -lt $max_processes ] + do + sleep $sleep_time + matches=`ps -ef | grep $differentiator | grep $$ | grep -v grep | \ + grep -v ckrun | wc -l` + LogMsg "MultiThread: $matches tasks running..." + done +done + +# Run the monitor. It finishes when the tasks are done. Need this, +# even though the jobs are kicked off when needed, as when the above loop +# is done there are still tasks running. We can't return control to the +# calling routine until they are complete. +CkRun $differentiator $sleep_time S + +LogMsg "MultiThread: Tasks complete. Returning control to calling routine." +} + + +############################################################################## +# initialize common variables. this is NOT inside a function so it gets +# executed right away. +############################################################################## +TMP=/tmp +TMP_FILE=$TMP/TMP_FILE.$$ From 162d954b7417b35c132ae37c826b2175df527da7 Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Tue, 28 Oct 2025 12:58:47 -0700 Subject: [PATCH 05/17] Upload tested scripts First complete upload of all tested scripts --- .../EBSR12.2onOCI/AppTier/ChangeHomePath.sh | 109 ++++ .../{Database => AppTier}/callReConfig.sh | 33 +- .../AppTier/crt_db_role_change_trigger.sql | 58 ++ .../AppTier/disable_ebs_rsync.sh | 49 ++ .../AppTier/dynamicDirectories.txt | 584 ++++++++++++++++++ .../AppTier/dynamicExcludeFiles.txt | 8 + .../AppTier/dynamicIncludeFiles.txt | 7 + .../EBSR12.2onOCI/AppTier/ebsAppTier.env | 50 ++ .../EBSR12.2onOCI/AppTier/ebsRsync.env | 34 + .../EBSR12.2onOCI/AppTier/enable_ebs_rsync.sh | 52 ++ .../EBSR12.2onOCI/AppTier/fastFiles.env | 14 + .../EBSR12.2onOCI/AppTier/fastFiles.txt | 377 +++++++++++ .../EBSR12.2onOCI/AppTier/killSync.sh | 189 ++++++ .../EBSR12.2onOCI/AppTier/run_EBS_shutdown.sh | 115 ++++ .../EBSR12.2onOCI/AppTier/slowFiles.env | 14 + .../EBSR12.2onOCI/AppTier/slowFiles.txt | 382 ++++++++++++ .../EBSR12.2onOCI/AppTier/startEBS.sh | 445 +++++++++++++ .../AppTier/staticDirectories.txt | 388 ++++++++++++ .../AppTier/staticExcludeFiles.txt | 16 + .../AppTier/staticIncludeFiles.txt | 7 + .../{Database => AppTier}/stdfuncs.sh | 275 +++++---- .../EBSR12.2onOCI/AppTier/stopEBS.sh | 396 ++++++++++++ .../EBSR12.2onOCI/AppTier/syncEBS.sh | 424 +++++++++++++ .../AppTier/syncFiles_fastFiles.sh | 8 + .../EBSR12.2onOCI/AppTier/syncThreads.txt | 381 ++++++++++++ .../EBSR12.2onOCI/AppTier/web_entry_prod.env | 22 + .../EBSR12.2onOCI/AppTier/web_entry_test.env | 22 + .../{Database => DBTier}/.gitkeep | 0 .../EBSR12.2onOCI/DBTier/ChangeHomePath.sh | 109 ++++ .../{Database => DBTier}/EBSCFG.env | 34 +- .../{Database => DBTier}/EBS_DB_RoleChange.sh | 84 ++- .../EBSR12.2onOCI/DBTier/callReConfig.sh | 57 ++ .../DBTier/crt_db_role_change_trigger.sql | 58 ++ .../EBSR12.2onOCI/DBTier/startDBServices.sh | 66 ++ .../EBSR12.2onOCI/DBTier/stdfuncs.sh | 390 ++++++++++++ .../EBSR12.2onOCI/Database/ChangeHomePath.sh | 75 --- 36 files changed, 5078 insertions(+), 254 deletions(-) create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/ChangeHomePath.sh rename apps-unlimited/EBSR12.2onOCI/{Database => AppTier}/callReConfig.sh (63%) create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/crt_db_role_change_trigger.sql create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/disable_ebs_rsync.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/dynamicDirectories.txt create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/dynamicExcludeFiles.txt create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/dynamicIncludeFiles.txt create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/ebsAppTier.env create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/ebsRsync.env create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/enable_ebs_rsync.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/fastFiles.env create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/fastFiles.txt create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/killSync.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/run_EBS_shutdown.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/slowFiles.env create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/slowFiles.txt create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/startEBS.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/staticDirectories.txt create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/staticExcludeFiles.txt create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/staticIncludeFiles.txt rename apps-unlimited/EBSR12.2onOCI/{Database => AppTier}/stdfuncs.sh (59%) create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/stopEBS.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/syncEBS.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/syncFiles_fastFiles.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/syncThreads.txt create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/web_entry_prod.env create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/web_entry_test.env rename apps-unlimited/EBSR12.2onOCI/{Database => DBTier}/.gitkeep (100%) create mode 100644 apps-unlimited/EBSR12.2onOCI/DBTier/ChangeHomePath.sh rename apps-unlimited/EBSR12.2onOCI/{Database => DBTier}/EBSCFG.env (69%) rename apps-unlimited/EBSR12.2onOCI/{Database => DBTier}/EBS_DB_RoleChange.sh (52%) create mode 100644 apps-unlimited/EBSR12.2onOCI/DBTier/callReConfig.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/DBTier/crt_db_role_change_trigger.sql create mode 100644 apps-unlimited/EBSR12.2onOCI/DBTier/startDBServices.sh create mode 100644 apps-unlimited/EBSR12.2onOCI/DBTier/stdfuncs.sh delete mode 100644 apps-unlimited/EBSR12.2onOCI/Database/ChangeHomePath.sh diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/ChangeHomePath.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/ChangeHomePath.sh new file mode 100644 index 0000000..b4feed9 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/ChangeHomePath.sh @@ -0,0 +1,109 @@ +############################################################################# +# ChangeHomePath.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# An include script holding the common routine that changes the oracle +# database home path if needed when switching a standby database to primary. +# +# This is an INCLUDE file. It is code to be included in an outer ksh +# script. It just holds the routine ReConfig, which calls the EBS code. +# It does not need a shebang, as it is simply a part of a larger program. +# +# Note: assumes all the database instances are present in gv_instance when +# the check is done in the main script. +# +# Requires user equivalency across all RAC nodes. +# +# No parameters passed in +# +# Rev: +# 8/23/24 Re-formed as a standard routine to execute from different scripts +# 1/15/24 Created +############################################################################# +ReConfig() +{ +LogMsg "Started ReConfig - Database Home Reconfiguration" + +LogMsg "DbName: $DbName" + +# Calling script has the apps password. Need to get the database password +GetLogon $DB_SECRET_NAME +DB_SECRET=$LOGON + +PERLBIN=`dirname $ORACLE_HOME/perl/bin/perl` +LogMsg "PERLBIN = $PERLBIN" + +PATH=${PERLBIN}:${PATH} + +PERL5LIB=$ORACLE_HOME/perl/lib/5.32.0:$ORACLE_HOME/perl/lib/site_perl/5.32.0:$ORACLE_HOME/appsutil/perl + +# If logical hostname is passed in, call txkSyncDBConfig.pl with the +# -logicalhostname parameter, else call it without this parameter. +if [ "${LOGICAL_HOSTNAME}" == "" ]; +then + # Call the EBS script txkSyncDBConfig.pl + LogMsg "Running txkSyncDBConfig.pl to configure with physical hostname." + { echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkSyncDBConfig.pl \ + -dboraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -cdbsid=${ORACLE_SID} \ + -pdbname=${PDB_NAME} \ + -dbuniquename=${DB_UNIQUE_NAME} \ + -israc=YES \ + -virtualhostname=${VIRTUAL_HOSTNAME} \ + -scanhostname=${SCAN_NAME} \ + -scanport=${SCAN_LISTENER_PORT} \ + -dbport=${DB_LISTENER_PORT} \ + -appsuser=${APPS_USERNAME} | tee -a ${LOG_OUT} +else + LogMsg "Running txkSyncDBConfig.pl to configure with logical hostname." + { echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkSyncDBConfig.pl \ + -dboraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -cdbsid=${ORACLE_SID} \ + -pdbname=${PDB_NAME} \ + -dbuniquename=${DB_UNIQUE_NAME} \ + -israc=YES \ + -virtualhostname=${VIRTUAL_HOSTNAME} \ + -logicalhostname=${LOGICAL_HOSTNAME} \ + -scanhostname=${SCAN_NAME} \ + -scanport=${SCAN_LISTENER_PORT} \ + -dbport=${DB_LISTENER_PORT} \ + -appsuser=${APPS_USERNAME} | tee -a ${LOG_OUT} +fi + +if [ $? -ne 0 ]; then + LogMsg "txkSynDBConfig.pl returned an error" + exit 1 +fi +LogMsg "Running txkCfgUtlfileDir.pl with mode=setUtlFileDir" + +{ echo "$APPS_SECRET"; echo "$DB_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl + -contextfile=$CONTEXT_FILE \ + -oraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -mode=setUtlFileDir \ + -servicetype=opc | tee -a ${LOG_OUT} +if [ $? -ne 0 ]; then + LogMsg "txkCfgUtlfileDir.pl mode setUtlFileDir returned an error" + exit 1 +fi + +LogMsg "Running txkCfgUtlfileDir.pl with mode=syncUtlFileDir" + +{ echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ + -contextfile=$CONTEXT_FILE \ + -oraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -mode=syncUtlFileDir \ + -servicetype=opc | tee -a ${LOG_OUT} +if [ $? -ne 0 ]; then + LogMsg "txkCfgUtlfileDir.pl mode syncUtlFileDir returned an error" + exit 1 +fi + +LogMsg "Completed ReConfig - Database Home Reconfiguration" +} + diff --git a/apps-unlimited/EBSR12.2onOCI/Database/callReConfig.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/callReConfig.sh similarity index 63% rename from apps-unlimited/EBSR12.2onOCI/Database/callReConfig.sh rename to apps-unlimited/EBSR12.2onOCI/AppTier/callReConfig.sh index 7e3d4bc..ab83beb 100644 --- a/apps-unlimited/EBSR12.2onOCI/Database/callReConfig.sh +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/callReConfig.sh @@ -1,9 +1,13 @@ #!/bin/ksh ############################################################################# # callReConfig.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# # Call the scripts to reconfigure EBS on the database RAC nodes on remote # hosts. -# +# # Requires user equivalency across all RAC nodes. # # This script establishes the environment, gets the apps password. @@ -11,28 +15,25 @@ # EBS_DB_RoleChange.sh # # Rev: -# 8/29/24 MPratt Created +# 06/18/2025 No hard-coding to find env files +# 08/29/2024 Created ############################################################################# -# -# echo "callReConfig.sh: You got in" -# echo "HOSTNAME: $HOSTNAME" mypath=`pwd` -echo "mypath: $mypath" -. /home/oracle/EBSCDB.env -. ${mypath}/EBSCFG.env +. $HOME/EBSCDB.env +. ${SCRIPT_DIR}/EBSCFG.env HostName=$(hostname) -. ${CONTEXT_FILE}.env +. ${CONTEXT_ENV_FILE} # Include the standard functions routines -. $SCRIPT_DIR/stdfuncs.sh +. ${SCRIPT_DIR}/stdfuncs.sh # Include the common code for reconfiguring the path. This holds the # code that is executed in this script for the DB nodes remote to the main # driving script. -. $SCRIPT_DIR/ChangeHomePath.sh +. ${SCRIPT_DIR}/ChangeHomePath.sh EnvSetup LOG_OUT=${LOG_DIR}/${HostName}_callReConfig_${TS}.log @@ -43,15 +44,13 @@ LogMsg "callReConfig.sh: Started" GetLogon $APPS_SECRET_NAME APPS_SECRET=$LOGON -# Don't need to do this - not executing sqlplus for anything here -# Start sqlplus in coroutine, logged in as apps user -# LaunchCoroutine APPS $APPS_SECRET $PDB_TNS_CONNECT_STRING - -# for this script, ok to substitute HostName for DbName, which is used -# in LogMsg (else would need to launch the coroutine) +# Note: we are not executing sqlplus for anything in this script, so are +# not launching the coroutine. Side effect: for this script, we need +# to substitute HostName for DbName, which is used in LogMsg # GetDbName DbName=$HostName +# Finally - do the work: ReConfig LogMsg "callReConfig.sh: Completed." diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/crt_db_role_change_trigger.sql b/apps-unlimited/EBSR12.2onOCI/AppTier/crt_db_role_change_trigger.sql new file mode 100644 index 0000000..e0cccaf --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/crt_db_role_change_trigger.sql @@ -0,0 +1,58 @@ +REM +REM Name: crt_db_role_change_trigger.sql +REM +REM Copyright (c) 2025 Oracle and/or its affiliates +REM Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +REM +REM Purpose: This script creates the required table and role change trigger that will in tern submit a job to the database scheduler +REM that runs an external job. This job executes scripts on all RAC nodes to reconfigure EBS on the DB nodes if those +REM scripts determine if reconfiguration is required. +REM +REM The apps.xxx_EBS_role_change table is an EBS CEMLI only used by these scripts and the applicatin mid tiers. Because the +REM job runs on the first RAC node that transitions the database to the PRIMARY role and, that the job is asyncronous (but will +REM run immediately once submitted, we need to insert a row per each RAC node into this table so that as each set of scripts +REM complete to completion on each RAC node, they will delete the row corrosponding to their node name. The scripts that +REM start application services will check for rows in this table. When the row count is zero, they then will start application +REM services. +REM NOTE: This table will not be managed by ADOP nor undergo any edition redefinition changes. + +set echo on + +alter session set container = VISPRD; + +drop table apps.xxx_EBS_role_change; + +create table apps.xxx_EBS_role_change ( + host_name varchar2(128), + rolechange_date date +); + +REM Role change database trigger must be defined at the CDB level. + +alter session set container = CDB$ROOT; + +CREATE OR REPLACE TRIGGER Configure_EBS_AfterRoleChange AFTER db_role_change ON DATABASE +DECLARE + v_role VARCHAR(30); +BEGIN + + SELECT DATABASE_ROLE INTO v_role FROM V$DATABASE; + + IF v_role = 'PRIMARY' THEN + + -- Submit the job that will execute the external scripts. The job will run immediately. + DBMS_SCHEDULER.CREATE_JOB ( + Job_name=> 'EBS_DB_RoleChange', + Job_type=> 'EXECUTABLE', + Job_action => '/home/oracle/ebscdb/custom_admin_scripts/EBS_DB_RoleChange.sh', + Enabled => TRUE + ); + DBMS_SCHEDULER.ENABLE('EBS_DB_RoleChange'); + + END IF; +END; +/ + +alter trigger Configure_EBS_AfterRoleChange enable; + + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/disable_ebs_rsync.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/disable_ebs_rsync.sh new file mode 100644 index 0000000..e1d769d --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/disable_ebs_rsync.sh @@ -0,0 +1,49 @@ +#!/bin/sh +############################################################################ +# File name: disable_ebs_rsync.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Description: Create the *_rsync_disabled file, showing file system +# replication is not active at this site. This must be set +# at the standby site. +# +# Usage: disable_ebs_rsync.sh +# Can be called directly, but is called by stopEBS.sh +# +# Errors: No run environment file specified +# Cannot find run environment file +# +# Revisions: +# Date What +# 7/1/2023 Created +############################################################################ + +. ./ebsRsync.env + +if [ $# -eq 0 ] +then + echo "No run environment file supplied. Please provide a run env file." + echo "Usage: disable_ebs_rsync.sh " + echo "Example: disable_ebs_rsync.sh fastFiles.env" + exit 1 +fi + +if [ ! -f "$1" ] +then + echo "File $1 does not exist." + exit 1 +fi + +source $1 + +if [ -f "${SCRIPT_DIR}/.${fsAlias}_rsync_disabled" ] +then + echo "EBS rsync job for ${fsAlias} already disabled." +else + touch ${SCRIPT_DIR}/.${fsAlias}_rsync_disabled + echo "EBS rsync job for ${fsAlias} disabled." +fi + + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicDirectories.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicDirectories.txt new file mode 100644 index 0000000..3e4f3c3 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicDirectories.txt @@ -0,0 +1,584 @@ +# dynamicDirectories.txt: everything under fs_ne. Split log and out directories across 100 sets of subdirectories +# based on APPLLDM = "reqidmod:100" +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +/u02/app/ebs/visprd/fs_ne/EBSapps/appl /u02/app/ebs/visprd/fs_ne/EBSapps/appl +/u02/app/ebs/visprd/fs_ne/EBSapps/log /u02/app/ebs/visprd/fs_ne/EBSapps/log +/u02/app/ebs/visprd/fs_ne/EBSapps/patch /u02/app/ebs/visprd/fs_ne/EBSapps/patch +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/ad /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/ad +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/certs /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/certs +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/oracle_common /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/oracle_common +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/soa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/soa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/ad /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/ad +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/certs /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/certs +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/oracle_common /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/oracle_common +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/soa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/soa +# include the default log and out location "just in case" +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/log /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/log +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/out /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/out +# log and out directories based on APPLLDM reqidmod:100 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/00 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/00 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/00 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/00 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/01 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/01 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/01 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/01 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/02 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/02 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/02 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/02 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/03 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/03 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/03 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/03 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/04 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/04 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/04 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/04 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/05 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/05 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/05 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/05 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/06 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/06 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/06 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/06 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/07 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/07 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/07 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/07 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/08 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/08 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/08 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/08 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/09 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/09 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/09 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/09 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/10 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/10 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/10 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/10 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/11 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/11 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/11 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/11 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/12 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/12 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/12 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/12 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/13 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/13 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/13 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/13 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/14 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/14 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/14 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/14 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/15 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/15 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/15 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/15 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/16 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/16 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/16 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/16 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/17 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/17 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/17 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/17 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/18 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/18 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/18 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/18 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/19 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/19 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/19 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/19 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/20 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/20 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/20 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/20 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/21 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/21 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/21 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/21 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/22 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/22 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/22 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/22 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/23 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/23 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/23 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/23 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/24 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/24 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/24 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/24 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/25 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/25 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/25 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/25 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/26 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/26 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/26 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/26 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/27 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/27 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/27 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/27 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/28 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/28 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/28 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/28 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/29 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/29 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/29 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/29 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/30 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/30 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/30 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/30 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/31 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/31 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/31 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/31 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/32 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/32 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/32 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/32 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/33 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/33 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/33 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/33 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/34 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/34 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/34 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/34 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/35 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/35 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/35 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/35 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/36 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/36 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/36 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/36 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/37 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/37 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/37 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/37 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/38 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/38 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/38 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/38 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/39 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/39 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/39 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/39 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/40 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/40 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/40 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/40 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/41 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/41 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/41 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/41 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/42 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/42 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/42 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/42 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/43 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/43 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/43 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/43 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/44 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/44 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/44 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/44 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/45 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/45 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/45 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/45 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/46 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/46 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/46 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/46 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/47 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/47 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/47 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/47 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/48 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/48 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/48 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/48 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/49 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/49 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/49 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/49 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/50 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/50 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/50 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/50 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/51 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/51 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/51 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/51 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/52 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/52 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/52 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/52 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/53 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/53 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/53 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/53 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/54 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/54 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/54 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/54 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/55 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/55 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/55 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/55 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/56 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/56 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/56 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/56 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/57 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/57 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/57 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/57 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/58 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/58 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/58 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/58 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/59 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/59 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/59 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/59 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/60 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/60 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/60 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/60 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/61 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/61 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/61 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/61 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/62 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/62 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/62 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/62 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/63 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/63 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/63 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/63 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/64 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/64 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/64 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/64 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/65 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/65 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/65 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/65 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/66 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/66 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/66 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/66 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/67 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/67 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/67 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/67 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/68 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/68 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/68 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/68 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/69 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/69 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/69 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/69 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/70 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/70 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/70 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/70 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/71 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/71 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/71 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/71 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/72 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/72 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/72 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/72 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/73 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/73 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/73 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/73 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/74 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/74 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/74 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/74 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/75 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/75 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/75 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/75 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/76 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/76 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/76 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/76 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/77 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/77 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/77 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/77 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/78 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/78 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/78 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/78 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/79 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/79 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/79 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/79 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/80 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/80 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/80 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/80 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/81 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/81 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/81 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/81 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/82 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/82 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/82 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/82 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/83 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/83 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/83 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/83 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/84 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/84 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/84 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/84 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/85 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/85 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/85 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/85 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/86 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/86 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/86 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/86 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/87 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/87 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/87 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/87 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/88 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/88 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/88 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/88 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/89 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/89 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/89 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/89 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/90 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/90 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/90 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/90 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/91 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/91 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/91 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/91 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/92 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/92 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/92 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/92 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/93 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/93 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/93 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/93 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/94 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/94 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/94 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/94 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/95 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/95 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/95 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/95 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/96 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/96 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/96 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/96 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/97 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/97 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/97 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/97 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/98 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/98 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/98 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/98 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/99 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/99 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/99 /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/99 +# +# adding the product log and out directories as local clean-up +# skipping this empty file from 2023: +# /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/javacache.log +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ad /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ad +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ahl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ahl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ak /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ak +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/alr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/alr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ame /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ame +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ams /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ams +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/amv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/amv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ap /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ap +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ar /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ar +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/as /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/as +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asn /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asn +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/aso /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/aso +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/asp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ast /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ast +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/au /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/au +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ax /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ax +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/az /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/az +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ben /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ben +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bic /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bic +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bim /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bim +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bis /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bis +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bne /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bne +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bom /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/bom +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cct /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cct +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ce /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ce +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/chv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/chv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cln /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cln +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cmi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cmi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cn /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cn +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/crp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/crp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cs /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cs +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csd /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csd +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cse /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cse +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/csr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cua /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cua +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cug /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cug +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cz /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/cz +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ddr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ddr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/dna /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/dna +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/dom /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/dom +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/dpp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/dpp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/dt /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/dt +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/eam /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/eam +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ebi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ebi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ec /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ec +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ecx /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ecx +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/edr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/edr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ego /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ego +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/eng /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/eng +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/eni /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/eni +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ff /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ff +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/flm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/flm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fnd /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fnd +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fpa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fpa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/frm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/frm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fte /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fte +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fun /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fun +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/fv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ghg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ghg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ghr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ghr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gma /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gma +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmd /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmd +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gme /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gme +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gml /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gml +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmo /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmo +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gmp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gms /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gms +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/gr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/hri /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/hri +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/hxc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/hxc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/hxt /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/hxt +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ia /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ia +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ibc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ibc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ibe /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ibe +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ibu /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ibu +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ibw /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ibw +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/iby /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/iby +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/icx /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/icx +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ieb /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ieb +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/iec /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/iec +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/iem /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/iem +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ieo /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ieo +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ies /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ies +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ieu /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ieu +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/iex /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/iex +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/igc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/igc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/igi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/igi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/imc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/imc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/inbound /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/inbound +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/inl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/inl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/inv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/inv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ipa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ipa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ipm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ipm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/irc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/irc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/itg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/itg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/izu /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/izu +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ja /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ja +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/je /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/je +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jmf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jmf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jtf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jtf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jtm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/jtm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/lns /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/lns +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mfg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mfg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mrp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mrp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/msc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/msc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/msd /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/msd +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mso /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mso +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/msr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/msr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mth /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mth +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mwa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/mwa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/oe /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/oe +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/okc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/okc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/oke /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/oke +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/okl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/okl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/oks /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/oks +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/okx /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/okx +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ont /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ont +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/opi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/opi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ota /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ota +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/outbound /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/outbound +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ozf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ozf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pay /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pay +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/per /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/per +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pji /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pji +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pjm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pjm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pmi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pmi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pn /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pn +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/po /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/po +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pom /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pom +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pon /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pon +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pos /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pos +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pqh /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pqh +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pqp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pqp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/prp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/prp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/psa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/psa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/psp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/psp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/pv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qot /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qot +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qpr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qpr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qrm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/qrm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/rg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/rg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/rlm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/rlm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/rrs /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/rrs +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/sht /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/sht +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ssp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/ssp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/system /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/system +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/vea /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/vea +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wip /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wip +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wms /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wms +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wps /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wps +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wsh /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wsh +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wsm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/wsm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xdo /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xdo +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xdp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xdp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xla /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xla +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xle /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xle +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xnb /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xnb +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xnp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xnp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xtr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/xtr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/yms /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/yms +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/zx /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp1/logs/appl/conc/zx +# same, for fs2 +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ad /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ad +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ahl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ahl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ak /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ak +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/alr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/alr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ame /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ame +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ams /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ams +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/amv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/amv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ap /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ap +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ar /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ar +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/as /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/as +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asn /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asn +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/aso /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/aso +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/asp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ast /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ast +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/au /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/au +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ax /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ax +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/az /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/az +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ben /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ben +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bic /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bic +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bim /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bim +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bis /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bis +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bne /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bne +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bom /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/bom +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cct /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cct +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ce /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ce +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/chv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/chv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cln /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cln +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cmi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cmi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cn /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cn +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/crp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/crp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cs /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cs +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csd /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csd +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cse /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cse +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/csr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cua /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cua +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cug /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cug +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cz /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/cz +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ddr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ddr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/dna /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/dna +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/dom /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/dom +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/dpp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/dpp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/dt /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/dt +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/eam /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/eam +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ebi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ebi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ec /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ec +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ecx /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ecx +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/edr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/edr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ego /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ego +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/eng /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/eng +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/eni /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/eni +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ff /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ff +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/flm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/flm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fnd /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fnd +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fpa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fpa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/frm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/frm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fte /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fte +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fun /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fun +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/fv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ghg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ghg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ghr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ghr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gma /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gma +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmd /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmd +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gme /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gme +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gml /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gml +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmo /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmo +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gmp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gms /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gms +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/gr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/hri /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/hri +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/hxc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/hxc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/hxt /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/hxt +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ia /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ia +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ibc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ibc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ibe /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ibe +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ibu /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ibu +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ibw /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ibw +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/iby /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/iby +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/icx /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/icx +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ieb /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ieb +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/iec /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/iec +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/iem /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/iem +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ieo /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ieo +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ies /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ies +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ieu /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ieu +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/iex /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/iex +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/igc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/igc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/igi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/igi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/imc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/imc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/inbound /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/inbound +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/inl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/inl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/inv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/inv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ipa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ipa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ipm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ipm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/irc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/irc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/itg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/itg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/izu /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/izu +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ja /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ja +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/je /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/je +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jmf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jmf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jtf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jtf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jtm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/jtm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/lns /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/lns +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mfg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mfg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mrp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mrp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/msc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/msc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/msd /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/msd +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mso /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mso +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/msr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/msr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mth /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mth +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mwa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/mwa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/oe /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/oe +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/okc /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/okc +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/oke /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/oke +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/okl /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/okl +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/oks /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/oks +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/okx /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/okx +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ont /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ont +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/opi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/opi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ota /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ota +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/outbound /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/outbound +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ozf /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ozf +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pay /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pay +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/per /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/per +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pji /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pji +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pjm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pjm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pmi /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pmi +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pn /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pn +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/po /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/po +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pom /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pom +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pon /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pon +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pos /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pos +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pqh /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pqh +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pqp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pqp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/prp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/prp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/psa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/psa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/psp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/psp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pv /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/pv +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qa /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qa +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qot /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qot +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qpr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qpr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qrm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/qrm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/rg /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/rg +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/rlm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/rlm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/rrs /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/rrs +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/sht /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/sht +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ssp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/ssp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/system /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/system +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/vea /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/vea +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wip /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wip +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wms /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wms +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wps /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wps +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wsh /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wsh +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wsm /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/wsm +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xdo /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xdo +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xdp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xdp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xla /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xla +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xle /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xle +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xnb /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xnb +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xnp /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xnp +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xtr /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/xtr +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/yms /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/yms +/u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/zx /u02/app/ebs/visprd/fs_ne/inst/VISPRD_ebsapp2/logs/appl/conc/zx diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicExcludeFiles.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicExcludeFiles.txt new file mode 100644 index 0000000..bd4c4c4 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicExcludeFiles.txt @@ -0,0 +1,8 @@ +# files or directories to exclude from the copy +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +/u02/app/ebs/visprd/EBSapps.env +/u02/app/ebs/visprd/fs1/inst/apps/VISPRD_ebsapp1/ora/10.1.2/network/admin +/u02/app/ebs/visprd/fs2/inst/apps/VISPRD_ebsapp1/ora/10.1.2/network/admin diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicIncludeFiles.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicIncludeFiles.txt new file mode 100644 index 0000000..8a894a3 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/dynamicIncludeFiles.txt @@ -0,0 +1,7 @@ +# Files to copy that aren't inside a directory being copied +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +/u02/app/ebs/visprd/fs1/EBSapps/appl/INCLUDEME.txt /u02/app/ebs/visprd/fs1/EBSapps/appl/INCLUDEME.txt +/u02/app/ebs/visprd/fs2/EBSapps/appl/INCLUDEME.txt /u02/app/ebs/visprd/fs2/EBSapps/appl/INCLUDEME.txt diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/ebsAppTier.env b/apps-unlimited/EBSR12.2onOCI/AppTier/ebsAppTier.env new file mode 100644 index 0000000..ace3a2c --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/ebsAppTier.env @@ -0,0 +1,50 @@ +# ebsAppTier.env +# This environment file is included by scripts on the app tier nodes +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# - EBS_APP_ENV_DIR: The tull directory path for where the EBS supplied EBSapps.env file is located. +# - SCRIPT_DIR: The directory where these scripts reside. +# - PDB_TNS_CONNECT_STRING: The TNS connect string for the PDB +# - DB_SECRET_NAME: The name of the secret in the OCI vault holding the +# database EBS_SYSTEM password/credential. +# - APPS_SECRET_NAME: The name of the secret in the OCI vault holding the APPS +# schema password/credential. +# - APPS_USERNAME: The name of the APPS schema, typically "APPS". +# - COMPARTMENT_OCID: The OCID of the OCI compartment that contains the OCI +# vault. +# - LOG_DIR: These scripts will write their execution logs in this directory +# +# The EBS EBSApps.env is sourced to the RUN file system. +# + +EBS_APP_ENV_DIR=/u02/app/ebs/visprd + +SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD + +PDB_TNS_CONNECT_STRING=visprd + +# system secret name +DB_SECRET_NAME=ebs-db-secret + +# apps owner secret name +APPS_SECRET_NAME=ebs-apps-secret +# APPS_USERNAME=APPS +APP_OWNER="applmgr" + +# WLS owner secret name +WLS_SECRET_NAME="ebs-wls-secret" + +COMPARTMENT_OCID="(put the full OCID here)" + +LOG_DIR=${SCRIPT_DIR}/log + +# Source the EBS app tier RUN file system. +if [ ! -f ${EBS_APP_ENV_DIR}/EBSapps.env ]; then + echo "Cannot find the EBS environment file: ${EBS_APP_ENV_DIR}/EBSaps.env." + exit 1 +fi + +. ${EBS_APP_ENV_DIR}/EBSapps.env run + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/ebsRsync.env b/apps-unlimited/EBSR12.2onOCI/AppTier/ebsRsync.env new file mode 100644 index 0000000..4f0da7e --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/ebsRsync.env @@ -0,0 +1,34 @@ +################################################################################ +# ebsRsync.env +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Environment settings for rsync scripts. They need database access and +# the ability to connect to the remote app tiers for file system replication +# +################################################################################ +# +# Already set in EBSCFG.env: +# SCRIPT_DIR=/u02/app/ebs/coRoutines +# LOG_DIR=${SCRIPT_DIR}/log +# INSTALL_DIR=/u02/app/ebs/visprd +# COMPARTMENT_OCID=(put the full OCID here) + +# OS user for app install: +USER=applmgr + +# use to get the site role, as sysdba: +CDB_CONNECT_STRING=EBSCDB + +# PDB_TNS_CONNECT_STRING=VISPRD + +targetHostIP=10.0.103.17 + +dbSecretName="ebs-db-secret" + +# not used by rsync code +# APPS_SECRET_NAME="ebs-apps-secret" +# WLS_SECRET_NAME="ebs-wls-secret" +# HostName=$(hostname) + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/enable_ebs_rsync.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/enable_ebs_rsync.sh new file mode 100644 index 0000000..7f5a19e --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/enable_ebs_rsync.sh @@ -0,0 +1,52 @@ +#!/bin/sh +############################################################################ +# File name: enable_ebs_rsync.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Description: Remove the *_rsync_disabled file, thus telling the rsync +# script to be active here. +# +# Usage: enable_ebs_rsync.sh +# Can be called directly, but is called by the startEBS.sh +# script. +# +# Errors: No run environment file specified +# Cannot find run environment file +# +# Revisions: +# Date What +# 9/26/2024 Base updates +# 7/1/2023 Created +############################################################################ + +# Enable the EBS rsync job. + +. ./ebsRsync.env + +if [ $# -eq 0 ] +then + echo "No run env file supplied. Please provide a run env. file." + echo "Usage: enable_ebs_rsync.sh " + echo "Example: enable_ebs_rsync.sh fastFiles.env" + exit 1 +fi + +if [ ! -f "$1" ] +then + echo "File $1 does not exist." + exit 1 +fi + +source $1 + +if [ -f "${SCRIPT_DIR}/.${fsAlias}_rsync_disabled" ] +then + rm -f ${SCRIPT_DIR}/.${fsAlias}_rsync_disabled + echo "EBS rsync job for ${fsAlias} enabled." +else + echo "EBS rsync job for ${fsAlias} already enabled." +fi + + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/fastFiles.env b/apps-unlimited/EBSR12.2onOCI/AppTier/fastFiles.env new file mode 100644 index 0000000..8acb545 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/fastFiles.env @@ -0,0 +1,14 @@ +################################################################################ +# fastFiles.env +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# These files change frequently - they include EBS log and out directories +# +################################################################################ +copyDirectories=${SCRIPT_DIR}/dynamicDirectories.txt +copyFiles=${SCRIPT_DIR}/dynamicIncludeFiles.txt +excludeFiles=${SCRIPT_DIR}/dynamicExcludeFiles.txt + +fsAlias=fastFiles diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/fastFiles.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/fastFiles.txt new file mode 100644 index 0000000..a4559bb --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/fastFiles.txt @@ -0,0 +1,377 @@ +# THIS IS AN EXAMPLE ONLY, of output generated by the rsync scripts to multi-thread sync scripts +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +syncScripts_fastFiles/do_1.sh +syncScripts_fastFiles/do_2.sh +syncScripts_fastFiles/do_3.sh +syncScripts_fastFiles/do_4.sh +syncScripts_fastFiles/do_5.sh +syncScripts_fastFiles/do_6.sh +syncScripts_fastFiles/do_7.sh +syncScripts_fastFiles/do_8.sh +syncScripts_fastFiles/do_9.sh +syncScripts_fastFiles/do_10.sh +syncScripts_fastFiles/do_11.sh +syncScripts_fastFiles/do_12.sh +syncScripts_fastFiles/do_13.sh +syncScripts_fastFiles/do_14.sh +syncScripts_fastFiles/do_15.sh +syncScripts_fastFiles/do_16.sh +syncScripts_fastFiles/do_17.sh +syncScripts_fastFiles/do_18.sh +syncScripts_fastFiles/do_19.sh +syncScripts_fastFiles/do_20.sh +syncScripts_fastFiles/do_21.sh +syncScripts_fastFiles/do_22.sh +syncScripts_fastFiles/do_23.sh +syncScripts_fastFiles/do_24.sh +syncScripts_fastFiles/do_25.sh +syncScripts_fastFiles/do_26.sh +syncScripts_fastFiles/do_27.sh +syncScripts_fastFiles/do_28.sh +syncScripts_fastFiles/do_29.sh +syncScripts_fastFiles/do_30.sh +syncScripts_fastFiles/do_31.sh +syncScripts_fastFiles/do_32.sh +syncScripts_fastFiles/do_33.sh +syncScripts_fastFiles/do_34.sh +syncScripts_fastFiles/do_35.sh +syncScripts_fastFiles/do_36.sh +syncScripts_fastFiles/do_37.sh +syncScripts_fastFiles/do_38.sh +syncScripts_fastFiles/do_39.sh +syncScripts_fastFiles/do_40.sh +syncScripts_fastFiles/do_41.sh +syncScripts_fastFiles/do_42.sh +syncScripts_fastFiles/do_43.sh +syncScripts_fastFiles/do_44.sh +syncScripts_fastFiles/do_45.sh +syncScripts_fastFiles/do_46.sh +syncScripts_fastFiles/do_47.sh +syncScripts_fastFiles/do_48.sh +syncScripts_fastFiles/do_49.sh +syncScripts_fastFiles/do_50.sh +syncScripts_fastFiles/do_51.sh +syncScripts_fastFiles/do_52.sh +syncScripts_fastFiles/do_53.sh +syncScripts_fastFiles/do_54.sh +syncScripts_fastFiles/do_55.sh +syncScripts_fastFiles/do_56.sh +syncScripts_fastFiles/do_57.sh +syncScripts_fastFiles/do_58.sh +syncScripts_fastFiles/do_59.sh +syncScripts_fastFiles/do_60.sh +syncScripts_fastFiles/do_61.sh +syncScripts_fastFiles/do_62.sh +syncScripts_fastFiles/do_63.sh +syncScripts_fastFiles/do_64.sh +syncScripts_fastFiles/do_65.sh +syncScripts_fastFiles/do_66.sh +syncScripts_fastFiles/do_67.sh +syncScripts_fastFiles/do_68.sh +syncScripts_fastFiles/do_69.sh +syncScripts_fastFiles/do_70.sh +syncScripts_fastFiles/do_71.sh +syncScripts_fastFiles/do_72.sh +syncScripts_fastFiles/do_73.sh +syncScripts_fastFiles/do_74.sh +syncScripts_fastFiles/do_75.sh +syncScripts_fastFiles/do_76.sh +syncScripts_fastFiles/do_77.sh +syncScripts_fastFiles/do_78.sh +syncScripts_fastFiles/do_79.sh +syncScripts_fastFiles/do_80.sh +syncScripts_fastFiles/do_81.sh +syncScripts_fastFiles/do_82.sh +syncScripts_fastFiles/do_83.sh +syncScripts_fastFiles/do_84.sh +syncScripts_fastFiles/do_85.sh +syncScripts_fastFiles/do_86.sh +syncScripts_fastFiles/do_87.sh +syncScripts_fastFiles/do_88.sh +syncScripts_fastFiles/do_89.sh +syncScripts_fastFiles/do_90.sh +syncScripts_fastFiles/do_91.sh +syncScripts_fastFiles/do_92.sh +syncScripts_fastFiles/do_93.sh +syncScripts_fastFiles/do_94.sh +syncScripts_fastFiles/do_95.sh +syncScripts_fastFiles/do_96.sh +syncScripts_fastFiles/do_97.sh +syncScripts_fastFiles/do_98.sh +syncScripts_fastFiles/do_99.sh +syncScripts_fastFiles/do_100.sh +syncScripts_fastFiles/do_101.sh +syncScripts_fastFiles/do_102.sh +syncScripts_fastFiles/do_103.sh +syncScripts_fastFiles/do_104.sh +syncScripts_fastFiles/do_105.sh +syncScripts_fastFiles/do_106.sh +syncScripts_fastFiles/do_107.sh +syncScripts_fastFiles/do_108.sh +syncScripts_fastFiles/do_109.sh +syncScripts_fastFiles/do_110.sh +syncScripts_fastFiles/do_111.sh +syncScripts_fastFiles/do_112.sh +syncScripts_fastFiles/do_113.sh +syncScripts_fastFiles/do_114.sh +syncScripts_fastFiles/do_115.sh +syncScripts_fastFiles/do_116.sh +syncScripts_fastFiles/do_117.sh +syncScripts_fastFiles/do_118.sh +syncScripts_fastFiles/do_119.sh +syncScripts_fastFiles/do_120.sh +syncScripts_fastFiles/do_121.sh +syncScripts_fastFiles/do_122.sh +syncScripts_fastFiles/do_123.sh +syncScripts_fastFiles/do_124.sh +syncScripts_fastFiles/do_125.sh +syncScripts_fastFiles/do_126.sh +syncScripts_fastFiles/do_127.sh +syncScripts_fastFiles/do_128.sh +syncScripts_fastFiles/do_129.sh +syncScripts_fastFiles/do_130.sh +syncScripts_fastFiles/do_131.sh +syncScripts_fastFiles/do_132.sh +syncScripts_fastFiles/do_133.sh +syncScripts_fastFiles/do_134.sh +syncScripts_fastFiles/do_135.sh +syncScripts_fastFiles/do_136.sh +syncScripts_fastFiles/do_137.sh +syncScripts_fastFiles/do_138.sh +syncScripts_fastFiles/do_139.sh +syncScripts_fastFiles/do_140.sh +syncScripts_fastFiles/do_141.sh +syncScripts_fastFiles/do_142.sh +syncScripts_fastFiles/do_143.sh +syncScripts_fastFiles/do_144.sh +syncScripts_fastFiles/do_145.sh +syncScripts_fastFiles/do_146.sh +syncScripts_fastFiles/do_147.sh +syncScripts_fastFiles/do_148.sh +syncScripts_fastFiles/do_149.sh +syncScripts_fastFiles/do_150.sh +syncScripts_fastFiles/do_151.sh +syncScripts_fastFiles/do_152.sh +syncScripts_fastFiles/do_153.sh +syncScripts_fastFiles/do_154.sh +syncScripts_fastFiles/do_155.sh +syncScripts_fastFiles/do_156.sh +syncScripts_fastFiles/do_157.sh +syncScripts_fastFiles/do_158.sh +syncScripts_fastFiles/do_159.sh +syncScripts_fastFiles/do_160.sh +syncScripts_fastFiles/do_161.sh +syncScripts_fastFiles/do_162.sh +syncScripts_fastFiles/do_163.sh +syncScripts_fastFiles/do_164.sh +syncScripts_fastFiles/do_165.sh +syncScripts_fastFiles/do_166.sh +syncScripts_fastFiles/do_167.sh +syncScripts_fastFiles/do_168.sh +syncScripts_fastFiles/do_169.sh +syncScripts_fastFiles/do_170.sh +syncScripts_fastFiles/do_171.sh +syncScripts_fastFiles/do_172.sh +syncScripts_fastFiles/do_173.sh +syncScripts_fastFiles/do_174.sh +syncScripts_fastFiles/do_175.sh +syncScripts_fastFiles/do_176.sh +syncScripts_fastFiles/do_177.sh +syncScripts_fastFiles/do_178.sh +syncScripts_fastFiles/do_179.sh +syncScripts_fastFiles/do_180.sh +syncScripts_fastFiles/do_181.sh +syncScripts_fastFiles/do_182.sh +syncScripts_fastFiles/do_183.sh +syncScripts_fastFiles/do_184.sh +syncScripts_fastFiles/do_185.sh +syncScripts_fastFiles/do_186.sh +syncScripts_fastFiles/do_187.sh +syncScripts_fastFiles/do_188.sh +syncScripts_fastFiles/do_189.sh +syncScripts_fastFiles/do_190.sh +syncScripts_fastFiles/do_191.sh +syncScripts_fastFiles/do_192.sh +syncScripts_fastFiles/do_193.sh +syncScripts_fastFiles/do_194.sh +syncScripts_fastFiles/do_195.sh +syncScripts_fastFiles/do_196.sh +syncScripts_fastFiles/do_197.sh +syncScripts_fastFiles/do_198.sh +syncScripts_fastFiles/do_199.sh +syncScripts_fastFiles/do_200.sh +syncScripts_fastFiles/do_201.sh +syncScripts_fastFiles/do_202.sh +syncScripts_fastFiles/do_203.sh +syncScripts_fastFiles/do_204.sh +syncScripts_fastFiles/do_205.sh +syncScripts_fastFiles/do_206.sh +syncScripts_fastFiles/do_207.sh +syncScripts_fastFiles/do_208.sh +syncScripts_fastFiles/do_209.sh +syncScripts_fastFiles/do_210.sh +syncScripts_fastFiles/do_211.sh +syncScripts_fastFiles/do_212.sh +syncScripts_fastFiles/do_213.sh +syncScripts_fastFiles/do_214.sh +syncScripts_fastFiles/do_215.sh +syncScripts_fastFiles/do_216.sh +syncScripts_fastFiles/do_217.sh +syncScripts_fastFiles/do_218.sh +syncScripts_fastFiles/do_219.sh +syncScripts_fastFiles/do_220.sh +syncScripts_fastFiles/do_221.sh +syncScripts_fastFiles/do_222.sh +syncScripts_fastFiles/do_223.sh +syncScripts_fastFiles/do_224.sh +syncScripts_fastFiles/do_225.sh +syncScripts_fastFiles/do_226.sh +syncScripts_fastFiles/do_227.sh +syncScripts_fastFiles/do_228.sh +syncScripts_fastFiles/do_229.sh +syncScripts_fastFiles/do_230.sh +syncScripts_fastFiles/do_231.sh +syncScripts_fastFiles/do_232.sh +syncScripts_fastFiles/do_233.sh +syncScripts_fastFiles/do_234.sh +syncScripts_fastFiles/do_235.sh +syncScripts_fastFiles/do_236.sh +syncScripts_fastFiles/do_237.sh +syncScripts_fastFiles/do_238.sh +syncScripts_fastFiles/do_239.sh +syncScripts_fastFiles/do_240.sh +syncScripts_fastFiles/do_241.sh +syncScripts_fastFiles/do_242.sh +syncScripts_fastFiles/do_243.sh +syncScripts_fastFiles/do_244.sh +syncScripts_fastFiles/do_245.sh +syncScripts_fastFiles/do_246.sh +syncScripts_fastFiles/do_247.sh +syncScripts_fastFiles/do_248.sh +syncScripts_fastFiles/do_249.sh +syncScripts_fastFiles/do_250.sh +syncScripts_fastFiles/do_251.sh +syncScripts_fastFiles/do_252.sh +syncScripts_fastFiles/do_253.sh +syncScripts_fastFiles/do_254.sh +syncScripts_fastFiles/do_255.sh +syncScripts_fastFiles/do_256.sh +syncScripts_fastFiles/do_257.sh +syncScripts_fastFiles/do_258.sh +syncScripts_fastFiles/do_259.sh +syncScripts_fastFiles/do_260.sh +syncScripts_fastFiles/do_261.sh +syncScripts_fastFiles/do_262.sh +syncScripts_fastFiles/do_263.sh +syncScripts_fastFiles/do_264.sh +syncScripts_fastFiles/do_265.sh +syncScripts_fastFiles/do_266.sh +syncScripts_fastFiles/do_267.sh +syncScripts_fastFiles/do_268.sh +syncScripts_fastFiles/do_269.sh +syncScripts_fastFiles/do_270.sh +syncScripts_fastFiles/do_271.sh +syncScripts_fastFiles/do_272.sh +syncScripts_fastFiles/do_273.sh +syncScripts_fastFiles/do_274.sh +syncScripts_fastFiles/do_275.sh +syncScripts_fastFiles/do_276.sh +syncScripts_fastFiles/do_277.sh +syncScripts_fastFiles/do_278.sh +syncScripts_fastFiles/do_279.sh +syncScripts_fastFiles/do_280.sh +syncScripts_fastFiles/do_281.sh +syncScripts_fastFiles/do_282.sh +syncScripts_fastFiles/do_283.sh +syncScripts_fastFiles/do_284.sh +syncScripts_fastFiles/do_285.sh +syncScripts_fastFiles/do_286.sh +syncScripts_fastFiles/do_287.sh +syncScripts_fastFiles/do_288.sh +syncScripts_fastFiles/do_289.sh +syncScripts_fastFiles/do_290.sh +syncScripts_fastFiles/do_291.sh +syncScripts_fastFiles/do_292.sh +syncScripts_fastFiles/do_293.sh +syncScripts_fastFiles/do_294.sh +syncScripts_fastFiles/do_295.sh +syncScripts_fastFiles/do_296.sh +syncScripts_fastFiles/do_297.sh +syncScripts_fastFiles/do_298.sh +syncScripts_fastFiles/do_299.sh +syncScripts_fastFiles/do_300.sh +syncScripts_fastFiles/do_301.sh +syncScripts_fastFiles/do_302.sh +syncScripts_fastFiles/do_303.sh +syncScripts_fastFiles/do_304.sh +syncScripts_fastFiles/do_305.sh +syncScripts_fastFiles/do_306.sh +syncScripts_fastFiles/do_307.sh +syncScripts_fastFiles/do_308.sh +syncScripts_fastFiles/do_309.sh +syncScripts_fastFiles/do_310.sh +syncScripts_fastFiles/do_311.sh +syncScripts_fastFiles/do_312.sh +syncScripts_fastFiles/do_313.sh +syncScripts_fastFiles/do_314.sh +syncScripts_fastFiles/do_315.sh +syncScripts_fastFiles/do_316.sh +syncScripts_fastFiles/do_317.sh +syncScripts_fastFiles/do_318.sh +syncScripts_fastFiles/do_319.sh +syncScripts_fastFiles/do_320.sh +syncScripts_fastFiles/do_321.sh +syncScripts_fastFiles/do_322.sh +syncScripts_fastFiles/do_323.sh +syncScripts_fastFiles/do_324.sh +syncScripts_fastFiles/do_325.sh +syncScripts_fastFiles/do_326.sh +syncScripts_fastFiles/do_327.sh +syncScripts_fastFiles/do_328.sh +syncScripts_fastFiles/do_329.sh +syncScripts_fastFiles/do_330.sh +syncScripts_fastFiles/do_331.sh +syncScripts_fastFiles/do_332.sh +syncScripts_fastFiles/do_333.sh +syncScripts_fastFiles/do_334.sh +syncScripts_fastFiles/do_335.sh +syncScripts_fastFiles/do_336.sh +syncScripts_fastFiles/do_337.sh +syncScripts_fastFiles/do_338.sh +syncScripts_fastFiles/do_339.sh +syncScripts_fastFiles/do_340.sh +syncScripts_fastFiles/do_341.sh +syncScripts_fastFiles/do_342.sh +syncScripts_fastFiles/do_343.sh +syncScripts_fastFiles/do_344.sh +syncScripts_fastFiles/do_345.sh +syncScripts_fastFiles/do_346.sh +syncScripts_fastFiles/do_347.sh +syncScripts_fastFiles/do_348.sh +syncScripts_fastFiles/do_349.sh +syncScripts_fastFiles/do_350.sh +syncScripts_fastFiles/do_351.sh +syncScripts_fastFiles/do_352.sh +syncScripts_fastFiles/do_353.sh +syncScripts_fastFiles/do_354.sh +syncScripts_fastFiles/do_355.sh +syncScripts_fastFiles/do_356.sh +syncScripts_fastFiles/do_357.sh +syncScripts_fastFiles/do_358.sh +syncScripts_fastFiles/do_359.sh +syncScripts_fastFiles/do_360.sh +syncScripts_fastFiles/do_361.sh +syncScripts_fastFiles/do_362.sh +syncScripts_fastFiles/do_363.sh +syncScripts_fastFiles/do_364.sh +syncScripts_fastFiles/do_365.sh +syncScripts_fastFiles/do_366.sh +syncScripts_fastFiles/do_367.sh +syncScripts_fastFiles/do_368.sh +syncScripts_fastFiles/do_369.sh +syncScripts_fastFiles/do_370.sh +syncScripts_fastFiles/do_371.sh +syncScripts_fastFiles/do_372.sh diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/killSync.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/killSync.sh new file mode 100644 index 0000000..a64bf15 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/killSync.sh @@ -0,0 +1,189 @@ +################################################################################ +# Name: killSync.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Purpose: Kill any already-running file sync processes if we are doing a +# switchover. +# +# killSync.sh is started by syncEBS.sh when running at the primary +# site. It runs in the background. There is no user interaction. +# Script behavior is managed through the use of shared files. +# +# Usage: killSync.sh [ sleep time in seconds ] +# +# Errors: +# - if env files do not exist. See SetEnv. +# - if the file system alias was not specified. +# +# Revisions: +# Date What +# 05/23/2025 Created +################################################################################ +# SetEnv +# Get environment variables, standard include routines +# +# Input: None +# Output: Environments set for the run +# Return: Exit 1 if can't find environment files, etc. +################################################################################ +SetEnv() +{ + +# The environment variable SCRIPT_DIR must be defined in the +# OS user's .bash_profile or an environment file that is +# sourced during logon from cron or other agents that may +# access the user's OS account to execute commands. + +# Include the basic "where am I" environment settings +if [ ! -f ${SCRIPT_DIR}/ebsAppTier.env ]; then + echo "Cannot find the file ${SCRIPT_DIR}/ebsAppTier.env." + exit 1 +fi + +. ${SCRIPT_DIR}/ebsAppTier.env + +# include the standard functions routines +if [ ! -f ${SCRIPT_DIR}/stdfuncs.sh ]; then + echo "Cannot find the standard functions script (stdfuncs.sh)" + exit 1 +fi + +. ${SCRIPT_DIR}/stdfuncs.sh + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_killSync_${TS}.log + +} + +################################################################################ +# ChkAbort() +# Check for the presence of the .abortSync file and checks its content. +# Return the a value to the calling routine. +# +# Input: None +# Output: Environments set for the run +# Return: The content of the file if an abort is to be initiated +################################################################################ +ChkAbort() +{ + +# Check to see if the .abortSync file is present. +if [ -f ${SCRIPT_DIR}/.abortSync ]; then + chkrc=$( cat ${SCRIPT_DIR}/.abortSync | wc -l ) + + # Check to see if any of the .env files do not exists. If there is a missing + # env file, exit as we do not want to proceed. + if [ ${chkrc} -ne 0 ]; then + + for i in $( cat ${SCRIPT_DIR}/.abortSync ) + do + if [ ! -f ${i} ]; + then + LogMsg "ChkAbort: ENV file: ${i} does not exist." + LogMsg "Exiting..." + exit 1 + fi + done + + else + LogMsg "ChkAbort: No env file specified." + LogMsg "Exiting...." + exit 1 + fi +fi + +} + +################################################################################ +# KillSync +# +# NOTE: PARAMETERIZE THIS +# +# Input: None +# Output: Kill any and all rsync and syncEBS processes and remove the locks. +# This allows for a full final sync to take place once all processes +# on all app servers are down. +# +# Return: None +################################################################################ +KillSync() +{ + +LogMsg "KillSync: Started." + +# The .abortSync file will have the list of the env files that will provide the fsAlias we need. +for i in $( cat ${SCRIPT_DIR}/.abortSync ) +do + if [ ! -f ${i} ]; + then + LogMsg "KillSync: ENV file: ${i} does not exists." + LogMsg "KillSync: Continuing...." + else + # Source the env file. + . ${i} + fi + + # The fsAlias variable is defined once the env file has been source. + GREP_STRING="${fsAlias}" + + LogMsg "KillSync: Terminating existing rsync processes for ${fsAlias}." + + PROCESS_COUNT=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep | wc -l ) + LogMsg "KillSync: Number of remaining processes: ${PROCESS_COUNT}" + while [ ${PROCESS_COUNT} -ne 0 ]; + do + Running=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep ) + LogMsg "${PROCESS_COUNT} remaining processes: ${Running}" + PID_LIST=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep | awk '{ print $4 }' ) + LogMsg "KillSync: Killing processes: ${PID_LIST}" + kill -9 ${PID_LIST} + PROCESS_COUNT=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep | wc -l ) + done + + # Remove the lck files. + + if [ -f ${SCRIPT_DIR}/.${fsAlias}.lck ]; then + rm ${SCRIPT_DIR}/.${fsAlias}.lck + fi + +done + +LogMsg "KillSync: Completed." + +} + +################################################################################ +# Execution starts here. +################################################################################ + +SetEnv + +SLEEP_TIME_SEC=$1 + +if [ -z ${SLEEP_TIME_SEC} ]; then + SLEEP_TIME_SEC=15 +fi + +LogMsg "killSync.sh: Started." +LogMsg "Sleep time ${SLEEP_TIME_SEC} seconds..." + +while true +do + chkrc=0 + # ChkAbort will set the fsAlias variable if an abort was triggered. + ChkAbort + + if [ ${chkrc} -ne 0 ]; then + LogMsg "killSync.sh: Received Abort-Sync. " + KillSync + rm ${SCRIPT_DIR}/.abortSync + break + fi + sleep ${SLEEP_TIME_SEC} +done + +LogMsg "killSync.sh: Shutdown completed." + + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/run_EBS_shutdown.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/run_EBS_shutdown.sh new file mode 100644 index 0000000..b9ef97b --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/run_EBS_shutdown.sh @@ -0,0 +1,115 @@ +#!/bin/ksh +############################################################################ +# File name: run_EBS_shutdown.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Description: This script shuts down EBS app servers and concurrent +# managers. This script calls run_EBS_stopServices.sh +# which does the actual shutdown of the application services. +# This script is integrated with the rsync scripts. +# +# Note: Because this deployment of EBS uses a shared file +# system for interface files, job logs, and reports, only one +# rsync process should be running, and only one final execution +# after all app servers and concurrent managers across +# all nodes have completed their shutdown. +# +# We use a simple lock file on the shared file system to +# manage that process. The first script in creates the lock +# file. That session will also run the final rsync, then +# will remove the lock file. +# +# NOTE: If you do not want to run rsync but only shut down +# either the app servers or the process scheduler, use the +# individual scripts: +# adstpall.sh and adstrtal.sh +# +# Usage: run_EBS_shutdown.sh +# +# Errors: +# Revisions: +# Date What +# 09/03/2024 Updated for coroutines, tidying +# 7/1/2023 Created +############################################################################ +mypath=`pwd` +echo "mypath: $mypath" + +. ${mypath}/ebsrsync.env +HostName=$(hostname) + +# Include the standard functions routines +. $SCRIPT_DIR/stdfuncs.sh + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_runEBSshutdown_${TS}.log + +LogMsg "run_EBS_shutdown.sh: Started" + +# Set the apps env. +# LogMsg “NE_BASE: $NE_BASE” +if [ -f $NE_BASE/../EBSapps.env ]; then + $NE_BASE/../EBSapps.env run +else + LogMsg "EBS environment is not set. Cannot find the file EBSapps.env.” + exit 1 +fi + +# If there is already a lock file, another app server is taking care of rsync +if [ -f "${SCRIPT_DIR}/ebsrsync.lck" ]; then + SKIP_RSYNC=1 +else + echo ${HOSTNAME} >> ${SCRIPT_DIR}/ebsrsync.lck + SKIP_RSYNC=0 +fi + +# Run the shutdown scripts for this app server in the background. +${SCRIPT_DIR}/run_EBS_stopServices.sh | tee -a ${LOG_OUT} & + +# If SKIP_RSYNC is 0, this session must make sure the file systems are synchronized. +# To do this, we must wait until all sessions have been shut down, and +# make sure there isn’t an rsync process already running. +# Wait for these two things to be true, then do one final rsync. +if [ ${SKIP_RSYNC} -eq 0 ]; then + LogMsg “Wait for EBS DB connections to stop” + # get DB connection going + GetLogon $APPS_SECRET_NAME + APPS_SECRET=$LOGON + # Start sqlplus in coroutine, logged in as apps user + LaunchCoroutine APPS $APPS_SECRET $PDB_TNS_CONNECT_STRING + + LogMsg "Checking number of remaining database sessions before performing rsync." + sql=”select ltrim(count(*)) \ + from gv\$instance a, gv\$session b \ + where a.inst_id = b.inst_id \ + and service_name in ('VISPRD_OACORE_ONLINE','VISPRD_PCP_BATCH','VISPRD_FORMS_ONLINE');” + ckRunDB 5 + + # DB sessions all finished. Now tackle final rsync. + # If rsync is currently running, need to wait until it completes then + # start a fresh session to catch all remaining file changes + # We need to source the appropriate file to get the SOURCE_RSYNC_DIR env + # variable set. + LogMsg “Check for possible rsync still running. Let it finish.” + . ${SCRIPT_DIR}/fs_APPLCSF + ckRunOS ${SOURCE_RSYNC_DIR} 3 + +# Commented out: + # pcount=1 + # while [ $pcount -gt 0 ]; do + # pcount=$(ps -elf | grep "rsync -avzh --progress ${SOURCE_RSYNC_DIR}" | grep -v grep | wc -l) + # sleep 3 + # done + + # we know any already-running rsync scripts are complete. Do one final sweep, + # then disable rsync. + ${SCRIPT_DIR}/rsync_ebs.sh ${SCRIPT_DIR}/fs_APPLCSF + ${SCRIPT_DIR}/disable_ebs_rsync.sh ${SCRIPT_DIR}/fs_APPLCSF + ${SCRIPT_DIR}/disable_ebs_rsync.sh ${SCRIPT_DIR}/fs1 + ${SCRIPT_DIR}/disable_ebs_rsync.sh ${SCRIPT_DIR}/fs2 + rm -f ${SCRIPT_DIR}/ebsrsync.lck +fi + +LogMsg "run_EBS_shutdown.sh: Completed" diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/slowFiles.env b/apps-unlimited/EBSR12.2onOCI/AppTier/slowFiles.env new file mode 100644 index 0000000..d0ad43f --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/slowFiles.env @@ -0,0 +1,14 @@ +################################################################################ +# fastFiles.env +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# These files don't change often unless there's an EBS patch event +# +################################################################################ +copyDirectories=${SCRIPT_DIR}/staticDirectories.txt +copyFiles=${SCRIPT_DIR}/staticIncludeFiles.txt +excludeFiles=${SCRIPT_DIR}/staticExcludeFiles.txt + +fsAlias=slowFiles diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/slowFiles.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/slowFiles.txt new file mode 100644 index 0000000..786f879 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/slowFiles.txt @@ -0,0 +1,382 @@ +# THIS IS AN EXAMPLE ONLY, of output generated by the rsync scripts when multi-threading work +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +syncScripts_slowFiles/do_1.sh +syncScripts_slowFiles/do_2.sh +syncScripts_slowFiles/do_3.sh +syncScripts_slowFiles/do_4.sh +syncScripts_slowFiles/do_5.sh +syncScripts_slowFiles/do_6.sh +syncScripts_slowFiles/do_7.sh +syncScripts_slowFiles/do_8.sh +syncScripts_slowFiles/do_9.sh +syncScripts_slowFiles/do_10.sh +syncScripts_slowFiles/do_11.sh +syncScripts_slowFiles/do_12.sh +syncScripts_slowFiles/do_13.sh +syncScripts_slowFiles/do_14.sh +syncScripts_slowFiles/do_15.sh +syncScripts_slowFiles/do_16.sh +syncScripts_slowFiles/do_17.sh +syncScripts_slowFiles/do_18.sh +syncScripts_slowFiles/do_19.sh +syncScripts_slowFiles/do_20.sh +syncScripts_slowFiles/do_21.sh +syncScripts_slowFiles/do_22.sh +syncScripts_slowFiles/do_23.sh +syncScripts_slowFiles/do_24.sh +syncScripts_slowFiles/do_25.sh +syncScripts_slowFiles/do_26.sh +syncScripts_slowFiles/do_27.sh +syncScripts_slowFiles/do_28.sh +syncScripts_slowFiles/do_29.sh +syncScripts_slowFiles/do_30.sh +syncScripts_slowFiles/do_31.sh +syncScripts_slowFiles/do_32.sh +syncScripts_slowFiles/do_33.sh +syncScripts_slowFiles/do_34.sh +syncScripts_slowFiles/do_35.sh +syncScripts_slowFiles/do_36.sh +syncScripts_slowFiles/do_37.sh +syncScripts_slowFiles/do_38.sh +syncScripts_slowFiles/do_39.sh +syncScripts_slowFiles/do_40.sh +syncScripts_slowFiles/do_41.sh +syncScripts_slowFiles/do_42.sh +syncScripts_slowFiles/do_43.sh +syncScripts_slowFiles/do_44.sh +syncScripts_slowFiles/do_45.sh +syncScripts_slowFiles/do_46.sh +syncScripts_slowFiles/do_47.sh +syncScripts_slowFiles/do_48.sh +syncScripts_slowFiles/do_49.sh +syncScripts_slowFiles/do_50.sh +syncScripts_slowFiles/do_51.sh +syncScripts_slowFiles/do_52.sh +syncScripts_slowFiles/do_53.sh +syncScripts_slowFiles/do_54.sh +syncScripts_slowFiles/do_55.sh +syncScripts_slowFiles/do_56.sh +syncScripts_slowFiles/do_57.sh +syncScripts_slowFiles/do_58.sh +syncScripts_slowFiles/do_59.sh +syncScripts_slowFiles/do_60.sh +syncScripts_slowFiles/do_61.sh +syncScripts_slowFiles/do_62.sh +syncScripts_slowFiles/do_63.sh +syncScripts_slowFiles/do_64.sh +syncScripts_slowFiles/do_65.sh +syncScripts_slowFiles/do_66.sh +syncScripts_slowFiles/do_67.sh +syncScripts_slowFiles/do_68.sh +syncScripts_slowFiles/do_69.sh +syncScripts_slowFiles/do_70.sh +syncScripts_slowFiles/do_71.sh +syncScripts_slowFiles/do_72.sh +syncScripts_slowFiles/do_73.sh +syncScripts_slowFiles/do_74.sh +syncScripts_slowFiles/do_75.sh +syncScripts_slowFiles/do_76.sh +syncScripts_slowFiles/do_77.sh +syncScripts_slowFiles/do_78.sh +syncScripts_slowFiles/do_79.sh +syncScripts_slowFiles/do_80.sh +syncScripts_slowFiles/do_81.sh +syncScripts_slowFiles/do_82.sh +syncScripts_slowFiles/do_83.sh +syncScripts_slowFiles/do_84.sh +syncScripts_slowFiles/do_85.sh +syncScripts_slowFiles/do_86.sh +syncScripts_slowFiles/do_87.sh +syncScripts_slowFiles/do_88.sh +syncScripts_slowFiles/do_89.sh +syncScripts_slowFiles/do_90.sh +syncScripts_slowFiles/do_91.sh +syncScripts_slowFiles/do_92.sh +syncScripts_slowFiles/do_93.sh +syncScripts_slowFiles/do_94.sh +syncScripts_slowFiles/do_95.sh +syncScripts_slowFiles/do_96.sh +syncScripts_slowFiles/do_97.sh +syncScripts_slowFiles/do_98.sh +syncScripts_slowFiles/do_99.sh +syncScripts_slowFiles/do_100.sh +syncScripts_slowFiles/do_101.sh +syncScripts_slowFiles/do_102.sh +syncScripts_slowFiles/do_103.sh +syncScripts_slowFiles/do_104.sh +syncScripts_slowFiles/do_105.sh +syncScripts_slowFiles/do_106.sh +syncScripts_slowFiles/do_107.sh +syncScripts_slowFiles/do_108.sh +syncScripts_slowFiles/do_109.sh +syncScripts_slowFiles/do_110.sh +syncScripts_slowFiles/do_111.sh +syncScripts_slowFiles/do_112.sh +syncScripts_slowFiles/do_113.sh +syncScripts_slowFiles/do_114.sh +syncScripts_slowFiles/do_115.sh +syncScripts_slowFiles/do_116.sh +syncScripts_slowFiles/do_117.sh +syncScripts_slowFiles/do_118.sh +syncScripts_slowFiles/do_119.sh +syncScripts_slowFiles/do_120.sh +syncScripts_slowFiles/do_121.sh +syncScripts_slowFiles/do_122.sh +syncScripts_slowFiles/do_123.sh +syncScripts_slowFiles/do_124.sh +syncScripts_slowFiles/do_125.sh +syncScripts_slowFiles/do_126.sh +syncScripts_slowFiles/do_127.sh +syncScripts_slowFiles/do_128.sh +syncScripts_slowFiles/do_129.sh +syncScripts_slowFiles/do_130.sh +syncScripts_slowFiles/do_131.sh +syncScripts_slowFiles/do_132.sh +syncScripts_slowFiles/do_133.sh +syncScripts_slowFiles/do_134.sh +syncScripts_slowFiles/do_135.sh +syncScripts_slowFiles/do_136.sh +syncScripts_slowFiles/do_137.sh +syncScripts_slowFiles/do_138.sh +syncScripts_slowFiles/do_139.sh +syncScripts_slowFiles/do_140.sh +syncScripts_slowFiles/do_141.sh +syncScripts_slowFiles/do_142.sh +syncScripts_slowFiles/do_143.sh +syncScripts_slowFiles/do_144.sh +syncScripts_slowFiles/do_145.sh +syncScripts_slowFiles/do_146.sh +syncScripts_slowFiles/do_147.sh +syncScripts_slowFiles/do_148.sh +syncScripts_slowFiles/do_149.sh +syncScripts_slowFiles/do_150.sh +syncScripts_slowFiles/do_151.sh +syncScripts_slowFiles/do_152.sh +syncScripts_slowFiles/do_153.sh +syncScripts_slowFiles/do_154.sh +syncScripts_slowFiles/do_155.sh +syncScripts_slowFiles/do_156.sh +syncScripts_slowFiles/do_157.sh +syncScripts_slowFiles/do_158.sh +syncScripts_slowFiles/do_159.sh +syncScripts_slowFiles/do_160.sh +syncScripts_slowFiles/do_161.sh +syncScripts_slowFiles/do_162.sh +syncScripts_slowFiles/do_163.sh +syncScripts_slowFiles/do_164.sh +syncScripts_slowFiles/do_165.sh +syncScripts_slowFiles/do_166.sh +syncScripts_slowFiles/do_167.sh +syncScripts_slowFiles/do_168.sh +syncScripts_slowFiles/do_169.sh +syncScripts_slowFiles/do_170.sh +syncScripts_slowFiles/do_171.sh +syncScripts_slowFiles/do_172.sh +syncScripts_slowFiles/do_173.sh +syncScripts_slowFiles/do_174.sh +syncScripts_slowFiles/do_175.sh +syncScripts_slowFiles/do_176.sh +syncScripts_slowFiles/do_177.sh +syncScripts_slowFiles/do_178.sh +syncScripts_slowFiles/do_179.sh +syncScripts_slowFiles/do_180.sh +syncScripts_slowFiles/do_181.sh +syncScripts_slowFiles/do_182.sh +syncScripts_slowFiles/do_183.sh +syncScripts_slowFiles/do_184.sh +syncScripts_slowFiles/do_185.sh +syncScripts_slowFiles/do_186.sh +syncScripts_slowFiles/do_187.sh +syncScripts_slowFiles/do_188.sh +syncScripts_slowFiles/do_189.sh +syncScripts_slowFiles/do_190.sh +syncScripts_slowFiles/do_191.sh +syncScripts_slowFiles/do_192.sh +syncScripts_slowFiles/do_193.sh +syncScripts_slowFiles/do_194.sh +syncScripts_slowFiles/do_195.sh +syncScripts_slowFiles/do_196.sh +syncScripts_slowFiles/do_197.sh +syncScripts_slowFiles/do_198.sh +syncScripts_slowFiles/do_199.sh +syncScripts_slowFiles/do_200.sh +syncScripts_slowFiles/do_201.sh +syncScripts_slowFiles/do_202.sh +syncScripts_slowFiles/do_203.sh +syncScripts_slowFiles/do_204.sh +syncScripts_slowFiles/do_205.sh +syncScripts_slowFiles/do_206.sh +syncScripts_slowFiles/do_207.sh +syncScripts_slowFiles/do_208.sh +syncScripts_slowFiles/do_209.sh +syncScripts_slowFiles/do_210.sh +syncScripts_slowFiles/do_211.sh +syncScripts_slowFiles/do_212.sh +syncScripts_slowFiles/do_213.sh +syncScripts_slowFiles/do_214.sh +syncScripts_slowFiles/do_215.sh +syncScripts_slowFiles/do_216.sh +syncScripts_slowFiles/do_217.sh +syncScripts_slowFiles/do_218.sh +syncScripts_slowFiles/do_219.sh +syncScripts_slowFiles/do_220.sh +syncScripts_slowFiles/do_221.sh +syncScripts_slowFiles/do_222.sh +syncScripts_slowFiles/do_223.sh +syncScripts_slowFiles/do_224.sh +syncScripts_slowFiles/do_225.sh +syncScripts_slowFiles/do_226.sh +syncScripts_slowFiles/do_227.sh +syncScripts_slowFiles/do_228.sh +syncScripts_slowFiles/do_229.sh +syncScripts_slowFiles/do_230.sh +syncScripts_slowFiles/do_231.sh +syncScripts_slowFiles/do_232.sh +syncScripts_slowFiles/do_233.sh +syncScripts_slowFiles/do_234.sh +syncScripts_slowFiles/do_235.sh +syncScripts_slowFiles/do_236.sh +syncScripts_slowFiles/do_237.sh +syncScripts_slowFiles/do_238.sh +syncScripts_slowFiles/do_239.sh +syncScripts_slowFiles/do_240.sh +syncScripts_slowFiles/do_241.sh +syncScripts_slowFiles/do_242.sh +syncScripts_slowFiles/do_243.sh +syncScripts_slowFiles/do_244.sh +syncScripts_slowFiles/do_245.sh +syncScripts_slowFiles/do_246.sh +syncScripts_slowFiles/do_247.sh +syncScripts_slowFiles/do_248.sh +syncScripts_slowFiles/do_249.sh +syncScripts_slowFiles/do_250.sh +syncScripts_slowFiles/do_251.sh +syncScripts_slowFiles/do_252.sh +syncScripts_slowFiles/do_253.sh +syncScripts_slowFiles/do_254.sh +syncScripts_slowFiles/do_255.sh +syncScripts_slowFiles/do_256.sh +syncScripts_slowFiles/do_257.sh +syncScripts_slowFiles/do_258.sh +syncScripts_slowFiles/do_259.sh +syncScripts_slowFiles/do_260.sh +syncScripts_slowFiles/do_261.sh +syncScripts_slowFiles/do_262.sh +syncScripts_slowFiles/do_263.sh +syncScripts_slowFiles/do_264.sh +syncScripts_slowFiles/do_265.sh +syncScripts_slowFiles/do_266.sh +syncScripts_slowFiles/do_267.sh +syncScripts_slowFiles/do_268.sh +syncScripts_slowFiles/do_269.sh +syncScripts_slowFiles/do_270.sh +syncScripts_slowFiles/do_271.sh +syncScripts_slowFiles/do_272.sh +syncScripts_slowFiles/do_273.sh +syncScripts_slowFiles/do_274.sh +syncScripts_slowFiles/do_275.sh +syncScripts_slowFiles/do_276.sh +syncScripts_slowFiles/do_277.sh +syncScripts_slowFiles/do_278.sh +syncScripts_slowFiles/do_279.sh +syncScripts_slowFiles/do_280.sh +syncScripts_slowFiles/do_281.sh +syncScripts_slowFiles/do_282.sh +syncScripts_slowFiles/do_283.sh +syncScripts_slowFiles/do_284.sh +syncScripts_slowFiles/do_285.sh +syncScripts_slowFiles/do_286.sh +syncScripts_slowFiles/do_287.sh +syncScripts_slowFiles/do_288.sh +syncScripts_slowFiles/do_289.sh +syncScripts_slowFiles/do_290.sh +syncScripts_slowFiles/do_291.sh +syncScripts_slowFiles/do_292.sh +syncScripts_slowFiles/do_293.sh +syncScripts_slowFiles/do_294.sh +syncScripts_slowFiles/do_295.sh +syncScripts_slowFiles/do_296.sh +syncScripts_slowFiles/do_297.sh +syncScripts_slowFiles/do_298.sh +syncScripts_slowFiles/do_299.sh +syncScripts_slowFiles/do_300.sh +syncScripts_slowFiles/do_301.sh +syncScripts_slowFiles/do_302.sh +syncScripts_slowFiles/do_303.sh +syncScripts_slowFiles/do_304.sh +syncScripts_slowFiles/do_305.sh +syncScripts_slowFiles/do_306.sh +syncScripts_slowFiles/do_307.sh +syncScripts_slowFiles/do_308.sh +syncScripts_slowFiles/do_309.sh +syncScripts_slowFiles/do_310.sh +syncScripts_slowFiles/do_311.sh +syncScripts_slowFiles/do_312.sh +syncScripts_slowFiles/do_313.sh +syncScripts_slowFiles/do_314.sh +syncScripts_slowFiles/do_315.sh +syncScripts_slowFiles/do_316.sh +syncScripts_slowFiles/do_317.sh +syncScripts_slowFiles/do_318.sh +syncScripts_slowFiles/do_319.sh +syncScripts_slowFiles/do_320.sh +syncScripts_slowFiles/do_321.sh +syncScripts_slowFiles/do_322.sh +syncScripts_slowFiles/do_323.sh +syncScripts_slowFiles/do_324.sh +syncScripts_slowFiles/do_325.sh +syncScripts_slowFiles/do_326.sh +syncScripts_slowFiles/do_327.sh +syncScripts_slowFiles/do_328.sh +syncScripts_slowFiles/do_329.sh +syncScripts_slowFiles/do_330.sh +syncScripts_slowFiles/do_331.sh +syncScripts_slowFiles/do_332.sh +syncScripts_slowFiles/do_333.sh +syncScripts_slowFiles/do_334.sh +syncScripts_slowFiles/do_335.sh +syncScripts_slowFiles/do_336.sh +syncScripts_slowFiles/do_337.sh +syncScripts_slowFiles/do_338.sh +syncScripts_slowFiles/do_339.sh +syncScripts_slowFiles/do_340.sh +syncScripts_slowFiles/do_341.sh +syncScripts_slowFiles/do_342.sh +syncScripts_slowFiles/do_343.sh +syncScripts_slowFiles/do_344.sh +syncScripts_slowFiles/do_345.sh +syncScripts_slowFiles/do_346.sh +syncScripts_slowFiles/do_347.sh +syncScripts_slowFiles/do_348.sh +syncScripts_slowFiles/do_349.sh +syncScripts_slowFiles/do_350.sh +syncScripts_slowFiles/do_351.sh +syncScripts_slowFiles/do_352.sh +syncScripts_slowFiles/do_353.sh +syncScripts_slowFiles/do_354.sh +syncScripts_slowFiles/do_355.sh +syncScripts_slowFiles/do_356.sh +syncScripts_slowFiles/do_357.sh +syncScripts_slowFiles/do_358.sh +syncScripts_slowFiles/do_359.sh +syncScripts_slowFiles/do_360.sh +syncScripts_slowFiles/do_361.sh +syncScripts_slowFiles/do_362.sh +syncScripts_slowFiles/do_363.sh +syncScripts_slowFiles/do_364.sh +syncScripts_slowFiles/do_365.sh +syncScripts_slowFiles/do_366.sh +syncScripts_slowFiles/do_367.sh +syncScripts_slowFiles/do_368.sh +syncScripts_slowFiles/do_369.sh +syncScripts_slowFiles/do_370.sh +syncScripts_slowFiles/do_371.sh +syncScripts_slowFiles/do_372.sh +syncScripts_slowFiles/do_373.sh +syncScripts_slowFiles/do_374.sh +syncScripts_slowFiles/do_375.sh +syncScripts_slowFiles/do_376.sh +syncScripts_slowFiles/do_377.sh diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/startEBS.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/startEBS.sh new file mode 100644 index 0000000..7cd5954 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/startEBS.sh @@ -0,0 +1,445 @@ +#!/bin/ksh +################################################################################ +# Name: startEBS.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Purpose: Start EBS application tier in various ways, depending on need. +# The basic tasks: +# a. Configure the EBS CONTEXT_FILE * +# b. Run autoconfig +# c. Start EBS application services +# d. Make sure replication is enabled +# e. Make sure replication is complete +# f. Block until database configuration is complete +# +# * Note: Customize this for: +# - your configuration of the EBS CONTEXT_FILE in ConfigContext routine +# - your background rsync scripts in the EnableReplication routine +# +# The calling choices: +# n: Normal: does c and d above +# t: Test (standby): does a, b, and c above +# s: Switchover: does a, e, b, c, and d above +# +# Usage: startEBS.sh [arguments] +# n) Normal: +# - Start EBS application services +# - Make sure replication is enabled +# t) Test (standby): +# - Make sure the DB is in SNAPSHOT STANDBY mode +# - Configure CONTEXT_FILE for snapshot standby +# - Run autoconfig +# - Start EBS application services +# s) Switch this environment to production; +# - Block until any required database configuration is complete +# - Make sure there are no rsync processes running +# - Configure CONTEXT_FILE for production +# - Run autoconfig +# - Start EBS application services +# - Make sure file system replication to new standby is enabled +# +# ASSUMPTIONS: User has privileges to run EBS admin scripts. +# User's environment is already set for EBS +# ($NE_BASE/../EBSapps.env run has been executed) +# +# Errors: A non-zero value is returned for bad arguments, inability to +# connect, ... +# +# Revisions: +# Date What +# 09/10/2024 Consolidated earlier scripts into one +########################################################################## +# ParseArgs: +# Parse the command line arguments +# +# Input: command line arguments +# Output: run proffile set, determining which routines are executed +# Return: exit 1 if arguments are no good +########################################################################## +ParseArgs() +{ +# +# Make sure at least 1 argument is present +if [ $# -lt 1 ] +then + echo "$0: ERROR: You have entered insufficient arguments" + Usage + exit 1 +fi +# make sure the parameter passed was correct +if [[ $1 = "n" || $1 = "t" || $1 = "s" ]] +then + break +else + echo "$0: ERROR: You have entered an incorrect argument" + Usage + exit 1 +fi + +# +# They sent in an n, t, or s, which will drive behavior +# +runPlan=$1 + +} + +################################################################################ +# Usage: +# Standard usage clause +################################################################################ +Usage() +{ +echo "Usage: startEBS.sh [mode]" +echo "Mode can be:" +echo " n = Normal startup. Start EBS and make sure replication is enabled." +echo " t = Test: Start the environment as snapshot" +echo " s = Switch: Do EBS-side switchover to make this environment production." +echo "" +} + +################################################################################ +# SetEnv +# Get environment variables, standard include routines +# +# Input: None +# Output: Environments set for the run +# Return: Exit 1 if can't find environment files, etc. +################################################################################ +SetEnv() +{ +# Include the basic "where am I" environment settings +if [ ! -f ${SCRIPT_DIR}/ebsAppTier.env ]; then + echo "Cannot find the file ${SCRIPT_DIR}/ebsAppTier.env." + exit 1 +fi + +. ${SCRIPT_DIR}/ebsAppTier.env + +# Include the standard functions routines +if [ ! -f ${SCRIPT_DIR}/stdfuncs.sh ]; then + echo "Cannot find the standard functions script (stdfuncs.sh)" + exit 1 +fi + +. $SCRIPT_DIR/stdfuncs.sh + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_startEBS_${TS}.log + +# Make sure the the apps env. is already set +if [ ! -f $NE_BASE/../EBSapps.env ]; then + LogMsg "EBS environment is not set. Cannot find the file EBSapps.env." + LogMsg "NE_BASE: $NE_BASE" + exit 1 +fi +} + +################################################################################ +# GetCreds +# Get EBS and FMW credentisls needed in this run +# +# Input: None +# Output: The creds we need, set +# Return: 1 if can't find one of the users referenced (GetLogon breaks out) +################################################################################ +GetCreds() +{ +LogMsg "Getting EBS credentials" +GetLogon $APPS_SECRET_NAME +APPS_SECRET=$LOGON + +GetLogon $WLS_SECRET_NAME +WLS_SECRET=$LOGON +} + +################################################################################ +# ConnectDB +# Launch the coroutine. Need for t and s only +# +# Input: None +# Output: SQL*Plus child process initiated +# Return: 1 if can't start sqlplus in the background +################################################################################ +ConnectDB() +{ +LogMsg "ConnectDB: LaunchCoroutine" + +# Start sqlplus in coroutine, logged in as apps user +LaunchCoroutine APPS $APPS_SECRET $PDB_TNS_CONNECT_STRING + +LogMsg "SQLPlus coroutine started" +} + +################################################################################ +# WaitDBConfig +# Part of switchover: wait until all database homes have been configured. +# +# The switchover process on the database side puts a row into a custom table for +# each DB node. Then as each node fixes its config files, it removes its entry. +# If the work is not needed, the table is not populated. If it is needed, +# as the work is done on each EBS instance its row is removed, until the table +# is empty. When the table is empty work can proceed on the middle tiers. +# +# Potential source of a hang, since it's theoretically possible for rows to +# be inserted and not deleted, but that would be an issue that needs to be +# resolved. +# +# Input: None +# Output: Number of DB instances needing reconfig, sleep time, dividing line +# Return: 1 if can't start sqlplus in the background +# if no sleep time +# if $sql is empty +################################################################################ +WaitDBConfig() +{ +LogMsg "Wait for database home reconfiguration to complete" + +sql="select ltrim('host: ' || host_name) from apps.xxx_EBS_role_change;" +CkRunDB 5 + +LogMsg "Database tier configuration complete - ok to proceed." +} + +################################################################################ +# StandbyCheck +# Make sure the database is in snapshot standby mode +# +# Input: None +# Output: None +# Return: 1 if database is not in SNAPSHOT STANDBY mode +################################################################################ +StandbyCheck() +{ +LogMsg "Making sure the database is in snapshot standby mode" + +sql="select rtrim(database_role) from v\$database;" +dbMode=`ExecSql "$sql"` + +if [ ${dbMode} != "SNAPSHOT STANDBY" ]; then + LogMsg "Database is not in SNAPSHOT STANDBY mode" + LogMsg "Cannot do snapshot standby testing" + exit 1 +fi + +LogMsg "StandbyCheck: Succeeded" +} + +################################################################################ +# ConfigContext +# Configure the context file for snapshot standby testing or for production +# when switching this site to prod +# +# NOTE: Add more commands if you need to change the value of more settings +# (e.g., port numbers) +# +# Input: Env file to use to switch configuration values in EBS's CONTEXT_FILE +# Output: CONTEXT_FILE reconfigured as requested +# Return: 1 if env file can't be found +################################################################################ +ConfigContext() +{ +envFile=$1 + +LogMsg "envFile: ${SCRIPT_DIR}/${envFile}" + +if [ ! -f ${SCRIPT_DIR}/${envFile} ]; then + LogMsg "ConfigContext: No env file specified or file not found" + exit 1 +else + LogMsg "ConfigContext: Setting environment" +fi + +. $SCRIPT_DIR/$envFile + +# Back up the context file +LogMsg "Backing up CONTEXT_FILE ${CONTEXT_FILE}" +cp $CONTEXT_FILE $CONTEXT_FILE.'date +"%Y%m%d"' + +# These commands are each one line (this wraps in your display) +# hostname used in the SSL CA certificate. +LogMsg "Set s_webentryhost ${webentryhost}" +$RUN_BASE/EBSapps/comn/util/jdk32/jre/bin/java -classpath $RUN_BASE/EBSapps/comn/java/classes:$RUN_BASE/FMW_Home/Oracle_EBS-app1/shared-libs/ebs-appsborg/WEB-INF/lib/ebsAppsborgManifest.jar oracle.apps.ad.context.UpdateContext $CONTEXT_FILE s_webentryhost ${webentryhost} +if [ $? -ne 0 ]; then + LogMsg "UpdateContext returned an error for s_webentryhost" + exit 1 +fi + +LogMsg "Set s_webentrydomain ${webentrydomain}" +$RUN_BASE/EBSapps/comn/util/jdk32/jre/bin/java -classpath $RUN_BASE/EBSapps/comn/java/classes:$RUN_BASE/FMW_Home/Oracle_EBS-app1/shared-libs/ebs-appsborg/WEB-INF/lib/ebsAppsborgManifest.jar oracle.apps.ad.context.UpdateContext $CONTEXT_FILE s_webentrydomain ${webentrydomain} +if [ $? -ne 0 ]; then + LogMsg "UpdateContext returned an error for s_webentrydomain" + exit 1 +fi + +# s_webport is the http port for the application server on the application tier. +LogMsg "Set s_webport ${webport}" +$RUN_BASE/EBSapps/comn/util/jdk32/jre/bin/java -classpath $RUN_BASE/EBSapps/comn/java/classes:$RUN_BASE/FMW_Home/Oracle_EBS-app1/shared-libs/ebs-appsborg/WEB-INF/lib/ebsAppsborgManifest.jar oracle.apps.ad.context.UpdateContext $CONTEXT_FILE s_webport ${webport} +if [ $? -ne 0 ]; then + LogMsg "UpdateContext returned an error for s_webport" + exit 1 +fi + +# s_active_webport is used for the front-end load balancer. +LogMsg "Set s_active_webport ${active_webport}" +$RUN_BASE/EBSapps/comn/util/jdk32/jre/bin/java -classpath $RUN_BASE/EBSapps/comn/java/classes:$RUN_BASE/FMW_Home/Oracle_EBS-app1/shared-libs/ebs-appsborg/WEB-INF/lib/ebsAppsborgManifest.jar oracle.apps.ad.context.UpdateContext $CONTEXT_FILE s_active_webport ${active_webport} +if [ $? -ne 0 ]; then + LogMsg "UpdateContext returned an error for s_active_webport" + exit 1 +fi + +# EBS login page. +LogMsg "Set s_login_page ${login_page}" +$RUN_BASE/EBSapps/comn/util/jdk32/jre/bin/java -classpath $RUN_BASE/EBSapps/comn/java/classes:$RUN_BASE/FMW_Home/Oracle_EBS-app1/shared-libs/ebs-appsborg/WEB-INF/lib/ebsAppsborgManifest.jar oracle.apps.ad.context.UpdateContext $CONTEXT_FILE s_login_page ${login_page} +if [ $? -ne 0 ]; then + LogMsg "UpdateContext returned an error for s_login_page" + exit 1 +fi + +# The base URL that EBS will use for redirects back through the load balancer. +LogMsg "Set s_external_URL ${external_URL}" +$RUN_BASE/EBSapps/comn/util/jdk32/jre/bin/java -classpath $RUN_BASE/EBSapps/comn/java/classes:$RUN_BASE/FMW_Home/Oracle_EBS-app1/shared-libs/ebs-appsborg/WEB-INF/lib/ebsAppsborgManifest.jar oracle.apps.ad.context.UpdateContext $CONTEXT_FILE s_external_URL ${external_URL} +if [ $? -ne 0 ]; then + LogMsg "UpdateContext returned an error for s_external_URL" + exit 1 +fi + +LogMsg "CONTEXT_FILE reconfigured" +} + +################################################################################ +# RunAutoConfig +# Run autoconfig on all application servers +# +# Input: None +# Output: EBS configuration updated +# Return: 1 if can't start sqlplus in the background +################################################################################ +RunAutoConfig() +{ +LogMsg "Running autoconfig on all application servers" + +{ echo $APPS_SECRET; }| perl $AD_TOP/bin/adconfig.pl -contextfile=$CONTEXT_FILE -parallel promptmsg=hide | tee -a ${LOG_OUT} + +# Check for success +if [ $? -ne 0 ]; then + LogMsg "$AD_TOP/bin/adconfig.pl reported failure." + exit 1 +fi + +LogMsg "Completed: RunAutoConfig." +} + +################################################################################ +# StartServices +# Run autoconfig on all application servers +# +# Input: None +# Output: EBS application and middle tiers started on all app servers +# Return: 1 if can't start sqlplus in the background +################################################################################ +StartServices() +{ +LogMsg "Starting EBS on all application servers" + +{ echo "APPS"; echo $APPS_SECRET; echo $WLS_SECRET; } | $ADMIN_SCRIPTS_HOME/adstrtal.sh -msimode | tee -a ${LOG_OUT} + +# Did adstrtal report failure? +if [ $? -ne 0 ]; then + LogMsg "$ADMIN_SCRIPTS_NAME/adstrtal.sh reported failure." + exit 1 +fi + +LogMsg "Completed: StartServices." +} + +################################################################################ +# CkRsync +# DB shutdown on switchover is supposed to finish and stop rsync background +# processes. This checks to see if rsync is still running. At this point in +# the flow, it should not be running, so exit with error if it is. +# +# Input: None +# Output: None +# Return: 1 if rsync processes are running somewhere. +################################################################################ +CkRsync() +{ +LogMsg "Make sure replication is not running anywhere." + +if [ -f "${SCRIPT_DIR}/ebsrsync.lck" ]; then + LogMsg "CkRsync: There's an rsync process running on `cat $SCRIPT_DIR/ebsrsync.lck`" + LogMsg "CkRsync: Wait until database side is completely ready before switching" + LogMsg " to this site." + exit 1 +fi + +LogMsg "Completed: CkRsync." +} + +################################################################################ +# EnableReplication +# Make sure replication is enabled with this site as primary +# +# Input: None +# Output: None +# Return: 1 if can't start sqlplus in the background +################################################################################ +EnableReplication() +{ +LogMsg "Make sure replication is enabled with this site as source" + +# Customize this for your replication scripts +${SCRIPT_DIR}/enable_ebs_rsync.sh ${SCRIPT_DIR}/slowFiles.env +${SCRIPT_DIR}/enable_ebs_rsync.sh ${SCRIPT_DIR}/fastFiles.env + +LogMsg "Completed: EnableReplication." +} + +################################################################################ +# Execution starts here. +################################################################################ + +ParseArgs $* +# Leave ParseArgs with runPlan set to n, t, or s + +SetEnv + +LogMsg "runPlan: $runPlan" + +LogMsg "startEBS.sh: Started" + +GetCreds + +case $runPlan in + n) LogMsg "Normal startup" + StartServices + EnableReplication + ;; + t) LogMsg "Start for snapshot testing" + ConnectDB + StandbyCheck + # Note: hard-coded env file reference + ConfigContext web_entry_test.env + RunAutoConfig + StartServices + ;; + s) LogMsg "Switch to this environment" + ConnectDB + WaitDBConfig + CkRsync + # Note: hard-coded env file reference + ConfigContext web_entry_prod.env + RunAutoConfig + StartServices + EnableReplication + ;; + *) Usage + exit 1 + ;; +esac + +LogMsg "Completed: startEBS.sh" + + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/staticDirectories.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/staticDirectories.txt new file mode 100644 index 0000000..0585635 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/staticDirectories.txt @@ -0,0 +1,388 @@ +################################################################################ +# staticDirectories.txt +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# These files DO NOT change frequently, but do change when EBS is patched +# +################################################################################ +# Relatively static directories to sync to other side +# Put the fattest directories towards the top of the list +/u02/app/ebs/vis/fs1/EBSapps/comn/java /u02/app/ebs/visCopy/fs1/EBSapps/comn/java/classes +/u02/app/ebs/vis/fs1/EBSapps/comn/java /u02/app/ebs/visCopy/fs1/EBSapps/comn/java/lib +/u02/app/ebs/vis/fs2/EBSapps/comn/java /u02/app/ebs/visCopy/fs2/EBSapps/comn/java/classes +/u02/app/ebs/vis/fs2/EBSapps/comn/java /u02/app/ebs/visCopy/fs2/EBSapps/comn/java/lib +/u02/app/ebs/vis/fs2/FMW_Home /u02/app/ebs/visCopy/fs2/FMW_Home +/u02/app/ebs/vis/fs2/inst /u02/app/ebs/visCopy/fs2/inst +/u02/app/ebs/vis/fs1/FMW_Home /u02/app/ebs/visCopy/fs1/FMW_Home +/u02/app/ebs/vis/fs1/inst /u02/app/ebs/visCopy/fs1/inst +/u02/app/ebs/vis/ETCC /u02/app/ebs/visCopy/ETCC +/u02/app/ebs/vis/oraInventory /u02/app/ebs/visCopy/oraInventory +/u02/app/ebs/vis/pairsfile /u02/app/ebs/visCopy/pairsfile +/u02/app/ebs/vis/fs1/EBSapps/10.1.2 /u02/app/ebs/visCopy/fs1/EBSapps/10.1.2 +/u02/app/ebs/vis/fs1/EBSapps/comn/admin /u02/app/ebs/visCopy/fs1/EBSapps/comn/admin +/u02/app/ebs/vis/fs1/EBSapps/comn/shared-libs /u02/app/ebs/visCopy/fs1/EBSapps/comn/shared-libs +/u02/app/ebs/vis/fs1/EBSapps/comn/temp /u02/app/ebs/visCopy/fs1/EBSapps/comn/temp +/u02/app/ebs/vis/fs1/EBSapps/comn/util /u02/app/ebs/visCopy/fs1/EBSapps/comn/util +/u02/app/ebs/vis/fs1/EBSapps/comn/webapps /u02/app/ebs/visCopy/fs1/EBSapps/comn/webapps +/u02/app/ebs/vis/fs1/EBSapps/appl/ad /u02/app/ebs/visCopy/fs1/EBSapps/appl/ad +/u02/app/ebs/vis/fs1/EBSapps/appl/admin /u02/app/ebs/visCopy/fs1/EBSapps/appl/admin +/u02/app/ebs/vis/fs1/EBSapps/appl/ahl /u02/app/ebs/visCopy/fs1/EBSapps/appl/ahl +/u02/app/ebs/vis/fs1/EBSapps/appl/ak /u02/app/ebs/visCopy/fs1/EBSapps/appl/ak +/u02/app/ebs/vis/fs1/EBSapps/appl/alr /u02/app/ebs/visCopy/fs1/EBSapps/appl/alr +/u02/app/ebs/vis/fs1/EBSapps/appl/ame /u02/app/ebs/visCopy/fs1/EBSapps/appl/ame +/u02/app/ebs/vis/fs1/EBSapps/appl/ams /u02/app/ebs/visCopy/fs1/EBSapps/appl/ams +/u02/app/ebs/vis/fs1/EBSapps/appl/amv /u02/app/ebs/visCopy/fs1/EBSapps/appl/amv +/u02/app/ebs/vis/fs1/EBSapps/appl/ap /u02/app/ebs/visCopy/fs1/EBSapps/appl/ap +/u02/app/ebs/vis/fs1/EBSapps/appl/ar /u02/app/ebs/visCopy/fs1/EBSapps/appl/ar +/u02/app/ebs/vis/fs1/EBSapps/appl/as /u02/app/ebs/visCopy/fs1/EBSapps/appl/as +/u02/app/ebs/vis/fs1/EBSapps/appl/asf /u02/app/ebs/visCopy/fs1/EBSapps/appl/asf +/u02/app/ebs/vis/fs1/EBSapps/appl/asg /u02/app/ebs/visCopy/fs1/EBSapps/appl/asg +/u02/app/ebs/vis/fs1/EBSapps/appl/asl /u02/app/ebs/visCopy/fs1/EBSapps/appl/asl +/u02/app/ebs/vis/fs1/EBSapps/appl/asn /u02/app/ebs/visCopy/fs1/EBSapps/appl/asn +/u02/app/ebs/vis/fs1/EBSapps/appl/aso /u02/app/ebs/visCopy/fs1/EBSapps/appl/aso +/u02/app/ebs/vis/fs1/EBSapps/appl/asp /u02/app/ebs/visCopy/fs1/EBSapps/appl/asp +/u02/app/ebs/vis/fs1/EBSapps/appl/ast /u02/app/ebs/visCopy/fs1/EBSapps/appl/ast +/u02/app/ebs/vis/fs1/EBSapps/appl/au /u02/app/ebs/visCopy/fs1/EBSapps/appl/au +/u02/app/ebs/vis/fs1/EBSapps/appl/ax /u02/app/ebs/visCopy/fs1/EBSapps/appl/ax +/u02/app/ebs/vis/fs1/EBSapps/appl/az /u02/app/ebs/visCopy/fs1/EBSapps/appl/az +/u02/app/ebs/vis/fs1/EBSapps/appl/ben /u02/app/ebs/visCopy/fs1/EBSapps/appl/ben +/u02/app/ebs/vis/fs1/EBSapps/appl/bic /u02/app/ebs/visCopy/fs1/EBSapps/appl/bic +/u02/app/ebs/vis/fs1/EBSapps/appl/bim /u02/app/ebs/visCopy/fs1/EBSapps/appl/bim +/u02/app/ebs/vis/fs1/EBSapps/appl/bis /u02/app/ebs/visCopy/fs1/EBSapps/appl/bis +/u02/app/ebs/vis/fs1/EBSapps/appl/bne /u02/app/ebs/visCopy/fs1/EBSapps/appl/bne +/u02/app/ebs/vis/fs1/EBSapps/appl/bom /u02/app/ebs/visCopy/fs1/EBSapps/appl/bom +/u02/app/ebs/vis/fs1/EBSapps/appl/cct /u02/app/ebs/visCopy/fs1/EBSapps/appl/cct +/u02/app/ebs/vis/fs1/EBSapps/appl/ce /u02/app/ebs/visCopy/fs1/EBSapps/appl/ce +/u02/app/ebs/vis/fs1/EBSapps/appl/chv /u02/app/ebs/visCopy/fs1/EBSapps/appl/chv +/u02/app/ebs/vis/fs1/EBSapps/appl/cln /u02/app/ebs/visCopy/fs1/EBSapps/appl/cln +/u02/app/ebs/vis/fs1/EBSapps/appl/cmi /u02/app/ebs/visCopy/fs1/EBSapps/appl/cmi +/u02/app/ebs/vis/fs1/EBSapps/appl/cn /u02/app/ebs/visCopy/fs1/EBSapps/appl/cn +/u02/app/ebs/vis/fs1/EBSapps/appl/crp /u02/app/ebs/visCopy/fs1/EBSapps/appl/crp +/u02/app/ebs/vis/fs1/EBSapps/appl/cs /u02/app/ebs/visCopy/fs1/EBSapps/appl/cs +/u02/app/ebs/vis/fs1/EBSapps/appl/csc /u02/app/ebs/visCopy/fs1/EBSapps/appl/csc +/u02/app/ebs/vis/fs1/EBSapps/appl/csd /u02/app/ebs/visCopy/fs1/EBSapps/appl/csd +/u02/app/ebs/vis/fs1/EBSapps/appl/cse /u02/app/ebs/visCopy/fs1/EBSapps/appl/cse +/u02/app/ebs/vis/fs1/EBSapps/appl/csf /u02/app/ebs/visCopy/fs1/EBSapps/appl/csf +/u02/app/ebs/vis/fs1/EBSapps/appl/csi /u02/app/ebs/visCopy/fs1/EBSapps/appl/csi +/u02/app/ebs/vis/fs1/EBSapps/appl/csl /u02/app/ebs/visCopy/fs1/EBSapps/appl/csl +/u02/app/ebs/vis/fs1/EBSapps/appl/csm /u02/app/ebs/visCopy/fs1/EBSapps/appl/csm +/u02/app/ebs/vis/fs1/EBSapps/appl/csp /u02/app/ebs/visCopy/fs1/EBSapps/appl/csp +/u02/app/ebs/vis/fs1/EBSapps/appl/csr /u02/app/ebs/visCopy/fs1/EBSapps/appl/csr +/u02/app/ebs/vis/fs1/EBSapps/appl/cua /u02/app/ebs/visCopy/fs1/EBSapps/appl/cua +/u02/app/ebs/vis/fs1/EBSapps/appl/cug /u02/app/ebs/visCopy/fs1/EBSapps/appl/cug +/u02/app/ebs/vis/fs1/EBSapps/appl/cz /u02/app/ebs/visCopy/fs1/EBSapps/appl/cz +/u02/app/ebs/vis/fs1/EBSapps/appl/ddr /u02/app/ebs/visCopy/fs1/EBSapps/appl/ddr +/u02/app/ebs/vis/fs1/EBSapps/appl/dna /u02/app/ebs/visCopy/fs1/EBSapps/appl/dna +/u02/app/ebs/vis/fs1/EBSapps/appl/dom /u02/app/ebs/visCopy/fs1/EBSapps/appl/dom +/u02/app/ebs/vis/fs1/EBSapps/appl/dpp /u02/app/ebs/visCopy/fs1/EBSapps/appl/dpp +/u02/app/ebs/vis/fs1/EBSapps/appl/dt /u02/app/ebs/visCopy/fs1/EBSapps/appl/dt +/u02/app/ebs/vis/fs1/EBSapps/appl/eam /u02/app/ebs/visCopy/fs1/EBSapps/appl/eam +/u02/app/ebs/vis/fs1/EBSapps/appl/ebi /u02/app/ebs/visCopy/fs1/EBSapps/appl/ebi +/u02/app/ebs/vis/fs1/EBSapps/appl/ec /u02/app/ebs/visCopy/fs1/EBSapps/appl/ec +/u02/app/ebs/vis/fs1/EBSapps/appl/ecx /u02/app/ebs/visCopy/fs1/EBSapps/appl/ecx +/u02/app/ebs/vis/fs1/EBSapps/appl/edr /u02/app/ebs/visCopy/fs1/EBSapps/appl/edr +/u02/app/ebs/vis/fs1/EBSapps/appl/ego /u02/app/ebs/visCopy/fs1/EBSapps/appl/ego +/u02/app/ebs/vis/fs1/EBSapps/appl/eng /u02/app/ebs/visCopy/fs1/EBSapps/appl/eng +/u02/app/ebs/vis/fs1/EBSapps/appl/eni /u02/app/ebs/visCopy/fs1/EBSapps/appl/eni +/u02/app/ebs/vis/fs1/EBSapps/appl/fa /u02/app/ebs/visCopy/fs1/EBSapps/appl/fa +/u02/app/ebs/vis/fs1/EBSapps/appl/ff /u02/app/ebs/visCopy/fs1/EBSapps/appl/ff +/u02/app/ebs/vis/fs1/EBSapps/appl/flm /u02/app/ebs/visCopy/fs1/EBSapps/appl/flm +/u02/app/ebs/vis/fs1/EBSapps/appl/fnd /u02/app/ebs/visCopy/fs1/EBSapps/appl/fnd +/u02/app/ebs/vis/fs1/EBSapps/appl/fpa /u02/app/ebs/visCopy/fs1/EBSapps/appl/fpa +/u02/app/ebs/vis/fs1/EBSapps/appl/frm /u02/app/ebs/visCopy/fs1/EBSapps/appl/frm +/u02/app/ebs/vis/fs1/EBSapps/appl/fte /u02/app/ebs/visCopy/fs1/EBSapps/appl/fte +/u02/app/ebs/vis/fs1/EBSapps/appl/fun /u02/app/ebs/visCopy/fs1/EBSapps/appl/fun +/u02/app/ebs/vis/fs1/EBSapps/appl/fv /u02/app/ebs/visCopy/fs1/EBSapps/appl/fv +/u02/app/ebs/vis/fs1/EBSapps/appl/ghg /u02/app/ebs/visCopy/fs1/EBSapps/appl/ghg +/u02/app/ebs/vis/fs1/EBSapps/appl/ghr /u02/app/ebs/visCopy/fs1/EBSapps/appl/ghr +/u02/app/ebs/vis/fs1/EBSapps/appl/gl /u02/app/ebs/visCopy/fs1/EBSapps/appl/gl +/u02/app/ebs/vis/fs1/EBSapps/appl/gma /u02/app/ebs/visCopy/fs1/EBSapps/appl/gma +/u02/app/ebs/vis/fs1/EBSapps/appl/gmd /u02/app/ebs/visCopy/fs1/EBSapps/appl/gmd +/u02/app/ebs/vis/fs1/EBSapps/appl/gme /u02/app/ebs/visCopy/fs1/EBSapps/appl/gme +/u02/app/ebs/vis/fs1/EBSapps/appl/gmf /u02/app/ebs/visCopy/fs1/EBSapps/appl/gmf +/u02/app/ebs/vis/fs1/EBSapps/appl/gmi /u02/app/ebs/visCopy/fs1/EBSapps/appl/gmi +/u02/app/ebs/vis/fs1/EBSapps/appl/gml /u02/app/ebs/visCopy/fs1/EBSapps/appl/gml +/u02/app/ebs/vis/fs1/EBSapps/appl/gmo /u02/app/ebs/visCopy/fs1/EBSapps/appl/gmo +/u02/app/ebs/vis/fs1/EBSapps/appl/gmp /u02/app/ebs/visCopy/fs1/EBSapps/appl/gmp +/u02/app/ebs/vis/fs1/EBSapps/appl/gms /u02/app/ebs/visCopy/fs1/EBSapps/appl/gms +/u02/app/ebs/vis/fs1/EBSapps/appl/gr /u02/app/ebs/visCopy/fs1/EBSapps/appl/gr +/u02/app/ebs/vis/fs1/EBSapps/appl/hri /u02/app/ebs/visCopy/fs1/EBSapps/appl/hri +/u02/app/ebs/vis/fs1/EBSapps/appl/hxc /u02/app/ebs/visCopy/fs1/EBSapps/appl/hxc +/u02/app/ebs/vis/fs1/EBSapps/appl/hxt /u02/app/ebs/visCopy/fs1/EBSapps/appl/hxt +/u02/app/ebs/vis/fs1/EBSapps/appl/ia /u02/app/ebs/visCopy/fs1/EBSapps/appl/ia +/u02/app/ebs/vis/fs1/EBSapps/appl/ibc /u02/app/ebs/visCopy/fs1/EBSapps/appl/ibc +/u02/app/ebs/vis/fs1/EBSapps/appl/ibe /u02/app/ebs/visCopy/fs1/EBSapps/appl/ibe +/u02/app/ebs/vis/fs1/EBSapps/appl/ibu /u02/app/ebs/visCopy/fs1/EBSapps/appl/ibu +/u02/app/ebs/vis/fs1/EBSapps/appl/ibw /u02/app/ebs/visCopy/fs1/EBSapps/appl/ibw +/u02/app/ebs/vis/fs1/EBSapps/appl/iby /u02/app/ebs/visCopy/fs1/EBSapps/appl/iby +/u02/app/ebs/vis/fs1/EBSapps/appl/icx /u02/app/ebs/visCopy/fs1/EBSapps/appl/icx +/u02/app/ebs/vis/fs1/EBSapps/appl/ieb /u02/app/ebs/visCopy/fs1/EBSapps/appl/ieb +/u02/app/ebs/vis/fs1/EBSapps/appl/iec /u02/app/ebs/visCopy/fs1/EBSapps/appl/iec +/u02/app/ebs/vis/fs1/EBSapps/appl/iem /u02/app/ebs/visCopy/fs1/EBSapps/appl/iem +/u02/app/ebs/vis/fs1/EBSapps/appl/ieo /u02/app/ebs/visCopy/fs1/EBSapps/appl/ieo +/u02/app/ebs/vis/fs1/EBSapps/appl/ies /u02/app/ebs/visCopy/fs1/EBSapps/appl/ies +/u02/app/ebs/vis/fs1/EBSapps/appl/ieu /u02/app/ebs/visCopy/fs1/EBSapps/appl/ieu +/u02/app/ebs/vis/fs1/EBSapps/appl/iex /u02/app/ebs/visCopy/fs1/EBSapps/appl/iex +/u02/app/ebs/vis/fs1/EBSapps/appl/igc /u02/app/ebs/visCopy/fs1/EBSapps/appl/igc +/u02/app/ebs/vis/fs1/EBSapps/appl/igi /u02/app/ebs/visCopy/fs1/EBSapps/appl/igi +/u02/app/ebs/vis/fs1/EBSapps/appl/imc /u02/app/ebs/visCopy/fs1/EBSapps/appl/imc +/u02/app/ebs/vis/fs1/EBSapps/appl/inl /u02/app/ebs/visCopy/fs1/EBSapps/appl/inl +/u02/app/ebs/vis/fs1/EBSapps/appl/inv /u02/app/ebs/visCopy/fs1/EBSapps/appl/inv +/u02/app/ebs/vis/fs1/EBSapps/appl/ipa /u02/app/ebs/visCopy/fs1/EBSapps/appl/ipa +/u02/app/ebs/vis/fs1/EBSapps/appl/ipm /u02/app/ebs/visCopy/fs1/EBSapps/appl/ipm +/u02/app/ebs/vis/fs1/EBSapps/appl/irc /u02/app/ebs/visCopy/fs1/EBSapps/appl/irc +/u02/app/ebs/vis/fs1/EBSapps/appl/itg /u02/app/ebs/visCopy/fs1/EBSapps/appl/itg +/u02/app/ebs/vis/fs1/EBSapps/appl/izu /u02/app/ebs/visCopy/fs1/EBSapps/appl/izu +/u02/app/ebs/vis/fs1/EBSapps/appl/ja /u02/app/ebs/visCopy/fs1/EBSapps/appl/ja +/u02/app/ebs/vis/fs1/EBSapps/appl/je /u02/app/ebs/visCopy/fs1/EBSapps/appl/je +/u02/app/ebs/vis/fs1/EBSapps/appl/jg /u02/app/ebs/visCopy/fs1/EBSapps/appl/jg +/u02/app/ebs/vis/fs1/EBSapps/appl/jl /u02/app/ebs/visCopy/fs1/EBSapps/appl/jl +/u02/app/ebs/vis/fs1/EBSapps/appl/jmf /u02/app/ebs/visCopy/fs1/EBSapps/appl/jmf +/u02/app/ebs/vis/fs1/EBSapps/appl/jtf /u02/app/ebs/visCopy/fs1/EBSapps/appl/jtf +/u02/app/ebs/vis/fs1/EBSapps/appl/jtm /u02/app/ebs/visCopy/fs1/EBSapps/appl/jtm +/u02/app/ebs/vis/fs1/EBSapps/appl/lns /u02/app/ebs/visCopy/fs1/EBSapps/appl/lns +/u02/app/ebs/vis/fs1/EBSapps/appl/mfg /u02/app/ebs/visCopy/fs1/EBSapps/appl/mfg +/u02/app/ebs/vis/fs1/EBSapps/appl/mrp /u02/app/ebs/visCopy/fs1/EBSapps/appl/mrp +/u02/app/ebs/vis/fs1/EBSapps/appl/msc /u02/app/ebs/visCopy/fs1/EBSapps/appl/msc +/u02/app/ebs/vis/fs1/EBSapps/appl/msd /u02/app/ebs/visCopy/fs1/EBSapps/appl/msd +/u02/app/ebs/vis/fs1/EBSapps/appl/mso /u02/app/ebs/visCopy/fs1/EBSapps/appl/mso +/u02/app/ebs/vis/fs1/EBSapps/appl/msr /u02/app/ebs/visCopy/fs1/EBSapps/appl/msr +/u02/app/ebs/vis/fs1/EBSapps/appl/mth /u02/app/ebs/visCopy/fs1/EBSapps/appl/mth +/u02/app/ebs/vis/fs1/EBSapps/appl/mwa /u02/app/ebs/visCopy/fs1/EBSapps/appl/mwa +/u02/app/ebs/vis/fs1/EBSapps/appl/oe /u02/app/ebs/visCopy/fs1/EBSapps/appl/oe +/u02/app/ebs/vis/fs1/EBSapps/appl/okc /u02/app/ebs/visCopy/fs1/EBSapps/appl/okc +/u02/app/ebs/vis/fs1/EBSapps/appl/oke /u02/app/ebs/visCopy/fs1/EBSapps/appl/oke +/u02/app/ebs/vis/fs1/EBSapps/appl/okl /u02/app/ebs/visCopy/fs1/EBSapps/appl/okl +/u02/app/ebs/vis/fs1/EBSapps/appl/oks /u02/app/ebs/visCopy/fs1/EBSapps/appl/oks +/u02/app/ebs/vis/fs1/EBSapps/appl/okx /u02/app/ebs/visCopy/fs1/EBSapps/appl/okx +/u02/app/ebs/vis/fs1/EBSapps/appl/ont /u02/app/ebs/visCopy/fs1/EBSapps/appl/ont +/u02/app/ebs/vis/fs1/EBSapps/appl/opi /u02/app/ebs/visCopy/fs1/EBSapps/appl/opi +/u02/app/ebs/vis/fs1/EBSapps/appl/ota /u02/app/ebs/visCopy/fs1/EBSapps/appl/ota +/u02/app/ebs/vis/fs1/EBSapps/appl/ozf /u02/app/ebs/visCopy/fs1/EBSapps/appl/ozf +/u02/app/ebs/vis/fs1/EBSapps/appl/pa /u02/app/ebs/visCopy/fs1/EBSapps/appl/pa +/u02/app/ebs/vis/fs1/EBSapps/appl/pay /u02/app/ebs/visCopy/fs1/EBSapps/appl/pay +/u02/app/ebs/vis/fs1/EBSapps/appl/per /u02/app/ebs/visCopy/fs1/EBSapps/appl/per +/u02/app/ebs/vis/fs1/EBSapps/appl/pji /u02/app/ebs/visCopy/fs1/EBSapps/appl/pji +/u02/app/ebs/vis/fs1/EBSapps/appl/pjm /u02/app/ebs/visCopy/fs1/EBSapps/appl/pjm +/u02/app/ebs/vis/fs1/EBSapps/appl/pmi /u02/app/ebs/visCopy/fs1/EBSapps/appl/pmi +/u02/app/ebs/vis/fs1/EBSapps/appl/pn /u02/app/ebs/visCopy/fs1/EBSapps/appl/pn +/u02/app/ebs/vis/fs1/EBSapps/appl/po /u02/app/ebs/visCopy/fs1/EBSapps/appl/po +/u02/app/ebs/vis/fs1/EBSapps/appl/pom /u02/app/ebs/visCopy/fs1/EBSapps/appl/pom +/u02/app/ebs/vis/fs1/EBSapps/appl/pon /u02/app/ebs/visCopy/fs1/EBSapps/appl/pon +/u02/app/ebs/vis/fs1/EBSapps/appl/pos /u02/app/ebs/visCopy/fs1/EBSapps/appl/pos +/u02/app/ebs/vis/fs1/EBSapps/appl/pqh /u02/app/ebs/visCopy/fs1/EBSapps/appl/pqh +/u02/app/ebs/vis/fs1/EBSapps/appl/pqp /u02/app/ebs/visCopy/fs1/EBSapps/appl/pqp +/u02/app/ebs/vis/fs1/EBSapps/appl/prp /u02/app/ebs/visCopy/fs1/EBSapps/appl/prp +/u02/app/ebs/vis/fs1/EBSapps/appl/psa /u02/app/ebs/visCopy/fs1/EBSapps/appl/psa +/u02/app/ebs/vis/fs1/EBSapps/appl/psp /u02/app/ebs/visCopy/fs1/EBSapps/appl/psp +/u02/app/ebs/vis/fs1/EBSapps/appl/pv /u02/app/ebs/visCopy/fs1/EBSapps/appl/pv +/u02/app/ebs/vis/fs1/EBSapps/appl/qa /u02/app/ebs/visCopy/fs1/EBSapps/appl/qa +/u02/app/ebs/vis/fs1/EBSapps/appl/qot /u02/app/ebs/visCopy/fs1/EBSapps/appl/qot +/u02/app/ebs/vis/fs1/EBSapps/appl/qp /u02/app/ebs/visCopy/fs1/EBSapps/appl/qp +/u02/app/ebs/vis/fs1/EBSapps/appl/qpr /u02/app/ebs/visCopy/fs1/EBSapps/appl/qpr +/u02/app/ebs/vis/fs1/EBSapps/appl/qrm /u02/app/ebs/visCopy/fs1/EBSapps/appl/qrm +/u02/app/ebs/vis/fs1/EBSapps/appl/rg /u02/app/ebs/visCopy/fs1/EBSapps/appl/rg +/u02/app/ebs/vis/fs1/EBSapps/appl/rlm /u02/app/ebs/visCopy/fs1/EBSapps/appl/rlm +/u02/app/ebs/vis/fs1/EBSapps/appl/rrs /u02/app/ebs/visCopy/fs1/EBSapps/appl/rrs +/u02/app/ebs/vis/fs1/EBSapps/appl/sht /u02/app/ebs/visCopy/fs1/EBSapps/appl/sht +/u02/app/ebs/vis/fs1/EBSapps/appl/ssp /u02/app/ebs/visCopy/fs1/EBSapps/appl/ssp +/u02/app/ebs/vis/fs1/EBSapps/appl/vea /u02/app/ebs/visCopy/fs1/EBSapps/appl/vea +/u02/app/ebs/vis/fs1/EBSapps/appl/wip /u02/app/ebs/visCopy/fs1/EBSapps/appl/wip +/u02/app/ebs/vis/fs1/EBSapps/appl/wms /u02/app/ebs/visCopy/fs1/EBSapps/appl/wms +/u02/app/ebs/vis/fs1/EBSapps/appl/wps /u02/app/ebs/visCopy/fs1/EBSapps/appl/wps +/u02/app/ebs/vis/fs1/EBSapps/appl/wsh /u02/app/ebs/visCopy/fs1/EBSapps/appl/wsh +/u02/app/ebs/vis/fs1/EBSapps/appl/wsm /u02/app/ebs/visCopy/fs1/EBSapps/appl/wsm +/u02/app/ebs/vis/fs1/EBSapps/appl/xdo /u02/app/ebs/visCopy/fs1/EBSapps/appl/xdo +/u02/app/ebs/vis/fs1/EBSapps/appl/xdp /u02/app/ebs/visCopy/fs1/EBSapps/appl/xdp +/u02/app/ebs/vis/fs1/EBSapps/appl/xla /u02/app/ebs/visCopy/fs1/EBSapps/appl/xla +/u02/app/ebs/vis/fs1/EBSapps/appl/xle /u02/app/ebs/visCopy/fs1/EBSapps/appl/xle +/u02/app/ebs/vis/fs1/EBSapps/appl/xnb /u02/app/ebs/visCopy/fs1/EBSapps/appl/xnb +/u02/app/ebs/vis/fs1/EBSapps/appl/xnp /u02/app/ebs/visCopy/fs1/EBSapps/appl/xnp +/u02/app/ebs/vis/fs1/EBSapps/appl/xtr /u02/app/ebs/visCopy/fs1/EBSapps/appl/xtr +/u02/app/ebs/vis/fs1/EBSapps/appl/yms /u02/app/ebs/visCopy/fs1/EBSapps/appl/yms +/u02/app/ebs/vis/fs1/EBSapps/appl/zx /u02/app/ebs/visCopy/fs1/EBSapps/appl/zx +/u02/app/ebs/vis/fs2/EBSapps/10.1.2 /u02/app/ebs/visCopy/fs2/EBSapps/10.1.2 +/u02/app/ebs/vis/fs2/EBSapps/comn/admin /u02/app/ebs/visCopy/fs2/EBSapps/comn/admin +/u02/app/ebs/vis/fs2/EBSapps/comn/shared-libs /u02/app/ebs/visCopy/fs2/EBSapps/comn/shared-libs +/u02/app/ebs/vis/fs2/EBSapps/comn/temp /u02/app/ebs/visCopy/fs2/EBSapps/comn/temp +/u02/app/ebs/vis/fs2/EBSapps/comn/util /u02/app/ebs/visCopy/fs2/EBSapps/comn/util +/u02/app/ebs/vis/fs2/EBSapps/comn/webapps /u02/app/ebs/visCopy/fs2/EBSapps/comn/webapps +/u02/app/ebs/vis/fs2/EBSapps/appl/ad /u02/app/ebs/visCopy/fs2/EBSapps/appl/ad +/u02/app/ebs/vis/fs2/EBSapps/appl/admin /u02/app/ebs/visCopy/fs2/EBSapps/appl/admin +/u02/app/ebs/vis/fs2/EBSapps/appl/ahl /u02/app/ebs/visCopy/fs2/EBSapps/appl/ahl +/u02/app/ebs/vis/fs2/EBSapps/appl/ak /u02/app/ebs/visCopy/fs2/EBSapps/appl/ak +/u02/app/ebs/vis/fs2/EBSapps/appl/alr /u02/app/ebs/visCopy/fs2/EBSapps/appl/alr +/u02/app/ebs/vis/fs2/EBSapps/appl/ame /u02/app/ebs/visCopy/fs2/EBSapps/appl/ame +/u02/app/ebs/vis/fs2/EBSapps/appl/ams /u02/app/ebs/visCopy/fs2/EBSapps/appl/ams +/u02/app/ebs/vis/fs2/EBSapps/appl/amv /u02/app/ebs/visCopy/fs2/EBSapps/appl/amv +/u02/app/ebs/vis/fs2/EBSapps/appl/ap /u02/app/ebs/visCopy/fs2/EBSapps/appl/ap +/u02/app/ebs/vis/fs2/EBSapps/appl/ar /u02/app/ebs/visCopy/fs2/EBSapps/appl/ar +/u02/app/ebs/vis/fs2/EBSapps/appl/as /u02/app/ebs/visCopy/fs2/EBSapps/appl/as +/u02/app/ebs/vis/fs2/EBSapps/appl/asf /u02/app/ebs/visCopy/fs2/EBSapps/appl/asf +/u02/app/ebs/vis/fs2/EBSapps/appl/asg /u02/app/ebs/visCopy/fs2/EBSapps/appl/asg +/u02/app/ebs/vis/fs2/EBSapps/appl/asl /u02/app/ebs/visCopy/fs2/EBSapps/appl/asl +/u02/app/ebs/vis/fs2/EBSapps/appl/asn /u02/app/ebs/visCopy/fs2/EBSapps/appl/asn +/u02/app/ebs/vis/fs2/EBSapps/appl/aso /u02/app/ebs/visCopy/fs2/EBSapps/appl/aso +/u02/app/ebs/vis/fs2/EBSapps/appl/asp /u02/app/ebs/visCopy/fs2/EBSapps/appl/asp +/u02/app/ebs/vis/fs2/EBSapps/appl/ast /u02/app/ebs/visCopy/fs2/EBSapps/appl/ast +/u02/app/ebs/vis/fs2/EBSapps/appl/au /u02/app/ebs/visCopy/fs2/EBSapps/appl/au +/u02/app/ebs/vis/fs2/EBSapps/appl/ax /u02/app/ebs/visCopy/fs2/EBSapps/appl/ax +/u02/app/ebs/vis/fs2/EBSapps/appl/az /u02/app/ebs/visCopy/fs2/EBSapps/appl/az +/u02/app/ebs/vis/fs2/EBSapps/appl/ben /u02/app/ebs/visCopy/fs2/EBSapps/appl/ben +/u02/app/ebs/vis/fs2/EBSapps/appl/bic /u02/app/ebs/visCopy/fs2/EBSapps/appl/bic +/u02/app/ebs/vis/fs2/EBSapps/appl/bim /u02/app/ebs/visCopy/fs2/EBSapps/appl/bim +/u02/app/ebs/vis/fs2/EBSapps/appl/bis /u02/app/ebs/visCopy/fs2/EBSapps/appl/bis +/u02/app/ebs/vis/fs2/EBSapps/appl/bne /u02/app/ebs/visCopy/fs2/EBSapps/appl/bne +/u02/app/ebs/vis/fs2/EBSapps/appl/bom /u02/app/ebs/visCopy/fs2/EBSapps/appl/bom +/u02/app/ebs/vis/fs2/EBSapps/appl/cct /u02/app/ebs/visCopy/fs2/EBSapps/appl/cct +/u02/app/ebs/vis/fs2/EBSapps/appl/ce /u02/app/ebs/visCopy/fs2/EBSapps/appl/ce +/u02/app/ebs/vis/fs2/EBSapps/appl/chv /u02/app/ebs/visCopy/fs2/EBSapps/appl/chv +/u02/app/ebs/vis/fs2/EBSapps/appl/cln /u02/app/ebs/visCopy/fs2/EBSapps/appl/cln +/u02/app/ebs/vis/fs2/EBSapps/appl/cmi /u02/app/ebs/visCopy/fs2/EBSapps/appl/cmi +/u02/app/ebs/vis/fs2/EBSapps/appl/cn /u02/app/ebs/visCopy/fs2/EBSapps/appl/cn +/u02/app/ebs/vis/fs2/EBSapps/appl/crp /u02/app/ebs/visCopy/fs2/EBSapps/appl/crp +/u02/app/ebs/vis/fs2/EBSapps/appl/cs /u02/app/ebs/visCopy/fs2/EBSapps/appl/cs +/u02/app/ebs/vis/fs2/EBSapps/appl/csc /u02/app/ebs/visCopy/fs2/EBSapps/appl/csc +/u02/app/ebs/vis/fs2/EBSapps/appl/csd /u02/app/ebs/visCopy/fs2/EBSapps/appl/csd +/u02/app/ebs/vis/fs2/EBSapps/appl/cse /u02/app/ebs/visCopy/fs2/EBSapps/appl/cse +/u02/app/ebs/vis/fs2/EBSapps/appl/csf /u02/app/ebs/visCopy/fs2/EBSapps/appl/csf +/u02/app/ebs/vis/fs2/EBSapps/appl/csi /u02/app/ebs/visCopy/fs2/EBSapps/appl/csi +/u02/app/ebs/vis/fs2/EBSapps/appl/csl /u02/app/ebs/visCopy/fs2/EBSapps/appl/csl +/u02/app/ebs/vis/fs2/EBSapps/appl/csm /u02/app/ebs/visCopy/fs2/EBSapps/appl/csm +/u02/app/ebs/vis/fs2/EBSapps/appl/csp /u02/app/ebs/visCopy/fs2/EBSapps/appl/csp +/u02/app/ebs/vis/fs2/EBSapps/appl/csr /u02/app/ebs/visCopy/fs2/EBSapps/appl/csr +/u02/app/ebs/vis/fs2/EBSapps/appl/cua /u02/app/ebs/visCopy/fs2/EBSapps/appl/cua +/u02/app/ebs/vis/fs2/EBSapps/appl/cug /u02/app/ebs/visCopy/fs2/EBSapps/appl/cug +/u02/app/ebs/vis/fs2/EBSapps/appl/cz /u02/app/ebs/visCopy/fs2/EBSapps/appl/cz +/u02/app/ebs/vis/fs2/EBSapps/appl/ddr /u02/app/ebs/visCopy/fs2/EBSapps/appl/ddr +/u02/app/ebs/vis/fs2/EBSapps/appl/dna /u02/app/ebs/visCopy/fs2/EBSapps/appl/dna +/u02/app/ebs/vis/fs2/EBSapps/appl/dom /u02/app/ebs/visCopy/fs2/EBSapps/appl/dom +/u02/app/ebs/vis/fs2/EBSapps/appl/dpp /u02/app/ebs/visCopy/fs2/EBSapps/appl/dpp +/u02/app/ebs/vis/fs2/EBSapps/appl/dt /u02/app/ebs/visCopy/fs2/EBSapps/appl/dt +/u02/app/ebs/vis/fs2/EBSapps/appl/eam /u02/app/ebs/visCopy/fs2/EBSapps/appl/eam +/u02/app/ebs/vis/fs2/EBSapps/appl/ebi /u02/app/ebs/visCopy/fs2/EBSapps/appl/ebi +/u02/app/ebs/vis/fs2/EBSapps/appl/ec /u02/app/ebs/visCopy/fs2/EBSapps/appl/ec +/u02/app/ebs/vis/fs2/EBSapps/appl/ecx /u02/app/ebs/visCopy/fs2/EBSapps/appl/ecx +/u02/app/ebs/vis/fs2/EBSapps/appl/edr /u02/app/ebs/visCopy/fs2/EBSapps/appl/edr +/u02/app/ebs/vis/fs2/EBSapps/appl/ego /u02/app/ebs/visCopy/fs2/EBSapps/appl/ego +/u02/app/ebs/vis/fs2/EBSapps/appl/eng /u02/app/ebs/visCopy/fs2/EBSapps/appl/eng +/u02/app/ebs/vis/fs2/EBSapps/appl/eni /u02/app/ebs/visCopy/fs2/EBSapps/appl/eni +/u02/app/ebs/vis/fs2/EBSapps/appl/fa /u02/app/ebs/visCopy/fs2/EBSapps/appl/fa +/u02/app/ebs/vis/fs2/EBSapps/appl/ff /u02/app/ebs/visCopy/fs2/EBSapps/appl/ff +/u02/app/ebs/vis/fs2/EBSapps/appl/flm /u02/app/ebs/visCopy/fs2/EBSapps/appl/flm +/u02/app/ebs/vis/fs2/EBSapps/appl/fnd /u02/app/ebs/visCopy/fs2/EBSapps/appl/fnd +/u02/app/ebs/vis/fs2/EBSapps/appl/fpa /u02/app/ebs/visCopy/fs2/EBSapps/appl/fpa +/u02/app/ebs/vis/fs2/EBSapps/appl/frm /u02/app/ebs/visCopy/fs2/EBSapps/appl/frm +/u02/app/ebs/vis/fs2/EBSapps/appl/fte /u02/app/ebs/visCopy/fs2/EBSapps/appl/fte +/u02/app/ebs/vis/fs2/EBSapps/appl/fun /u02/app/ebs/visCopy/fs2/EBSapps/appl/fun +/u02/app/ebs/vis/fs2/EBSapps/appl/fv /u02/app/ebs/visCopy/fs2/EBSapps/appl/fv +/u02/app/ebs/vis/fs2/EBSapps/appl/ghg /u02/app/ebs/visCopy/fs2/EBSapps/appl/ghg +/u02/app/ebs/vis/fs2/EBSapps/appl/ghr /u02/app/ebs/visCopy/fs2/EBSapps/appl/ghr +/u02/app/ebs/vis/fs2/EBSapps/appl/gl /u02/app/ebs/visCopy/fs2/EBSapps/appl/gl +/u02/app/ebs/vis/fs2/EBSapps/appl/gma /u02/app/ebs/visCopy/fs2/EBSapps/appl/gma +/u02/app/ebs/vis/fs2/EBSapps/appl/gmd /u02/app/ebs/visCopy/fs2/EBSapps/appl/gmd +/u02/app/ebs/vis/fs2/EBSapps/appl/gme /u02/app/ebs/visCopy/fs2/EBSapps/appl/gme +/u02/app/ebs/vis/fs2/EBSapps/appl/gmf /u02/app/ebs/visCopy/fs2/EBSapps/appl/gmf +/u02/app/ebs/vis/fs2/EBSapps/appl/gmi /u02/app/ebs/visCopy/fs2/EBSapps/appl/gmi +/u02/app/ebs/vis/fs2/EBSapps/appl/gml /u02/app/ebs/visCopy/fs2/EBSapps/appl/gml +/u02/app/ebs/vis/fs2/EBSapps/appl/gmo /u02/app/ebs/visCopy/fs2/EBSapps/appl/gmo +/u02/app/ebs/vis/fs2/EBSapps/appl/gmp /u02/app/ebs/visCopy/fs2/EBSapps/appl/gmp +/u02/app/ebs/vis/fs2/EBSapps/appl/gms /u02/app/ebs/visCopy/fs2/EBSapps/appl/gms +/u02/app/ebs/vis/fs2/EBSapps/appl/gr /u02/app/ebs/visCopy/fs2/EBSapps/appl/gr +/u02/app/ebs/vis/fs2/EBSapps/appl/hri /u02/app/ebs/visCopy/fs2/EBSapps/appl/hri +/u02/app/ebs/vis/fs2/EBSapps/appl/hxc /u02/app/ebs/visCopy/fs2/EBSapps/appl/hxc +/u02/app/ebs/vis/fs2/EBSapps/appl/hxt /u02/app/ebs/visCopy/fs2/EBSapps/appl/hxt +/u02/app/ebs/vis/fs2/EBSapps/appl/ia /u02/app/ebs/visCopy/fs2/EBSapps/appl/ia +/u02/app/ebs/vis/fs2/EBSapps/appl/ibc /u02/app/ebs/visCopy/fs2/EBSapps/appl/ibc +/u02/app/ebs/vis/fs2/EBSapps/appl/ibe /u02/app/ebs/visCopy/fs2/EBSapps/appl/ibe +/u02/app/ebs/vis/fs2/EBSapps/appl/ibu /u02/app/ebs/visCopy/fs2/EBSapps/appl/ibu +/u02/app/ebs/vis/fs2/EBSapps/appl/ibw /u02/app/ebs/visCopy/fs2/EBSapps/appl/ibw +/u02/app/ebs/vis/fs2/EBSapps/appl/iby /u02/app/ebs/visCopy/fs2/EBSapps/appl/iby +/u02/app/ebs/vis/fs2/EBSapps/appl/icx /u02/app/ebs/visCopy/fs2/EBSapps/appl/icx +/u02/app/ebs/vis/fs2/EBSapps/appl/ieb /u02/app/ebs/visCopy/fs2/EBSapps/appl/ieb +/u02/app/ebs/vis/fs2/EBSapps/appl/iec /u02/app/ebs/visCopy/fs2/EBSapps/appl/iec +/u02/app/ebs/vis/fs2/EBSapps/appl/iem /u02/app/ebs/visCopy/fs2/EBSapps/appl/iem +/u02/app/ebs/vis/fs2/EBSapps/appl/ieo /u02/app/ebs/visCopy/fs2/EBSapps/appl/ieo +/u02/app/ebs/vis/fs2/EBSapps/appl/ies /u02/app/ebs/visCopy/fs2/EBSapps/appl/ies +/u02/app/ebs/vis/fs2/EBSapps/appl/ieu /u02/app/ebs/visCopy/fs2/EBSapps/appl/ieu +/u02/app/ebs/vis/fs2/EBSapps/appl/iex /u02/app/ebs/visCopy/fs2/EBSapps/appl/iex +/u02/app/ebs/vis/fs2/EBSapps/appl/igc /u02/app/ebs/visCopy/fs2/EBSapps/appl/igc +/u02/app/ebs/vis/fs2/EBSapps/appl/igi /u02/app/ebs/visCopy/fs2/EBSapps/appl/igi +/u02/app/ebs/vis/fs2/EBSapps/appl/imc /u02/app/ebs/visCopy/fs2/EBSapps/appl/imc +/u02/app/ebs/vis/fs2/EBSapps/appl/inl /u02/app/ebs/visCopy/fs2/EBSapps/appl/inl +/u02/app/ebs/vis/fs2/EBSapps/appl/inv /u02/app/ebs/visCopy/fs2/EBSapps/appl/inv +/u02/app/ebs/vis/fs2/EBSapps/appl/ipa /u02/app/ebs/visCopy/fs2/EBSapps/appl/ipa +/u02/app/ebs/vis/fs2/EBSapps/appl/ipm /u02/app/ebs/visCopy/fs2/EBSapps/appl/ipm +/u02/app/ebs/vis/fs2/EBSapps/appl/irc /u02/app/ebs/visCopy/fs2/EBSapps/appl/irc +/u02/app/ebs/vis/fs2/EBSapps/appl/itg /u02/app/ebs/visCopy/fs2/EBSapps/appl/itg +/u02/app/ebs/vis/fs2/EBSapps/appl/izu /u02/app/ebs/visCopy/fs2/EBSapps/appl/izu +/u02/app/ebs/vis/fs2/EBSapps/appl/ja /u02/app/ebs/visCopy/fs2/EBSapps/appl/ja +/u02/app/ebs/vis/fs2/EBSapps/appl/je /u02/app/ebs/visCopy/fs2/EBSapps/appl/je +/u02/app/ebs/vis/fs2/EBSapps/appl/jg /u02/app/ebs/visCopy/fs2/EBSapps/appl/jg +/u02/app/ebs/vis/fs2/EBSapps/appl/jl /u02/app/ebs/visCopy/fs2/EBSapps/appl/jl +/u02/app/ebs/vis/fs2/EBSapps/appl/jmf /u02/app/ebs/visCopy/fs2/EBSapps/appl/jmf +/u02/app/ebs/vis/fs2/EBSapps/appl/jtf /u02/app/ebs/visCopy/fs2/EBSapps/appl/jtf +/u02/app/ebs/vis/fs2/EBSapps/appl/jtm /u02/app/ebs/visCopy/fs2/EBSapps/appl/jtm +/u02/app/ebs/vis/fs2/EBSapps/appl/lns /u02/app/ebs/visCopy/fs2/EBSapps/appl/lns +/u02/app/ebs/vis/fs2/EBSapps/appl/mfg /u02/app/ebs/visCopy/fs2/EBSapps/appl/mfg +/u02/app/ebs/vis/fs2/EBSapps/appl/mrp /u02/app/ebs/visCopy/fs2/EBSapps/appl/mrp +/u02/app/ebs/vis/fs2/EBSapps/appl/msc /u02/app/ebs/visCopy/fs2/EBSapps/appl/msc +/u02/app/ebs/vis/fs2/EBSapps/appl/msd /u02/app/ebs/visCopy/fs2/EBSapps/appl/msd +/u02/app/ebs/vis/fs2/EBSapps/appl/mso /u02/app/ebs/visCopy/fs2/EBSapps/appl/mso +/u02/app/ebs/vis/fs2/EBSapps/appl/msr /u02/app/ebs/visCopy/fs2/EBSapps/appl/msr +/u02/app/ebs/vis/fs2/EBSapps/appl/mth /u02/app/ebs/visCopy/fs2/EBSapps/appl/mth +/u02/app/ebs/vis/fs2/EBSapps/appl/mwa /u02/app/ebs/visCopy/fs2/EBSapps/appl/mwa +/u02/app/ebs/vis/fs2/EBSapps/appl/oe /u02/app/ebs/visCopy/fs2/EBSapps/appl/oe +/u02/app/ebs/vis/fs2/EBSapps/appl/okc /u02/app/ebs/visCopy/fs2/EBSapps/appl/okc +/u02/app/ebs/vis/fs2/EBSapps/appl/oke /u02/app/ebs/visCopy/fs2/EBSapps/appl/oke +/u02/app/ebs/vis/fs2/EBSapps/appl/okl /u02/app/ebs/visCopy/fs2/EBSapps/appl/okl +/u02/app/ebs/vis/fs2/EBSapps/appl/oks /u02/app/ebs/visCopy/fs2/EBSapps/appl/oks +/u02/app/ebs/vis/fs2/EBSapps/appl/okx /u02/app/ebs/visCopy/fs2/EBSapps/appl/okx +/u02/app/ebs/vis/fs2/EBSapps/appl/ont /u02/app/ebs/visCopy/fs2/EBSapps/appl/ont +/u02/app/ebs/vis/fs2/EBSapps/appl/opi /u02/app/ebs/visCopy/fs2/EBSapps/appl/opi +/u02/app/ebs/vis/fs2/EBSapps/appl/ota /u02/app/ebs/visCopy/fs2/EBSapps/appl/ota +/u02/app/ebs/vis/fs2/EBSapps/appl/ozf /u02/app/ebs/visCopy/fs2/EBSapps/appl/ozf +/u02/app/ebs/vis/fs2/EBSapps/appl/pa /u02/app/ebs/visCopy/fs2/EBSapps/appl/pa +/u02/app/ebs/vis/fs2/EBSapps/appl/pay /u02/app/ebs/visCopy/fs2/EBSapps/appl/pay +/u02/app/ebs/vis/fs2/EBSapps/appl/per /u02/app/ebs/visCopy/fs2/EBSapps/appl/per +/u02/app/ebs/vis/fs2/EBSapps/appl/pji /u02/app/ebs/visCopy/fs2/EBSapps/appl/pji +/u02/app/ebs/vis/fs2/EBSapps/appl/pjm /u02/app/ebs/visCopy/fs2/EBSapps/appl/pjm +/u02/app/ebs/vis/fs2/EBSapps/appl/pmi /u02/app/ebs/visCopy/fs2/EBSapps/appl/pmi +/u02/app/ebs/vis/fs2/EBSapps/appl/pn /u02/app/ebs/visCopy/fs2/EBSapps/appl/pn +/u02/app/ebs/vis/fs2/EBSapps/appl/po /u02/app/ebs/visCopy/fs2/EBSapps/appl/po +/u02/app/ebs/vis/fs2/EBSapps/appl/pom /u02/app/ebs/visCopy/fs2/EBSapps/appl/pom +/u02/app/ebs/vis/fs2/EBSapps/appl/pon /u02/app/ebs/visCopy/fs2/EBSapps/appl/pon +/u02/app/ebs/vis/fs2/EBSapps/appl/pos /u02/app/ebs/visCopy/fs2/EBSapps/appl/pos +/u02/app/ebs/vis/fs2/EBSapps/appl/pqh /u02/app/ebs/visCopy/fs2/EBSapps/appl/pqh +/u02/app/ebs/vis/fs2/EBSapps/appl/pqp /u02/app/ebs/visCopy/fs2/EBSapps/appl/pqp +/u02/app/ebs/vis/fs2/EBSapps/appl/prp /u02/app/ebs/visCopy/fs2/EBSapps/appl/prp +/u02/app/ebs/vis/fs2/EBSapps/appl/psa /u02/app/ebs/visCopy/fs2/EBSapps/appl/psa +/u02/app/ebs/vis/fs2/EBSapps/appl/psp /u02/app/ebs/visCopy/fs2/EBSapps/appl/psp +/u02/app/ebs/vis/fs2/EBSapps/appl/pv /u02/app/ebs/visCopy/fs2/EBSapps/appl/pv +/u02/app/ebs/vis/fs2/EBSapps/appl/qa /u02/app/ebs/visCopy/fs2/EBSapps/appl/qa +/u02/app/ebs/vis/fs2/EBSapps/appl/qot /u02/app/ebs/visCopy/fs2/EBSapps/appl/qot +/u02/app/ebs/vis/fs2/EBSapps/appl/qp /u02/app/ebs/visCopy/fs2/EBSapps/appl/qp +/u02/app/ebs/vis/fs2/EBSapps/appl/qpr /u02/app/ebs/visCopy/fs2/EBSapps/appl/qpr +/u02/app/ebs/vis/fs2/EBSapps/appl/qrm /u02/app/ebs/visCopy/fs2/EBSapps/appl/qrm +/u02/app/ebs/vis/fs2/EBSapps/appl/rg /u02/app/ebs/visCopy/fs2/EBSapps/appl/rg +/u02/app/ebs/vis/fs2/EBSapps/appl/rlm /u02/app/ebs/visCopy/fs2/EBSapps/appl/rlm +/u02/app/ebs/vis/fs2/EBSapps/appl/rrs /u02/app/ebs/visCopy/fs2/EBSapps/appl/rrs +/u02/app/ebs/vis/fs2/EBSapps/appl/sht /u02/app/ebs/visCopy/fs2/EBSapps/appl/sht +/u02/app/ebs/vis/fs2/EBSapps/appl/ssp /u02/app/ebs/visCopy/fs2/EBSapps/appl/ssp +/u02/app/ebs/vis/fs2/EBSapps/appl/vea /u02/app/ebs/visCopy/fs2/EBSapps/appl/vea +/u02/app/ebs/vis/fs2/EBSapps/appl/wip /u02/app/ebs/visCopy/fs2/EBSapps/appl/wip +/u02/app/ebs/vis/fs2/EBSapps/appl/wms /u02/app/ebs/visCopy/fs2/EBSapps/appl/wms +/u02/app/ebs/vis/fs2/EBSapps/appl/wps /u02/app/ebs/visCopy/fs2/EBSapps/appl/wps +/u02/app/ebs/vis/fs2/EBSapps/appl/wsh /u02/app/ebs/visCopy/fs2/EBSapps/appl/wsh +/u02/app/ebs/vis/fs2/EBSapps/appl/wsm /u02/app/ebs/visCopy/fs2/EBSapps/appl/wsm +/u02/app/ebs/vis/fs2/EBSapps/appl/xdo /u02/app/ebs/visCopy/fs2/EBSapps/appl/xdo +/u02/app/ebs/vis/fs2/EBSapps/appl/xdp /u02/app/ebs/visCopy/fs2/EBSapps/appl/xdp +/u02/app/ebs/vis/fs2/EBSapps/appl/xla /u02/app/ebs/visCopy/fs2/EBSapps/appl/xla +/u02/app/ebs/vis/fs2/EBSapps/appl/xle /u02/app/ebs/visCopy/fs2/EBSapps/appl/xle +/u02/app/ebs/vis/fs2/EBSapps/appl/xnb /u02/app/ebs/visCopy/fs2/EBSapps/appl/xnb +/u02/app/ebs/vis/fs2/EBSapps/appl/xnp /u02/app/ebs/visCopy/fs2/EBSapps/appl/xnp +/u02/app/ebs/vis/fs2/EBSapps/appl/xtr /u02/app/ebs/visCopy/fs2/EBSapps/appl/xtr +/u02/app/ebs/vis/fs2/EBSapps/appl/yms /u02/app/ebs/visCopy/fs2/EBSapps/appl/yms +/u02/app/ebs/vis/fs2/EBSapps/appl/zx /u02/app/ebs/visCopy/fs2/EBSapps/appl/zx diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/staticExcludeFiles.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/staticExcludeFiles.txt new file mode 100644 index 0000000..1c611c6 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/staticExcludeFiles.txt @@ -0,0 +1,16 @@ +# Files to exclude from directories being copied +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +/u02/app/ebs/vis/fs1/inst/apps/VISPRD_ebsapp1/ora/10.1.2/network/admin +/u02/app/ebs/vis/fs2/inst/apps/VISPRD_ebsapp2/ora/10.1.2/network/admin +/u02/app/ebs/vis/EBSapps.env +/u02/app/ebs/vis/fs1/EBSapps/appl/APPSVIS_ebsapp1.env +/u02/app/ebs/vis/fs1/EBSapps/appl/APPSVIS_ebsapp2.env +/u02/app/ebs/vis/fs1/EBSapps/appl/VIS_ebsapp1.env +/u02/app/ebs/vis/fs1/EBSapps/appl/VIS_ebsapp2.env +/u02/app/ebs/vis/fs2/EBSapps/appl/APPSVIS_ebsapp1.env +/u02/app/ebs/vis/fs2/EBSapps/appl/APPSVIS_ebsapp2.env +/u02/app/ebs/vis/fs2/EBSapps/appl/VIS_ebsapp1.env +/u02/app/ebs/vis/fs2/EBSapps/appl/VIS_ebsapp2.env diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/staticIncludeFiles.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/staticIncludeFiles.txt new file mode 100644 index 0000000..1cbbeda --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/staticIncludeFiles.txt @@ -0,0 +1,7 @@ +# Files to copy that aren't inside a directory being copied +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +/u02/app/ebs/vis/fs1/EBSapps/comn/exclude.xml /u02/app/ebs/visCopy/fs1/EBSapps/comn/exclude.xml +/u02/app/ebs/vis/fs2/EBSapps/comn/exclude.xml /u02/app/ebs/visCopy/fs2/EBSapps/comn/exclude.xml diff --git a/apps-unlimited/EBSR12.2onOCI/Database/stdfuncs.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/stdfuncs.sh similarity index 59% rename from apps-unlimited/EBSR12.2onOCI/Database/stdfuncs.sh rename to apps-unlimited/EBSR12.2onOCI/AppTier/stdfuncs.sh index 4a214ad..17cca53 100644 --- a/apps-unlimited/EBSR12.2onOCI/Database/stdfuncs.sh +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/stdfuncs.sh @@ -1,66 +1,63 @@ ############################################################################# -# std_funcs.sh -# Collection of standard functions. +# stdfuncs.sh +# Collection of standard functions +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ # # Rev: -# 8/13/24 MPratt Updated for simple cloud tooling -# 7/19/99 MPratt added GetLogon -# 1/17/96 MPratt added MultiThread and CkRun -# 8/23/95 MPratt created +# 05/27/25 Added check for error messages on login, adjusted CkRunDB +# 10/01/24 added CkRunDB +# 9/27/24 Updated for today's ksh, cloud tooling +# 7/19/99 added GetLogon +# 1/17/96 added MultiThread and CkRun +# 8/23/95 created ############################################################################# # GetLogon: # Get the password for the user secret name passed in. Set the variable # LOGON. In the calling routine, set the intended password variable. # ############################################################################# - GetLogon() { +if [ $# = 0 ]; then + LogMsg "No user specified" + exit 1 +fi + uname=$1 SECRET_OCID=$(oci vault secret list -c $COMPARTMENT_OCID --raw-output --query "data[?\"secret-name\" == '$uname'].id | [0]") +if [ ${#SECRET_OCID} = 0 ]; then + LogMsg "User ${uname} not set up" + exit 1 +fi + LOGON=$(oci secrets secret-bundle get --raw-output --secret-id $SECRET_OCID --query "data.\"secret-bundle-content\".content" | base64 -d ) -if [ $? != 0 ]; then - LogMsg "GetLogon: Failed." - LogMsg "Compartment: $COMPARTMENT_OCID" - LogMsg "User name: $uname" +if [ ${#LOGON} = 0 ]; then + LogMsg "No password found for uesr ${uname}" exit 1 fi + } ############################################################################# # EnvSetup: # Set up the unix and oracle environment as needed... # -# Do we need this? Hohw should it be adjusted for modern era? +# Do we need this? How should it be adjusted for modern era? # Removed export of ORAENV_ASK=NO # ############################################################################# - EnvSetup() { # set TS to the timestamp. Used to create the output directory for the run. TS=`date +"%Y%m%d_%H%M%S"` +myPID=`echo $$` +HostName=$(hostname) -# Set up the oracle environment. -# ORAENV_ASK=NO; . oraenv -} - -############################################################################# -# GetDbName -# Get the database name for this oracle sid -# -# Input: None -# Output: Sets DbName variable -# Return: None -############################################################################# - -GetDbName() -{ - sql="select name from v\$database;" - DbName=`ExecSql "${sql}"` } ############################################################################# @@ -71,7 +68,6 @@ GetDbName() # Output: None, but the coroutine stays up and running # Return: exits if error is detected. ############################################################################# - LaunchCoroutine() { uname=$1 @@ -91,13 +87,26 @@ fi # Verify the Oracle connection sqlplus -silent <$TMP_FILE 2>&1 -$cxString +${cxString} ! -if [ $? != 0 ]; then +# Check for success: +if [ $? -ne 0 ]; then LogMsg "LaunchCoroutine: Unable to connect to Oracle." LogMsg "LaunchCoroutine: Verify password, state of database" - cat $TMP_FILE | LogMsg + cat $TMP_FILE | LogMsg + exit 1 +fi + +# sqlplus might have exited with a return code of 0, but there still may be a login error +# such as ORA-12514. These will be in the TMP_FILE. +rc=`grep -i "ERROR|ORA-|SP2-" $TMP_FILE | wc -l` +if [ $rc != 0 ]; then + LogMsg "LaunchCoroutine: Received error connecting to Oracle." + LogMsg "Errors can be found in ${TMP_FILE}:" + cat $TMP_FILE | LogMsg +# tmpstr=`cat "${TMP_FILE}" ` +# LogMsg "${tmpstr}" exit 1 fi @@ -123,14 +132,11 @@ while [ "1" ]; do fi done - IFS="$tmp" - rm $TMP_FILE } - ############################################################################# # ExecSql # Send a SQL statement to the sqlplus coroutine; return the result to the @@ -140,7 +146,6 @@ rm $TMP_FILE # Output: result of sql statement # Return: none ############################################################################# - ExecSql () { # send the statement to the coroutine with the "-p" @@ -164,100 +169,112 @@ ExecSql () IFS="$tmp" } - -############################################################################# -# DbConnect -# Connect to a different database. This needs a different routine than -# ExecSql. -# -# Input: connect string -# Output: result of sql statement -# Return: none -############################################################################# - -DbConnect () -{ - -# send the statement to the coroutine with the "-p" - printf -p "$1" - printf -p "select '<-DONE->' from dual;" - - tmp="$IFS" - IFS="" - -# read from the coroutine's output 'til you see <-DONE-> - while [ "1" ]; do - read -p answer - - if [ "$answer" = "<-DONE->" ]; then - printf "$answer" - break - fi - - if [ "$answer" = "ORA-03114: not connected to ORACLE" ]; then - LogMsg "DbConnect: ERROR: $answer" - exit 1 - fi - - if [ "$answer" = "ERROR: ORA-01034: ORACLE not available" ]; then - LogMsg "DbConnect: ERROR: $answer" - exit 1 - fi - - done - - IFS="$tmp" -} - - ############################################################################## +# LogMsg: Echo a message to stdout and the run's log file. +# Usage: LogMsg "message text" # -# Description: Echo a message to stdout and the run's log file. -# -# Usage: LogMsg "message text" -# -# Input: Message text +# Input: Message text # Note: If message text = "-p", then input is read from stdin -# (so you can pipe to this). -# -# Output: Writes the timestamp, host name, database name, and message to -# stdout and to LOG_OUT. Requires LOG_OUT be already defined -# -# Return: None -# +# (so you can pipe to this). +# Output: Writes the timestamp, host name, database name, and message to +# stdout and to LOG_OUT. Requires LOG_OUT be already defined +# Return: None ############################################################################## - LogMsg () { LogMsgTimestamp=`date +"%m%d %T"` # If they are piping the message in to print from a command -# (eg, cat file | LogMsg), this requires resetting the interfield -# separator, After that, we read the message piece by piece from stdin. +# (eg, cat file | LogMsg), need to reset the interfield separator. +# After that, we read the message piece by piece from stdin. if [ "$1" = "-p" ]; then tmp="$IFS" IFS="" while read message do - printf "${LogMsgTimestamp}|${HostName}|${DbName}| $message\n" + printf "${LogMsgTimestamp}|${HostName}|${DbName}|${myPID}| $message\n" if [ ! -z "$LOG_OUT" ]; then - printf "${LogMsgTimestamp}|${HostName}|${DbName}| $message\n" >> $LOG_OUT + printf "${LogMsgTimestamp}|${HostName}|${DbName}|${myPID}| $message\n" >> $LOG_OUT fi done IFS="$tmp" # Not piping anything to the message - just text passed straight in else - printf "${LogMsgTimestamp}|${HostName}|${DbName}| $1\n" + printf "${LogMsgTimestamp}|${HostName}|${DbName}|${myPID} $1\n" if [ ! -z "$LOG_OUT" ]; then - printf "${LogMsgTimestamp}|${HostName}|${DbName}| $1\n" >> $LOG_OUT + printf "${LogMsgTimestamp}|${HostName}|${DbName}|${myPID} $1\n" >> $LOG_OUT fi fi } +############################################################################# +# GetDbName +# Get the database name for this oracle sid +# +# Input: None +# Output: Sets DbName variable +# Return: None +############################################################################# +GetDbName() +{ + sql="select name from v\$database;" + DbName=`ExecSql "${sql}"` +} + +############################################################################## +# CkRunDB +# Monitor running DATABASE processes to see if any are still running. +# To use this, set up a construct inside the database that you can check to +# determine that the required work is complete. A simple example is to insert +# a row in a table for each chunk of work to be done, then to remove the row +# as part of the committed chunk of work. +# +# This process will execute your sql statement built to check for your +# completion criteria. It will return control when your sql statement reports +# the criteria is met. +# +# REQUIRED: set the variable "sql" to the sql statement that will retrieve the +# completion criteria. This query must return null / empty or the value 0 when +# the task is complete. +# +# Input: number of seconds to sleep between checks (required) +# HIDDEN: set the variable $sql to your sql statement as described +# above +# Output: Items matching what you're checking for, sleep time, a dividing line +# Return: Returns control when query returns zero matches +############################################################################## +CkRunDB() +{ +thislong=$1 +LogMsg "CkRunDB: Monitoring for $sql" + +if [ -z "$thislong" -o -z "$sql" ]; then + LogMsg "CkRunDB: ERROR: Insufficient arguments." + LogMsg "CkRunDB: thislong: $thislong" + LogMsg "CkRunDB: sql: $sql" + exit 1 +fi + +while true +do + matches=`ExecSql "${sql}"` + LogMsg "CkRunDB: Matches: $matches" + if [ -z "${matches}" ] || [ "${matches}" == "0" ]; then + LogMsg "CkRunDB: ===================================================================" + LogMsg "Break from CkRunDB" + break; + fi + LogMsg "Sleeping $thislong" + LogMsg "CkRunDB: ===================================================================" + sleep $thislong +done +LogMsg "CkRunDB: Returning control to calling routine." +} + ############################################################################## -# CkRun -# monitor running processes to see if any are still running. +# CkRunOS +# Monitor running Unix processes to see if any are still running. # # Input: 1: Unique thing to check on a ps line (required) # 2: number of seconds to sleep between checks (required) @@ -265,15 +282,15 @@ LogMsg () # Output: None. # Return: Returns control when all monitored processes are complete. ############################################################################## -CkRun() +CkRunOS() { ckit=$1 thislong=$2 silent=$3 -LogMsg "CkRun: Monitoring for $ckit" +LogMsg "CkRunOS: Monitoring for $ckit" if [ "$ckit" = "" ] || [ "$thislong" = "" ]; then - LogMsg: "CkRun: ERROR: Insufficient arguments." + LogMsg: "CkRunOS: ERROR: Insufficient arguments." exit 1 fi @@ -283,19 +300,19 @@ do ps -ef | grep $ckit | grep -v grep | grep -v ckrun fi matches=`ps -ef | grep $ckit | grep $$ | grep -v grep | wc -l` - ts=`date +%m/%d/%y.%H:%M:%S` - printf "$ts: $matches matches" - printf "===================================================================" + LogMsg "CkRunOS: Matches: $matches" + LogMsg "CkRunOS: ===================================================================" if [ $matches = 0 ]; then + LogMsg "Break from CkRunOS" break; fi + LogMsg "CkRunOS: Sleeping $thislong" sleep $thislong done -LogMsg "CkRun: Returning control to calling routine." +LogMsg "CkRunOS: Returning control to calling routine." } - ############################################################################## # MultiThread # Submit multiple tasks in the background. "Mark time" until they are all @@ -310,7 +327,7 @@ LogMsg "CkRun: Returning control to calling routine." # number of running tasks and determine whether or not there are tasks still # running. # -# Possible "gotchas": if you are vi'ing or otherwise accessing something +# Possible "gotcha": if you are vi'ing or otherwise accessing something # which puts your "unique" grep field on the ps command line, this routine # WILL NOT return control to the calling routine! # @@ -319,7 +336,7 @@ LogMsg "CkRun: Returning control to calling routine." # 3: unique part of the command line to "grep" for when determining # how many of these processes are running # 4: number of seconds to sleep between checks for task completion -# 5: verbose mode (yes/no) +# 5: verbose mode (yes/no) -- not used # Output: Your tasks are complete. # Return: exit 1 if incomplete info is provided. ############################################################################## @@ -332,23 +349,23 @@ sleep_time=$4 LogMsg "MultiThread: Starting multi-threaded execution of $tasks." LogMsg "MultiThread: No more than $max_processes will run at once." -LogMsg "MultiThread: Using $differentiator for unique ps search." +LogMsg "MultiThread: Using \"$differentiator\" for unique ps search." # read the tasks from the file. for each one: cat $tasks | while read i do LogMsg "MultiThread: Starting $i" - nohup $i & -# count the number of jobs running already. - matches=`ps -ef | grep $differentiator | grep $$ | grep -v grep | \ - grep -v ckrun | wc -l` -# if the number of jobs running is >= max_processes, fall into this loop. -# otherwise go through the outer loop again to kick off another job. + nohup ${i} >/dev/null 2>&1 & + # count the number of jobs running already. + matches=`ps -ef | grep $differentiator | grep -v grep | grep -v ckrun | wc -l` + LogMsg "matches: $matches" + # if the number of jobs running is >= max_processes, fall into this loop. + # otherwise go through the outer loop again to kick off another job. until [ $matches -lt $max_processes ] do + LogMsg "=======================================================================" sleep $sleep_time - matches=`ps -ef | grep $differentiator | grep $$ | grep -v grep | \ - grep -v ckrun | wc -l` + matches=`ps -ef | grep $differentiator | grep -v grep | grep -v ckrun | wc -l` LogMsg "MultiThread: $matches tasks running..." done done @@ -357,15 +374,17 @@ done # even though the jobs are kicked off when needed, as when the above loop # is done there are still tasks running. We can't return control to the # calling routine until they are complete. -CkRun $differentiator $sleep_time S +# CkRunOS $differentiator $sleep_time S +CkRunOS $differentiator $sleep_time LogMsg "MultiThread: Tasks complete. Returning control to calling routine." } - ############################################################################## -# initialize common variables. this is NOT inside a function so it gets -# executed right away. +# initialize common variables. this is NOT inside a function so that it gets +# executed right away. It sets up a scratch pad for the run. ############################################################################## TMP=/tmp TMP_FILE=$TMP/TMP_FILE.$$ + + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/stopEBS.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/stopEBS.sh new file mode 100644 index 0000000..ba8fec6 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/stopEBS.sh @@ -0,0 +1,396 @@ +#!/bin/ksh +################################################################################ +# Name: stopEBS.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Purpose: Stop EBS application tier in various ways, depending on need. +# The basic tasks: +# a. Stop EBS application services +# b. Kill remainng services if any running after x time +# c. Grab a lock for managing file system synchronization +# d. Block until all EBS connections to DB are gone +# e. Make sure replication is complete, do one last pass of shared +# file system +# +# The calling choices: +# n: Normal: does a and b above +# s: Switchover: does c, a, b, d, and e above +# +# Usage: stopEBS.sh [arguments] +# n) Normal: +# - Stop EBS application services +# - Kill remaining services if any running after x time +# s) Switch this environment to standby: +# - Grab a lock for managing file system synchronization +# - Stop EBS application services +# - Kill remaining services if any running after x time +# - Block until all EBS connections to DB are gone +# - Make sure replication is complete, do one last pass of shared +# file system +# +# ASSUMPTIONS: User has privileges to run EBS admin scripts. +# User's environment is already set for EBS +# ($NE_BASE/../EBSapps.env run has been executed) +# +# Errors: A non-zero value is returned for bad arguments, inability to +# connect, ... +# +# Revisions: +# Date What +# 09/10/2024 Consolidated earlier scripts into one +################################################################################ +# ParseArgs: +# Parse the command line arguments +# +# Input: command line arguments +# Output: run profile set, determining which routines are executed +# Return: exit 1 if arguments are no good +################################################################################ +ParseArgs() +{ +# +# Make sure at least 1 argument is present +if [ $# -lt 1 ] +then + echo "$0: ERROR: You have entered insufficient arguments" + Usage + exit 1 +fi + +# make sure the parameter passed was correct +# set `getopt n:s: $*` +if [[ $1 = "n" || $1 = "s" ]] +then + break +else + echo "$0: ERROR: You have entered an incorrect argument" + Usage + exit 1 +fi + +# +# They sent in an n or s, which will drive behavior +# +runPlan=$1 + +} + +################################################################################ +# Usage: +# Standard usage clause +################################################################################ +Usage() +{ +echo "Usage: stopEBS.sh [mode]" +echo "Mode can be:" +echo " n = Normal shutdown. Stop EBS and make sure all DB cx are gone." +echo " s = Switchover shutdown - \"Normal\" plus finalize replication before returning control." +echo "" +} + +################################################################################ +# SetEnv +# Get environment variables, standard include routines +# +# Input: None +# Output: Environments set for the run +# Return: Exit 1 if can't find environment files, etc. +################################################################################ +SetEnv() +{ +# Include the basic "where am I" environment settings +if [ ! -f ${SCRIPT_DIR}/ebsAppTier.env ]; then + echo "Cannot find the file ${SCRIPT_DIR}/ebsAppTier.env." + exit 1 +fi + +. ${SCRIPT_DIR}/ebsAppTier.env + +# Include the standard functions routines +if [ ! -f ${SCRIPT_DIR}/stdfuncs.sh ]; then + echo "Cannot find the standard functions script (stdfuncs.sh)" + exit 1 +fi + +. ${SCRIPT_DIR}/stdfuncs.sh + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_stopEBS_${TS}.log + +# Make sure the the apps env. is already set +if [ ! -f $NE_BASE/../EBSapps.env ]; then + LogMsg "EBS environment is not set. Cannot find the file EBSapps.env." + LogMsg "NE_BASE: $NE_BASE" + exit 1 +fi + +} + +################################################################################ +# GetCreds +# Get EBS and FMW credentials needed in this run +# +# Input: None +# Output: The creds we need, set +# Return: 1 if can't find one of the users referenced +################################################################################ +GetCreds() +{ +LogMsg "Getting EBS credentials" +GetLogon $APPS_SECRET_NAME +APPS_SECRET=$LOGON + +GetLogon $WLS_SECRET_NAME +WLS_SECRET=$LOGON +} + +################################################################################ +# GetLock +# First app server to initiate the stop-to-switch-over process is responsible +# for making sure replication is complete / all file system changes are +# captured. +# +# That app server grabs a lock to make sure no one else does +# replication work. Then it disables the rsync process so none will start +# in the background as we are shutting down. +# +# Input: None +# Output: If first in - create the lock file, set SKIP_RSYNC to 1, +# and disable automatic rsyncs +# If not, show which server has the lock and set SKIP_RSYNC to 0 +# Return: None +################################################################################ +GetLock() +{ +LogMsg "GetLock: Looking for $SCRIPT_DIR/ebsrsync.lck" + +if [ -f "${SCRIPT_DIR}/ebsrsync.lck" ]; then + SKIP_RSYNC=1 + LogMsg "GetLock: Someone else is managing rsync shutdown" +else + echo ${HOSTNAME} >> ${SCRIPT_DIR}/ebsrsync.lck + SKIP_RSYNC=0 + LogMsg "GetLock: This process will manage rsync shutdown" + + thing=`cat ${SCRIPT_DIR}/ebsrsync.lck` + LogMsg "GetLock: Contents of lock file: ${thing}" + + LogMsg "GetLock: Disable rsync so we won't start a fresh session." + ${SCRIPT_DIR}/disable_ebs_rsync.sh ${SCRIPT_DIR}/slowFiles.env + ${SCRIPT_DIR}/disable_ebs_rsync.sh ${SCRIPT_DIR}/fastFiles.env + # Trigger the killSync process to terminate any running rsyncs. + # We have to do this via shared file system because stopEBS.sh will be run + # on a server that hosts EBS, but the rsync processes should be on dedicated + # servers. + # If an in-progress rsync processes are killed, rsync is robust enough to not + # replace a file until it is completely copied to its target. + + LogMsg "GetLock: Trigger killSync to stop any running rsync processes." + # List the file system env files below and before the EOF. + cat <> ${SCRIPT_DIR}/.abortSync + ${SCRIPT_DIR}/fastFiles.env + ${SCRIPT_DIR}/slowFiles.env +EOF + +fi +} + +################################################################################ +# ConnectDB +# Launch the coroutine. Need for t and s only +# +# Input: None +# Output: SQL*Plus child process initiated +# Return: 1 if can't start sqlplus in the background +################################################################################ +ConnectDB() +{ +LogMsg "ConnectDB: LaunchCoroutine" + +# Start sqlplus in coroutine, logged in as apps user +LaunchCoroutine APPS $APPS_SECRET $PDB_TNS_CONNECT_STRING + +LogMsg "SQLPlus coroutine started" +} + +################################################################################ +# BlockUntilGone +# Part of shutting down for switchover: wait until all EBS client sessions +# have ended. Look for service names that are configured for any EBS user +# session. In our system: VISPRD_OACORE_ONLINE, VISPRD_PCP_BATCH, and +# VISPRD_FORMS_ONLINE +# +# Input: None +# Output: Number of DB instances needing reconfig, sleep time, dividing line +# Return: 1 if can't start sqlplus in the background +# if no sleep time +# if $sql is empty +################################################################################ +BlockUntilGone() +{ +LogMsg "stopEBS.sh: Checking number of remaining database sessions before performing rsync." +sql="select ltrim(count(*)) \ + from gv\$instance a, gv\$session b \ + where a.inst_id = b.inst_id \ + and service_name in ('VISPRD_OACORE_ONLINE','VISPRD_PCP_BATCH','VISPRD_FORMS_ONLINE');" +CkRunDB 5 + +LogMsg "All EBS user sessions ended - ok to proceed." +} + +################################################################################ +# StopServices +# Request a clean exit for all EBS application services on the middle tiers. +# +# Input: None +# Output: Request for stopping EBS application \ middle tiers on all app servers +# Return: 1 if can't start sqlplus in the background +################################################################################ +StopServices() +{ +LogMsg "StopServices: Stopping EBS on all application servers" + +{ echo "APPS"; echo "$APPS_SECRET"; echo "$WLS_SECRET"; } | $ADMIN_SCRIPTS_HOME/adstpall.sh | tee -a ${LOG_OUT} + +# Did adstpall report failure? +if [ $? -ne 0 ]; then + LogMsg "StopServices: $ADMIN_SCRIPTS_NAME/adstpall.sh reported failure." + exit 1 +fi + +LogMsg "Completed: StopServices." +} + +################################################################################ +# KillSessions +# The prior routine asked EBS to properly terminate all EBS sessions. This +# routine pauses progress if anything is still running. It checks a couple of +# times, after a bit loses patience and just kills what's left. +# +# NOTE: PARAMETERIZE THIS or adjust things like number of seconds +# +# Input: None +# Output: EBS application and middle tiers fully down on all app servers +# Return: None +################################################################################ +KillSessions() +{ +LogMsg "KillSessions: Wait for sessions to complete. Kill after x number of tries." +LogMsg "Return control as soon as possible so we can proceed with next steps." + +PROCESS_COUNT=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep | wc -l ) +LogMsg "KillSessions: Number of remaining processes: ${PROCESS_COUNT}" +i=1 +while [ ${PROCESS_COUNT} -ne 0 ]; +do + # Sleep for 10 seconds to let some processes terminate. + sleep 10 + PROCESS_COUNT=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep | wc -l ) + # PID_LIST=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep | awk '{ print $4 }' ) + Running=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep ) + LogMsg "${PROCESS_COUNT} remaining processes: ${Running}" + if [[ $i -gt 3 && ${PROCESS_COUNT} -ne 0 ]]; then + # we have only so much patience + PID_LIST=$(ps -elf | grep "${APP_OWNER}" | grep -E "${GREP_STRING}" | grep -v grep | awk '{ print $4 }' ) + LogMsg "stopEBS.sh: Killing processes: ${PID_LIST}" + kill -9 ${PID_LIST} + # we're assuming they're dead now. This breaks us out of the while loop. + PROCESS_COUNT=0 + fi + ((i=i+1)) +done +LogMsg "stopEBS.sh: All EBS services down on this server." + +LogMsg "Completed: KillSessions." +} + +################################################################################ +# CompleteReplication +# DB sessions all finished. Now tackle final rsync. +# +# Rsync was disabled earlier, but there still might be an rsync process +# running on the dedicated servers. Check; if so, wait for it to complete. +# +# Finally, do a cleanup rsync of fastFiles directory structure. +# +# We need to source the appropriate file to get the SOURCE_RSYNC_DIR env +# variable set. We are assuming it's appropriate to check only for fastFiles +# replication... +# +# Input: None +# Output: Updates on checking for rsync script locks +# Return: None +################################################################################ +CompleteReplication() +{ +LogMsg "CompleteReplication: Checking for running rsync processes via their lock file." + +# do we want to wait forever? these processes can run a very long time, or +# our lock system could be broken +# Note: we are now killing the rsync processes in a separate process +# (killSync.sh), so the final sweep can be started sooner. +while true; do + if [ -f ${SCRIPT_DIR}/.slowFiles.lck | -f ${SCRIPT_DIR}/.fastFiles.lck ]; then + LogMsg "One of the lock files is present." + LogMsg "Sleeping..." + LogMsg "======================================================================================" + sleep 5 + else + # we know any already-running rsync scripts are complete. Do one final sweep. + # Here, we just sync output files. You may choose to also sync program + # directories. + LogMsg "All locks are clear. Do one final sweep of fastFiles" + ${SCRIPT_DIR}/syncEBS.sh ${SCRIPT_DIR}/fastFiles.env s + LogMsg "CompleteReplication: Succeeded" + break + fi +done + +} + +################################################################################ +# Execution starts here. +################################################################################ + +ParseArgs $* +# Leave ParseArgs with runPlan set to n or s + +SetEnv + +LogMsg "runPlan: $runPlan" + +LogMsg "stopEBS.sh: Started" + +GetCreds + +# Check this for remaining EBS sessions +GREP_STRING="visprd|FNDLIB|FNDIMON|PALIBR" + +# Remember: SKIP_RSYNC is set to 0 if you do NOT want to skip rsync, +# but instead WANT to do rsync, and to 1 if you DO want to skip rsync. +# Only the first server in has that flag set to 0 THUS DOES the rsync +case $runPlan in + n) LogMsg "Normal shutdown" + StopServices + KillSessions + ;; + s) LogMsg "Switch away from this environment" + GetLock + StopServices + KillSessions + ConnectDB + BlockUntilGone + [ ${SKIP_RSYNC} == 0 ] && CompleteReplication + [ ${SKIP_RSYNC} == 0 ] && rm ${SCRIPT_DIR}/ebsrsync.lck + ;; + *) Usage + exit 1 + ;; +esac + +LogMsg "Completed: stopEBS.sh" + + + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/syncEBS.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/syncEBS.sh new file mode 100644 index 0000000..17b9483 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/syncEBS.sh @@ -0,0 +1,424 @@ +#!/bin/ksh +################################################################################ +# Name: syncEBS.sh +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Purpose: Use rsync to synchronize the EBS file systems to the standby site +# +# rsync needs to compare the timestamp on the source file to the +# timestamp on the target file, to determine wthether or not to copy +# the file. To make that faster, here we drill down to lower +# directory levels and multi-thread the process, making the directory +# parse complete more quickly. +# +# We expect the first step of this exercise to be a full rsync copy of +# the file system to the remote site, which will take signficant time. +# The goal here is for later runs to go more quickly, using this +# script. +# +# NOTE: Because we expect file synchronization actvities to run on a +# separate set of VMs, not on the EBS middle tiers, we do not control +# script execution directly from the stopEBS.sh or startEBS.sh scripts. +# Instead, those scripts communicate state across servers via hidden +# files on shared file system. +# To that end, this script has an added role of making sure a separate +# script killSync.sh is running in the background. killSync.sh +# helps during a switchover from a primary site to a secondary site, +# making sure any in-process rsync is killed so that one last sweep +# can be done to make sure all file system changes have been sent +# from the primary to the secondary, for a clean switchover. +# +# syncEBS.sh will start killSync.sh under these conditions: +# - Replication is enabled. +# - The site is in the PRIMARY role. +# - syncEBS.sh is not performing a forced sync (f parameter). +# - syncEBS.sh is not running in switchover mode (s parameter). +# +# Usage: syncEBS.sh [ F|f | S|s ] +# +# Errors: environment file does not exist, or various parameters within the +# env file are nonsense +# +# Revisions: +# Date What +# 6/1/2025 Start killSync.sh on the server running rsync +# 10/09/2024 Created +################################################################################ +# ParseArgs: +# Parse the command line arguments +# +# Input: command line arguments +# Output: source and target directories set +# Return: exit 1 if arguments are no good +################################################################################ +ParseArgs() +{ +# Make sure they passed in an env file and it's a file with content +if [ ! -f "${1}" ]; then + echo "$0: ERROR: ${1} is not a file, does not exist, or is empty." + Usage + exit 1 +fi + +runEnv=${1} + +# If there's a second argument, it could be: +# - F or f, to force rsync even if cannot connect to the database, or +# - S or s, for running a final sync before switchover. +x=$2 +forceRsync=0 +syncForSwitchover=0 +go="" +# is x empty? if not zero characters then look at the value +if [ ${#x} -ne 0 ]; then + if [[ "${x}" == "f" || "${x}" == "F" ]]; then + while true + do + # Need to read the input using the Korn shell syntax, not bash syntax. + #read -p "Are you sure you want to force rsync from this site? [Y|y|N|n] :" go + read -n 2 go?'Are you sure you want to force rsync from this site? [Y|y|N|n] : ' + go=$( echo ${go} | tr -d '[:cntrl:][:blank:]' ) + [[ ${go} = 'Y' || ${go} = 'y' || ${go} = 'N' || ${go} = 'n' ]] && break + go="" + done + if [[ ${go} = 'N' || ${go} = 'n' ]]; then + echo "You do not want to force rsync. Exiting." + Usage + exit 1 + else + echo "You do want to force the rsync. Continuing." + forceRsync=1 + fi + elif [[ "${x}" == "s" || "${x}" == "S" ]]; then + # This is for performing a final sync as part of switchover. + syncForSwitchover=1 + echo "syncEBS.sh running in syncForSwitchover mode." + else + echo "syncEBS.sh: Your second parameter does not make sense." + echo "Second parameter: ${x}" + Usage + exit 1 + fi +fi + +} + +################################################################################ +# Usage: +# Standard usage clause +################################################################################ +Usage() +{ +echo "Usage: syncEBS.sh [ F | f || S | s ] " +echo " Required:" +echo " is an env file holding parameters needed for this run." +Echo " Optional - either F or S:" +echo " F or f will FORCE an rsync. This should only be done if the primary" +echo " database has CRASHED but you are able to manually synchronize the" +echo " middle tier file system." +echo " S or s triggers a fresh full rsync to be done. It is called during " +echo " a switchover to a new site." +echo " NOTE: If you have a second parameter, it can be either F|f or S|s" +echo " You cannot specify three parameters." +echo "" +} + +################################################################################ +# SetEnv +# Get environment variables, standard include routines +# +# Input: None +# Output: Environments set for the run +# Return: Exit 1 if can't find environment files, etc. +################################################################################ +SetEnv() +{ + +# Include the basic "where am I" environment settings +if [ ! -f ${SCRIPT_DIR}/ebsAppTier.env ]; then + echo "Cannot find the file ${SCRIPT_DIR}/ebsAppTier.env." + exit 1 +fi + +. ${SCRIPT_DIR}/ebsAppTier.env + +# Include the standard functions routines +if [ ! -f ${SCRIPT_DIR}/stdfuncs.sh ]; then + echo "Cannot find the standard functions script (stdfuncs.sh)" + exit 1 +fi + +. ${SCRIPT_DIR}/stdfuncs.sh + +# Include the environment settings for rsync to remote site +if [ ! -f ${SCRIPT_DIR}/ebsRsync.env ]; then + echo "Cannot find the file ebsRsync.env." + exit 1 +fi + +. ${SCRIPT_DIR}/ebsRsync.env + +# Include the environment file they passed in +# this sets copyFiles and copyDirectories +if [ ! -f ${runEnv} ]; then + echo "Cannot find the file ${runEnv}." + Usage + exit 1 +fi + +. ${runEnv} + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_syncEBS_${fsAlias}_${TS}.log + +# This process creates a ton of little rsync scripts. +# Create the script directory if it doesn't already exist +if [ ! -d syncScripts_${fsAlias} ]; then + mkdir syncScripts_${fsAlias} +fi + +# do the config files exist? +if [[ ! -f ${copyDirectories} || ! -f ${excludeFiles} ]]; then + LogMsg "Your config files holding directories to copy and files/directories to exclude must exist." + LogMsg "They may be empty." + exit 1 +fi + +} + +################################################################################ +# RunYesNo +# Is it ok to do this sync run? This could be explicitly disabled, we could +# be at the standby, or there could be one already running. If one of these +# is true, do not run. +# Note we force it to run during a switchover, in which case syncForSwitchover +# would be = 1. This is managed in a separate script killSync.sh +# +# Input: +# Output: +# Return: Exit if should not run, else proceed +################################################################################ +RunYesNo() +{ +LogMsg "RunYesNo: Is it appropriate to proceed?" +if [ -f ${SCRIPT_DIR}/.${fsAlias}_rsync_disabled ]; then + if [ ${syncForSwitchover} == 0 ]; then + LogMsg "RunYesNo: rsync is disabled at this site. If appropriate, re-enable with enableRsync.sh" + exit 0 + else + LogMsg "RunYesNo: rsync is disabled but syncEBS.sh is running in syncForSwitchover mode." + LogMsg "RunYesNo: This will run a final rsync." + fi +fi + +# is there a thread of this flavor already running at this site? +# exit if lock file present. create lock file if not, and continue +LogMsg "RunYesNo: lock file: ${SCRIPT_DIR}/.${fsAlias}.lck" +if [ -f ${SCRIPT_DIR}/.${fsAlias}.lck ]; then + LogMsg "RunYesNo: rsync is currently running for ${fsAlias}" + LogMsg "RunYesNo: Clear the lock file ${SCRIPT_DIR}/.${fsAlias}.lck if need to resume post-crash" + exit 0 +else + LogMsg "RunYesNo: Proceed - rsync is not running for ${fsAlias}" + touch ${SCRIPT_DIR}/.${fsAlias}.lck +fi + +GetLogon $dbSecretName +dbSecret=$LOGON + +# Expensive, but need to check to be sure this database is PRIMARY +if [ ${forceRsync} = 0 ]; then + LaunchCoroutine system $dbSecret $CDB_CONNECT_STRING + + sql="select rtrim(database_role) from v\$database;" + role=`ExecSql "$sql"` + + if [ "${role}" != "PRIMARY" ]; then + LogMsg "RunYesNo: This site is in ${role} role. Only rsync from PRIMARY site." + LogMsg "Clearing the lock for ${fsAlias}." + rm ${SCRIPT_DIR}/.${fsAlias}.lck + exit 1 + fi + + # We are not doing a forced sync and the site is in the PRIMARY role. + # Start the killSync.sh process in the background if it's not already running. + # We are doing this here because we assume the syncEBS.sh script is + # running on a server dedicated to the sync process, not a normal EBS + # application server (else we would just kill a partially completed + # sync process directly and move quickly to a final rsync) + PROCESS_COUNT=$(ps -elf | grep "${APP_OWNER}" | grep -E "killSync.sh" | grep -v grep | wc -l ) + if [[ ${PROCESS_COUNT} -eq 0 && ${syncForSwitchover} -eq 0 ]]; then + # specifying 10 seconds between checks + nohup ${SCRIPT_DIR}/killSync.sh 10 >/dev/null 2>&1 & + LogMsg "RunYesNo: killSync.sh process started by syncEBS.sh." + fi +else + # User specified "force". Make sure ok by connecting to DB + mode=`sqlplus -s /nolog </dev/null +touch syncFiles_${fsAlias}.sh + +# They may not need to copy files. Do nothing if that's the case. +LogMsg "SyncFiles: Any files to copy?" +if [ -f ${copyFiles} ]; then + # Build the copy file commands + cat ${copyFiles} | while read Source Destination + do + # skip comments + if [ "${Source}" != "#" ]; then + # make sure the source is a file + if [ ! -f "${Source}" ]; then + echo "$0: ERROR: ${Source} is not a file." + exit 1 + fi + LogMsg "Source: ${Source} Destination: ${Destination}" + # for local testing: + # echo "cp ${Source} ${Destination}" >> syncFiles_${fsAlias}.sh + echo "scp ${Source} ${USER}@${targetHostIP}:${Destination}" >> syncFiles_${fsAlias}.sh + fi + done + + chmod u+x syncFiles_${fsAlias}.sh + + LogMsg "SyncFiles: Synchronizing flat files." + ./syncFiles_${fsAlias}.sh + +else + LogMsg "SyncFiles: No files to copy: ${copyFiles} is empty" +fi + +LogMsg "SyncFiles: completed" + +} + +################################################################################ +# SyncDirectories +# Build commands to rsync directories from source to target. +# +# This will exclude files or directories based on matching patterns +# +# NOTE: easy command to find long list of directories in a folder: +# ls -l | grep ^d | awk '{print $NF}' +# +# Input: File containing source and target directories to rsync +# Output: Scripts to sync directories, file listing scripts +# Return: Warning if source directories do not exist +################################################################################ +SyncDirectories() +{ +LogMsg "SyncDirectories: Started" +# Need an empty file to contain generated commands +# ignore error if it's not there +rm ${fsAlias}.txt 2>/dev/null +touch ${fsAlias}.txt + +counter=0 + +LogMsg "SyncDirectories: Building the driving text file for directories." +cat ${copyDirectories} | while read Source Destination +do + # skip comments + if [ "${Source}" != "#" ]; then + # make sure the source is a directory + if [ ! -d "${Source}" ]; then + # If you just started using a new scheme for log and out directories + # the directories may not yet exist - thus this is a warning, not + # an error. If you are confident your directories are in place, + # make this an error with an exit 1. + LogMsg "$0: Warning: Directory ${Source} does not exist." + else + ((counter++)) + command="find \"$Source\" -maxdepth 1 -mindepth 1 -type d -exec rsync -avPr --exclude-from \"$excludeFiles\" --delete \"{}\" \"${USER}@${targetHostIP}:${Destination}\" \;" + # This version is for local testing: + # command="find \"$Source\" -maxdepth 1 -mindepth 1 -type d -exec rsync -avPr --exclude-from \"$excludeFiles\" --delete \"{}\" \"$Destination\" \;" + echo "${command}" > syncScripts_${fsAlias}/do_${counter}.sh + chmod u+x syncScripts_${fsAlias}/do_${counter}.sh + echo syncScripts_${fsAlias}/do_${counter}.sh >> ${fsAlias}.txt + fi + fi +done + +LogMsg "SyncDirectories: ${counter} threads queued." + +} + +################################################################################ +# Execution starts here. +################################################################################ + +ParseArgs $* +# Leave ParseArgs with copyDirectories set to the file holding the source +# and target directories, copyFiles (if present) set to a file holding specific +# files to copy + +SetEnv + +LogMsg "syncEBS.sh: Started" + +# Is it appropriate to run at this time? +RunYesNo + +# Did they provide a parameter pointing to a file holding a list of files +# to copy? +if [ "${copyFiles}" != "" ]; then + SyncFiles +fi + +# Build ${fsAlias}.txt, a text file containing rsync commands to sync +# lower-level directories +SyncDirectories + +# Run the commands built by SyncDirectories. MultiThread's parameters: +# name of driving file, # threads to kick off, grep phrase, # seconds to sleep +MultiThread ${fsAlias}.txt 15 syncScripts_${fsAlias} 3 + +# We're done. Remove the lock file for the process. +rm ${SCRIPT_DIR}/.${fsAlias}.lck + +LogMsg "Completed: syncEBS.sh" + + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/syncFiles_fastFiles.sh b/apps-unlimited/EBSR12.2onOCI/AppTier/syncFiles_fastFiles.sh new file mode 100644 index 0000000..f5ffd08 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/syncFiles_fastFiles.sh @@ -0,0 +1,8 @@ +# syncFiles_fastFiles.sh +# This is an example of a file generated by the rsync scripts. It will be generated without the comments. +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ + +scp /u02/app/ebs/visprd/fs1/EBSapps/appl/INCLUDEME.txt applmgr@10.0.103.17:/u02/app/ebs/visprd/fs1/EBSapps/appl/INCLUDEME.txt +scp /u02/app/ebs/visprd/fs2/EBSapps/appl/INCLUDEME.txt applmgr@10.0.103.17:/u02/app/ebs/visprd/fs2/EBSapps/appl/INCLUDEME.txt diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/syncThreads.txt b/apps-unlimited/EBSR12.2onOCI/AppTier/syncThreads.txt new file mode 100644 index 0000000..bd71feb --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/syncThreads.txt @@ -0,0 +1,381 @@ +# THIS IS AN EXAMPLE ONLY, of output generated by the rsync scripts when multi-threading work +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +do_1.sh +do_2.sh +do_3.sh +do_4.sh +do_5.sh +do_6.sh +do_7.sh +do_8.sh +do_9.sh +do_10.sh +do_11.sh +do_12.sh +do_13.sh +do_14.sh +do_15.sh +do_16.sh +do_17.sh +do_18.sh +do_19.sh +do_20.sh +do_21.sh +do_22.sh +do_23.sh +do_24.sh +do_25.sh +do_26.sh +do_27.sh +do_28.sh +do_29.sh +do_30.sh +do_31.sh +do_32.sh +do_33.sh +do_34.sh +do_35.sh +do_36.sh +do_37.sh +do_38.sh +do_39.sh +do_40.sh +do_41.sh +do_42.sh +do_43.sh +do_44.sh +do_45.sh +do_46.sh +do_47.sh +do_48.sh +do_49.sh +do_50.sh +do_51.sh +do_52.sh +do_53.sh +do_54.sh +do_55.sh +do_56.sh +do_57.sh +do_58.sh +do_59.sh +do_60.sh +do_61.sh +do_62.sh +do_63.sh +do_64.sh +do_65.sh +do_66.sh +do_67.sh +do_68.sh +do_69.sh +do_70.sh +do_71.sh +do_72.sh +do_73.sh +do_74.sh +do_75.sh +do_76.sh +do_77.sh +do_78.sh +do_79.sh +do_80.sh +do_81.sh +do_82.sh +do_83.sh +do_84.sh +do_85.sh +do_86.sh +do_87.sh +do_88.sh +do_89.sh +do_90.sh +do_91.sh +do_92.sh +do_93.sh +do_94.sh +do_95.sh +do_96.sh +do_97.sh +do_98.sh +do_99.sh +do_100.sh +do_101.sh +do_102.sh +do_103.sh +do_104.sh +do_105.sh +do_106.sh +do_107.sh +do_108.sh +do_109.sh +do_110.sh +do_111.sh +do_112.sh +do_113.sh +do_114.sh +do_115.sh +do_116.sh +do_117.sh +do_118.sh +do_119.sh +do_120.sh +do_121.sh +do_122.sh +do_123.sh +do_124.sh +do_125.sh +do_126.sh +do_127.sh +do_128.sh +do_129.sh +do_130.sh +do_131.sh +do_132.sh +do_133.sh +do_134.sh +do_135.sh +do_136.sh +do_137.sh +do_138.sh +do_139.sh +do_140.sh +do_141.sh +do_142.sh +do_143.sh +do_144.sh +do_145.sh +do_146.sh +do_147.sh +do_148.sh +do_149.sh +do_150.sh +do_151.sh +do_152.sh +do_153.sh +do_154.sh +do_155.sh +do_156.sh +do_157.sh +do_158.sh +do_159.sh +do_160.sh +do_161.sh +do_162.sh +do_163.sh +do_164.sh +do_165.sh +do_166.sh +do_167.sh +do_168.sh +do_169.sh +do_170.sh +do_171.sh +do_172.sh +do_173.sh +do_174.sh +do_175.sh +do_176.sh +do_177.sh +do_178.sh +do_179.sh +do_180.sh +do_181.sh +do_182.sh +do_183.sh +do_184.sh +do_185.sh +do_186.sh +do_187.sh +do_188.sh +do_189.sh +do_190.sh +do_191.sh +do_192.sh +do_193.sh +do_194.sh +do_195.sh +do_196.sh +do_197.sh +do_198.sh +do_199.sh +do_200.sh +do_201.sh +do_202.sh +do_203.sh +do_204.sh +do_205.sh +do_206.sh +do_207.sh +do_208.sh +do_209.sh +do_210.sh +do_211.sh +do_212.sh +do_213.sh +do_214.sh +do_215.sh +do_216.sh +do_217.sh +do_218.sh +do_219.sh +do_220.sh +do_221.sh +do_222.sh +do_223.sh +do_224.sh +do_225.sh +do_226.sh +do_227.sh +do_228.sh +do_229.sh +do_230.sh +do_231.sh +do_232.sh +do_233.sh +do_234.sh +do_235.sh +do_236.sh +do_237.sh +do_238.sh +do_239.sh +do_240.sh +do_241.sh +do_242.sh +do_243.sh +do_244.sh +do_245.sh +do_246.sh +do_247.sh +do_248.sh +do_249.sh +do_250.sh +do_251.sh +do_252.sh +do_253.sh +do_254.sh +do_255.sh +do_256.sh +do_257.sh +do_258.sh +do_259.sh +do_260.sh +do_261.sh +do_262.sh +do_263.sh +do_264.sh +do_265.sh +do_266.sh +do_267.sh +do_268.sh +do_269.sh +do_270.sh +do_271.sh +do_272.sh +do_273.sh +do_274.sh +do_275.sh +do_276.sh +do_277.sh +do_278.sh +do_279.sh +do_280.sh +do_281.sh +do_282.sh +do_283.sh +do_284.sh +do_285.sh +do_286.sh +do_287.sh +do_288.sh +do_289.sh +do_290.sh +do_291.sh +do_292.sh +do_293.sh +do_294.sh +do_295.sh +do_296.sh +do_297.sh +do_298.sh +do_299.sh +do_300.sh +do_301.sh +do_302.sh +do_303.sh +do_304.sh +do_305.sh +do_306.sh +do_307.sh +do_308.sh +do_309.sh +do_310.sh +do_311.sh +do_312.sh +do_313.sh +do_314.sh +do_315.sh +do_316.sh +do_317.sh +do_318.sh +do_319.sh +do_320.sh +do_321.sh +do_322.sh +do_323.sh +do_324.sh +do_325.sh +do_326.sh +do_327.sh +do_328.sh +do_329.sh +do_330.sh +do_331.sh +do_332.sh +do_333.sh +do_334.sh +do_335.sh +do_336.sh +do_337.sh +do_338.sh +do_339.sh +do_340.sh +do_341.sh +do_342.sh +do_343.sh +do_344.sh +do_345.sh +do_346.sh +do_347.sh +do_348.sh +do_349.sh +do_350.sh +do_351.sh +do_352.sh +do_353.sh +do_354.sh +do_355.sh +do_356.sh +do_357.sh +do_358.sh +do_359.sh +do_360.sh +do_361.sh +do_362.sh +do_363.sh +do_364.sh +do_365.sh +do_366.sh +do_367.sh +do_368.sh +do_369.sh +do_370.sh +do_371.sh +do_372.sh +do_373.sh +do_374.sh +do_375.sh +do_376.sh diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/web_entry_prod.env b/apps-unlimited/EBSR12.2onOCI/AppTier/web_entry_prod.env new file mode 100644 index 0000000..3b86040 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/web_entry_prod.env @@ -0,0 +1,22 @@ +################################################################################ +# webEntryProd.env +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Production parameters for set_webentry_points script. +# Used by startEBS.sh +# +# Date What +# 09/05/2024 Created +# +################################################################################ +# +webentryhost=ebsvisprd +webentrydomain=oraclecloud.com +login_page="https://ebsvisprd.oraclecloud.com/OA_HTML/AppsLogin" +external_URL="https://ebsvisprd.oraclecloud.com" +webport=8000 +active_webport=443 +# http_listen_parameter=8000 + diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/web_entry_test.env b/apps-unlimited/EBSR12.2onOCI/AppTier/web_entry_test.env new file mode 100644 index 0000000..950bc28 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/web_entry_test.env @@ -0,0 +1,22 @@ +################################################################################ +# webEntryTest.env +# +# Copyright (c) 2025 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# Snapshot standby test parameters for set_webentry_points script. +# Used by startEBS.sh +# +# Date What +# 09/05/2024 Created +# +################################################################################ +# +webentryhost=ebsexacs-test +webentrydomain="oraclecloud.com" +login_page="https://ebsexacs-test.oraclecloud.com/OA_HTML/AppsLogin" +external_URL="https://ebsexacs-test.oraclecloud.com" +webport=8000 +active_webport=443 +# http_listen_parameter=8002 + diff --git a/apps-unlimited/EBSR12.2onOCI/Database/.gitkeep b/apps-unlimited/EBSR12.2onOCI/DBTier/.gitkeep similarity index 100% rename from apps-unlimited/EBSR12.2onOCI/Database/.gitkeep rename to apps-unlimited/EBSR12.2onOCI/DBTier/.gitkeep diff --git a/apps-unlimited/EBSR12.2onOCI/DBTier/ChangeHomePath.sh b/apps-unlimited/EBSR12.2onOCI/DBTier/ChangeHomePath.sh new file mode 100644 index 0000000..cc0270e --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/DBTier/ChangeHomePath.sh @@ -0,0 +1,109 @@ +############################################################################# +# ChangeHomePath.sh +# +# Copyright (c) 2024 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# An include script holding the common routine that changes the oracle +# database home path if needed when switching a standby database to primary. +# +# This is an INCLUDE file. It is code to be included in an outer ksh +# script. It just holds the routine ReConfig, which calls the EBS code. +# It does not need a shebang, as it is simply a part of a larger program. +# +# Note: assumes all the database instances are present in gv_instance when +# the check is done in the main script. +# +# Requires user equivalency across all RAC nodes. +# +# No parameters passed in +# +# Rev: +# 8/23/24 Re-formed as a standard routine to execute from different scripts +# 1/15/24 Created +############################################################################# +ReConfig() +{ +LogMsg "Started ReConfig - Database Home Reconfiguration" + +LogMsg "DbName: $DbName" + +# Calling script has the apps password. Need to get the database password +GetLogon $DB_SECRET_NAME +DB_SECRET=$LOGON + +PERLBIN=`dirname $ORACLE_HOME/perl/bin/perl` +LogMsg "PERLBIN = $PERLBIN" + +PATH=${PERLBIN}:${PATH} + +PERL5LIB=$ORACLE_HOME/perl/lib/5.32.0:$ORACLE_HOME/perl/lib/site_perl/5.32.0:$ORACLE_HOME/appsutil/perl + +# If logical hostname is passed in, call txkSyncDBConfig.pl with the +# -logicalhostname parameter, else call it without this parameter. +if [ "${LOGICAL_HOSTNAME}" == "" ]; +then + # Call the EBS script txkSyncDBConfig.pl + LogMsg "Running txkSyncDBConfig.pl to configure with physical hostname." + { echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkSyncDBConfig.pl \ + -dboraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -cdbsid=${ORACLE_SID} \ + -pdbname=${PDB_NAME} \ + -dbuniquename=${DB_UNIQUE_NAME} \ + -israc=YES \ + -virtualhostname=${VIRTUAL_HOSTNAME} \ + -scanhostname=${SCAN_NAME} \ + -scanport=${SCAN_LISTENER_PORT} \ + -dbport=${DB_LISTENER_PORT} \ + -appsuser=${APPS_USERNAME} | tee -a ${LOG_OUT} +else + LogMsg "Running txkSyncDBConfig.pl to configure with logical hostname." + { echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkSyncDBConfig.pl \ + -dboraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -cdbsid=${ORACLE_SID} \ + -pdbname=${PDB_NAME} \ + -dbuniquename=${DB_UNIQUE_NAME} \ + -israc=YES \ + -virtualhostname=${VIRTUAL_HOSTNAME} \ + -logicalhostname=${LOGICAL_HOSTNAME} \ + -scanhostname=${SCAN_NAME} \ + -scanport=${SCAN_LISTENER_PORT} \ + -dbport=${DB_LISTENER_PORT} \ + -appsuser=${APPS_USERNAME} | tee -a ${LOG_OUT} +fi + +if [ $? -ne 0 ]; then + LogMsg "txkSynDBConfig.pl returned an error" + exit 1 +fi +LogMsg "Running txkCfgUtlfileDir.pl with mode=setUtlFileDir" + +{ echo "$APPS_SECRET"; echo "$DB_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl + -contextfile=$CONTEXT_FILE \ + -oraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -mode=setUtlFileDir \ + -servicetype=opc | tee -a ${LOG_OUT} +if [ $? -ne 0 ]; then + LogMsg "txkCfgUtlfileDir.pl mode setUtlFileDir returned an error" + exit 1 +fi + +LogMsg "Running txkCfgUtlfileDir.pl with mode=syncUtlFileDir" + +{ echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ + -contextfile=$CONTEXT_FILE \ + -oraclehome=$ORACLE_HOME \ + -outdir=$ORACLE_HOME/appsutil/log \ + -mode=syncUtlFileDir \ + -servicetype=opc | tee -a ${LOG_OUT} +if [ $? -ne 0 ]; then + LogMsg "txkCfgUtlfileDir.pl mode syncUtlFileDir returned an error" + exit 1 +fi + +LogMsg "Completed ReConfig - Database Home Reconfiguration" +} + diff --git a/apps-unlimited/EBSR12.2onOCI/Database/EBSCFG.env b/apps-unlimited/EBSR12.2onOCI/DBTier/EBSCFG.env similarity index 69% rename from apps-unlimited/EBSR12.2onOCI/Database/EBSCFG.env rename to apps-unlimited/EBSR12.2onOCI/DBTier/EBSCFG.env index a166eb0..1f31ab4 100644 --- a/apps-unlimited/EBSR12.2onOCI/Database/EBSCFG.env +++ b/apps-unlimited/EBSR12.2onOCI/DBTier/EBSCFG.env @@ -1,4 +1,8 @@ # EBSCFG.env +# +# Copyright (c) 2024 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# # This environment file is called by scripts on the DB nodes that execute EBS # TXK commands to configure EBS metadata post switchover or failover. # The scripts assume logical host names have been implemented for EBS R12.2. @@ -12,7 +16,7 @@ # "srvctl config vip -n $HOSTNAME" to get this setting. # - LOGICAL_HOSTNAME: The logical hostname.domain for THIS server. The EBS # script txkSyncDBConfig.pl will use this variable to configure EBS -# on THIS node. +# on THIS node. If using physical hostnames, then set LOGICAL_HOSTNAME="" # - SCAN_NAME: The SCAN name for THIS cluster. Use the command: "srvctl config # scan" to obtain the scan name. # - SCAN_LISTENER_PORT: The listener port number for the SCAN listeners. Use @@ -29,7 +33,7 @@ # - DB_UNIQUE_NAME: The database unique name set by the database parameter # DB_UNIQUE_NAME. # - PDB_NAME: The name of the PDB that the EBS database resides in. -# - CONTEXT_FILE: $ORACLE_HOME/_.env +# - CONTEXT_ENV_FILE: $ORACLE_HOME/_.env # - PDB_TNS_CONNECT_STRING: The TNS connect string for the PDB # - DB_SECRET_NAME: The name of the secret in the OCI vault holding the # database EBS_SYSTEM password/credential. @@ -39,24 +43,33 @@ # - COMPARTMENT_OCID: The OCID of the OCI compartment that contains the OCI # vault. # - LOG_DIR: These scripts will write their execution logs in this directory +# - TNS_ALIAS: +# - EBS_DEFAULT_SERVICE_NAME: EBS defines a service within the PDB named +# ebs_. This is done when configuring EBS on the database tier +# and on each RAC node using the scripts: txkPDBPostCreationTask.pl and +# txkPDBRACNode.pl. Since this service is defined within the EBS PDB, it +# may not start when the PDB is opened or post a role transition. +# The StartDBService.sh script uses this parameter to start this +# service. +# -SCRIPT_DIR=/home/oracle/ebscdb/coRoutines +SCRIPT_DIR=/home/oracle/ebscdb/custom_admin_scripts/VISPRD -THIS_HOSTNAME=ebsdb1 -VIRTUAL_HOSTNAME=ebsdb1-vip.ebsdbprivateexa.ebsmaacloud2vcn.oraclevcn.com -LOGICAL_HOSTNAME=ebsdb1.ebsdbprivateexa.ebsmaacloud2vcn.oraclevcn.com -SCAN_NAME=iadexadb-bw5wn-scan.ebsexadbprivate.ebscloudmaavcn.oraclevcn.com +THIS_HOSTNAME=phxexdbprd-fhkhm1 +VIRTUAL_HOSTNAME=phxexdbprd-fhkhm1-vip.ebsdbprivateexa.ebsmaacloud2vcn.oraclevcn.com +LOGICAL_HOSTNAME="" +SCAN_NAME=phxexdbprd-fhkhm-scan.ebsdbprivateexa.ebsmaacloud2vcn.oraclevcn.com SCAN_LISTENER_PORT=1521 DB_LISTENER_PORT=1521 -DB_HOSTS="iadexadb-bw5wn1 iadexadb-bw5wn2" +DB_HOSTS="phxexdbprd-fhkhm1 phxexdbprd-fhkhm2" CDB_NAME=EBSCDB -DB_UNIQUE_NAME=EBSCDB_9cv_iad +DB_UNIQUE_NAME=EBSCDB_hf5_phx PDB_NAME=VISPRD PDB_TNS_CONNECT_STRING=visprd -CONTEXT_FILE=${ORACLE_HOME}/${PDB_NAME}_${THIS_HOSTNAME} +CONTEXT_ENV_FILE=${ORACLE_HOME}/${PDB_NAME}_${THIS_HOSTNAME}.env DB_SECRET_NAME=ebs-db-secret APPS_SECRET_NAME=ebs-apps-secret @@ -66,4 +79,5 @@ COMPARTMENT_OCID="ocid1.compartment.oc1..aaaaaaaadynzghibxxo362cdebbtkqtuixd5ql2 LOG_DIR=${SCRIPT_DIR}/log TNS_ALIAS=visprd +EBS_DEFAULT_SERVICE_NAME=ebs_VISPRD diff --git a/apps-unlimited/EBSR12.2onOCI/Database/EBS_DB_RoleChange.sh b/apps-unlimited/EBSR12.2onOCI/DBTier/EBS_DB_RoleChange.sh similarity index 52% rename from apps-unlimited/EBSR12.2onOCI/Database/EBS_DB_RoleChange.sh rename to apps-unlimited/EBSR12.2onOCI/DBTier/EBS_DB_RoleChange.sh index d124ce8..656bc54 100644 --- a/apps-unlimited/EBSR12.2onOCI/Database/EBS_DB_RoleChange.sh +++ b/apps-unlimited/EBSR12.2onOCI/DBTier/EBS_DB_RoleChange.sh @@ -3,46 +3,75 @@ # EBS_DB_RoleChange.sh # Spawn the scripts to reconfigure EBS on the database RAC nodes if required. # +# Copyright (c) 2024 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# # Note: This script blocks when running the txk configuration scripts, so # errors are caught here instead of floating around in the ether. # -# Note: If the homes need to change: we're assuming all database instances +# Note: If the homes need to change: We're assuming all database instances # are visible in gv$instance when this is executed. If an instance -# is down, that home will not be reconfigured. +# is down, THAT HOME WILL NOT BE RECONFIGURED. # # Requires user equivalency across all RAC nodes. # # Things to ignore or be aware of: -# stty: standard input: Inappropriate ioctl for device -# The random creation of +DATAC1 in your script directory (bug#: ...) +# stty: standard input: Inappropriate ioctl for device. Irritating but +# benign. +# The random creation of +DATAC1 in your script directory (bug#: .38086306) # Creation of logs in your script directory named mmddhhmm.log # # No parameters passed in # # Rev: -# 8/28/24 MPratt Simplified, added ksh coroutine for efficiency -# 1/15/24 DPresley Created +# 06/18/2025 Using info in .profile to build environment, adjusted comments +# 04/28/25 Added check for logical hostnames. +# 8/28/24 Simplified, added ksh coroutine for efficiency +# 1/15/24 Created ############################################################################# -# -. /home/oracle/EBSCDB.env -. ./EBSCFG.env +# Set up the environment variables +. $HOME/EBSCDB.env +. ${SCRIPT_DIR}/EBSCFG.env +. ${CONTEXT_ENV_FILE} + HostName=$(hostname) MYHOST=$(hostname) -. ${CONTEXT_FILE}.env - # Call the standard functions routine . $SCRIPT_DIR/stdfuncs.sh - + # Include the common code for reconfiguring the path. This will be -# executed both from this script and from the spawned shell scripts on other DB +# executed both from this script and from the spawned shell scripts on +# other RAC DB nodes . $SCRIPT_DIR/ChangeHomePath.sh EnvSetup LOG_OUT=${LOG_DIR}/${HostName}_EBS_DB_RoleChange_${TS}.log - LogMsg "EBS_DB_RoleChange.sh: Started" +# OPTIONAL, and commented out here: +# Start any required database services that do not get started automatically +# by CRS, or that are defined only in the PDB itself. +# IF THIS IS REQUIRED IN YOUR ENVIRONMENT, uncomment the code for +# running $SCRIPT_DIR/startDBServices.sh. +# More complete explanation in startDBServices.sh. + +# This work is done with the default DB login - can't use the EBS database +# login data for this. + +# First, check if the service might already be up. +if [ s=$(lsnrctl status | grep -i ebs_${PDB_NAME} | wc -l ) -eq 0 ]; then + $SCRIPT_DIR/StartDBServices.sh + if [ $? -ne 0 ]; then + LogMsg "Attempt to start database services failed." + LogMsg "Refer to log files in ${LOG_DIR}." + exit 1 + fi + else + LogMsg "Service ebs_${PDB_NAME} is already up." +fi + +# Continue with setup GetLogon $APPS_SECRET_NAME APPS_SECRET=$LOGON @@ -51,11 +80,13 @@ LaunchCoroutine APPS $APPS_SECRET $PDB_TNS_CONNECT_STRING GetDbName +# Main flow: +# What does EBS think my oracle home path is? sql="select XMLTYPE(t.text).EXTRACT('//ORACLE_HOME/text()').getStringVal() \ -from apps.fnd_oam_context_files t \ - where name = '` echo ${PDB_NAME}`_`echo ${THIS_HOSTNAME}`' \ - and node_name = '`echo ${THIS_HOSTNAME}`' \ - order by last_update_date desc \ +from apps.fnd_oam_context_files t \ + where name = '` echo ${PDB_NAME}`_`echo ${THIS_HOSTNAME}`' \ + and node_name = '`echo ${THIS_HOSTNAME}`' \ + order by last_update_date desc \ fetch first row only;" EBS_DB_OH=`ExecSql "${sql}"` @@ -63,9 +94,8 @@ LogMsg "ORACLE_HOME: $ORACLE_HOME" LogMsg "EBS_DB_OH: $EBS_DB_OH" # Only spawn the jobs if the oracle home path is different +# If the path is the same, the bulk of this work is skipped if [ "${ORACLE_HOME}" != "${EBS_DB_OH}" ] -# TESTING: DO IT IF IT'S THE SAME -# if [ "${ORACLE_HOME}" = "${EBS_DB_OH}" ] then LogMsg "Oracle home paths are different. Reconfigure hosts" @@ -73,7 +103,10 @@ then # Need the rows in the table so the middle tiers can see configuration is not # done yet across all instances. - # Are we assuming all instances are up when this executes? Why, yes, we are... + # We have both the list of hosts in DB_HOSTS and the list of hosts + # that have been restarted so far. This code is a bit simplistic and assumes + # they are the same. For a larger environment, enhance this to be sure the + # count of the two is the same. sql="INSERT INTO apps.xxx_EBS_role_change (host_name,rolechange_date) \ SELECT host_name, sysdate \ @@ -81,10 +114,11 @@ then commit;" ExecSql "${sql}" - LogMsg "DB_HOSTS: $DB_HOSTS" - LogMsg "MYHOST: $MYHOST" + LogMsg "All DB_HOSTS: $DB_HOSTS" + LogMsg "This database server: MYHOST: $MYHOST" - # DB_HOSTS is a configuration in your .env file + # DB_HOSTS is a field in your .env file that holds the names of + # of every database host in your RAC setup for i in ${DB_HOSTS} do if [ "${i}" == "${MYHOST}" ]; @@ -97,6 +131,7 @@ then ssh -t oracle@${i} "cd ${SCRIPT_DIR}; ${SCRIPT_DIR}/callReConfig.sh" fi + # all done - remove the rows driving the work sql="DELETE FROM apps.xxx_EBS_role_change where host_name='${i}'; commit;" ExecSql "${sql}" @@ -105,3 +140,4 @@ fi LogMsg "Completed: EBS_DB_RoleChange.sh." + diff --git a/apps-unlimited/EBSR12.2onOCI/DBTier/callReConfig.sh b/apps-unlimited/EBSR12.2onOCI/DBTier/callReConfig.sh new file mode 100644 index 0000000..afd4fd1 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/DBTier/callReConfig.sh @@ -0,0 +1,57 @@ +#!/bin/ksh +############################################################################# +# +# Copyright (c) 2024 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# callReConfig.sh +# Call the scripts to reconfigure EBS on the database RAC nodes on remote +# hosts. +# +# Requires user equivalency across all RAC nodes. +# +# This script establishes the environment, gets the apps password. +# then executes ReConfig on remote hosts. It's called remotely by +# EBS_DB_RoleChange.sh +# +# Rev: +# 06/18/2025 No hard-coding to find env files +# 08/29/2024 Created +############################################################################# + +mypath=`pwd` + +. $HOME/EBSCDB.env +. ${SCRIPT_DIR}/EBSCFG.env +HostName=$(hostname) + +. ${CONTEXT_ENV_FILE} + +# Include the standard functions routines +. ${SCRIPT_DIR}/stdfuncs.sh + +# Include the common code for reconfiguring the path. This holds the +# code that is executed in this script for the DB nodes remote to the main +# driving script. +. ${SCRIPT_DIR}/ChangeHomePath.sh + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_callReConfig_${TS}.log + +LogMsg "callReConfig.sh: Started" + +# Get the apps password - needs to be set before executing ReConfig +GetLogon $APPS_SECRET_NAME +APPS_SECRET=$LOGON + +# Note: we are not executing sqlplus for anything in this script, so are +# not launching the coroutine. Side effect: for this script, we need +# to substitute HostName for DbName, which is used in LogMsg +# GetDbName +DbName=$HostName + +# Finally - do the work: +ReConfig + +LogMsg "callReConfig.sh: Completed." + diff --git a/apps-unlimited/EBSR12.2onOCI/DBTier/crt_db_role_change_trigger.sql b/apps-unlimited/EBSR12.2onOCI/DBTier/crt_db_role_change_trigger.sql new file mode 100644 index 0000000..d72562d --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/DBTier/crt_db_role_change_trigger.sql @@ -0,0 +1,58 @@ +REM +REM Name: crt_db_role_change_trigger.sql +REM +REM Copyright (c) 2024 Oracle and/or its affiliates +REM Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +REM +REM Purpose: This script creates the required table and role change trigger that will in tern submit a job to the database scheduler +REM that runs an external job. This job executes scripts on all RAC nodes to reconfigure EBS on the DB nodes if those +REM scripts determine if reconfiguration is required. +REM +REM The apps.xxx_EBS_role_change table is an EBS CEMLI only used by these scripts and the applicatin mid tiers. Because the +REM job runs on the first RAC node that transitions the database to the PRIMARY role and, that the job is asyncronous (but will +REM run immediately once submitted, we need to insert a row per each RAC node into this table so that as each set of scripts +REM complete to completion on each RAC node, they will delete the row corrosponding to their node name. The scripts that +REM start application services will check for rows in this table. When the row count is zero, they then will start application +REM services. +REM NOTE: This table will not be managed by ADOP nor undergo any edition redefinition changes. + +set echo on + +alter session set container = VISPRD; + +drop table apps.xxx_EBS_role_change; + +create table apps.xxx_EBS_role_change ( + host_name varchar2(128), + rolechange_date date +); + +REM Role change database trigger must be defined at the CDB level. + +alter session set container = CDB$ROOT; + +CREATE OR REPLACE TRIGGER Configure_EBS_AfterRoleChange AFTER db_role_change ON DATABASE +DECLARE + v_role VARCHAR(30); +BEGIN + + SELECT DATABASE_ROLE INTO v_role FROM V$DATABASE; + + IF v_role = 'PRIMARY' THEN + + -- Submit the job that will execute the external scripts. The job will run immediately. + DBMS_SCHEDULER.CREATE_JOB ( + Job_name=> 'EBS_DB_RoleChange', + Job_type=> 'EXECUTABLE', + Job_action => '/home/oracle/ebscdb/custom_admin_scripts/EBS_DB_RoleChange.sh', + Enabled => TRUE + ); + DBMS_SCHEDULER.ENABLE('EBS_DB_RoleChange'); + + END IF; +END; +/ + +alter trigger Configure_EBS_AfterRoleChange enable; + + diff --git a/apps-unlimited/EBSR12.2onOCI/DBTier/startDBServices.sh b/apps-unlimited/EBSR12.2onOCI/DBTier/startDBServices.sh new file mode 100644 index 0000000..38cf626 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/DBTier/startDBServices.sh @@ -0,0 +1,66 @@ +#!/bin/ksh +############################################################################# +# startDBServices.sh +# Start any services that do not start when the PDB is opened, either because +# they are not managed by CRS or they are defined within a pluggable database +# +# Copyright (c) 2024 Oracle and/or its affiliates +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl/ +# +# This script should only be used to start services that are: +# - not defined in CRS +# - defined only in a PDB +# - may not start when the database and PDB it is defined in opens. +# +# This script connects to the database using the PDB's default service, one +# that is always started when the PDB is opened. This login is never used by +# end users - it is only used to start the services that end users use. +# +# This work is only needed on switchover if your environment uses the TNS +# configuration the PDB home instead of in the grid home. +# +# No parameters passed in. +# +# Rev: +# 06/18/2025 Removed hard-coding of call to environment-specific code +# 6/3/2025 Created. +############################################################################# +# +. $HOME/EBSCDB.env +. ${SCRIPT_DIR}/EBSCFG.env +HostName=$(hostname) +MYHOST=$(hostname) + +# Call the standard functions routine +. $SCRIPT_DIR/stdfuncs.sh + +EnvSetup +LOG_OUT=${LOG_DIR}/${HostName}_startDBServices_${TS}.log + +LogMsg "startDBServices.sh: Started" +LogMsg "Starting database services ${EBS_DEFAULT_SERVICE_NAME} from node: ${MYHOST}" + +GetLogon $APPS_SECRET_NAME +APPS_SECRET=$LOGON + +# Connect to the PDB using sqlplus, building the connect string to +# access the default PDB service +output_str=`sqlplus -s /nolog <$TMP_FILE 2>&1 +${cxString} +! + +# Check for success: +if [ $? -ne 0 ]; then + LogMsg "LaunchCoroutine: Unable to connect to Oracle." + LogMsg "LaunchCoroutine: Verify password, state of database" + cat $TMP_FILE | LogMsg + exit 1 +fi + +# sqlplus might have exited with a return code of 0, but there still may be a login error +# such as ORA-12514. These will be in the TMP_FILE. +rc=`grep -i "ERROR|ORA-|SP2-" $TMP_FILE | wc -l` +if [ $rc != 0 ]; then + LogMsg "LaunchCoroutine: Received error connecting to Oracle." + LogMsg "Errors can be found in ${TMP_FILE}:" + cat $TMP_FILE | LogMsg +# tmpstr=`cat "${TMP_FILE}" ` +# LogMsg "${tmpstr}" + exit 1 +fi + +# Launch the coroutine itself. +sqlplus -s |& +echo -e "${cxString}" >&p +echo -e "set scan off\n" >&p +echo -e "set heading off\n" >&p +echo -e "set feedback off\n" >&p +echo -e "set pagesize 0\n" >&p +echo -e "set linesize 2000\n" >&p +echo -e "set long 65535\n" >&p +echo -e "select '<-DONE->' from dual;\n" >&p + +tmp="$IFS" +IFS="" + +# read from the coroutine's output 'til you see <-DONE-> +while [ "1" ]; do + read answer <&p + if [ "$answer" = "<-DONE->" ]; then + break + fi +done + +IFS="$tmp" +rm $TMP_FILE + +} + +############################################################################# +# ExecSql +# Send a SQL statement to the sqlplus coroutine; return the result to the +# calling routine. +# +# Input: sql statement +# Output: result of sql statement +# Return: none +############################################################################# +ExecSql () +{ +# send the statement to the coroutine with the "-p" + echo -e "$1\n" >&p + echo -e "select '<-DONE->' from dual;\n" >&p + + tmp="$IFS" + IFS="" + +# read from the coroutine's output 'til you see <-DONE-> + while [ "1" ]; do + read answer <&p + + if [ "$answer" = "<-DONE->" ]; then + break + else + echo -e "$answer" + fi + done + + IFS="$tmp" +} + +############################################################################## +# LogMsg: Echo a message to stdout and the run's log file. +# Usage: LogMsg "message text" +# +# Input: Message text +# Note: If message text = "-p", then input is read from stdin +# (so you can pipe to this). +# Output: Writes the timestamp, host name, database name, and message to +# stdout and to LOG_OUT. Requires LOG_OUT be already defined +# Return: None +############################################################################## +LogMsg () +{ + LogMsgTimestamp=`date +"%m%d %T"` + +# If they are piping the message in to print from a command +# (eg, cat file | LogMsg), need to reset the interfield separator. +# After that, we read the message piece by piece from stdin. + if [ "$1" = "-p" ]; then + tmp="$IFS" + IFS="" + while read message + do + printf "${LogMsgTimestamp}|${HostName}|${DbName}|${myPID}| $message\n" + if [ ! -z "$LOG_OUT" ]; then + printf "${LogMsgTimestamp}|${HostName}|${DbName}|${myPID}| $message\n" >> $LOG_OUT + fi + done + IFS="$tmp" + +# Not piping anything to the message - just text passed straight in + else + printf "${LogMsgTimestamp}|${HostName}|${DbName}|${myPID} $1\n" + if [ ! -z "$LOG_OUT" ]; then + printf "${LogMsgTimestamp}|${HostName}|${DbName}|${myPID} $1\n" >> $LOG_OUT + fi + fi +} + +############################################################################# +# GetDbName +# Get the database name for this oracle sid +# +# Input: None +# Output: Sets DbName variable +# Return: None +############################################################################# +GetDbName() +{ + sql="select name from v\$database;" + DbName=`ExecSql "${sql}"` +} + +############################################################################## +# CkRunDB +# Monitor running DATABASE processes to see if any are still running. +# To use this, set up a construct inside the database that you can check to +# determine that the required work is complete. A simple example is to insert +# a row in a table for each chunk of work to be done, then to remove the row +# as part of the committed chunk of work. +# +# This process will execute your sql statement built to check for your +# completion criteria. It will return control when your sql statement reports +# the criteria is met. +# +# REQUIRED: set the variable "sql" to the sql statement that will retrieve the +# completion criteria. This query must return null / empty or the value 0 when +# the task is complete. +# +# Input: number of seconds to sleep between checks (required) +# HIDDEN: set the variable $sql to your sql statement as described +# above +# Output: Items matching what you're checking for, sleep time, a dividing line +# Return: Returns control when query returns zero matches +############################################################################## +CkRunDB() +{ +thislong=$1 +LogMsg "CkRunDB: Monitoring for $sql" + +if [ -z "$thislong" -o -z "$sql" ]; then + LogMsg "CkRunDB: ERROR: Insufficient arguments." + LogMsg "CkRunDB: thislong: $thislong" + LogMsg "CkRunDB: sql: $sql" + exit 1 +fi + +while true +do + matches=`ExecSql "${sql}"` + LogMsg "CkRunDB: Matches: $matches" + if [ -z "${matches}" ] || [ "${matches}" == "0" ]; then + LogMsg "CkRunDB: ===================================================================" + LogMsg "Break from CkRunDB" + break; + fi + LogMsg "Sleeping $thislong" + LogMsg "CkRunDB: ===================================================================" + sleep $thislong +done +LogMsg "CkRunDB: Returning control to calling routine." +} + +############################################################################## +# CkRunOS +# Monitor running Unix processes to see if any are still running. +# +# Input: 1: Unique thing to check on a ps line (required) +# 2: number of seconds to sleep between checks (required) +# 3: S if the run is to be relatively Silent +# Output: None. +# Return: Returns control when all monitored processes are complete. +############################################################################## +CkRunOS() +{ +ckit=$1 +thislong=$2 +silent=$3 +LogMsg "CkRunOS: Monitoring for $ckit" + +if [ "$ckit" = "" ] || [ "$thislong" = "" ]; then + LogMsg: "CkRunOS: ERROR: Insufficient arguments." + exit 1 +fi + +while true +do + if [ "$silent" != "S" ]; then + ps -ef | grep $ckit | grep -v grep | grep -v ckrun + fi + matches=`ps -ef | grep $ckit | grep $$ | grep -v grep | wc -l` + LogMsg "CkRunOS: Matches: $matches" + LogMsg "CkRunOS: ===================================================================" + if [ $matches = 0 ]; then + LogMsg "Break from CkRunOS" + break; + fi + LogMsg "CkRunOS: Sleeping $thislong" + sleep $thislong +done + +LogMsg "CkRunOS: Returning control to calling routine." +} + +############################################################################## +# MultiThread +# Submit multiple tasks in the background. "Mark time" until they are all +# complete, then return control to the calling routine. +# +# You provide a file which has command lines for the tasks, one task per line. +# These lines are "nohup'd" and run in the background. Control is returned +# to your calling routine when all the tasks are complete. +# +# You limit the number of tasks which can be run at once, and you provide a +# unique piece of info to "grep" for on a ps -ef line, to use to count the +# number of running tasks and determine whether or not there are tasks still +# running. +# +# Possible "gotcha": if you are vi'ing or otherwise accessing something +# which puts your "unique" grep field on the ps command line, this routine +# WILL NOT return control to the calling routine! +# +# Input: 1: name of a file which holds commands to run. one line per command. +# 2: max # processes to run at once +# 3: unique part of the command line to "grep" for when determining +# how many of these processes are running +# 4: number of seconds to sleep between checks for task completion +# 5: verbose mode (yes/no) -- not used +# Output: Your tasks are complete. +# Return: exit 1 if incomplete info is provided. +############################################################################## +MultiThread() +{ +tasks=$1 +max_processes=$2 +differentiator=$3 +sleep_time=$4 + +LogMsg "MultiThread: Starting multi-threaded execution of $tasks." +LogMsg "MultiThread: No more than $max_processes will run at once." +LogMsg "MultiThread: Using \"$differentiator\" for unique ps search." + +# read the tasks from the file. for each one: +cat $tasks | while read i +do + LogMsg "MultiThread: Starting $i" + nohup ${i} >/dev/null 2>&1 & + # count the number of jobs running already. + matches=`ps -ef | grep $differentiator | grep -v grep | grep -v ckrun | wc -l` + LogMsg "matches: $matches" + # if the number of jobs running is >= max_processes, fall into this loop. + # otherwise go through the outer loop again to kick off another job. + until [ $matches -lt $max_processes ] + do + LogMsg "=======================================================================" + sleep $sleep_time + matches=`ps -ef | grep $differentiator | grep -v grep | grep -v ckrun | wc -l` + LogMsg "MultiThread: $matches tasks running..." + done +done + +# Run the monitor. It finishes when the tasks are done. Need this, +# even though the jobs are kicked off when needed, as when the above loop +# is done there are still tasks running. We can't return control to the +# calling routine until they are complete. +# CkRunOS $differentiator $sleep_time S +CkRunOS $differentiator $sleep_time + +LogMsg "MultiThread: Tasks complete. Returning control to calling routine." +} + +############################################################################## +# initialize common variables. this is NOT inside a function so that it gets +# executed right away. It sets up a scratch pad for the run. +############################################################################## +TMP=/tmp +TMP_FILE=$TMP/TMP_FILE.$$ + + diff --git a/apps-unlimited/EBSR12.2onOCI/Database/ChangeHomePath.sh b/apps-unlimited/EBSR12.2onOCI/Database/ChangeHomePath.sh deleted file mode 100644 index c09805a..0000000 --- a/apps-unlimited/EBSR12.2onOCI/Database/ChangeHomePath.sh +++ /dev/null @@ -1,75 +0,0 @@ -############################################################################# -# ChangeHomePath.sh -# An include script holding the common routine that changes the oracle -# database home path if needed when switching a standby database to primary. -# -# This is an INCLUDE file. It is code to be included in an outer ksh -# script. It just holds the routine ReConfig, which calls the EBS code. -# -# Note: assumes all the database instances are present in gv_instance when -# the check is done in the main script. -# -# Requires user equivalency across all RAC nodes. -# -# No parameters passed in -# -# Rev: -# 8/23/24 Re-formed as a standard routine to access inside different scripts -# 1/15/24 DPresley Created -############################################################################# -# -ReConfig() -{ -LogMsg "Started ReConfig - Database Home Reconfiguration" - -LogMsg "DbName: $DbName" - -# Calling script has the apps password. Need to get the database password -GetLogon $DB_SECRET_NAME -DB_SECRET=$LOGON - -PERLBIN=`dirname $ORACLE_HOME/perl/bin/perl` -LogMsg "PERLBIN = $PERLBIN" - -PATH=${PERLBIN}:${PATH} - -PERL5LIB=$ORACLE_HOME/perl/lib/5.32.0:$ORACLE_HOME/perl/lib/site_perl/5.32.0:$ORACLE_HOME/appsutil/perl - -# Call the EBS script txkSuncDBConfig.pl -LogMsg "Running txkSyncDBConfig.pl" -{ echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkSyncDBConfig.pl \ - -dboraclehome=$ORACLE_HOME \ - -outdir=$ORACLE_HOME/appsutil/log \ - -cdbsid=${ORACLE_SID} \ - -pdbname=${PDB_NAME} \ - -dbuniquename=${DB_UNIQUE_NAME} \ - -israc=YES \ - -virtualhostname=${VIRTUAL_HOSTNAME} \ - -logicalhostname=${LOGICAL_HOSTNAME} \ - -scanhostname=${SCAN_NAME} \ - -scanport=${SCAN_LISTENER_PORT} \ - -dbport=${DB_LISTENER_PORT} \ - -appsuser=${APPS_USERNAME} | tee -a ${LOG_OUT} - - -LogMsg "Running txkCfgUtlfileDir.pl with mode=setUtlFileDir" - -{ echo "$APPS_SECRET"; echo "$DB_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ - -contextfile=$CONTEXT_FILE \ - -oraclehome=$ORACLE_HOME \ - -outdir=$ORACLE_HOME/appsutil/log \ - -mode=setUtlFileDir \ - -servicetype=opc | tee -a ${LOG_OUT} - -LogMsg "Running txkCfgUtlfileDir.pl with mode=syncUtlFileDir" - -{ echo "$APPS_SECRET"; } | perl $ORACLE_HOME/appsutil/bin/txkCfgUtlfileDir.pl \ - -contextfile=$CONTEXT_FILE \ - -oraclehome=$ORACLE_HOME \ - -outdir=$ORACLE_HOME/appsutil/log \ - -mode=syncUtlFileDir \ - -servicetype=opc | tee -a ${LOG_OUT} - -LogMsg "Completed ReConfig - Database Home Reconfiguration" -} - From 8521b8a011796bc029ff92fa2e81788f8080b052 Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Tue, 28 Oct 2025 13:22:34 -0700 Subject: [PATCH 06/17] Create LICENSE.txt Created LICENSE.txt --- apps-unlimited/EBSR12.2onOCI/LICENSE.txt | 39 ++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 apps-unlimited/EBSR12.2onOCI/LICENSE.txt diff --git a/apps-unlimited/EBSR12.2onOCI/LICENSE.txt b/apps-unlimited/EBSR12.2onOCI/LICENSE.txt new file mode 100644 index 0000000..50883bd --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/LICENSE.txt @@ -0,0 +1,39 @@ +/* +** Oracle E-Business Suite MAA Disaster Recovery Scripts +** +** Copyright (c) 2025 Oracle and/or its affiliates +** +** The Universal Permissive License (UPL), Version 1.0 +** +** Subject to the condition set forth below, permission is hereby granted to any +** person obtaining a copy of this software, associated documentation and/or data +** (collectively the "Software"), free of charge and under any and all copyright +** rights in the Software, and any and all patent rights owned or freely +** licensable by each licensor hereunder covering either (i) the unmodified +** Software as contributed to or provided by such licensor, or (ii) the Larger +** Works (as defined below), to deal in both +** +** (a) the Software, and +** (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if +** one is included with the Software (each a "Larger Work" to which the Software +** is contributed by such licensors), +** +** without restriction, including without limitation the rights to copy, create +** derivative works of, display, perform, and distribute the Software and make, +** use, sell, offer for sale, import, export, have made, and have sold the +** Software and the Larger Work(s), and to sublicense the foregoing rights on +** either these or other terms. +** +** This license is subject to the following condition: +** The above copyright notice and either this complete permission notice or at +** a minimum a reference to the UPL must be included in all copies or +** substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +** IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +** AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +** OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +** SOFTWARE. +*/ From 63f9a685a9a433dd0c260792e134f9866ad45e6b Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Tue, 28 Oct 2025 18:14:11 -0700 Subject: [PATCH 07/17] New readme files New readme files for each directory --- .../EBSR12.2onOCI/AppTier/README.md | 95 +++++++++++++++++++ apps-unlimited/EBSR12.2onOCI/DBTier/README.md | 59 ++++++++++++ apps-unlimited/EBSR12.2onOCI/README.md | 62 ++++++++++++ 3 files changed, 216 insertions(+) create mode 100644 apps-unlimited/EBSR12.2onOCI/AppTier/README.md create mode 100644 apps-unlimited/EBSR12.2onOCI/DBTier/README.md create mode 100644 apps-unlimited/EBSR12.2onOCI/README.md diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md new file mode 100644 index 0000000..175967b --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md @@ -0,0 +1,95 @@ +# Oracle E-Business Suite Maximum Availability Architecture Disaster Recovery Scripts + + Version 1.0 + +Copyright (c) 2025 Oracle and/or its affiliates. + +Released under the Universal Permissive License v1.0 as shown at +. + +The scripts provided here are a potential starting point for implementing full-stack automation of disaster recovery site switchover, failover, and middle tier file synchronization for Oracle E-Business Suite (EBS) R12.2 that have their database deployed on Oracle Exadata database machines in Oracle Cloud Infrastructure (OCI). They are examples. They are not part of any Oracle product, nor are they under any warranty. They are intended for customers to learn from and perhaps modify for their deployment. + +See the overall README for these scripts, in the parent directory, EBSR12.2onOCI. + +## Overview + +The automation scripts for the application tier start and stop EBS application services and manage replication of the application file systems for different scenarios – normal operations at the primary, switching the standby to primary, and using the standby for snapshot standby testing. + +The scripts should be placed in a common location at each site, one that each application tier compute instance at that site can access. As on the database servers, this directory is referenced as $SCRIPT_DIR. We recommend - and assume - adding the script directory to the administrator account’s PATH. + +As with the database scripts, these scripts are written in Korn shell (ksh), use common routines / standard functions, and spawn SQL*Plus in a coroutine if needed, so that only one database connection is started. + + +## Using the EBS MAA DR Scripts + +Please refer to the following solution playbooks for details about the Oracle E-Business Suite (EBS) topology, setup, and how to use these scripts: + +* [Learn about maximum availability architecture for Oracle E-Business Suite](https://docs.oracle.com/en/solutions/learn-about-maa-for-ebs/index.html) + +* [Provision and deploy a Maximum Availability Architecture solution for Oracle E-Business Suite on Oracle Cloud Infrastructure](https://docs.oracle.com/en/solutions/deploy-maa-for-ebs-on-oci/index.html) + +The scripts should be placed in a common location at each site - one that all application and middle tier compute instances can access. In this project, we created the following directory location on each site’s shared file system, and labeled it $SCRIPT_DIR in our .env file: +/u02/app/ebs/custom_admin_scripts/VISPRD + +ALWAYS test scripts thoroughly on a test environment before promoting them to a production environment. + +> [!IMPORTANT] +> Verify that you have completed all the prerequisites listed in the playbooks referenced above before testing these scripts. + + +## Scripts Managing the Application + +The scripts for starting and stopping the application with awareness of switchover, failover, and operating as a snapshot standby for testing purposes + +===================================== + +| Script | Content | +| ------ | ------ | +| ebsAppTier.env | Configuration details for middle tier scripts, so the scripts themselves are kept generic | +| web_entry_test.env | Parameters for web entry points when using standby for snapshot standby testing | +| web_entry_prod.env | Parameters for production web entry points, if they differ at the two sites | +| stdfuncs.sh | A set of standard functions – generic routines that are useful when scripting Linux, database, and EBS administrative tasks – to include in calling scripts on both the database and the application tier. Using these common functions simplifies each working script, making the code easier to write and maintain. As this file is simply a set of common routines , it does not start with a shebang. The calling script must have #!ksh as its first line for these routines to work properly.| +| startEBS.sh | This script combines the tasks needed to start EBS for three scenarios – normal operations, at the standby site for testing purposes, and as the final part of a switchover from the primary to the standby site for production operations. | +| stopEBS.sh | Stop EBS and middle tier services, either as a normal shutdown or as part of a switchover to a standby site | + + +## Scripts Managing File System Replication + +Data Guard manages replication of data stored in the database from the primary site to the standby. Certain file systems also need to be replicated – the application and middle tier software, and the file-based output generated by the application programs. The software directories do not change frequently but do need to be kept in sync across the sites when the source is patched. The file-based output holds batch processing logs, report output, and interface files that have been generated for other systems outside the EBS database. These files need to be as close to in sync with the data inside the database as feasible, to ease the task of resolving differences between the state of data in the database and these flat files on failover. + +The rsync script in this section replicates specific file system directories from the primary to the standby. The core synchronization script addresses these basic requirements: +* Regularly synchronize the file systems holding the relatively unchanging application and middle tier software to the standby +* Aggressively synchronize the file systems holding runtime output, keeping them as up to date as possible at the standby +* Avoid replicating instance-specific configuration data +* Allow file system replication to continue while using the standby for snapshot standby testing +* Multi-thread the data transfers so that they complete in a reasonable amount of time + +The rsync direction is managed through site role transitions. The scripts are deployed at each region/site and are designed to always be running at each site as a cron job. The script's behavior depends on whether the rsync process is enabled or disabled and whether the site's database is in the PRIMARY or STANDBY role. These scripts respond to database role transitions and automatically change the direction of the replication. + +We recommend the actual rsync script be run on a dedicated pair of compute instances, one at each site, so that snapshot standby testing at the DR site can take place without disrupting replication of production changes to the standby file system. + +Example CRON job entries for the rsync scripts: +SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD +*/5 * * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/fastFiles.env +0 1 * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/slowFiles.env + + +Note: These scripts are built with the assumption that the EBS application tiers are deployed on shared file systems in OCI. We used OCI’s File System Service (FSS). + + +===================================== + +| File | Content | +| ------ | ------ | +| stdfuncs.sh | This is the same file as described above, in Managing the Application | +| ebsAppTier.env | This is the same file as described above, in Managing the Application | +| ebsRsync.env | Environment settings for rsync scripts. They need database access and the ability to connect to the remote app tiers | +| slowFiles.env | Pointers to the files detailing directories to copy and files to exclude from those directories, and the files to copy in addition to those in the directories, for files and directories that DO NOT change frequently | +| fastFiles.env | Pointers to the files detailing directories to copy and files to exclude from those directories, and the files to copy in addition to those in the directories, for files and directories that DO change frequently | +| Directories.txt | Files holding one line per directory to be synchronized by either the "slow" (static) or "fast" (dynamic) synchronization runs | +| ExcludeFiles.txt | Files holding one line per file to be excluded from either the "slow" (static) or "fast" (dynamic) synchronization runs | +| IncludeFiles.txt | Files holding one line per file to be added to either the "slow" (static) or "fast" (dynamic) synchronization runs | +| enable_ebs_rsync.sh | Set this site up to be the source for file system replication, and enable the processes | +| disable_ebs_rsync.sh | Disable the rsync process at this site. Must be done at the standby site. | +| syncEBS.sh | Multi-threaded file system synchronization driver. | +| killSsync.sh | Only used on switchover. Kill any currently-running rsync process so a new one can be started, to efficiently ensure the standby file system is up to date prior to activating the standby site. | diff --git a/apps-unlimited/EBSR12.2onOCI/DBTier/README.md b/apps-unlimited/EBSR12.2onOCI/DBTier/README.md new file mode 100644 index 0000000..7cd8739 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/DBTier/README.md @@ -0,0 +1,59 @@ +# Oracle E-Business Suite Maximum Availability Architecture Disaster Recovery Scripts + + Version 1.0 + +Copyright (c) 2025 Oracle and/or its affiliates. + +Released under the Universal Permissive License v1.0 as shown at +. + +The scripts provided here are a potential starting point for implementing full-stack automation of disaster recovery site switchover, failover, and middle tier file synchronization for Oracle E-Business Suite (EBS) R12.2 that have their database deployed on Oracle Exadata database machines in Oracle Cloud Infrastructure (OCI). They are examples. They are not part of any Oracle product, nor are they under any warranty. They are intended for customers to learn from and perhaps modify for their deployment. + +See the overall README for these scripts, in the parent directory, EBSR12.2onOCI. + +## Overview + +In OCI, when the database software home is created for the standby database, there is no guarantee that the oracle home path will match that of the primary. If, after a switchover or failover, the oracle home path is different from that at the primary, EBS tooling and run-time operations will fail. We’ve provided a mechanism to check for this condition, and, if needed, to reset the oracle database home path and reconfigure UTL_FILE_DIR on the new primary database nodes, on switchover or failover: + +* A database role change trigger that is fired when the database transitions from standby to primary. The trigger uses DBMS_SCHEDULER to dispatch a job that runs the script EBS_DB_RoleChange.sh. This job is configured to execute immediately. +* The script EBS_DB_RoleChange.sh, which tests to see if the database home path is the same here on the standby (new primary) as it was on the (old) primary. If it is the same, it exits – no more work is needed. If it is different, it inserts one row for each database instance into a custom controlling table (APPS.XXX_EBS_ROLE_CHANGE), then executes the EBS code to reconfigure the database home paths, once on each RAC node. + +If reconfiguration is needed, as configuration work is completed on each RAC database node, that database node’s row in the controlling table is deleted. The custom EBS startup script we provide for the application tier checks to be sure that table is empty when executed using “Switchover” mode, signifying the database configuration is complete and it is safe to start application services. + +The first RAC instance that completes the role change transition to the PRIMARY role will fire the database role change trigger. As this cannot be determined in advance, the directory structure must be the same on all RAC nodes and these scripts must be deployed to each RAC node. + +As with the application server scripts, these scripts are written in Korn shell (ksh), use common routines / standard functions, and spawn SQL*Plus in a coroutine if needed, so that only one database connection is started. + + +## Using the EBS MAA DR Scripts + +Please refer to the following solution playbooks for details about the Oracle E-Business Suite (EBS) topology, setup, and how to use these scripts: + +* [Learn about maximum availability architecture for Oracle E-Business Suite](https://docs.oracle.com/en/solutions/learn-about-maa-for-ebs/index.html) + +* [Provision and deploy a Maximum Availability Architecture solution for Oracle E-Business Suite on Oracle Cloud Infrastructure](https://docs.oracle.com/en/solutions/deploy-maa-for-ebs-on-oci/index.html) + +The scripts should be placed in a common location in each database home. In this project, we created the following directory location in our CDB home, and labeled it $SCRIPT_DIR in our .env file: +/home/oracle/ebscdb/custom_admin_scripts/VISPRD + +ALWAYS test scripts thoroughly on a test environment before promoting them to a production environment. + +> [!IMPORTANT] +> Verify that you have completed all the prerequisites listed in the playbooks referenced above before testing these scripts. + + +## The Scripts + +The scripts for starting and stopping the application with awareness of switchover, failover, and operating as a snapshot standby for testing purposes + +===================================== + +| Script | Content | +| ------ | ------ | +| EBSCFG.env | Values needed to reconfigure EBS metadata post switchover or failover | +| crt_db_role_change_trigger.sql | Create the table xxx_EBS_role_change and the trigger Configure_EBS_AfterRoleChange. Execute only once per environment. | +| stdfuncs.sh | A set of standard functions – generic routines that are useful when scripting Linux, database, and EBS administrative tasks – to include in calling scripts on both the database and the application tier. Using these common functions simplifies each working script, making the code easier to write and maintain. As this file is simply a set of common routines , it does not start with a shebang. The calling script must have #!ksh as its first line for these routines to work properly.| +| EBS_DB_RoleChange.sh | Spawn the scripts to reconfigure EBS on the database RAC nodes if the paths changed | +| startDBServices.sh | Start any services that do not start with the PDB is opened, either because they are not managed by CRS or they are defined within a pluggable database | +| ChangeHomePath.sh | A function included in both local and remote ksh scripts, to change the database home path on switchover. Called by both callReconfig.sh and the EBS_DB_RoleChange.sh scripts. | +| callReConfig.sh | Reconfigure the database homes on remote database nodes. | diff --git a/apps-unlimited/EBSR12.2onOCI/README.md b/apps-unlimited/EBSR12.2onOCI/README.md new file mode 100644 index 0000000..3bf0bb0 --- /dev/null +++ b/apps-unlimited/EBSR12.2onOCI/README.md @@ -0,0 +1,62 @@ +# Oracle E-Business Suite Maximum Availability Architecture Disaster Recovery Scripts + + Version 1.0 + +Copyright (c) 2025 Oracle and/or its affiliates. + +Released under the Universal Permissive License v1.0 as shown at +. + +## Overview + +The scripts provided here are a potential starting point for implementing full-stack automation of disaster recovery site switchover, failover, and middle tier file synchronization for Oracle E-Business Suite (EBS) R12.2 that have their database deployed on Oracle Exadata database machines in Oracle Cloud Infrastructure (OCI). They are examples. They are not part of any Oracle product, nor are they under any warranty. They are intended for customers to learn from and perhaps modify for their deployment. + +The files for this project fall into the following categories: + +1. Environment files holding configuration details +2. Scripts to set up database structures needed for the process +3. Scripts to configure the database nodes during switchover if necessary, executed via a database rol change trigger +4. Scripts that replicate middle tier file system contents from one site to another +5. Wrapper scripts that call the EBS startup and shutdown scripts as well as managing file system replication and application configuration, within the context of simple startup/shutdown, standby testing, and site role transition +6. A set of standard functions that make the scripted tasks easier to implement and maintain + +The wrapper scripts can be used by the OCI Full Stack Disaster Recovery (FSDR) service to automate switchover and failover. + +Note: Korn shell (KSH) was used for these scripts, as it provides the ability to use a coroutine – a process that is forked by the main shell script but not spawned to be fully separate. The KSH coroutine remains an attached “child” of the outer KSH script, able to receive requests from the outer script and return information to the outer script. In this case, the outer script forks a SQL*Plus session as a coroutine. The SQL*Plus session remains in place for the duration of the execution life of the shell script. This removes the overhead of repeatedly spawning SQL*Plus for every single database request. + + +## Prerequisites + +These requirements must be in place to implement the scripts: +1. Logical hostnames - this simplified, reduced-outage method of switching between sites relies on logical hostnames for both the application and database tiers at both the primary and secondary sites. +2. OCI command line interface (OCI CLI) must be installed and configured on all servers hosting or accessing the database or application tier file systems, at each region +3. Region-local OCI vaults - To keep passwords secret, all required passwords must be stored in region-local OCI vaults that can be accessed by the OCI CLI. +4. Cross-site user equivalency - A pair of application servers (one from each region) need to have user equivalency configured, to allow passwordless rsync synchronization. + + +## Using the EBS MAA DR Scripts + +Please refer to the following solution playbooks for details about the Oracle E-Business Suite (EBS) topology, setup, and how to use these scripts: + +* [Learn about maximum availability architecture for Oracle E-Business Suite](https://docs.oracle.com/en/solutions/learn-about-maa-for-ebs/index.html) + +* [Provision and deploy a Maximum Availability Architecture solution for Oracle E-Business Suite on Oracle Cloud Infrastructure](https://docs.oracle.com/en/solutions/deploy-maa-for-ebs-on-oci/index.html) + +ALWAYS test these scripts on a test environment before promoting them to a production environment. + +> [!IMPORTANT] +> Verify that you have completed all the prerequisites listed in the playbooks referenced above before testing these scripts. + + +## Structure + +The scripts are grouped into these folders: + +===================================== + +| Folder | Content | +| ------ | ------ | +| AppTier | Wrapper scripts for startup and shutdown and rsync, standard functions, and .env files | +| DBTier | Scripts to set up database structures, configure database nodes during switchover if needed, standard functions, and .env files | + + From 66bf872739f3da2186dd1b09b9c5f1f2a6bfe84e Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Wed, 29 Oct 2025 13:37:54 -0700 Subject: [PATCH 08/17] Update README.md Attempt to fix formatting of cron job examples --- apps-unlimited/EBSR12.2onOCI/AppTier/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md index 175967b..5327348 100644 --- a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md @@ -69,10 +69,11 @@ The rsync direction is managed through site role transitions. The scripts are d We recommend the actual rsync script be run on a dedicated pair of compute instances, one at each site, so that snapshot standby testing at the DR site can take place without disrupting replication of production changes to the standby file system. Example CRON job entries for the rsync scripts: +,,, SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD */5 * * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/fastFiles.env 0 1 * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/slowFiles.env - +,,, Note: These scripts are built with the assumption that the EBS application tiers are deployed on shared file systems in OCI. We used OCI’s File System Service (FSS). From ad945781434e1c75f84993ae9ac5fb060381d723 Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Wed, 29 Oct 2025 13:39:20 -0700 Subject: [PATCH 09/17] Update README.md Trying again to fix cron job entries --- apps-unlimited/EBSR12.2onOCI/AppTier/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md index 5327348..175967b 100644 --- a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md @@ -69,11 +69,10 @@ The rsync direction is managed through site role transitions. The scripts are d We recommend the actual rsync script be run on a dedicated pair of compute instances, one at each site, so that snapshot standby testing at the DR site can take place without disrupting replication of production changes to the standby file system. Example CRON job entries for the rsync scripts: -,,, SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD */5 * * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/fastFiles.env 0 1 * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/slowFiles.env -,,, + Note: These scripts are built with the assumption that the EBS application tiers are deployed on shared file systems in OCI. We used OCI’s File System Service (FSS). From 8669effc4da4a039d8b513c2c99e178460481b5f Mon Sep 17 00:00:00 2001 From: Darryl Presley Date: Wed, 29 Oct 2025 13:41:18 -0700 Subject: [PATCH 10/17] Update README.md --- apps-unlimited/EBSR12.2onOCI/AppTier/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md index 175967b..5745268 100644 --- a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md @@ -70,9 +70,10 @@ We recommend the actual rsync script be run on a dedicated pair of compute insta Example CRON job entries for the rsync scripts: SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD +,,, */5 * * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/fastFiles.env 0 1 * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/slowFiles.env - +,,, Note: These scripts are built with the assumption that the EBS application tiers are deployed on shared file systems in OCI. We used OCI’s File System Service (FSS). From 699fcd2a13bcbf4dd0ca11a597a34bbcee7a8f5c Mon Sep 17 00:00:00 2001 From: Darryl Presley Date: Wed, 29 Oct 2025 13:42:20 -0700 Subject: [PATCH 11/17] Update README.md --- apps-unlimited/EBSR12.2onOCI/AppTier/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md index 5745268..8499a1f 100644 --- a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md @@ -70,10 +70,10 @@ We recommend the actual rsync script be run on a dedicated pair of compute insta Example CRON job entries for the rsync scripts: SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD -,,, + */5 * * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/fastFiles.env 0 1 * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/slowFiles.env -,,, + Note: These scripts are built with the assumption that the EBS application tiers are deployed on shared file systems in OCI. We used OCI’s File System Service (FSS). From 60a438ac6b366e98b2be9e53b82c6cf236d1000a Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Wed, 29 Oct 2025 13:44:17 -0700 Subject: [PATCH 12/17] Update README.md Still trying to separate the cron job entries --- apps-unlimited/EBSR12.2onOCI/AppTier/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md index 8499a1f..9cba4a6 100644 --- a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md @@ -68,9 +68,8 @@ The rsync direction is managed through site role transitions. The scripts are d We recommend the actual rsync script be run on a dedicated pair of compute instances, one at each site, so that snapshot standby testing at the DR site can take place without disrupting replication of production changes to the standby file system. -Example CRON job entries for the rsync scripts: +Example CRON job entries for the rsync scripts: SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD - */5 * * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/fastFiles.env 0 1 * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/slowFiles.env From bae88c47600a6ebf58adf598c2bf449bdf047c7b Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Wed, 29 Oct 2025 13:45:01 -0700 Subject: [PATCH 13/17] Update README.md --- apps-unlimited/EBSR12.2onOCI/AppTier/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md index 9cba4a6..a75649f 100644 --- a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md @@ -69,8 +69,8 @@ The rsync direction is managed through site role transitions. The scripts are d We recommend the actual rsync script be run on a dedicated pair of compute instances, one at each site, so that snapshot standby testing at the DR site can take place without disrupting replication of production changes to the standby file system. Example CRON job entries for the rsync scripts: -SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD -*/5 * * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/fastFiles.env +SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD +*/5 * * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/fastFiles.env 0 1 * * * applmgr $SCRIPT_DIR/syncEBS.sh $SCRIPT_DIR/slowFiles.env From a29b7751a967e2965ea1e5ea1a427f23e1184010 Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Wed, 29 Oct 2025 13:47:06 -0700 Subject: [PATCH 14/17] Update README.md Removed lin of = signs as spacer --- apps-unlimited/EBSR12.2onOCI/DBTier/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps-unlimited/EBSR12.2onOCI/DBTier/README.md b/apps-unlimited/EBSR12.2onOCI/DBTier/README.md index 7cd8739..aa001fa 100644 --- a/apps-unlimited/EBSR12.2onOCI/DBTier/README.md +++ b/apps-unlimited/EBSR12.2onOCI/DBTier/README.md @@ -46,8 +46,6 @@ ALWAYS test scripts thoroughly on a test environment before promoting them to a The scripts for starting and stopping the application with awareness of switchover, failover, and operating as a snapshot standby for testing purposes -===================================== - | Script | Content | | ------ | ------ | | EBSCFG.env | Values needed to reconfigure EBS metadata post switchover or failover | From 6766b6d5e029b25abba870d73010ebbc64995d30 Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Wed, 29 Oct 2025 13:48:08 -0700 Subject: [PATCH 15/17] Update README.md Removed unnecessary === as dividers --- apps-unlimited/EBSR12.2onOCI/AppTier/README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md index a75649f..cb8b04f 100644 --- a/apps-unlimited/EBSR12.2onOCI/AppTier/README.md +++ b/apps-unlimited/EBSR12.2onOCI/AppTier/README.md @@ -41,8 +41,6 @@ ALWAYS test scripts thoroughly on a test environment before promoting them to a The scripts for starting and stopping the application with awareness of switchover, failover, and operating as a snapshot standby for testing purposes -===================================== - | Script | Content | | ------ | ------ | | ebsAppTier.env | Configuration details for middle tier scripts, so the scripts themselves are kept generic | @@ -76,9 +74,6 @@ SCRIPT_DIR=/u02/app/ebs/custom_admin_scripts/VISPRD Note: These scripts are built with the assumption that the EBS application tiers are deployed on shared file systems in OCI. We used OCI’s File System Service (FSS). - -===================================== - | File | Content | | ------ | ------ | | stdfuncs.sh | This is the same file as described above, in Managing the Application | From 31175469a563a04df370c6df7ef2c8e7fca7cc74 Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Wed, 29 Oct 2025 13:49:07 -0700 Subject: [PATCH 16/17] Update README.md Removed === signs as divider --- apps-unlimited/EBSR12.2onOCI/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps-unlimited/EBSR12.2onOCI/README.md b/apps-unlimited/EBSR12.2onOCI/README.md index 3bf0bb0..8852ec4 100644 --- a/apps-unlimited/EBSR12.2onOCI/README.md +++ b/apps-unlimited/EBSR12.2onOCI/README.md @@ -52,8 +52,6 @@ ALWAYS test these scripts on a test environment before promoting them to a produ The scripts are grouped into these folders: -===================================== - | Folder | Content | | ------ | ------ | | AppTier | Wrapper scripts for startup and shutdown and rsync, standard functions, and .env files | From aadaa594885e8ae0223015418f7dba6af32bb68b Mon Sep 17 00:00:00 2001 From: Lyn Pratt Date: Wed, 29 Oct 2025 15:11:28 -0700 Subject: [PATCH 17/17] Minor text edits to readme files Minor text edits to readme files --- .../EBSR12.2onOCI/.vs/EBSR12.2onOCI/v17/.wsuo | Bin 0 -> 3584 bytes apps-unlimited/EBSR12.2onOCI/.vs/slnx.sqlite | Bin 0 -> 90112 bytes apps-unlimited/EBSR12.2onOCI/AppTier/README.md | 12 ++++++------ 3 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 apps-unlimited/EBSR12.2onOCI/.vs/EBSR12.2onOCI/v17/.wsuo create mode 100644 apps-unlimited/EBSR12.2onOCI/.vs/slnx.sqlite diff --git a/apps-unlimited/EBSR12.2onOCI/.vs/EBSR12.2onOCI/v17/.wsuo b/apps-unlimited/EBSR12.2onOCI/.vs/EBSR12.2onOCI/v17/.wsuo new file mode 100644 index 0000000000000000000000000000000000000000..c52d88f5db1cc5a65012067ebf399ea4774ebfc5 GIT binary patch literal 3584 zcmeHJ%_~Gv6#vaIqAbjY%u13hP$*&{UoRwPdOo7w!eGe9o6!tKvX>M~H7li9*i35H z`~}2TB5PY?!}B|nS2LK`6B}dB?S7s6yYJq2&pp3$FE8A82Qkk*K1e(A@M;vHAVu$B z+iCVofPA(^_i7l1sPmZF%*h`*ffw#o?3a`Oc>*dzOe?5>f*|WK*2R@=ODSAwK5u8D z$rpC8b}*@yvxEO_%wJyrH|;O6z)CJFixcJjHx3s;9q(WtZ(Ilq=;!U5WlO=D)h9lU zmBQ(e^Ov|J^(Vj=3W-|`UrF&|mA8Hg^ITu@9EREVGY2q+1~j9EWoD^iM3i++$&5@N zxlQl>sAsM%^>;sH&J~|DV?iz+n5UBcwYZ`9j=bH(?m63Mzs*zs@YvCfHfR_{gp3zv zsbLVE@Ihrc!la>xygW^w)QONcf?#^dmMiF^c8WcnjOl0X$1+m{b<_uwtg0t*0nBhz zK^NIoC7(8;o;gH}7v1E3jcduw5u#-m8c_;$J=}{ztj_t>Ti)^g=7yp3=jd+i4tr;YP_s|6fq(t4XZsqJ*P3YImoC#|)P zo!XPOL3@a_>`J$LELy>ybV5Sn(7|%j{c)@iAaQ_@j^l?A#{oKt6?aIB#A$VaSP-yU z5WM&1_Yc?EG_+mzYbh_D_x-;2zVGwC-#2gGvz@)ZR90kRqgLOP6k&quqG+1>F+rdx zsvZ3uMSuFM8@=)A7wA82dEe}9J2kfP0j`MVKgK$T`H#czgu6mlgKu`e(eYk@@n2`& zYWt`y)AmBMDj@$;L!bj&x_g!jL|%;1yVuLrl6*hAv$YFR1Qss;6J_10p! zBBx4)l$R2p%!rAcD5TO0;!DEXp6bZ6K>@v%({BB|FuZ1OHXq&XVFQsQGV`*xnQ3WL z_BM`dVVqgAg-KX3FC>?jmT+Iw%gIDmjK2DOI1q`&=+|S4v|f>&U3XrynlZV={F3O= zb2d1va&bXSmGX#hPP{B;gq2L{S|W2(xGLTh605o8R2o%#O-$#IRp@VZX=zleWu;!b zTQ13UYiV6aRl$Rh5f{abm`;jWVNEX~R+X}{lOHxRP!&n!(azjy~yHrrLuE*WgWqJh<^=I}w6p4nw9KpZI9orWTB8VH?P7^PsA-Ve*AT2aFBnW^1t z-T_@HS*vVsR^57RFuHpo6o?d1Top)M5lf3wwJO(>Qt`H2aGS11nNu-rk20sYX+4&h zbCyBA=Wab8eYhGV5%*f2M4Ypf^EzaYIHwr3uSc9yWR00UM4UFDUN*Zt#};v<-PR8C zc>bb?wY5{azuTD2XAx!yp5=9>8*P#u9tG)h0bMEp>%Os(F2)oJ%ZyU^l+y1+U}d+yNesau#b*TZ_Iuq7yys)@6~a zSxm*-V1EmP&5|vQ^8z1zc*Unq(n)iYw$O6g*=`RIr`QrAPSO5CMYY-V@;$6XnvQ`v z*O7S)ucz>9A4`JAo8eOp%qB0)r`*fHC8?n-uQ%lST^TKl%$ZkPEeZ?bVq$eEClt5q zBw`hPnnpohV*-)!etP#536rd>DCO!c64TmxTg~y={mHFI+=wjq)dJ0eHoDU0kBp4a zH;Lyo?w~cATxiI5w&f~Xwb?Hjo8LHu!&T(`qo`zb_c9%b^!L*bWKySQoA$5GR>zu_ zYjHU(=ZSgR4XLt?#?j%OtLRznP>@9_!~GS-|A6};`Ufu{00e*l5C8%|00;m9AOHk_ z01yBIpBe&386S0lPvL__v=NCFyiqrAg>6v0N zHa#QF#wO>A(=lnTbTJlRmp3M+=Ss8d8#A%eTzouUoGQiUW~L;hBqODnsfk#8V`_GK zePey&;tW#SD9%jHjnBnqOA=~seXeC3 zWyi-R#->>Q`&1kM9g6=B|G}qbfWc5800e*l5C8%|00;m9AOHk_01yBIpLqfyn(3#t zj~FnBMyON$h|7^SCPq6y?J^of8VvspivI@xm;66}=HUSVAOHk_01yBIKmZ5;0U!Vb zfB+Bx0?!_S9_9k=`j`XL&s?ILe8i!xiy7*)eFy-5{(m(1I>rAZ|JVHQ^6&6J!z=t6 ze~ItqKH$E|{UUdlOLG^v!|Xq?-)4WE{UZAc`x5&cdz_`he-nN;{DtsVcs2Z7xI6T( zp>K!27W(;+63T=ILLI^PgMS?S6;v_2fB+Bx0zd!=00AHX1b~1ifxb~cH9&Xz8%k+o zyIO3FHE#Plz8ASTaO~f{b$Y~4jT4zvR~F{8=zGUy^toQE%CYl)>J(BzKOD4hO&r@S z8HER;ergIy#QAJtVZM;5RpjJtsd`Jc7VjPQQ>Rs> z@-3@8a@J3sK=QF$W#wgA-ZH8_J)mN^C$AUK?;zB73JUu13v4W7kUHa3*{at{HkFg7 z)#e*J)ne{;U6x9XG3CBuR52*{sX5d}Q$x6hO6{K7eQU|%5vSBT4rh+~sR>lJzFjR~$7|f)R!X&d zRV$`rJr0*ONc0_1t$Mj!sbmpfYpLViYP;s3*sMD2l-jI1q*^6c@o!5N0Oj>peh ze}9*s8bp>OVTQ=86`bJxR8$ovwzhI*`>7#kWVJ3PbKkVgXcFg68#H13pTs?vkEw;c^T z5-g>XVmd2gN7Y3~e158z>hLejW9WKr596o$QLZ)?diK#a)H13^pFs5dL$sgjM(SgC z8+sN#{~ry%P4PeEzsmk7{}KOp{1@2~{-@X;J|F%N?FlUKQJ&@gCHyDc_rmXUf5!a= z_siT{+%Er3{x`Ws_;U{Ry_nE_qJ%kO>5U z01yBIKmZ5;0U!VbfB+EC3GmDSZP^AIJ<5!uYvt;r1$Ck}tm^ne~Pg!TNneMHb0eiN-9dia(ho7%4 zTQH~lm^qT?-gXgiFR;40M{$Z=8rv%;9mGzMiafVbj+-LqV|RZqGlMy!%@@a$cAr|m zu|?8*h#8`7+aky8IcQTL5@9B2kL{16wqfhRHCwhhj^KK1TN~Z>98~jRT(id(#-T1| zkhX4HbRA}*IK#44!Q<2MCfgI7MdoC~Vr<^q5Mk_jURw{L)~*)xbhSAwI;nql)1L1b_e#00KY&2mk>f00e*l5C8%|;OP@+XK30tO41RM zo+oLPq{Ac~BI!Aj4wCdNPMHCco+0UJk_sd}MbeWbJwejrB<&|@A4z*jdW@tIk{%^# z4@r-Zw40=dNqUH+T_oj6%8`^MX_%xTk_JiINzx9I27C-f`*G5a6CX|(oU}0v)v2EU zCn^2|{>$P2=Km8t`+p()54;lobACDeRkRB*$w#=4xc9<8$^BvYOWeEMm$+BCJ6wVP zeg5m*a=6M(ai=*pyvlyeexLmV_ABhqg_G<9_70n4e}o-m!%u&R!2%!v1b_e#00KY& z2mk>f00a(@z#-oNZ9T5{jUMxj;~eLKy>Eo~oubVnd*As!-xTe6Xzz=5`A!p&{%wrm zv%VDF;^5vl6!Bf4-ADJnb3MKhRM_!-i$TtJf;NuteP@Z;?gM;gz#-6&@R>8DTE`(i zbNaY%4s{=$)w_@J8G-c6JjiEGsTsymK6BE^lR2SQ=y{ya9JdIaht^Dgzi)<&g!@RJ z>C@UV4)vMdZr>2nwtd^-m?IB=+CS3ko1ndp_L-yh0cLtg8&qmZRqEo#5~$wC{Y;p6t=EA+ z6WW85GC^-AWjei_lb z*G=K`fBgM_s_Ot}1E>lJ00AHX1b_e#00KY&2mk>f00e*l5P0SY;PZcY{(t6%1q=cL zKmZ5;0U!VbfB+Bx0zd!=00AIypakIj|3Gmf00f>% z0&xESOb!be1q6Tq5C8%|00;m9AOHk_01yBIK;S?L!1@1y;)Ke801yBIKmZ5;0U!Vb zfB+Bx0zd!=Jd*_A{QsF87BC7300AHX1b_e#00KY&2mk>f00e-*ff9h{{{zJdl>q@D z00e*l5C8%|00;m9AOHk_01$X43Bc$7pUGhXqksSq00KY&2mk>f00e*l5C8%|00Vc&-_P!BuGcCH@pUb+}HGSGLaRd zuRb3RL}D@e^_U{9S7c|`o!6{pOfE6MBzp9m4GybZTo6;GJmQ-ZFN+yrC6l_A$lMgJ ziZ_MCYHm4|M%7*u(>Y`n`deLE8r5o9sn_n7OLE;>TGvrk@E~NwMKL3$lVVm_(@Tg| zrL64ahm8zWMbs>U#%*%5}D!n)Kt_k*uhmV zvbbHT>|EcLD&>u`T=J^GJ|23xtH?`CUV4vpX`)z^8;$aMxq`cBV0EfFe9)z5cG(IL z2TFFQp~#yCLT466DVU}A!*Z!slyH1zYWJFVKvzoED%+b?w;mge?p_E5A_Wvz1rk@p z(xOzY%JrmFye${prmIorR1Djr%qebKk0s`uWsvW=ThB)yt_DfOy_P2t=Pc#C4%s8l zDMsz<5$6Pd?VNZ;81|k=t^aGxFqTVd7uYeOhLp3a@ z4eM$;b$!*i^XNK8A&YzIGOc6i9;4@|COak)LwZB5H&CFtX8s3MM<5c7(hn~YKh!Hz ztG8cu+I`S2w0NK{uny85JWuru!(g>L<}`b;L zb-Ah(@U-oeb$E`SQ_EU|Whk9$c){RxcOFHzGh%|X0QTkGd4C}CGMf2z%$d&;g<8|@ zl9u_;q8`xtqb-4)#ah(XqHmArL{GbQS>$RKQ}H&~-@;(CWDDcGz(*fm@u`z^(ww9% zw48Rf+XKWYwuFdNw7*bMZ8p7p4=a(TV_?p8WFEuoDg4^UlHl=X_*4V4$qVx-_cCxv zYADO=4Y__-M#~~|=G9hb9{Dxa_bQ{BFlZXK(nBYuC)0hBO~-p;yH~wXpJTp8uFcOxr$b8_Dja*HxA)& z6*>PXDjD6qOa~(U{qzHw)T!B~{cE$;v8Lr(Tu#e*VxD$Gs%)ciba+}^#xlQhVWx3(J))?PN zi7yIHnIJXT;ESo;6%;ec)l4>ZLv-sTvf45Y$5s|SUL+Uu)Jdh&=rQyK^x)~j zfi)Mi=(*n1_Uy3mywx5&>*(y!oWln7AFua2eKFZj=80kG2#5T7dAuqjx zo|C;jMo4AJN_Ka+I}llm(z`bu%Zdd_k(xdRnGS)~j@su^yRc~;p7&{79iC~;I&{qW z=uh82OjfX;A938IaUrt+zUr}0l6IkGuCxpGH)Wc27^a%{SnZBwI@dn#vyb`ct*@4? zz0;p_Y`1+~QSHW~wo)GTC}rLUS})}Hv98hXHaYPn`_55Ls^5|ouiH?Qt(s)5s>t{E zQUX6Y#1EluhY8!Z16dztw5mVTg}33l>AeyDHCcG0LFPGTy5O zpeKfSS1Y3z<8 zG(2P8kh%l+lRw6Kg_n2O?>){w@s_0%=fO@yW_R|p1!&OL{L{4U={|_q?81w}ykN{O zP3DgO!^y_jd9v?IX?sp*xd0q~r0|)JWoB_6S~Pu9gToIv{Mgq{$78O*^mC2R-r)y) z|Nn_@azJB100;m9AOHk_01yBIKmZ5;0U!Vbo(chY{(maip-~_J1b_e#00KY&2mk>f z00e*l5C8&ClmPtx-xI|RjR65500e*l5C8%|00;m9AOHk_01$X81mOJtsbGgjfdCKy Z0zd!=00AHX1b_e#00KY&2s}{&{|jDirectories.txt | Files holding one line per directory to be synchronized by either the "slow" (static) or "fast" (dynamic) synchronization runs | -| ExcludeFiles.txt | Files holding one line per file to be excluded from either the "slow" (static) or "fast" (dynamic) synchronization runs | -| IncludeFiles.txt | Files holding one line per file to be added to either the "slow" (static) or "fast" (dynamic) synchronization runs | +| staticDirectories.txt or dynamicDirectories.txt | Files holding one line per directory to be synchronized by either the "slow" (static) or "fast" (dynamic) synchronization runs | +| staticExcludeFiles.txt or dynamicExcludeFiles.txt | Files holding one line per file to be excluded from either the "slow" (static) or "fast" (dynamic) synchronization runs | +| staticIncludeFiles.txt or dynamicIncludeFiles.txt | Files holding one line per file to be added to either the "slow" (static) or "fast" (dynamic) synchronization runs | | enable_ebs_rsync.sh | Set this site up to be the source for file system replication, and enable the processes | | disable_ebs_rsync.sh | Disable the rsync process at this site. Must be done at the standby site. | | syncEBS.sh | Multi-threaded file system synchronization driver. |