ORA-00257: archiver error. Connect internal only, until freed 处理方法

1、产生原因
通过PL/SQL登录用户账号提示此信息,导致无法正常登录,查询资料显示出现ORA-00257错误由于归档日志已满,占用了全部的硬盘剩余空间导致的,通过简单删除日志释放存储空间就能够解决。

2、解决办法
2.1 root用户登录服务器,然后切换Oracle用户,用DBA用户连接到oracle
[root@ldjc ~]# su - oracle
[oracle@ldjc ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期二 10月 29 11:32:35 2019

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

连接到: 
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>
1
2
3
4
5
6
7
8
9
10
11
12
2.2 检查flash recovery area的使用情况
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
1
执行结果:

界面看着有点不舒服,查看目前的linesize,默认是80,可以设置成200或者更宽都可,设置后再执行SQL

SQL> show linesize;
linesize 80
SQL> set linesize 200;
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
1
2
3
4

可以看见archivelog已经很大了,已经达到了99.82。

2.3 计算flash recovery area已经占用的空间
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
                       2.9946
1
2
3
4
5
2.4 找到recovery目录, show parameter recover
SQL> show parameter recover;

NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
db_recovery_file_dest                string                            /oracle/flash_recovery_area
db_recovery_file_dest_size           big integer                       10G
recovery_parallelism                 integer
1
2
3
4
5
6
7
结果显示归档日志位于目录/oracle/flash_recovery_area下,进入此目录根据数据库实例ID进入相应的归档日志文件夹下,删除一些不用的日期目录的文件,注意:建议删除前先进行备份。

[root@ldjc ~]# cd /oracle/flash_recovery_area
[root@ldjc flash_recovery_area]# ll
total 8
drwxr-x---. 2 oracle oinstall 4096 Feb  9  2018 mzrswdb
drwxr-x---  3 oracle oinstall 4096 Feb  9  2018 MZRSWDB
[root@ldjc flash_recovery_area]# cd MZRSWDB/archivelog
[root@ldjc archivelog]# pwd
/oracle/flash_recovery_area/MZRSWDB/archivelog
1
2
3
4
5
6
7
8
【注意】 在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放。

2.5 另开窗口登录服务器后切换Oracle用户,进入RMAN维护
[root@ldjc ~]# su - oracle
[oracle@ldjc ~]$ rman target sys/pass

恢复管理器: Release 11.2.0.1.0 - Production on 星期二 10月 29 14:24:46 2019

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

连接到目标数据库: MZRSWDB (DBID=1046999851)

RMAN>
1
2
3
4
5
6
7
8
9
10
2.6 检查一些无用的archivelog
RMAN> crosscheck archivelog all;
1
执行结果


2.7 删除过期的归档
RMAN> delete expired archivelog all;

释放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=195 设备类型=DISK
说明与资料档案库中的任何归档日志都不匹配
1
2
3
4
5
6
**【注】**以上执行结果显示没有匹配到过期的归档。

2.8 删除7天前的所有archivelog
RMAN> delete archivelog until time 'sysdate-7' ;
关键字     线程序列     S 时间下限          
------- ---- ------- - ------------------
1397    1    1490    A 2019-10-2006:29:12
        名称: /oracle/flash_recovery_area/MZRSWDB/archivelog/2019_10_21/o1_mf_1_1490_gtt8llw4_.arc
。。。省去大部分内容。。。
1398    1    1491    A 2019-10-2111:13:22
        名称: /oracle/flash_recovery_area/MZRSWDB/archivelog/2019_10_22/o1_mf_1_1491_gtx6f5mw_.arc


是否确定要删除以上对象 (输入 YES 或 NO)? 

归档日志文件名=/oracle/flash_recovery_area/MZRSWDB/archivelog/2019_10_17/o1_mf_1_1487_gtjxc3b4_.arc RECID=1394 STAMP=1021932387
已删除的归档日志
。。。省去大部分内容。。。
已删除的归档日志
归档日志文件名=/oracle/flash_recovery_area/MZRSWDB/archivelog/2019_10_22/o1_mf_1_1491_gtx6f5mw_.arc RECID=1398 STAMP=1022334885
391 对象已删除
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
**【注】**是否确定要删除以上对象 (输入 YES 或 NO)? 输入YES,然后回车 提示391 对象已删除

2.9 再次查询,发现使用率就正常,已经降到1.45
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;

FILE_TYPE                                                    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------------------------------------ ------------------ ------------------------- ---------------
CONTROL FILE                                                                  0                         0               0
REDO LOG                                                                      0                         0               0
ARCHIVED LOG                                                               1.45                         0               6
BACKUP PIECE                                                                  0                         0               0
IMAGE COPY                                                                    0                         0               0
FLASHBACK LOG                                                                 0                         0               0
FOREIGN ARCHIVED LOG                                                          0                         0               0

已选择7行。
1
2
3
4
5
6
7
8
9
10
11
12
13
2.10 再次计算flash recovery area已经占用的空间
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;

SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
                        .0435
1
2
3
4
5
2.11 登录目标数据库用户
SQL> conn sdrs_zpxx/sdrszpxx_jyt 
已连接。
1
2
至此问题已经得到解决。

2.12 切换窗口退出数据库用户登录以及RMAN维护登录
退出Oracle用户

SQL> exit
从 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开
[oracle@ldjc ~]$ exit
logout
1
2
3
4
5
退出RMAN维护登录

RMAN> exit

恢复管理器完成。
[oracle@ldjc ~]$ exit
logout
1
2
3
4
5
3 小结
所谓的归档日志,就是指将在线日志进行归档、持久化到成固定的文件到硬盘,便于以后的恢复和查询。当然,前提条件是数据库要处于归档模式。
Oracle数据库开归档之后,由于日志过多,空间写满,数据库的redo文件不能归档,而出现oracle数据库挂起的问题, 数据库无法使用,就会弹出此问题。
在生产环境中可以根据需求,制定对应的归档日志保留策略,很多时候在使用rman全备之后,会备份归档,可以在全备脚本后面添加删除归档日志的命令,因为在全备后,归档也会一并备份到对应的备份片中,可以通过备份还原。
————————————————
版权声明:本文为CSDN博主「孑木文学」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39699061/article/details/102806584

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ORA-00257Oracle数据库中的一个错误代码,表示归档错误。错误信息中的“connect internal only, until freed”表示只有内部连接才能解决这个问题,直到空间释放为止。这个错误通常是由于归档日志文件已满或磁盘空间不足导致的。要解决这个问题,可以通过删除旧的归档日志文件或增加磁盘空间来释放空间。 ### 回答2: ORA-00257Oracle数据库中常见的错误之一,它表示归档器发生故障,无法继续归档。这个错误经常出现在数据库空间不足或者磁盘空间不足的情况下。另外,当出现一个归档进程正在使用或者另一个归档进程正在进行数据转储时,也可能出现ORA-00257错误。 这个错误可以通过在SQLPLUS命令行界面中连接到内部(internal)以解决。连接到内部可以使用以下命令: sqlplus / as sysdba 连接到内部后,可以尝试使用以下命令释放空间并解决ORA-00257错误: 1.查看当前的归档日志: archive log list; 2.查看归档日志的状态: select * from v$archive_dest_status; 3.检查数据库的归档日志目录: select name, value from v$parameter where name like '%log_archive_dest%'; 4.手动归档当前的重做日志: alter system archive log current; 5.删除重复或无用的归档日志: RMAN> crosscheck archivelog all; RMAN> delete noprompt expired archivelog all; 当然,磁盘空间不足也是ORA-00257错误的常见原因。在这种情况下,需要增加磁盘空间或定期清理日志来避免出现这个错误。 总之,ORA-00257错误是Oracle数据库中常见的归档器错误之一。尽管出现这个错误可能有多种原因,但可以通过连接到内部,查找并释放空间以及清理无用的归档日志来解决这个问题。 ### 回答3: ORA-00257Oracle数据库中的一个错误代码,表示出现了归档器错误,只能通过内部连接访问,直到释放。 当Oracle数据库中的归档日志没有及时清空时,就可能会出现ORA-00257错误。归档日志是Oracle数据库保留的一些历史记录,用于恢复数据和保证数据一致性。每当Oracle数据库执行完一定量的事务操作后,就会将这些操作记录下来,并写入到归档日志中。但是,如果归档日志没有及时清空,就会导致存储空间不足,从而导致ORA-00257错误的发生。 解决ORA-00257错误的方法是通过内部连接访问数据库,并释放所有占用该日志的进程。首先,需要先停止所有使用归档日志的进程,然后释放归档日志,最后再启动这些进程,即可解决错误。 具体操作步骤如下: 1. 使用管理员账号登录到数据库中。 2. 执行以下SQL语句,停止所有使用归档日志的进程。 SQL> ALTER system SWITCH logfile; SQL> ALTER system SWITCH logfile; SQL> ALTER system SWITCH logfile; SQL> SHUTDOWN immidiate; 3. 使用以下命令释放归档日志。 SQL> startup mount; SQL> ARCHIVE LOG ALL; SQL> ALTER DATABASE OPEN; 4. 最后,启动之前停止的进程。 SQL> ALTER system ARCHIVELOG ALL; 以上就是解决ORA-00257错误的完整步骤。需要注意的是,在清空归档日志之前,需要备份相关的数据以保证数据的安全性。同时,也应该定期清空归档日志,避免存储空间不足导致ORA-00257错误的再次发生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ok060

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值