通过PL/SQL登录用户账号提示此信息,导致无法正常登录,查询资料显示出现ORA-00257错误由于归档日志已满,占用了全部的硬盘剩余空间导致的,通过简单删除日志释放存储空间就能够解决。
[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>
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
执行结果:
界面看着有点不舒服,查看目前的linesize,默认是80,可以设置成200或者更宽都可,设置后再执行SQL
SQL> show linesize;
linesize 80
SQL> set linesize 200;
SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
可以看见archivelog已经很大了,已经达到了99.82。
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
2.9946
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
结果显示归档日志位于目录/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
【注意】 在删除归档日志后,必须用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>
RMAN> crosscheck archivelog all;
RMAN> delete expired archivelog all;
释放的通道: ORA_DISK_1
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=195 设备类型=DISK
说明与资料档案库中的任何归档日志都不匹配
**【注】**以上执行结果显示没有匹配到过期的归档。
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 对象已删除
**【注】**是否确定要删除以上对象 (输入 YES 或 NO)? 输入YES,然后回车 提示391 对象已删除
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行。
SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
SUM(PERCENT_SPACE_USED)*3/100
-----------------------------
.0435
SQL> conn sdrs_zpxx/sdrszpxx_jyt
已连接。
至此问题已经得到解决。
退出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
退出RMAN维护登录
RMAN> exit
恢复管理器完成。
[oracle@ldjc ~]$ exit
logout
所谓的归档日志,就是指将在线日志进行归档、持久化到成固定的文件到硬盘,便于以后的恢复和查询。当然,前提条件是数据库要处于归档模式。
Oracle数据库开归档之后,由于日志过多,空间写满,数据库的redo文件不能归档,而出现oracle数据库挂起的问题, 数据库无法使用,就会弹出此问题。
在生产环境中可以根据需求,制定对应的归档日志保留策略,很多时候在使用rman全备之后,会备份归档,可以在全备脚本后面添加删除归档日志的命令,因为在全备后,归档也会一并备份到对应的备份片中,可以通过备份还原。