问题:前天突然发现数据访问不了了,使用navicate连接提示ORA--00257错误,查了一下,这个错误代码表示数据库服务的归档日志已经满了,需要清除归档日志。以前使用的一直都是MySQL,对Oracle接触的不多,所以清除的时候遇到了一些坑,分享给一些有相同需求的朋友。
- 连接数据库服务器
- 切换到Oracle
su - oracle
- 使用管理员登陆数据库
sqlplus / as sysdba;
查询当前数据库的名称,看看是否是你所要操作的数据(特别是一台机器上装了两个Oracle数据库的,强烈建议看一下操作的数据库,楼主这里就是清除归档日志时没有看,结果清除错了数据库,还好有同事的帮助,找到了问题。)
select name from v$database;
如果这里是你所需要操作的数据库,退出sql;
exit;
- 使用rman命令,也可以在这里查看操作的数据库
rman target/
- 清除归档日志,根据自己需求,选择对应的删除语句。
普通删除命令:
# 只保留最近7天的,其余的都删除
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
强制删除命令:
DELETE FORCE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
# 删除最近7天的归档
DELETE ARCHIVELOG FROM TIME 'SYSDATE-7';
# 强制删除最近7天的归档
DELETE FORCE ARCHIVELOG FROM TIME 'SYSDATE-7';
# 删除所有的归档日志
delete expired archivelog all;
# 强制删除所有归档日志
delete force expired archivelog all;
结束语:到这里,归档日志就已经删除完毕了。
注:有时候使用非强制性命令,可能会删除失败(当前删除的日志正在被占用),建议使用强制性删除命令,以确保日志删除成功!
验证:重新进入sql语句的命令行,验证归档日志是否删除,磁盘空间是否释放成功
# 查询归档日志占用空间的情况,看看是否清除成功
select * from V$FLASH_RECOVERY_AREA_USAGE;
清除成功。