Cold Start

Posted by antony.reynolds on Oracle Blogs See other posts from Oracle Blogs or by antony.reynolds
Published on Mon, 29 Mar 2010 16:56:58 -0700 Indexed on 2010/03/30 0:03 UTC
Read the original article Hit count: 784

Filed under:

image

Well we had snow drifts 3ft deep on Saturday so it must be spring time.  In preparation for Spring we decided to move the lawn tractor.  Of course after sitting in the garage all winter it refused to start.  I then come into the office and need to start my 11g SOA Suite installation.  I thought about this and decided my tractor might be cranky but at least I can script the startup of my SOA Suite 11g installation.

So with this in mind I created 6 scripts.  I created them for Linux but they should translate to Windows without too many problems.  This is left as an exercise to the reader, note you will have to hardcode more than I did in the Linux scripts and create separate script files for the sqlplus and WLST sections.

Order to start things

I believe there should be order in all things, especially starting the SOA Suite.  So here is my preferred order.

  1. Start Database
    • This is need by EM and the rest of SOA Suite so best to start it before the Admin Server and managed servers.
  2. Start Node Manager on all machines
    • This is needed if you want the scripts to work across machines.
  3. Start Admin Server
    • Once this is done in theory you can manually stat the managed servers using WebLogic console.  But then you have to wait for console to be available.  Scripting it all is quicker and easier way of starting.
  4. Start Managed Servers & Clusters
    • Best to start them one per physical machine at a time to avoid undue load on the machines.  Non-clustered install will have just soa_server1 and bam_serv1 by default.  Clusters will have at least SOA and BAM clusters that can be started as a group or individually.  I have provided scripts for standalone servers, but easy to change them to work with clusters.

Starting Database

I have provided a very primitive script (available here) to start the database, the listener and the DB console.  The section highlighted in red needs to match your database name.

#!/bin/sh

echo "##############################"
echo "# Setting Oracle Environment #"
echo "##############################"
. oraenv <<-EOF
orcl
EOF

echo "#####################"
echo "# Starting Database #"
echo "#####################"
sqlplus / as sysdba <<-EOF
startup
exit
EOF

echo "#####################"
echo "# Starting Listener #"
echo "#####################"
lsnrctl start

echo "######################"
echo "# Starting dbConsole #"
echo "######################"
emctl start dbconsole

read -p "Hit <enter> to continue"

Starting SOA Suite

My script for starting the SOA Suite (available here) breaks the task down into five sections.

Setting the Environment

First set up the environment variables.  The variables highlighted in red probably need changing for your environment.

#!/bin/sh

echo "###########################"
echo "# Setting SOA Environment #"
echo "###########################"
export MW_HOME=~oracle/Middleware11gPS1
export WL_HOME=$MW_HOME/wlserver_10.3
export ORACLE_HOME=$MW_HOME/Oracle_SOA
export DOMAIN_NAME=soa_std_domain
export DOMAIN_HOME=$MW_HOME/user_projects/domains/$DOMAIN_NAME

Starting the Node Manager

I start node manager with a nohup to stop it exiting when the script terminates and I redirect the standard output and standard error to a file in a logs directory.

cd $DOMAIN_HOME
echo "#########################"
echo "# Starting Node Manager #"
echo "#########################"
nohup $WL_HOME/server/bin/startNodeManager.sh >logs/NodeManager.out 2>&1 &

Starting the Admin Server

I had problems starting the Admin Server from Node Manager so I decided to start it using the command line script.  I again use nohup and redirect output.

echo "#########################"
echo "# Starting Admin Server #"
echo "#########################"
nohup ./startWebLogic.sh >logs/AdminServer.out 2>&1 &

Starting the Managed Servers

I then used WLST (WebLogic Scripting Tool) to start the managed servers.  First I waited for the Admin Server to come up by putting a connect command in a loop.  I could have put the WLST commands into a separate script file but I wanted to reduce the number of files I was using and so used redirected input (here syntax).

$ORACLE_HOME/common/bin/wlst.sh <<-EOF
import time
sleep=time.sleep
print "#####################################"
print "# Waiting for Admin Server to Start #"
print "#####################################"
while True:
  try:
    connect(adminServerName="AdminServer")
    break
  except:
    sleep(10)

I then start the SOA server and tell WLST to wait until it is started before returning.  If starting a cluster then the start command would be modified accordingly to start the SOA cluster.

print "#######################"
print "# Starting SOA Server #"
print "#######################"
start(name="soa_server1", block="true")

I then start the BAM server in the same way as the SOA server.

print "#######################"
print "# Starting BAM Server #"
print "#######################"
start(name="bam_server1", block="true")
EOF

Finally I let people know the servers are up and wait for input in case I am running in a separate window, in which case the result would be lost without the read command.

echo "#####################"
echo "# SOA Suite Started #"
echo "#####################"

read -p "Hit <enter> to continue"

