ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
方法一:
参考: http://blog.csdn.net/panys/article/details/3838846
archive log日志已满
ORA-00257: archiver error. Connect internal only, until freed错误的处理方法
1.用sys用户登录
sqlplus sys/pass@tt as sysdba
2.看看archiv log所在位置
SQL> show parameter log_archive_dest;
NAME TYPE VALUE
--------------------------------- --- ----------- ------------------------------
log_archive_dest string
log_archive_dest_1 string
log_archive_dest_10 string
3.一般VALUE为空时,可以用archive log list;检查一下归档目录和log sequence
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 360
Next log sequence to archive 360
Current log sequence 362
4.检查flash recovery area的使用情况,可以看见archivelog已经很大了,达到96.62
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ---------------- --------- ---------------
CONTROLFILE .13 0 1
ONLINELOG 2.93 0 3
ARCHIVELOG 96.62 0 141
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
5.计算flash recovery area已经占用的空间
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
2.9904 6.找到recovery目录, show parameter recover SQL> show parameter recover;NAME TYPE VALUE ------------------------------------ -------- --- ------------------------------ db_recovery_file_dest string /u01/app/oracle/flash_recovery_area db_recovery_file_dest_size big integer 5G recovery_parallelism integer 0
7上述结果告诉我们,归档位置用的是默认值,放在flash_recovery_area下(db_recovery_file_dest目录=/u01/app/oracle/flash_recovery_area)
[root@sha3 10.2.0]# echo $ORACLE_BASE
/u01/app/oracle
[root@sha3 10.2.0]# cd $ORACLE_BASE/flash_recovery_area/tt/archivelog
转移或清除对应的归档日志,删除一些不用的日期目录的文档,注意保留最后几个文档(比如360以后的)
-------------------------------------------------- -------------------------------------
注意:
在删除归档日志后,必须用RMAN维护控制文档,否则空间显示仍然不释放。
-------------------------------------------------- -------------------------------------
8. rman target sys/pass
[root@sha3 oracle]# rman target sys/pass
Recovery Manager: Release 10.2.0.4.0 - Production on Tue Jan 20 01:41:26 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
connected to target database: tt (DBID=4147983671)
9.检查一些无用的archivelog
RMAN> crosscheck archivelog all;
10.删除过期的归档
RMAN> delete expired archivelog all;
delete archivelog until time 'sysdate-1' ; 删除截止到前一天的所有archivelog
11.再次查询,发现使用率正常,已经降到23.03
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ---------------- --------- ---------------
CONTROLFILE .13 0 1
ONLINELOG 2.93 0 3
ARCHIVELOG 23.03 0 36
BACKUPPIECE 0 0 0
IMAGECOPY 0 0 0
FLASHBACKLOG 0 0 0
其它有用的Command:
----------------------------------
如果archive log模式下不能正常startup,则先恢复成noarchive log,startup成功后,再shutdown;
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
shutdown immediate;
再次startup以archive log模式
shutdown immediate;
startup mount;
show parameter log_archive_dest;
alter database archivelog;
archive log list;
alter database open;
如果还不行,则删除一些archlog log
SQL> select group#,sequence# from v$log;
GROUP# SEQUENCE#
---------- ----------
1 62
3 64
2 63
原来是日志组一的一个日志不能归档
SQL> alter database clear unarchived logfile group 1;
alter database open;
最后,也可以指定位置Arch Log,请按照如下配置
select name from v$datafile;
alter system set log_archive_dest='/opt/app/oracle/oradata/usagedb/arch' scope=spfile
或者修改大小
SQL> alter system set db_recovery_file_dest_size=3G scope=both;
方法二:
1. 查询 archive log 使用情况1
select * from v$recovery_file_dest;
archive log 默认 SPACE_LIMIT 是 2 G, SPACE_USED 为目前使用量, 通常会出现 ORA-00257 表示 SPACE_USED 数量已接近 SPACE_LIMIT 限制
2. 查询 archive log 使用情况2
select * from v$flash_recovery_area_usage;
ARCHIVELOG 的 PERCENT_SPACE_USED 目前使用 0%, 通常会出现 ORA-00257 表示 PERCENT_SPACE_USED 使用率已达到接近 100 %
3. 查询 archive log 设定
select log_mode, flashback_on from v$database;
LOG_MODE 为 ARCHIVELOG 表示使用 archive log, NOARCHIVELOG 表示不使用 archive log, FLASHBACK_ON 为 ON 表示启动, OFF 则关闭, 而 FlashBack log 可以将数据库退回到过去某个时间点去, 但这个档默认最大为 2G. 但是在一段时间过后, 很快就达到了2G, 这个时候就会出现ORA-00257错误了.
P.S 不追求数据的可安全性, 可以关闭闪回日志的功能
alter database flashback off
第3点的 FLASHBACK_ON 即会显示 OFF
如果关闭闪回日志可以解决 ORA-00257, 下列步骤即不需再设定, 但通常会使用步骤 4 解决 ORA-00257
4. 停止 ARCHIVE MODE, 将 LOG_MODE 设定为 NOARCHIVELOG
4.1 进入 Command mode
4.2 输入 sqlplus "/ as sysdba"
4.3 关闭 DB :
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
P.S 若无法 shutdown DB, 那可能是因为 log 满了的关系, 利用下列步骤清除今日以前的 log
1. 执行 command mode
2. rman target /
3. crosscheck archivelog all;
4. delete archivelog until time 'sysdate-1';
4.4 启动 instance :
SQL> startup mount;
ORACLE instance started.
Total System Global Area 101782828 bytes
Fixed Size 451884 bytes
Variable Size 37748736 bytes
Database Buffers 62914560 bytes
Redo Buffers 667648 bytes
Database mounted.
4.5 停用 ACHIVE MODE:
SQL> alter database noarchivelog;
Database altered.
4.6 启动 DB:
SQL> alter database open;
Database altered.
4.7 查看是否为 No Archive Mode (也可以使用 PLSQL 查询, 如步骤3)
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Enabled
Archive destination /opt/oracle/oradata/conner/archive
Oldest online log sequence 149
Current log sequence 152
原文:大专栏 ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法