定期删除DG归档日志的脚本· 作者 小荷||【转载时请务必以超链接形式标明文章原始出处和作者信息】
· 永久链接: http://www.oracleblog.cn/useful-script/shell-for-delete-standby-arch/
--------------------------------------------------------------------------------
Dataguard的维护稍微麻烦点,不能删除尚未applied的归档日志,但是每次手工去核对就比较麻烦了,今天在pub上看到这样一个要求:“哪位有 standby数据库 定期删除已经apply的archive的shell脚本?”于是就写了个脚本,基本可以满足题目的要求:
1、已经在standby库apply的;
2、2天以上的
脚本如下(具体的脚本和初始化路径可见文章最后的下载tar包,在这里对这个脚本的内容进行下说明):
OS:
[oracle@standby1 etc]$ cat redhat-release
Enterprise Linux Enterprise Linux AS release 4 (October Update 4)
DB:
BANNER
----------------------------------------------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
PL/SQL Release 9.2.0.4.0 - Production
CORE 9.2.0.3.0 Production
TNS for Linux: Version 9.2.0.4.0 - Production
NLSRTL Version 9.2.0.4.0 - Production
脚本部署路径为:/oracle/del_appl_arc/bin
脚本生成的日志路径:/oracle/del_appl_arc/log
#!/bin/sh
#########################################################################
# This shell is for primary and standby database #
# to rm applied archivelog that before some day ago. #
# #
# You can define "some day" in variables ${day_before} #
# This shell can be put in crontab for auto run #
# #
# 2008-01-18 writen by www.oracleblog.cn #
#########################################################################
## load profile file
. /oracle/.bash_profile
## Path Define
main_path=/oracle/del_appl_arc <----------------部署的主路径
bin_path=${main_path}/bin <--------------------脚本所在路径
log_path=${main_path}/log <---------------------脚本日志所在路径
arc_path=/oracle/arch <-------------------------归档日志所在路径
cd ${bin_path}
## Initial script
touch app_arc_name.sh
chmod +x app_arc_name.sh
## rm applied archivelog that before ${day_before} day ago
day_before=1 <-------------------------------------假设删除1天前已经规定的日志,这个变量设置为1,你可以设置成其他。
## Db info
dbuser=test
dbpwd=test
dbsid=primary
########## Main shell start here ##########
## load exisit archlog list to db <------------------------从此处开始利用sqlldr将arch文件列表load到数据库中。
sqlplus ${dbuser}/${dbpwd}@${dbsid}<<EOF >/dev/null
drop table ${dbuser}.arc_log_list;
CREATE TABLE ${dbuser}.arc_log_list (arc_name VARCHAR2(2000));
exit;
EOF
ls -l ${arc_path}|awk '{print $9}' |grep arc >arc_log_list.tmp
echo "load data">>arc_log.ctl
echo "infile 'arc_log_list.tmp'">>arc_log.ctl
echo "replace into table arc_log_list">>arc_log.ctl
echo "fields terminated by X'09'">>arc_log.ctl
echo "(arc_name)">>arc_log.ctl
sqlldr ${dbuser}/${dbpwd}@${dbsid} control=arc_log.ctl log=sqlldr_run.log bad=sqlldr_badfile.bad
### Create shell for rm applied archive that before some day ago
sqlplus -s ${dbuser}/${dbpwd}@${dbsid}<<EOF>/dev/null <-------------利用load数据库中的arch列表和
set feedback off <-------------数据库中v$archived_log,找出符合条件可以删除的arch,同时生成删除脚本。
set pages 0
set head off
set timing off
set echo off
spool app_arc_name.tmp
select 'rm -f '||'${arc_path}/'||arc_name from test.arc_log_list
intersect
select 'rm -f '||name from v\$archived_log
where DEST_ID=1 and name like '%.arc'
and SEQUENCE#<(select max(SEQUENCE#) from v\$archived_log where applied='YES')
and COMPLETION_TIME<=sysdate-${day_before};
spool
exit
EOF
## Exec the shell in background mode
cat app_arc_name.tmp |grep -v spooling>app_arc_name.sh
./app_arc_name.sh
mv app_arc_name.sh rm_appl_arc_`date +"%Y%m%d%H%M"`.log
mv rm_appl_arc*.log ${log_path}
rm app_arc_name.tmp arc_log.ctl sqlldr_run.log arc_log_list.tmp
完成脚本后,你可以把脚本放入crontab中定期运行,以达到自动删除n天以前且已经applied的归档日志。注意crontab的部署把primary和standby的时间错开,如果同时进行,会对arc_log_list表有争用。
分享到:
相关推荐
4. **脚本自动化**:为了提高效率和减少手动操作的风险,删除归档日志的过程通常会被自动化,通过定时任务或者调度器来定期执行。这需要对Oracle数据库和操作系统有一定的了解,以确保脚本的正确性和稳定性。 5. **...
总结来说,Oracle DG归档日志清理脚本是用于自动化清理数据库不再需要的旧归档日志文件,以释放磁盘空间。通过设置定时任务,可以确保清理过程按照预设的时间间隔进行,从而保持数据库环境的整洁和高效。在执行这类...
2. 脚本方式:在提供的文件列表中,`del_stdby_archivelog_rman.sh` 和 `tmp_delete_archive_rman.sh` 可能是自定义的shell脚本,用于调用RMAN命令来删除特定条件的归档日志。这些脚本可能包含逻辑,如检查备库的...
不是因为其麻烦,而是因为用的人少,不知道怎么下手处理该事情,我编写了简单的实现初级功能的win下面rman备份和删除备库归档日志脚本,供大家参考,也更加欢迎朋友提出来更加好的处理方法(win是真心的不懂)rman备份脚本 ...
3. 自动监控:自定义脚本可以定期检查归档日志文件,确保其正常生成并及时传输到备用数据库,避免归档日志丢失或堆积。 四、RAC (Real Application Clusters) 环境 1. RAC简介:Oracle RAC是一种集群数据库技术,...
Oracle 19c RAC (Real Application Clusters) 和 RACDG (Data Guard) 是企业级数据库解决方案,用于实现高可用性和灾难恢复。RAC允许多个实例同时访问同一个数据库,而RACDG则提供了主库与备库之间的数据保护。 在...
5. **查看归档日志统计信息**: ```sql SELECT * FROM v$archive_dest_stat; ``` 以上步骤和配置方法适用于在两个单独的数据库之间建立物理 Data Guard 关系,确保了数据的高度可用性和灾难恢复能力。通过这些...
首先,确保在执行任何操作之前,RAC781上已经暂停了将归档日志传输到DataGuard,以避免归档日志被错误删除。这可以通过执行SQL命令`alter system set log_archive_dest_state_2=defer scope=both sid='*'`来实现。...
2. **建立物理Standby**: 使用RMAN(Recovery Manager)将主数据库的备份和归档日志传输到备用服务器,并在此基础上创建物理Standby数据库。 3. **启用Log Apply Service**: 开启备用数据库的Log Apply Service,使...
**计划定期备份**:将上述脚本按照备份策略添加到`crontab`中,例如每周一凌晨1:30执行全库备份(0级备份,含归档日志),周二至周日凌晨1:30执行增量备份(1级备份,含归档日志),每天凌晨3:30执行备份验证。...
3. 编写RMAN备份脚本,包括全备、归档日志备份以及清理过期备份的命令。 在实际操作中,应定期测试备份和恢复流程,确保在紧急情况下能够成功恢复。此外,应监控备份过程中的网络流量,以防止对生产环境造成影响。...
- `LOG_ARCHIVE_DEST_1`: 设置归档日志的位置。 - `LOG_ARCHIVE_DEST_2`: 设置日志传输到备库的配置。 - `LGWRSYNCAFFIRMNET_TIMEOUT=30`: 配置 LGWR 进程的同步超时时间。 - `FAL_SERVER`: 设置网络服务名。 -...
在备库上启动Redo Apply进程,使备库能够应用从主库接收到的归档日志: ```sql ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; ``` 以上步骤概述了Oracle 11g Data Guard配置...
- **归档路径**: 配置归档路径,确保有足够的空间存放归档日志。 **5. 重建控制文件** - 如果控制文件损坏或丢失,可以通过备份恢复或重建控制文件。 - 使用命令`CREATE CONTROLFILE SET DATABASE [dbname] ...;`...
- 定期检查归档日志是否正确生成及传输,防止数据丢失。 - 监控RAC集群状态,及时发现并解决问题。 - 测试灾难恢复流程,确保数据保护策略的有效性。 通过以上步骤,我们可以成功部署并配置Oracle 19c RAC+ADG环境...
- `dG`: 删除从当前行到最后一行的所有内容。 - `yy`: 复制当前行。 - `nyy`: 复制 n 行。 - `y1G`: 复制从第一行到当前行的所有内容。 - `yG`: 复制从当前行到最后一行的所有内容。 - `p`: 在当前行之后粘贴...