[64000][257] ORA-00257: archiver error. Connect internal only, until freed.
原因
归档日志写满了、闪回日志写满了(根本原因是服务器磁盘写满了)
# 切换到oracle服务
su - oracle# 使用sysdba用户登录 解决方案:(https://blog.csdn.net/qq_37635373/article/details/93328211)
sqlplus /nologconn /as sysdba
查看 archive log 存放位置
# 显示数据库参数`log_archive_dest`的当前设置值
show parameter log_archive_dest
归档日志模式的状态信息
archive log list;
-
数据库是否处于ARCHIVELOG模式或NOARCHIVELOG模式。
- ARCHIVELOG模式:当数据库在此模式下运行时,所有的重做日志文件在被重用前都会被归档保存。这允许进行点对点的恢复。
- NOARCHIVELOG模式:在此模式下,重做日志文件在空间需要时可以被覆盖,不进行归档。这意味着无法进行点对点的恢复,只能恢复到最后一次完整备份。
-
归档日志的当前位置和状态。
-
已经归档的日志文件的序列号。
-
下一个归档日志文件的预期序列号。
查看 Flash Recovery Area 的情况
# 可以看到 PERCENT_SPACE_USED 的占用百分比是多少
select * from V$FLASH_RECOVERY_AREA_USAGE;
查看归档文件路径
show parameter recover;
找到归档文件路径,对文件进行删除,注意保留最近的几个文件
需要处理数据库备份及恢复工具
在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放。(RMAN是Oracle提供的一个备份和恢复管理工具,可以帮助数据库管理员进行数据库的备份和恢复操作)
rman target sys/pass
# 命令会检查所有的归档日志文件,验证RMAN的记录与磁盘或媒体上实际存在的归档日志文件是否一致。如果RMAN记录中的文件在磁盘或媒体上不存在,那么这个文件在RMAN的记录中的状态就会被标记为`EXPIRED`。 只会更新RMAN的记录,不会实际删除任何文件
crosscheck archivelog all;
# 删除所有标记为`EXPIRED`状态的归档日志文件。
delete expired archivelog all;# 删除所有直到昨天为止的归档日志文件,注意: 这个命令会实际删除磁盘上的归档日志文件,而不仅仅是删除RMAN的记录。所以在执行这个命令之前,你需要确保你不再需要这些归档日志文件,或者归档文件已经被备份
delete archivelog until time ‘sysdate-1
检查是否处理完成
select * from V$FLASH_RECOVERY_AREA_USAGE;