阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle归档日志写满错误解决方法

164次阅读
没有评论

共计 2184 个字符,预计需要花费 6 分钟才能阅读完成。

最近一年,手头上负责的项目要部署到很多个地方,由于项目组里没有人对 Oracle 比较熟悉,只能给自己增加一个 DBA 的角色了。由于短时间内要部署很多单位,备份策略没有设置好,结果过了一个月,用户报告程序开始连不上数据库了,并且发给我错误报告。主要是 ora-16038、ora-19809、ora-00312 三个错误,意思很明确,就是归档日志写满了,没法继续写入归档日志了,导致数据库被暂停了,等待继续写入归档日志到硬盘。

由于用户业务比较紧张,先考虑紧急处理方案,先将数据库恢复正常,然后再给用户数据库设计合理的备份方案,使数据库以后不再出现类似错误了。

(为保护用户信息,使用密码,连接 指示符使用 manager 和 orcl 代替用户实际数据)
•使用 rman 清理归档日志和备份,看可不可以清理出来一部分空间,如果清理出来足够的空间,则数据库应该可以恢复正常了。
rman target sys/manager@orcl
crosscheck backup;
crosscheck archivelog all;
crosscheck copy;
delete expired backup;
delete expired archivelog all;
delete expired copy;
delete obsolete;

如果使用了快速恢复区,检查 db_recovery_file_dest 和 db_recovery_file_dest_size,如果目录所在位置还有空间,只需增大 db_recovery_file_dest_size 就可以使数据库恢复正常。


如果没有使用快速恢复区,检查 show parameter
 log_archive_dest,根据目录位置,看可不可以增大归档的目录的大小,比如删除目录所在分区的其他文件。如果可以清理出空间,数据库应该就可以恢复正常了


如果不想使用上面的方法,想要删除以前的归档日志来释放空间,为安全起见,首先将要删除的归档日志复制到其他地方,然后使用 rman 删除刚刚备份的日志。

如果归档日志保存在文件系统上,则根据上面获取的归档日志目录的位置,将准备删除的归档日志拷贝到指定位置,如果归档日志存储在 asm 里,就稍微麻烦一点,需要在 asmcmd 里使用 cp 命令将归档日志备份。

rman target sys/manager@orcl
– 查看归档日志文件信息
list archivelog all;
– 然后使用以下方法中的任意一种删除刚刚已经备份过的归档日志文件。
– 删除从序列号为 xxx 开始的所有归档日志文件
delete archivelog from sequence xxx;
– 或者,删除序列号在 xxx 和 yyy 之间的所有归档日志文件
delete archivelog sequence between xxx and yyy;
– 或者删除序列号一直到 xxx 的所有归档日志文件
delete archivelog until sequence xxx
– 或者使用时间来指定要删除的归档日志文件
– 删除从 datestring 指定的时间开始的所有归档日志
delete archivelog from time ‘datestring’
– 或者,删除时间在 datestring1 和 datestring2 之间的所有归档日志文件
delete archivelog time between ‘datestring1’ and ‘datestring2’
– 或者删除时间一直到 datestring 的所有归档日志文件
delete archivelog until time ‘datestring’

删除归档日志文件后,马上对数据库做全备份。然后就可以使用以下代码清理归档日志文件了。
rman target sys/manager@orcl
crosscheck backup;
crosscheck archivelog all;
crosscheck copy;
delete expired backup;
delete expired archivelog all;
delete expired copy;
delete obsolete;

总体来说,这个错误是由数据库空间规划和备份策略没有提前设计好导致,做完应急处理后应该尽快重新对数据库空间和备份策略重新进行设计,以防再次出现以上问题,影响用户使用。

ps
如果在数据库 hold 的时候使用了强制关闭数据库时,可能在开机时会遇到其它的问题,此时需要先清理待归档的日志文件,方法为
sqlplus sys/manager@orcl as sysdba
startup mount;
– 获取 inactive 且没有归档的组
select group#,sequence#,archived,status from v$log;
– 清理上一步获取的归档日志组
alter database clear unarchived logfile group x;
alter database open;

ORA-00257 归档日志写满的解决方法  http://www.linuxidc.com/Linux/2014-10/108125.htm

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-09/135221.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2184字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中