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