ORA-00257:归档程序错误,在释放之前仅限于内部连接

线上会员系统无法登录,查看user日志,发现报错:ORA-00257: 归档程序错误。在释放之前仅限于内部连接

原因分析:FLASH_RECOVERY_AREA 设置空间为60G。归档日志占满了FLASH_RECOVERY_AREA 的空间,就出现了以上的错误。

解决方案:

方法一:改变了FLASH_RECOVERY_AREA的大小

SQL>alter system setdb_recovery_file_dest_size=100G scope=both;

SQL> show parameter db_recovery_file_dest_size;

NAME    TYPE    VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest_size  big integer 100G

方法二:删除归档日志

2.1 查看归档日志所在位置
SQL> show parameter recover;

NAME    TYPE    VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest   string  /u01/app/oracle/rdbms/archivelog/
db_recovery_file_dest_size  big integer 100G
db_unrecoverable_scn_tracking   boolean TRUE
recovery_parallelism    integer 0

2.2 到具体的位置把归档文件删除
[oracle@kmb2b-db01 root]$ cd /u01/app/oracle/rdbms/archivelog/KMB2B/archivelog/
[oracle@kmb2b-db01 archivelog]$ rm -rf 2017_*

2.3 查看使用率 
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;

2.4 然后用户用rman进入把归档日志删除
>rman target/
>crosscheck archivelogall;
>delete expired archivelog all;
>exit

注:删除过期的归档或者删除指定时间之前的archivelog:
DELETE ARCHIVELOG ALL COMPLETED BEFORE'SYSDATE-7';(指定删除7天前的归档日志)

方法三:使用脚本自动化删除归档日志
[oracle@kmb2b-db01 init]$ cat oracle_del_archivelog.sh 
#!/bin/bash

export ORACLE_SID=kmb2b
export TERM=vt100
export ORACLE_BASE=/u01/app/oracle/rdbms
export NLS_DATE_FORMAT="yyyy-mm-dd hh24:mi:ss"
export ORACLE_DOC=$ORACLE_BASE/doc
export TMP=/tmp
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0
export PATH=$ORACLE_HOME/bin:$PATH
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8'

source /home/oracle/.bash_profile

$ORACLE_HOME/bin/rman target / <'sysdate-30';
exit;
EOF

你可能感兴趣的:(oracle)