Oracle 11g DataGuard自动启动服务

Oracle 11g DataGuard自动启动服务

只为了做的更好
Just to do better

 script name:oracledg

 #!/bin/bash
 #chkconfig: 2345 98 01
 #description: Oracle database dataguard server
 #Starts the oracle database dataguard server
 #If more than four archive no application will be under the mout synchronization
 #make SHEEL :MUXINQNG
 case $1 in

 'start')
 if [ ! -f /var/lock/subsys/oracle ]; then
 prog="listener"
 echo -n $"Starting $prog: "
 su - oracle -c "lsnrctl start" >> /var/log/oracle.log
 RETVAL=$?
 [ $RETVAL -eq 0 ] && echo "success" || echo "failed"

 prog="oracle dataguard"
 echo -n $"Starting $prog: "
 su - oracle -c "sqlplus /nolog" << EOF >> /var/log/oracle.log
 connect / as sysdba
 startup mount
 ! sleep 30
 select name,open_mode,PROTECTION_MODE,DATABASE_ROLE from v\$database;
 select thread#,min(sequence#) no_applied_min,max(sequence#) no_applied_max,count(1) no_applied_all from v\$archived_log where applied='NO' and STANDBY_DEST='NO' and deleted<>'YES' group by thread# order by thread#;
 declare wyyn number;
 begin
  select count(1) into wyyn from v\$archived_log where applied='NO' and standby_dest='NO';
  if wyyn < 5 then
    EXECUTE IMMEDIATE 'alter database open';
 
  EXECUTE IMMEDIATE 'alter database recover managed standby database using current logfile disconnect';
  else

  EXECUTE IMMEDIATE 'alter database recover managed standby database using current logfile disconnect';
 end if;
 end;
 /
 select name,open_mode,PROTECTION_MODE,DATABASE_ROLE from v\$database;
 select applied,count(1) from v\$archived_log where applied='NO'  group by applied;
 exit
 EOF

 RETVAL=$?
 [ $RETVAL -eq 0 ] && echo "success" || echo "failed"
 echo
 [ $RETVAL -eq 0 ] && touch /var/lock/subsys/oracle || RETVAL=1
 fi
 ;;
 'stop')
 prog="listener"
 echo -n $"Stopping $prog: "
 su - oracle -c "lsnrctl stop" >> /var/log/oracle.log
 RETVAL=$?
 [ $RETVAL -eq 0 ] && echo "success" || echo "failed"
 echo
 prog="oracle dataguard"
 echo -n $"Stopping $prog: "
 su - oracle -c "sqlplus /nolog" << EOF >> /var/log/oracle.log
 connect / as sysdba
 alter database recover managed standby database cancel;
 shutdown immediate
 exit
 EOF
 RETVAL=$?
 [ $RETVAL -eq 0 ] && echo "success" || echo "failed"
 echo
 [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/oracle
 ;;
 'restart')

 prog="oracle dataguard"
 echo -n $"Stopping $prog: "
 $0 stop

 prog="oracle dataguard"
 echo -n $"Starting $prog: "
 $0 start
 ;;
 'status')

 su - oracle -c "lsnrctl status"
 su - oracle -c "sqlplus /nolog" << EOF
 connect / as sysdba
 select name,open_mode,PROTECTION_MODE,DATABASE_ROLE from v\$database;
 select process,status from v\$managed_standby;
 exit
 EOF
 ;;
 *)
 echo $"Usage: $0 {start|stop|restart|status}"
 ;;
 esac

相关推荐