sqlplus -s:提供一个sqlplus的静默执行环境,不展示sqlplus执行信息。
[oracle@Vm3 u01]$ sqlplus -s "indiglib/indiglib as sysdba" <<eof
> select * from dual;
> select max(sequence#) from v\$log_history;
> eof
ADDR INDX INST_ID D
---------------- ---------- ---------- -
00000000055299DC 0 1 X
MAX(SEQUENCE#)
--------------
69
[oracle@Vm0 u01]$ sqlplus -s "indiglib/indiglib"<<eof >/u01/max_sn.log
set head off;
set feedback off;
select max(sequence#) from v\$log_history;
exit;
eof
[oracle@Vm0 u01]$ more max_sn.log
69
来看一个删除dg备库过期归档日志文件的shell脚本:
#!/usr/bin/ksh
# created by tianlesoftware
# 2010/12/24
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_SID=xxxx
export SHELL_DIR=/u02/scripts
del_seq=`ls /u02/archivelog/|head -1|cut -f2 -d_`
echo $del_seq
$ORACLE_HOME/bin/sqlplus -s "user/pwd@sid_pd as sysdba" <<eof >/u02/scripts/max_sn.log
set head off;
set feedback;
select max(sequence#) from v/$log_history;
exit;
eof
max_sn=`cat /u02/scripts/max_sn.log|awk '{print $1}'|grep ^[0-9]`
max_sn=`expr $max_sn - 30`
-- 我这里是保留最近的30个归档文件,这个具体情况自己决定
echo $max_sn
while [ $del_seq -lt $max_sn ]
do
rm /u02/archivelog/1_"$del_seq"_737806218.arc
-- 这里是我定义归档文件的格式,具体根据自己的归档文件格式来匹配,关键是匹配日志的sequence no。
del_seq=`expr $del_seq + 1`
echo $del_seq
done
--max_sn.log 是存放最大seq 的tmp文件。 用来进行比较的
添加到crontab,定时执行:
[oracle@qs-xezf-db2 scripts]$ crontab -l
00 6 * * * /u02/scripts/del_st_archive.sh >/u02/scripts/del_st_arch.log 2>&1