ORA-00257 : archiver error. Connect internal only, until freed

本文介绍了解决Oracle数据库中ORA-00257归档错误的方法,包括重新指定归档路径、增加闪回区大小及清理闪回区中的归档日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

An error has occured!

SQL error: ORA-00257: archiver error. Connect internal only, until freed.

    while executing
"sql connect $Connections($connectionName,database)  $Connections($connectionName,user)      $Connections($connectionName,password)  $connectionName"

 

〖环境(Environment)〗

OS:LINUX

DB:ORACLE10G

 

〖现象(Symptom)〗

以普通用户登录数据库时,报告错误:ORA-00257 : archiver error. Connect internal only, until freed。

ALTER SYSTEM ARCHIVE LOG CURRENT执行手工归档也不行。

 

〖原理(Cause)   〗

Step01ps -ef|grep oracle查看归档进程,归档进程运行正常。

oracle  524    1 1 15:50:30        0:14 ora_arc0_nbo

oracle  518    1 0 15:50:23        0:01 ora_arc1_nbo

。。。

 

Step02查看归档路径。

SQL> show parameter LOG_ARCHIVE_DEST_n

 

NAME                                TYPE       VALUE

------------------------------------ ----------- ----------------

log_archive_dest_1                  string

log_archive_dest_10                 string

log_archive_dest_2                  string

log_archive_dest_3                  string

log_archive_dest_4                  string

log_archive_dest_5                  string

log_archive_dest_6                  string

log_archive_dest_7                  string

log_archive_dest_8                  string

log_archive_dest_9                  string

log_archive_dest_state_1            string     enable

。。。

从数据可以看出,归档路径LOG_ARCHIVE_DEST_n为空,没有设置归档路径。如果没有设置归档路径的时候,ORALCE默认会把归档文件(archived logs)放到闪回区(Flash Recovery Area)。

 

Step03得到闪回区(flash recovery area)的路径。

SQL> show parameter DB_RECOVERY_FILE_DEST

 

NAME                            TYPE       VALUE

------------------------------------ ----------- --------------------------

db_recovery_file_dest               string     /wxxrdata/flash_recovery_area

闪回区(flash recovery area)的路径是/wxxrdata/flash_recovery_area

 

Step04查看闪回区(Flash Recovery Area)的使用情况。

SQL> SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

 

FILE_TYPE   PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES

------------ ------------------ ------------------------- ---------------

CONTROLFILE                  0                        0              0

ONLINELOG                    0                        0              0

ARCHIVELOG                74.05                       0             31

BACKUPPIECE               10.95                       0              8

IMAGECOPY                  15                       0             66

FLASHBACKLOG                 0                        0              0

 

从查询结果可以看出,在闪回区中,归档日志(ARCHIVELOG)占用74.05%的空间,备份(BACKUPPIECE)占用10.95%的空间,文件拷贝(IMAGECOPY)占用15%的空间。闪回区中已经没有空余的磁盘空间。

 

〖方法(Action)   〗

u      方法一:重新指定归档路径。

●如果使用SPFILE启动数据库,则可以动态改变归档路径。

SQL>alter system set log_archive_dest_1='location=/proddata' scope=both;

这里指定一个新的归档路径。

 

●如果使用PFILE启动数据库,则需要执行下面的过程。

Step01进入初始化参数文件所在的目录

$ cd $ORACLE_HOME/dbs(这是默认路径)

本例中的PFILEinitnbo.ora

 

Step02编辑初始化参数文件

$vi initnbo.ora

添加参数:

log_archive_dest_1='location=/proddata'。

这里指定一个新的归档路径,这个路径要有足够的空间。

 

Step03关闭数据库

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 

Step04重启数据库。

SQL> startup PFILE='/oracle/app/oracle/product/10.1.0/Db_1/dbs/initnbo.ora';

ORACLE instance started.

Total System Global Area 289406976 bytes

Fixed Size                 1248600 bytes

Variable Size            100663976 bytes

Database Buffers         184549376 bytes

Redo Buffers               2945024 bytes

Database mounted.

Database opened.

从此以后,数据库的归档日志将被写到/proddata下。

 

u      方法二:增加闪回区(Flash Recovery Area)的大小。

SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE =20GSCOPE=BOTH SID='*';

System altered.

闪回区的大小被提到20G。

 

u      方法三:删除闪回区(Flash Recovery Area)中多余的归档日志文件。

 

=========================================================================================

在Oracle10g开始又采用了一种新的FlashBack日志来实现这个功能,而且更为强大,可以将数据库退回到过去某个时间点去。这个文件默认最大为2g。但是在一段时间过后,很快就达到了2G,这个时候就会出现ORA-00257错误了。
如何去解决呢,有两种方法,第一种就是关闭闪回日志的功能,这种对于开发环境中不失为一种好方法,因为开发环境中,并不追求数据的可安全性的。大家可以通过下面的语句改变。

alter database flashback off

第二种方法就是增大闪回日志文件的最大大小。示例如下:

alter system set DB_RECOVERY_FILE_DEST_SIZE=10g

此时,你可以去查看v$flash_recovery_area_usage视图中的使用率情况,这个时候发现使用率(PERCENT_SPACE_USED列的值)已经大大降低了。再通过如下语句去查看系统日志文件情况。

select * from v$log

至此redo日志文件可以正常写入,问题解决。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值