首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

利用sqlplus脚本删除备库归档

作者:  时间: 2011-06-14

一般而言,这种备份或者删除归档的脚本都是通过操作系统上的shell脚本实现,不过如果shell不是很熟,类似的功能完全可以利用sqlplus脚本实现。


一个9204RACDATA 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中,使得系统可以定时调用。