Hi, On Tue, Jan 18, 2011 at 04:02:56PM +0100, Ladislav Jech wrote: > Hi, > > it's already some time ago, when was asked to configure cluster for > Oracle Database 10g Express Edition. The included scripts for oracle in > repository didn't work well, so I created my own script and while
Wonderful. It didn't occur to you to ask for advice on this ML or at linux-ha? It looks like nowadays everybody and their dog want to write their own resource/stonith agents. What's up? Nothing better to do? Thanks, Dejan > playing with pacemaker and corosync application blocks and communicating > with Andrew Beekhof he told me to share this script with community. > > The script is still not finished. There are details which schould be > done more preciously, but it is works. If someone want to test it and > use it, please don't hesitate and let me know about what could be done > in better way. > > Hope it will help someone. > > The script itself> > #!/bin/sh > # > # > # Oracle Database Express OCF RA. > # > # Copyright (c) 2010 Ladislav Jech > # All Rights Reserved. > # > # This program is free software; you can redistribute it and/or modify > # it under the terms of version 2 of the GNU General Public License as > # published by the Free Software Foundation. > # > # This program is distributed in the hope that it would be useful, but > # WITHOUT ANY WARRANTY; without even the implied warranty of > # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. > # > # Further, this software is distributed without any warranty that it is > # free of the rightful claim of any third person regarding infringement > # or the like. Any license provided herein, whether implied or > # otherwise, applies only to this software file. Patent licenses, if > # any, provided herein do not apply to combinations of this program with > # other software, or any other product whatsoever. > # > # You should have received a copy of the GNU General Public License > # along with this program; if not, write the Free Software Foundation, > # Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. > # > ############################## > ######################################### > # Initialization: > > : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat} > . ${OCF_FUNCTIONS_DIR}/.ocf-shellfuncs > # . /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs > # Set up oracle environment variables > . /ip/oracle/scripts/oracle_env.sh > > > ####################################################################### > > meta_data() { > cat <<END > <?xml version="1.0"?> > <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> > <resource-agent name="oracle-db-express" version="1.1"> > <version>1.0</version> > > <longdesc lang="en"> > This is resource agent used explicitly for Oracle Database Express 10g > instead of currently implemented 2 agents delivered with Pacemaker. > </longdesc> > <shortdesc lang="en">Oracle Database Express agent</shortdesc> > > <parameters> > <parameter name="state" unique="1"> > <longdesc lang="en"> > Location to store the resource state in. > </longdesc> > <shortdesc lang="en">State file</shortdesc> > <content type="string" > default="${HA_VARRUN}/{OCF_RESOURCE_INSTANCE}.state" /> > </parameter> > </parameters> > > <actions> > <action name="start" timeout="90" /> > <action name="stop" timeout="100" /> > <action name="monitor" timeout="20" interval="10" depth="0" > start-delay="30" /> > <action name="meta-data" timeout="5" /> > <action name="validate-all" timeout="30" /> > </actions> > </resource-agent> > END > } > ####################################################################### > > # don't exit on TERM, to test that lrmd makes sure that we do exit > trap sigterm_handler TERM > sigterm_handler() { > ocf_log info "They use TERM to bring us down. No such luck." > return > } > oracle_usage() { > cat <<END > usage: $0 {start|stop|monitor|validate-all|meta-data} > > Expects to have a fully populated OCF RA-compliant environment set. > END > } > ####################################################################### > # ORACLE START UP > #ca > oracle_start() { > su -s /bin/bash $ORACLE_OWNER -c "$ORACLE_HOME/bin/sqlplus -s /nolog @ > $ORACLE_HOME/config/scripts/startdb.sql" > su -s /bin/bash $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start" > return $OCF_SUCCESS > > } > ####################################################################### > # ORACLE SHUTDOWN > # > oracle_stop() { > su -s /bin/bash $ORACLE_OWNER -c "$ORACLE_HOME/bin/sqlplus -s /nolog @ > $ORACLE_HOME/config/scripts/stopdb.sql" > su -s /bin/bash $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop" > return $OCF_SUCCESS > } > #################################################################### > # ORACLE MONITORING > # > oracle_monitor() { > # Monitor _MUST!_ differentiate correctly between running > # (SUCCESS), failed (ERROR) or _cleanly_ stopped (NOT RUNNING). > # That is THREE states, not just yes/no. > pmon=`ps -ef | egrep pmon_$ORACLE_SID'\>' | grep -v grep` > # !!! Here schould appear also the check for running listener !!! > if [ "$pmon" != "" ]; then > return $OCF_SUCCESS > else > return $OCF_NOT_RUNNING > fi > if false ; then > return $OCF_ERR_GENERIC > fi > } > oracle_validate() { > # Is the state directory writable? > state_dir=`dirname "$OCF_RESKEY_state"` > touch "$state_dir/$$" > if [ $? != 0 ]; then > return $OCF_ERR_ARGS > fi > rm "$state_dir/$$" > > return $OCF_SUCCESS > } > : ${OCF_RESKEY_CRM_meta_interval=0} > : ${OCF_RESKEY_CRM_meta_globally_unique:="true"} > > if [ "x$OCF_RESKEY_state" = "x" ]; then > if [ ${OCF_RESKEY_CRM_meta_globally_unique} = "false" ]; then > state="${HA_VARRUN}/${OCF_RESOURCE_INSTANCE}.state" > > # Strip off the trailing clone marker > OCF_RESKEY_state=`echo $state | sed s/:[0-9][0-9]*\.state/.state/` > else > OCF_RESKEY_state="${HA_VARRUN}/${OCF_RESOURCE_INSTANCE}.state" > fi > fi > > case $__OCF_ACTION in > meta-data) > meta_data > exit $OCF_SUCCESS > ;; > start) > oracle_start > ;; > stop) > oracle_stop > ;; > monitor) > oracle_monitor > ;; > validate-all) > oracle_validate > ;; > usage|help) > oracle_usage > exit $OCF_SUCCESS > ;; > *) > oracle_usage > exit $OCF_ERR_UNIMPLEMENTED > ;; > esac > rc=$? > ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc" > exit $rc > > Let me know about your proposals to enhance this. > > Best regards, > > _______________________________________________ > Pacemaker mailing list: Pacemaker@oss.clusterlabs.org > http://oss.clusterlabs.org/mailman/listinfo/pacemaker > > Project Home: http://www.clusterlabs.org > Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf > Bugs: > http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker _______________________________________________ Pacemaker mailing list: Pacemaker@oss.clusterlabs.org http://oss.clusterlabs.org/mailman/listinfo/pacemaker Project Home: http://www.clusterlabs.org Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf Bugs: http://developerbugs.linux-foundation.org/enter_bug.cgi?product=Pacemaker