Heim  >  Artikel  >  Datenbank  >  ORA-00257报错解决办法

ORA-00257报错解决办法

WBOY
WBOYOriginal
2016-06-07 17:36:091358Durchsuche

archive log 日志已满ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法

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;

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn