数据库归档日志满了的解决方法

数据库归档日志满了的解决方法

Oracle.DataAccess.Client.OracleException ORA-257

此错误是数据库归档日志满了导致磁盘空间不足引起的。

 

Oracle在开启了归档模式后,会在指定的archive目录下产生很多的archivelog文件,而且默认是不会定期清除的,时间长久了,该文件夹会占用很大的空间

 

正确删除归档日志的方法:

(1)由于内存空间已满无法正常链接数据库,只能使用RMAN链接数据库。

进入RMAN方法:

在运行中输入cmd进入命令提示符(不是在sqlplus),然后输入rman target sys用户名/admin nocatalog密码)。或者直接输入rman target/

 

2-1

进入rman后先在archive目录删除所有archivelog文件然后在rman执行以下命令

crosscheck archivelog all

delete expired archivelog all

注:此方法会删除所有归档日志

 

2-2

或者删除指定时间之前的archivelog
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'(指定删除7天前的归档日志)如遇到错误看附文

---补充---
直接如下就行了:
RMAN target sys/*****@orcl
DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';如遇到错误看附文

RMAN target sys/*****@orcl
DELETE NOPROMPT ARCHIVELOG UNTIL TIME "TO_DATE('XXXX-XX-XX','YYYY-MM-DD')";

补充:

 noprompt  不用确认 
就是 手动输入yes & no

1

RMAN-08137错误

在执行DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; 后出现RMAN-08137:警告:归档日志未删除,因为备用或上游捕获进程需要它

 

原因是Oracle 11gbug删除归档日志需要用force关键字在命令中加入force关键字后再次执行:

 

delete noprompt force archivelog all; 

成功删除所有归档文件。

 

2

windows上设置自动删除oracle归档日志

为了防止再次出现归档日志满了的问题,在主备库各设置了个定时任务

 

1、创建一个删除归档日志的脚本(delete_arch.txt):
connect target /
run{
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; //删除7天前的归档日志,怕哪天DG有问题,有日志没有及时应用
crosscheck archivelog all;
delete expired archivelog all;
}

2、创建批处理任务(delete_archive.bat)
rman cmdfile=c:\delete_arch.txt

3、创建一个windows任务定时调用批处理任务

开始 => 所有程序 => 附件 => 系统工具 => 任务计划

新建个任务计划了,然后根据要求配置下即可。

 


你可能感兴趣的:(数据库归档日志满了的解决方法)