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
RMAN-08137错误
在执行DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; 后出现RMAN-08137:警告:归档日志未删除,因为备用或上游捕获进程需要它
原因是Oracle 11g有bug删除归档日志需要用force关键字,在命令中加入force关键字后再次执行:
delete noprompt force archivelog all;
成功删除所有归档文件。
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任务定时调用批处理任务
开始 => 所有程序 => 附件 => 系统工具 => 任务计划
新建个任务计划了,然后根据要求配置下即可。