Linux下Oracle归档日志自动清理脚本,是用于定期清理Oracle数据库归档日志的一种脚本。以下是详细的攻略。
1. 创建脚本文件
首先,在Linux系统的任何目录下创建一个名为delete_archivelog.sh
的文件,用来存放脚本:
touch delete_archivelog.sh
2. 编辑脚本
然后,使用vi或其他编辑器打开该文件,编辑脚本:
vi delete_archivelog.sh
需要在文件中添加以下代码:
#!/bin/bash
# Remove archive logs
export ORACLE_SID=<SID>
export ORACLE_HOME=<ORACLE_HOME>
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
cd $ORACLE_HOME/dbs
rman target / nocatalog << EOF
run {
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time 'SYSDATE-7';
}
exit
EOF
其中,需要修改<SID>
和<ORACLE_HOME>
为你实际使用的Oracle数据库的SID和安装路径。
脚本中的意思是使用RMAN(Recovery Manager)备份恢复工具,清理数据库中7天以前的归档日志,并删除过期的归档日志。
3. 设定定时任务
保存并执行该脚本。需要通过crontab设置定时任务,在每天凌晨执行清理脚本:
crontab -e
然后添加如下内容:
0 0 * * * sh /path/to/delete_archivelog.sh
其中,/path/to/delete_archivelog.sh
为脚本路径。
这里的含义是在每天的0时0分执行delete_archivelog.sh
脚本。
4. 测试
测试脚本是否能够正常运行,测试方法可如下:
进入Oracle的rman模式,检查一下归档日志的状态:
rman target /
list archivelog all;
crosscheck archivelog all;
exit;
然后手动执行一次脚本:
sh /path/to/delete_archivelog.sh
再次通过RMAN检查归档日志的状态,检查脚本是否成功清理了过期的归档日志。
示例
以下是两个实际的例子:
示例1
数据库SID为orcl
,Oracle安装路径为/u01/app/oracle/product/12.1.0/dbhome_1
。则在Linux系统的任意目录执行如下代码,创建脚本文件并编辑:
touch delete_archivelog.sh
vi delete_archivelog.sh
编辑脚本为:
#!/bin/bash
# Remove archive logs
export ORACLE_SID=orcl
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
cd $ORACLE_HOME/dbs
rman target / nocatalog << EOF
run {
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time 'SYSDATE-7';
}
exit
EOF
保存退出,然后设置定时任务,每天0时0分执行清理脚本:
crontab -e
添加:
0 0 * * * sh /path/to/delete_archivelog.sh
测试脚本是否能够正常运行:
rman target /
list archivelog all;
crosscheck archivelog all;
exit;
手动执行一次脚本:
sh /path/to/delete_archivelog.sh
再次通过RMAN检查归档日志的状态,检查脚本是否成功清理了过期的归档日志。
示例2
数据库SID为orcl1
,Oracle安装路径为/usr/lib/oracle/11.2/client
。则在Linux系统的任意目录执行如下代码,创建脚本文件并编辑:
touch delete_archivelog.sh
vi delete_archivelog.sh
编辑脚本为:
#!/bin/bash
# Remove archive logs
export ORACLE_SID=orcl1
export ORACLE_HOME=/usr/lib/oracle/11.2/client
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH
cd /u01/app/oracle/fast_recovery_area/ORCL1/archivelog
rman target / nocatalog << EOF
run {
allocate channel ch1 type disk;
allocate channel ch2 type disk;
allocate channel ch3 type disk;
allocate channel ch4 type disk;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt archivelog until time 'SYSDATE-7';
}
exit
EOF
保存退出,然后设置定时任务,每天0时0分执行清理脚本:
crontab -e
添加:
0 0 * * * sh /path/to/delete_archivelog.sh
测试脚本是否能够正常运行:
rman target /
list archivelog all;
crosscheck archivelog all;
exit;
手动执行一次脚本:
sh /path/to/delete_archivelog.sh
再次通过RMAN检查归档日志的状态,检查脚本是否成功清理了过期的归档日志。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux下Oracle归档日志自动清理脚本代码(sh) - Python技术站