Stopping the SOA Suite

My script for shutting down the SOA Suite (available here)  is basically the reverse of my startup script.  After setting the environment I connect to the Admin Server using WLST and shut down the managed servers and the admin server.  Again the script would need modifying for a cluster.

Stopping the Servers

If I cannot connect to the Admin Server I try to connect to the node manager, in case the Admin Server is down but the managed servers are up.

#!/bin/sh

echo "###########################"
echo "# Setting SOA Environment #"
echo "###########################"
export MW_HOME=~oracle/Middleware11gPS1
export WL_HOME=$MW_HOME/wlserver_10.3
export ORACLE_HOME=$MW_HOME/Oracle_SOA
export DOMAIN_NAME=soa_std_domain
export DOMAIN_HOME=$MW_HOME/user_projects/domains/$DOMAIN_NAME

cd $DOMAIN_HOME
$MW_HOME/Oracle_SOA/common/bin/wlst.sh <<-EOF
try:
  print("#############################")
  print("# Connecting to AdminServer #")
  print("#############################")
  connect(username='weblogic',password='welcome1',url='t3://localhost:7001')
except:
  print "#########################################"
  print "#   Unable to connect to Admin Server   #"
  print "# Attempting to connect to Node Manager #"
  print "#########################################"
  nmConnect(domainName=os.getenv("DOMAIN_NAME"))

print "#######################"
print "# Stopping BAM Server #"
print "#######################"
shutdown('bam_server1')
print "#######################"
print "# Stopping SOA Server #"
print "#######################"
shutdown('soa_server1')
print "#########################"
print "# Stopping Admin Server #"
print "#########################"
shutdown('AdminServer')
disconnect()
nmDisconnect()
EOF

Stopping the Node Manager

I stopped the node manager by searching for the java node manager process using the ps command and then killing that process.

echo "#########################"
echo "# Stopping Node Manager #"
echo "#########################"
kill -9 `ps -ef | grep java | grep NodeManager |  awk '{print $2;}'`

echo "#####################"
echo "# SOA Suite Stopped #"
echo "#####################"

read -p "Hit <enter> to continue"

Stopping the Database

Again my script for shutting down the database is the reverse of my start script.  It is available here.  The only change needed might be to the database name.

#!/bin/sh

echo "##############################"
echo "# Setting Oracle Environment #"
echo "##############################"
. oraenv <<-EOF
orcl
EOF

echo "######################"
echo "# Stopping dbConsole #"
echo "######################"
emctl stop dbconsole

echo "#####################"
echo "# Stopping Listener #"
echo "#####################"
lsnrctl stop

echo "#####################"
echo "# Stopping Database #"
echo "#####################"
sqlplus / as sysdba <<-EOF
shutdown immediate
exit
EOF

read -p "Hit <enter> to continue"

Cleaning Up

Cleaning SOA Suite

I often run tests and want to clean up all the log files.  The following script (available here) does this for the WebLogic servers in a given domain on a machine.  After setting the domain I just remove all files under the servers logs directories.  It also cleans up the log files I created with my startup scripts.  These scripts could be enhanced to copy off the log files if you needed them but in my test environments I don’t need them and would prefer to reclaim the disk space.

#!/bin/sh

echo "###########################"
echo "# Setting SOA Environment #"
echo "###########################"
export MW_HOME=~oracle/Middleware11gPS1
export WL_HOME=$MW_HOME/wlserver_10.3
export ORACLE_HOME=$MW_HOME/Oracle_SOA
export DOMAIN_NAME=soa_std_domain
export DOMAIN_HOME=$MW_HOME/user_projects/domains/$DOMAIN_NAME

echo "##########################"
echo "# Cleaning SOA Log Files #"
echo "##########################"
cd $DOMAIN_HOME
rm -Rf logs/* servers/*/logs/*

read -p "Hit <enter> to continue"

Cleaning Database

I also created a script to clean up the dump files of an Oracle database instance and also the EM log files (available here).  This relies on the machine name being correct as the EM log files are stored in a directory that is based on the hostname and the Oracle SID.

#!/bin/sh

echo "##############################"
echo "# Setting Oracle Environment #"
echo "##############################"
. oraenv <<-EOF
orcl
EOF
echo "#############################"
echo "# Cleaning Oracle Log Files #"
echo "#############################"
rm -Rf $ORACLE_BASE/admin/$ORACLE_SID/*dump/*
rm -Rf $ORACLE_HOME/`hostname`_$ORACLE_SID/sysman/log/*

read -p "Hit <enter> to continue"

Summary

Hope you find the above scripts useful.  They certainly stop me hanging around waiting for things to happen on my test machine and make it easy to run a test, change parameters, bounce the SOA Suite and clean the logs between runs so I can see exactly what is happening.

Now I need to get that mower started…

© Oracle Blogs or respective owner

Related posts about SOA Suite