天天看點

TimesTen Active standby切換啟停腳本

################start_tt.sh#######################

#! /bin/sh

#擷取tt的狀态,

#  若為standby,則call ttrepstateset('ACTIVE'),exit 0,表示正常

#  若為active,exit 0,表示正常

#  若未idle,exit 1,表示異常,res啟動失敗,切換res至對端節點

# mod by jzh at June 18,2012

FLAG_DIR="/etc/hacmp"

TT_HOME="/tt/TimesTen/tt60"

TT_USER="tt"

TT_DSNAME="ocs"

#check tt(daemon & ram) status

tt_status=0

tt_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`

if [ $tt_status -eq 0 ];then   #tt status abnormal

 #check and start daemon 

  ds_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus 2>&1" |grep "Could not connect to the TimesTen daemon"|wc -l`

  if [ $ds_status -eq 1 ];then  #daemon Abnormal

     su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -start 2>&1"   #start daemon

  fi;   

fi;

 #check and start ram 

  ds_status=1 

  ram_status=0

  ds_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus 2>&1" |grep "Could not connect to the TimesTen daemon"|wc -l` 

  ram_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`

  if [ $ds_status -eq 0 ] && [ $ram_status -eq 0 ];then

     su $TT_USER -c "$TT_HOME/bin/ttadmin -rampolicy always $TT_DSNAME 2>&1"   #ram load

  fi;

 #check and start rep 

  ram_status=0

  rep_status=0

  ram_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`

  rep_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus" |grep "Replication agent is running"|wc -l`

  if [ $ram_status -eq 1 ] && [ $rep_status -eq 0 ];then  

     su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy always $TT_DSNAME 2>&1"   #rep start

  fi;

 #check cserver

  if [ `ps -ef|grep 'ttcserver -verbose' |grep -v 'grep'|wc -l` -eq 0 ];then

    su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -startserver 2>&1"  #start cserver

  fi;

tt_status=0

rep_status=0

tt_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`

rep_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus" |grep "Replication agent is running"|wc -l`

if [ $tt_status -eq 1 ] && [ $rep_status -eq 1 ];then #All status normal

  #check rep state

  rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`

  if [ -f "$FLAG_DIR/tt_rep_state.lock" ] && [ $rep_state = 'IDLE' ];then

    bef_rep_state=`cat $FLAG_DIR/tt_rep_state.lock|cut -d ',' -f 2`

    cat /dev/null > $FLAG_DIR/tt_rep_state.lock

    if [ $bef_rep_state = 'ACTIVE' ];then

      su $TT_USER -c "echo 'call ttrepstateset( \047active\047 );'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"

    fi;

  fi;

  rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`

  if [ $rep_state = 'ACTIVE' ];then

     exit 0;

  elif [ $rep_state = 'STANDBY' ];then

     su $TT_USER -c "echo 'call ttrepstateset( \047active\047 );'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1";

     exit 0;

  elif [ $rep_state = 'IDLE' ];then

     exit 1;

  fi;

else 

  exit 1;  #abnormal-exit 

fi;

################stop_tt.sh#######################

#! /bin/sh

  #停止應用、斷開連接配接   

  #執行,逾時後強制切換

  #call ttreppolicy('manual');call ttrepstop;

  #call ttrepdeactivate; 

  #call ttrepolicy('always')

FLAG_DIR="/etc/hacmp"

TT_HOME="/tt/TimesTen/tt60"

TT_USER="tt"

TT_DSNAME="ocs"

TT_REP_WAIT=60 ##seconds

rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`

if [ $rep_state = 'ACTIVE' ];then 

  kill -9 `su $TT_USER -c "echo 'call ttDataStoreStatus;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1|grep 'application'|cut -d ',' -f 2"`

  su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -stopserver 2>&1"   #stop cserver daemon

  while [ $TT_REP_WAIT -gt 0 ]

  do

    if [ `su $TT_USER -c "echo 'call ttrepsubscriberwait(,,,,5);'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep '< 00 >'|wc -l` -eq 1 ];then

      su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy manual $TT_DSNAME 2>&1" 

      su $TT_USER -c "echo 'call ttrepstop;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"

      su $TT_USER -c "echo 'call ttrepdeactivate;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1" 

      su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy always $TT_DSNAME 2>&1"

      echo `/usr/bin/date '+%Y%m%d'`','$rep_state >>  $FLAG_DIR/tt_rep_state.lock 

      TT_REP_WAIT=-100

    else

      TT_REP_WAIT=$(expr $TT_REP_WAIT - 5);

    fi;

  done;

  if [ $TT_REP_WAIT -eq -100 ];then

    exit 0;

  else

    exit 1;

  fi;

