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

本文详细解析了Oracle数据库中归档日志错误ORA-00257的成因及解决步骤,包括调整归档日志路径、重启数据库、使用REOPEN参数等方法,适用于遇到归档日志空间满导致的连接失败问题。
ORA-00257: archiver error. Connect internal only, until freed.,sql,sql教程,Oracle基础

环境:winxp+oracle9.2.0.1客户端
win2003+oracle9.2.0.5服务端
一、出错过程:
在客户端执行以下语句:
conn scott/tiger@pgjt
declare
i number;
begin
select s.nextval into i from dual;
while i<1000
loop
insert into b values (i);
end loop;
end;
出现错误 客户端呈假死机现象
新开一个窗口:
SQL> conn scott/tiger@pgjt
已连接
SQL> select sid,serial#,username from v$session;

SID SERIAL# USERNAME
--------- --------- ------------------------------
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 1
12 14
13 5 SCOTT
14 15 SCOTT
15 4
16 1
17 1
18 1
19 1
20 4 NCCWGS

已选择20行

已用时间: 00: 00: 00.01
SQL> alter system kill session '13,5';

系统已更改

已用时间: 00: 00: 00.00
SQL>

重复上面步骤大概3次后
SQL> conn scott/tiger@pgjt
ERROR:
ORA-00257: archiver error. Connect internal only, until freed.

无法连接数据库

二、Problem Description -------------------

The database is running in archive log mode with automatic archiving turned on. When the archive log destination diskspace becomes full the automatic archiving will stop. This is expected to happen. At this point a message should appear on the screen: ORACLE Instance v816 - Can not allocate log, archival required When all of the online redo logs are filled up, the database will be in a hang state. After freeing up diskspace the online redo logs are still not archiving. In most cases this is the CORRECT behaviour.

If you attempt to manually archive the files you may receive the following errors:

SVRMGR> archive log next ORA-16014: log 1 sequence# 199 not archived, no available destinations ORA-00312: online log 1 thread 1: 'C:ORACLEORADATAV816REDO01.LOG'

SVRMGR> archive log all ORA-16020: less destinations available than specified by LOG_ARCHIVE_MIN_SUCCEED_DEST

Solution Description --------------------

Some of the possible ways to fix this problem:

1. Use the command:

alter system archive log all to 'c:oracleoradatav816archive'; *NOTE: You MUST specify a location ref - ora-16014

2. Shutdown and restart the database. It may be necessary to do a Shutdown abort.

3. Use the REOPEN attribute of the LOG_ARCHIVE_DEST_n init.ora parameter.

LOG_ARCHIVE_DEST_n='
REOPEN=30' Or run the following comand:

alter system set LOG_ARCHIVE_DEST_n = 'reopen'

4. Use the commands:

alter system archive log stop; alter system archive log start;

Explanation -----------

The error ora-16014 is the real clue for this problem. Once the archive destination becomes full the location also becomes invalid. Normally Oracle does not do a recheck to see if space has been made available.

1. Using the command: alter system archive log all to 'c:oracleoradatav816archive'; gives Oracle a valid location for the archive logs. Even after using this the archive log destination parameter is still invalid and automatic achive does not work. This solution is best for systems that do not archive regularly but cannot be shutdown. You can also use this to allow you to do a Shutdown immediate instead of Shutdown abort.

2. Shutdown and restart of the database resets the archive log destinstation parameter to be valid. Do not forget to make disk space available before starting the database.

3. Use the REOPEN attribute of the LOG_ARCHIVE_DEST_n parameter to determine whether and when ARCn attempts to re-archive to a failed destination following an error. REOPEN applies to all errors, not just OPEN errors. REOPEN=n sets the minimum number of seconds before ARCn should try to reopen a failed destination. The default value for n is 300 seconds. A value of 0 is the same as turning off the REOPEN option, in other words, ARCn will not attempt to archive after a failure. If you do not specify the REOPEN keyword, ARCn will never reopen a destination following an error. The Server Administration Guide has more information on REOPEN.

References ----------

[BUG:1271752] AUTOMATIC ARCHIVING HAS NOT RESUMED AFTER SPACE IS FREED UP Server Administration Guide: Chapter 7

[NOTE:74324.1] Auto Archive Stopped - 8i LOG_ARCHIVE_DEST_n Issues .

3、问题解决
归档日志使用的磁盘空间已满 删除一些老的磁盘归档文件
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 542712360 bytes
Fixed Size 455208 bytes
Variable Size 427819008 bytes
Database Buffers 109051904 bytes
Redo Buffers 5386240 bytes
Database mounted.
Database opened.
SQL> conn scott/tiger
Connected.
SQL>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-122238/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-122238/

### ORA-00257: archiver error. Connect internal only, until freed 的解决方法 Oracle数据库错误 **ORA-00257** 表示归档日志空间已满,归档进程无法继续写入新的归档日志,从而导致数据库进入只读模式(仅允许内部连接),直到释放足够的空间为止。此问题通常发生在归档日志目录(如闪回恢复区)空间不足的情况下。 #### 1. 检查归档日志存储位置和使用情况 可以通过以下SQL语句查看闪回恢复区的使用情况: ```sql SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE; ``` 该查询将显示归档日志、备份集、控制文件等在闪回恢复区中的占用比例。如果归档日志接近100%,则需要清理或扩展空间[^4]。 同时,可以使用以下命令查看当前归档日志的存储路径: ```sql SHOW PARAMETER DB_RECOVERY_FILE_DEST; ``` 这将显示当前归档日志所在的目录(如 `/u01/app/oracle/flash_recovery_area`)[^3]。 --- #### 2. 使用RMAN清理归档日志 进入RMAN命令行工具,执行以下步骤清理旧的归档日志: ```bash su - oracle rman target / ``` 在RMAN中执行: ```rman CROSSCHECK ARCHIVELOG ALL; DELETE ARCHIVELOG UNTIL TIME 'SYSDATE-7'; -- 删除7天前的归档日志 ``` 该命令将删除7天前的归档日志,释放闪回恢复区的空间[^2]。 --- #### 3. 增大闪回恢复区大小 如果频繁出现归档日志空间不足的情况,建议增大闪回恢复区的容量: ```sql ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=10G; ``` 此命令将闪回恢复区大小调整为10GB。可以根据实际需求调整数值,如20G、50G等[^2]。 --- #### 4. 配置归档日志保留策略 为了防止归档日志再次堆积,可以配置RMAN的保留策略: ```rman CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 15 DAYS; ``` 该策略将保留15天内的归档日志,超出时间的归档日志可在备份后自动清理。 --- #### 5. 检查归档日志生成速率 如果系统在短时间内生成大量归档日志,可能意味着数据库存在高频率的DML操作或批量数据处理任务。建议: - 优化SQL语句,减少不必要的更新操作。 - 配置定时任务定期清理归档日志。 - 考虑将归档日志目录迁移到更大容量的磁盘分区。 --- #### 6. 重启归档进程(可选) 在清理归档日志并释放空间后,如果数据库仍处于只读模式,可以尝试重启归档进程: ```sql ALTER SYSTEM ARCHIVE LOG START; ``` 或者重启整个数据库实例以恢复正常归档功能。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值