ORA-00257归档程序错误

线上生成系统后台日志连接数据库报ORA-00257归档程序错误。借此了解下oracle日志归档模式和非归档模式以及如何解决该问题。

Oracle日志操作模式

Oracle数据库在运行过程中,每一个实例都有一个相关的重做日志,在实例故障情况下保护数据库。 我们对数据的DML,DDL操作都会结构化为重做记录,可以用来重建对数据库所做的所有更改的数据,包括撤销段。 重做记录在SGA的重做日志缓冲区中以循环方式进行缓冲,并被数据库后台进程log Writer (LGWR)写入其中一个重做日志文件(Redo log files)中 由数据库库后台进程log Writer(LGWR)写入联机重做日志(Redo log files)中,当重做日志文件被填满时,会发生日志切换,根据是否启用归档分为两种情况:

1、如果归档被禁用(NOARCHIVELOG模式),则在将在记录在其中的更改写入数据文件后,这个填满的重做日志文件可用。

2、如果启用了归档(ARCHIVELOG模式),则在将记录的更改写入数据文件并归档后,LGWR就可以使用这个被填满的重做日志文件。

归档优缺点

可以进行完全、不完全恢复:由于对数据库所做的全部改动都记录在日志文件中,如果发生硬盘故障等导致数据文件丢失的话,则可以利用物理备份和归档日志完全恢复数据库,不会丢失任何数据。

一般生产系统推荐都开启归档模式,毕竟数据无价。

归档常用操作

查看当前数据库归档模式

su - oracle #切换到oracle用户
sqlplus /nolog
conn /as sysdba;
select log_mode from v$database;

开启归档模式

shutdown immediate; #关闭数据库
startup mount; #启动数据库到mount状态
alter database archivelog; #修改数据库到归档模式
alter database open; #启动数据库
archive log list; #查看归档配置

解决ORA-00257问题

项目上面ORA-00257归档程序错误,为归档空间不足。解决办法: 1、删除多余的归档日志 2、增大归档日志的容量 3、关闭归档模式

删除多于归档日志

1、查看当前使用archivelog使用的百分比。

set linesize 200;
select * from V$FLASH_RECOVERY_AREA_USAGE;

2、查看当前归档日志所在目录 当前归档日志文件在/home/oracle/fast_recovery_area/AODB/archivelog/目录下

show parameter recovery;

3、在此目录下根据日期删除过久的归档日志 4、使用rman维护控制文件

rman target <管理员用户>/<管理员密码>
crosscheck archivelog all; #检查错误文档
delete expired archivelog all; #删除过期文档

修改归档日志存储大小跟容量

show parameter db_recover;
alter system set db_recovery_file_dest_size=2000G scope=spfile

关闭归档模式

如果不是生产系统而是测试环境,可以关闭归档模式

shutdown immediate; #关闭数据库
startup mount; #启动数据库到mount状态
alter database noarchivelog; #修改数据库到归档模式
alter database open; #启动数据库
archive log list; #查看归档配置

项目真实造成归档满原因

实际项目提供的归档大小为1T按照目前项目量没有这么大的日志。在线上归档日志1T一天就打满了。

联想到最近对程序升级过,部分软件模块中可能存在频繁的DML操作。

通过记录了几个小时的AWR日志,下载下来查看程序中存在不正常的SQL更新语句,造成了频繁的更新产生了大量的日志,修复了此SQL问题,解决了该问题。

文章作者: 编程之家
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编程之家
Oracle oracle ora-00257
喜欢就支持一下吧