fi;       

################start_tt_rep.sh#######################

#! /bin/sh

#擷取tt的狀态,

#  若為standby,則call ttrepstateset('ACTIVE'),exit 0,表示正常

#  若為active,exit 0,表示正常

#  若未idle,exit 1,表示異常,res啟動失敗,切換res至對端節點

FLAG_DIR="/etc/hacmp"

TT_HOME="/tt/TimesTen/tt70"

TT_USER="tt"

TT_DSNAME="ocs"

#check tt(daemon & ram) status

tt_status=0

tt_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`

if [ $tt_status -eq 0 ];then   #tt status abnormal

 #check and start daemon

  ds_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus 2>&1" |grep "Could not connect to the TimesTen daemon"|wc -l`

  if [ $ds_status -eq 1 ];then  #daemon Abnormal

     su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -start 2>&1"   #start daemon

  fi;   

 #check and start ram 

  ds_status=1 

  ram_status=0

  ds_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus 2>&1" |grep "Could not connect to the TimesTen daemon"|wc -l` 

  ram_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`

  if [ $ds_status -eq 0 ] && [ $ram_status -eq 0 ];then

     su $TT_USER -c "$TT_HOME/bin/ttadmin -rampolicy always $TT_DSNAME 2>&1"   #ram load

  fi;

 #check and start rep 

  ram_status=0

  rep_status=0

  ram_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`

  rep_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus" |grep "Replication agent is running"|wc -l`

  if [ $ram_status -eq 1 ] && [ $rep_status -eq 0 ];then  

     su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy always $TT_DSNAME 2>&1"   #rep start

  fi;

fi;

tt_status=0

rep_status=0

tt_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`

rep_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus" |grep "Replication agent is running"|wc -l`

if [ $tt_status -eq 1 ] && [ $rep_status -eq 1 ];then #All status normal

  #check rep state

  rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`

  if [ -f "$FLAG_DIR/tt_rep_state.lock" ] && [ $rep_state = 'IDLE' ];then

    bef_rep_state=`cat $FLAG_DIR/tt_rep_state.lock|cut -d ',' -f 2`

    cat /dev/null > $FLAG_DIR/tt_rep_state.lock;

    su $TT_USER -c "echo 'call ttrepstateset(\'$bef_rep_state\');'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"; 

  fi;

  rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`

  if [ $rep_state = 'ACTIVE' ];then

     exit 0;

  elif [ $rep_state = 'STANDBY' ];then

     su $TT_USER -c "echo 'call ttrepstateset(\'ACTIVE\');'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1";

     exit 0;

  elif [ $rep_state = 'IDLE' ];then

     exit 1;

  fi;

else 

  exit 1;  #abnormal-exit 

fi;

################stop_tt_rep.sh#######################

#! /bin/sh

  #停止應用、斷開連接配接   

  #執行,逾時後強制切換

  #call ttreppolicy('manual');call ttrepstop;

  #call ttrepdeactivate; 

  #call ttrepolicy('always')

FLAG_DIR="/etc/hacmp"

TT_HOME="/tt/TimesTen/tt70"

TT_USER="tt"

TT_DSNAME="ocs"

rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`

su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -stopserver 2>&1"   #stop cserver daemon

su $TT_USER -c "echo 'call ttrepsubscriberwait(,,,,-1);'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"

su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy manual $TT_DSNAME 2>&1" 

su $TT_USER -c "echo 'call ttrepstop;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"

su $TT_USER -c "echo 'call ttrepdeactivate;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1" 

su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy always $TT_DSNAME 2>&1"

echo `/usr/bin/date '+%Y%m%d'`','$rep_state >>  $FLAG_DIR/tt_rep_state.lock