您的位置:首页 > 数据库 > Oracle

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

2018-03-27 13:50 417 查看
应用场景:线上user会员登录系统无法登录,查看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 / <<EOF
crosscheck archivelog all;
delete force noprompt archivelog all completed before 'sysdate-30';
exit;
EOF
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: