oracle之ORA-19815闪回空间爆满问题的处理方法

本文详述了ORACLE数据库闪回区爆满问题的处理流程,包括错误现象、原因分析及具体解决步骤,如调整闪回区大小、删除归档日志等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

闪回区爆满问题也是经常会遇到的问题,最关键的是闪回设置大小以及归档被默认存放在了闪回目录,恰巧今天又遇到了这个问题,就记录下处理步骤,仅供遇到这类问题的人参考。

一、错误现象描述

1)应用端错误信息

1

2

3

Error: 2016-11-26 11:45:25 ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.

Error: 2016-11-26 11:45:25 ORA-00257: Archiver error. Connect AS SYSDBA only until resolved.

Error: 2016-11-26 11:45:25 init connpool:one or more conn open error.

2)数据库端错误信息

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Sat Nov 26 12:13:14 2016

Errors in file /home/U01/app/oracle/diag/rdbms/testdb/testdb/trace/testdb_arc2_929.trc:

ORA-19815: WARNING: db_recovery_file_dest_size of 42949672960 bytes is 100.00% used, and has 0 remaining bytes available.

Sat Nov 26 12:13:14 2016

************************************************************************

You have following choices to free up space from recovery area:

1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,

  then consider changing RMAN ARCHIVELOG DELETION POLICY.

2. Back up files to tertiary device such as tape using RMAN

  BACKUP RECOVERY AREA command.

3. Add disk space and increase db_recovery_file_dest_size parameter to

  reflect the new space.

4. Delete unnecessary files using RMAN DELETE command. If an operating

  system command was used to delete files, then use RMAN CROSSCHECK and

  DELETE EXPIRED commands.

************************************************************************

Sat Nov 26 12:13:14 2016

Errors in file /home/U01/app/oracle/diag/rdbms/testdb/testdb/trace/testdb_arc2_929.trc:

ORA-19809: limit exceeded for recovery files

ORA-19804: cannot reclaim 524288000 bytes disk space from 42949672960 limit

二、错误分析

从应用日志看,是由于不能归档导致的DB连接池不能被初始化打开,基本可以判断是由于数据库的归档文件所在磁盘空间满导致。

从数据库日志查看发现确实是由于闪回空间已经爆满,通过查看服务器磁盘空间以及闪回空间大小即可再次验证。

三、详细处理过程

1)登陆数据库服务器,查看磁盘空间使用信息

1

2

3

4

5

6

7

[oracle@teststd trace]$ df -h

Filesystem   Size Used Avail Use% Mounted on

/dev/sda5    9.9G 2.6G 6.9G 28% /

tmpfs      32G  18M  32G  1% /dev/shm

/dev/sda1    388M  62M 307M 17% /boot

/dev/sda6    1.6T 506G 1017G 34% /home

/dev/sda2    20G 508M  19G  3% /var

2)查看数据库错误日志,发现闪回空间爆满

1

2

cd /home/U01/app/oracle/diag/rdbms/testdb/testdb/trace

tail -n 35 alert_testdb.log

1

ORA-19815: WARNING: db_recovery_file_dest_size of 42949672960 bytes is 100.00% used, and has 0 remaining bytes available.

3)登陆数据库,查看闪回路径以及闪回空间使用情况

查看闪回空间设置大小

1

2

3

4

5

6

7

8

SQL> show parameter recover;

  

NAME         TYPE    VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest   string   /home/U01/app/oracle/fast_recovery_area

db_recovery_file_dest_size      big integer 40G

db_unrecoverable_scn_tracking    boolean   TRUE

recovery_parallelism         integer   0

或者利用SQL查看闪回路径

1

2

3

4

5

6

7

Col name for a60;

Set line 200;

SQL> select * from v$recovery_file_dest ;

  

NAME                  SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES   CON_ID

------------------------------------------------------- ----------- ---------- ----------------- --------------- ----------

/home/U01/app/oracle/fast_recovery_area         4.2950E+10 2.1538E+10         0       89     0

查看闪回空间所在磁盘大小

1

2

3

SQL> !df -h /home/U01/app/oracle/fast_recovery_area

Filesystem   Size Used Avail Use% Mounted on

/dev/sda6    1.6T 504G 1019G 34% /home

查看闪回目录使用大小

1

2

SQL> !du -hs /home/U01/app/oracle/fast_recovery_area

40G /home/U01/app/oracle/fast_recovery_area

查看闪回空间使用情况

1

2

3

4

5

6

7

8

9

10

11

12

SQL> select * from V$RECOVERY_AREA_USAGE;

  

FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES   CON_ID

----------------------- ------------------ ------------------------- --------------- ----------

CONTROL FILE               0             0        0     0

REDO LOG           7.45             0        7     0

ARCHIVED LOG             100             0       76     0

BACKUP PIECE               0             0        0     0

IMAGE COPY                0             0        0     0

FLASHBACK LOG              0             0        0     0

FOREIGN ARCHIVED LOG           0             0        0     0

AUXILIARY DATAFILE COPY         0             0        0     0

4)删除归档、调整闪回区大小

从上面看确实是闪回空间满了,而占用闪回区满的罪魁祸首就是归档日志。要解决的方法有两个:

方案1:删除多余的归档

最佳删除归档的途径是通过rman工具做,如果直接删除文件数据库是识别不到闪回区释放的。

1

2

3

4

5

6

7

[oracle@teststd trace]$ rman target /

Recovery Manager: Release 12.1.0.2.0 - Production on Sat Nov 26 13:00:28 2016

Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.

connected to target database: TESTDB (DBID=2708971821)

RMAN> crosscheck archivelog all;

RMAN> delete expired archivelog all;

RMAN> DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7' ;

或者利用下面的语句删除七天前的归档日志

1

RMAN> DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-7' ;

注意:(一般删除归档腾出足够的闪回区后,建议调整归档路径或者调整足够闪回区大小)

方案2:调整闪回区大小

1

2

3

4

5

6

7

8

9

10

11

SQL> alter system set db_recovery_file_dest_size=100G scope=both;

alter system set db_recovery_file_dest_size=100G scope=both

*

ERROR at line 1:

ORA-65040: operation not allowed from within a pluggable database

###数据库为12c,不允许在pdb下操作,需要切换到sys下操作

SQL> conn /as sysdba;

Connected.

SQL> alter system set db_recovery_file_dest_size=100G scope=both;

  

System altered.

5)查看闪回区使用情况和其大小

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[oracle@teststd trace]$ du -hs /home/U01/app/oracle/fast_recovery_area

27G   /home/U01/app/oracle/fast_recovery_area

  

SQL> select * from V$RECOVERY_AREA_USAGE;

FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES   CON_ID

----------------------- ------------------ ------------------------- --------------- ----------

CONTROL FILE           0       0         0     0

REDO LOG          2.98        0         7     0

ARCHIVED LOG         17.08       0         82     0

BACKUP PIECE           0       0         0     0

IMAGE COPY            0       0         0     0

FLASHBACK LOG          0       0         0     0

FOREIGN ARCHIVED LOG       0       0         0     0

AUXILIARY DATAFILE COPY         0     0        0     0

  

8 rows selected.

6)通知系统管理员启动应用,正常启动

至此问题得以彻底解决

以上这篇基于ORA-19815闪回空间爆满问题的处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

<think>嗯,用户现在需要了解ORA-00257错误的成因和处理方案。从对话历史看,系统要求所有数学表达式用$...$格式(虽然这个问题用不到数学公式),回答要结构化且引用站内资料。用户明确聚焦在错误原因和解决方案上,还特别提到归档日志空间问题。用户应该是个OracleDBA或运维人员,遇到紧急的生产故障。这种归档日志爆满问题会直接导致数据库挂起,ta可能正在焦头烂额地排查。情绪估计比较焦虑,需要立即可操作的步骤,而不是理论阐述。深层需求可能是希望同时获得短期应急方案(快速释放空间)和长期预防措施。梳理引用内容发现:[^1]点出了核心原因是db_recovery_file_dest_size空间耗尽,给出了基础SQL和RMAN操作;[^2][^3]则提供了自动化清理脚本的思路,特别是按时间阈值删除(比如sysdate-5)。有趣的是三个引用都强调crosscheck和deleteexpired的配合使用,说明这是关键步骤。需要特别注意的风险点:直接deletearchivelogall会删掉所有归档,可能导致数据丢失。应该优先推荐时间窗口删除法(如保留最近7天)。另外引用里没提到但很重要的点是——如果归档日志被其他进程占用(比如备份软件),强制删除可能导致备份失败,需要确认备份作业状态。准备这样组织答案:先用场景化语言解释错误触发机制(归档写满时数据库的行为),再分步骤给出两种空间释放方案(扩容和删除),特别标注高危操作的警告。最后补充预防性建议时,要强调定期维护比临时抢救更重要,正好引用[^2][^3]的定时任务思路。用户可能还会关心如何监控,可以加个v$recovery_file_dest视图的使用提示。</think> ### ORA-00257 错误原因及解决方案 **核心原因**:归档日志存储空间耗尽。Oracle将归档日志存储在`db_recovery_file_dest`指定的目录中,空间上限由参数`db_recovery_file_dest_size`控制。当归档日志占满该空间时,触发此错误[^1]。 --- ### **解决方案分步指南** #### 1. **检查归档日志占用情况** 登录SQL*Plus后执行: ```sql SELECT * FROM v$flash_recovery_area_usage; ``` 重点关注`ARCHIVED LOG`百分比,若接近100%则空间已满[^1]。 #### 2. **释放空间(两种方法)** **方法一:扩大存储空间** ```sql ALTER SYSTEM SET db_recovery_file_dest_size=50G SCOPE=BOTH; -- 扩容至50GB SHOW PARAMETER db_recovery_file_dest; -- 确认修改生效 ``` > 📌 *适用于需保留历史归档的场景(如数据审计)* [^1]。 **方法二:删除老旧归档日志** **步骤**: ```bash rman target / # 进入RMAN工具 ``` ```sql CROSSCHECK ARCHIVELOG ALL; -- 校验归档日志状态 DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; -- 删除7天前的归档 DELETE EXPIRED ARCHIVELOG ALL; -- 清理失效记录 ``` > ⚠️ *谨慎操作:`DELETE ARCHIVELOG ALL`会删除所有归档日志!建议按时间范围删除(如保留最近7天)[^2][^3]。* --- ### **预防措施** 1. **定时清理脚本** 创建RMAN脚本(如`del_archivelog.rman`)自动清理: ```sql RUN { DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-5'; CROSSCHECK ARCHIVELOG ALL; DELETE EXPIRED ARCHIVELOG ALL; } ``` 通过cron定时任务执行(示例:每周清理一次)[^2][^3]。 2. **监控与告警** - 定期检查`v$recovery_file_dest`视图 - 设置OEM或第三方工具的空间阈值告警(如超过80%时通知)。 3. **空间规划** - 根据每日归档量估算需求(例如:每日产生10GB归档 → 至少预留70GB空间)。 --- ### **关键注意事项** - **归档日志重要性**:删除前确认无待恢复需求! - **权限要求**:操作需`SYSDBA`权限[^1]。 - **备份验证**:若使用RMAN备份,确保归档日志已被备份后再删除。 通过上述步骤可快速修复ORA-00257错误,结合定时任务和监控可从根本上避免问题复发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值