利用sqlplus脚本删除备库归档
时间:2011-06-14 来源:yangtingkun
一般而言,这种备份或者删除归档的脚本都是通过操作系统上的shell脚本实现,不过如果shell不是很熟,类似的功能完全可以利用sqlplus脚本实现。
一个9204RAC的DATA GUARD环境的STANDBY数据库上的例子。
一共需要创建3个文件,此外还有一个在调用脚本过程中生成的文件,第一个文件sql.sh用来执行sqlplus命令,并最终调用生成后的脚本:
sqlplus system/password@primary_db<< EOF
@execute.sql
EOF
chmod 755 delete_archivelog.sh
./delete_archivelog.sh
第二个文件execute.sql用来设置输出的格式,并调用最终脚本文件:
set pages 0 lines 100 feedback off ver off echo off trims on trim on show off term off
spo delete_archivelog.sh
@@call.sql
spo off
最后一个文件call.sql利用sql拼出rman删除归档的命令,因为是RAC环境,因此需要对两个THREAD分别进行删除:
select '/u01/oracle/product/9.2.0.4/bin/rman target / << EOF' from dual;
select 'delete noprompt archivelog until sequence ' || (max(sequence#) - 10) || ' thread ' || thread# || ';'
from v$archived_log
where dest_id = 2
and applied = 'YES'
group by thread#;
select 'EOF' from dual;
最后将sql.sh脚本添加到crontab中,使得系统可以定时调用。