一、背景
由于近期在做应用升级和系统改造,导致几天没怎么观察DG库的状态。这几天归档日志暴涨导致磁盘空间用尽,从库无法接收主库的归档日志,且从库无法工作。经过检查,发现从库所需要的日志在主库均存在。所以当前文档使用归档日志的方式进行恢复。
二、DG从库基于归档日志恢复
1、临时手动删除
- 手动删除无用文件、超过保留期限且占用空间大的备份文件、归档日志、数据库日志、审计日志等。
2、从库取消日志同步
SQL> alter database recover managed standby database cancel;
复制
3、查询未同步的日志
# 主库查询归档日志序号
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /data/oracle/archive
Oldest online log sequence 115312
Next log sequence to archive 115314
Current log sequence 115314
# 从库查询归档日志应用情况
SQL>select SEQUENCE#,FIRST_TIME,NEXT_TIME ,APPLIED from v$archived_log order by 1;
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
---------- ------------ ------------ ---------
115211 27-MAR-25 27-MAR-25 YES
115212 27-MAR-25 27-MAR-25 YES
115213 27-MAR-25 27-MAR-25 NO
# 从库检查归档日志物理存储
注意:此处可以根据归档日志产生时间以及编号,来交叉验证缺少的归档日志
$ cd /data/oracle/archive
复制
4、主库查询
注意:此处需要校验从库缺少的归档日志是否存在。如果存在则可以使用归档进行直接恢复。如果不存在则需要考虑使用其它方法恢复。但是当前文档是基于归档日志进行恢复的。
- 基于SCN增量备份恢复
- 基于Rman完全备份恢复
注意:此处可以根据归档日志产生时间以及编号,来确认从库缺少的归档日志是否存在,
$ cd /data/oracle/archive
# 经检查,从库缺失的归档日志在主库还存在
复制
5、从库查看归档日志
注意:这里查看归档日志的目的,是看从库从哪个归档日志断开的,最后应用的归档日志可能未完全应用。经确认从库 115213 号归档日志仅应用了一半,所以此处先移动该日志到其它路径下,主库发送完整日志到该路径下 ,同时更改权限
6、从库重启日志同步
注意:由于10G DG在自动断开同步的情况下,重启MRP进程后,需要在主库执行从库归档路径参数关闭再开启
# 主库发送归档日志到从库
$ scp 115213.arc [从库IP]:/data/oracle/archive
# 从库更改权限
$ chown oracle:dba 115213.arc
# 从库重启MRP进程
SQL>alter database recover managed standby database using current logfile disconnect from session;
复制
7、主库执行参数更改
注意:此处需要查看主库指定的从库归档参数是哪个,才能准确重启归档参数
# 主库中指定的从库归档参数
log_archive_dest_2='SERVICE=ORCL LGWR ASYNC VALID_FOR=(all_logfiles,all_roles) DB_UNIQUE_NAME=DGS'
# 根据指定参数重启开关
SQL>alter system set log_archive_dest_state_2=defer;
SQL>alter system set log_archive_dest_state_2=enable;
复制
8、查看归档应用
注意:此处明确看到正在恢复,所以只需要等待恢复完成即可
$ tail -f alert_ORCL.log
2025-03-27T11:28:47.526421+08:00
PR00 (PID:2359): Media Recovery Log /data/oracle/archive/oatest_1_115213_1056118119.arc
PR00 (PID:2359): Media Recovery Waiting for T-1.S-115213 (in transit)
2025-03-27T11:29:22.175855+08:00
rfs (PID:31442): Opened log for T-1.S-115214 dbid 1148449189 branch 1056118119
复制
三、永久解决磁盘爆满的方案
上述临时解决磁盘空间爆满的方式,显然这不是我们DBA的风格,DBA的风格都是追求自动化,所有的一切只需要经过简单的手动处理就可以达到一劳永逸
1、定期自动化删除流程
- 创建删除脚本
- 加入crontab,实现定期自动化执行
定期自动化的操作流程
1、创建删除脚本
注意:此处根据归档保留策略而定即可。如果确定可以删除,那么可直接删除保留策略前的日志。或者将这部分日志移动、发送到其它路径或者服务器保存。
#!/bin/bash
#############################################################################
#
#Author:Albert
#Date:27-Mar-25
#
# Main purpose:This script is used to delete expired files.
#
#
#############################################################################
# Parameter
logpath="/data/scripts/scripts_db"
CURTIME=`date +%Y%m%d%H%M%S`
delF_log="$logpath/del_file_list_30.log"
export week=`date +%w`
if [ ! -f $delF_log ]; then
touch $delF_log
chmod 777 $delF_log
else
rm -rf $delF_log
touch $delF_log
chmod 777 $delF_log
fi
#if [ $week -ne 0 ] ; then
# echo "Today cannot Sunday:$week" >> $delF_log
# exit 0
#fi
pad=$(printf '%0.1s' "-"{1..60})
folList[0]="[需要删除的文件的路径]"
echo "Delete 30 days before file " >> $delF_log
echo "Perform Date :"$CURTIME >> $delF_log
echo "$pad" >>$delF_log
for i in ${folList[@]}
do
echo "Location is : $i " >>$delF_log
find $i -type d -mtime +30 >> $delF_log
find $i -type f -mtime +30 >> $delF_log
find $i -type f -mtime +30 -exec rm -rf {} \;
done
echo "$pad" >>$delF_log
echo "Complete Time :"$CURTIME >> $delF_log
复制
2、加入定时计划
[oracle@hekdwdg ~]$ crontab -e
00 22 * * * sh /data/scripts/del_file_list_30.sh
# 重启定时任务即可
[oracle@hekdwdg ~]$service crond restart
复制
3、一劳永逸
实现自动化检查、删除,就可以释放双手了。去干想干的事情。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1272次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
767次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
687次阅读
2025-03-06 09:41:49
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
DarkAthena
565次阅读
2025-03-04 14:33:31
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
514次阅读
2025-03-05 00:42:34
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
455次阅读
2025-03-13 14:38:19
Ogg23ai高手必看-MySQL Innodb Cluster跟oracle的亲密接触
曹海峰
449次阅读
2025-03-04 21:56:13
【ORACLE】char类型和sql优化器发生的“错误”反应
DarkAthena
405次阅读
2025-03-04 23:05:01
什么,oracle 主机用户被删了?原来是虚惊一场!
Lucifer三思而后行
401次阅读
2025-03-03 21:12:09
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
341次阅读
2025-03-12 21:27:56
TA的专栏
Oracle Database
收录2篇内容
Oracle Linux Install
收录1篇内容
目录