通过RMAN删除归档日志不释放问题

我的生产环境中归档日志满了,通过如下脚本删除后,空间并没有释放,看有网友有相关的解决思路,可以跟大家一起分享一下:

RMAN> crosscheck archivelog all;

RMAN> delete expried archivelog all;

关于rm删除文件空间不释放的问题可以写成一个FAQ了

一般说来不会出现rm掉不释放空间的情况
出现这样的情况一般是由于有进程在向文件中写数据或有进程正在访问文件
而此时rm文件则会出现不释放空间的情况

理解这样的问题需要理解rm的操作内含
一个文件的存放有数据部分和指针部分,而指针位于文件系统的头
删除操作系统的一个文件与oracle drop表的实质有些相似
处理掉指针,文件数据部分占用的空间就可以写入新内容了
之所以出现rm不释放即为有进程在用这个文件而引起操作系统认为这个文件未实质释放,从而df或bdf空间统计不正确

这一类问题的解决方法一般说来可以重启操作系统,重新umount及mount那个文件系统
这并不是一个好方法

我建议的操作方法如下:
1、下载一个lsof软件装上,google上可以搜到
2、找到正在用被删文件的进程
  lsof | grep deleted
3、kill掉相应的进程空间就释放了

其它建议:
1、清理alert.log listerner.log这些日志文件时最好用">文件"这样的操作方式,不要用rm。
2、清理归档日志最好用backup ... delete input这样的方式。
3、如果你的操作系统总出现rm不释放空间的问题,该请sa好好查查系统问题了,同时可以在rm前用lsof看一下有无进程在用这个文件。
4、解决问题的方法很多,最好不要用重启数据库或重启操作系统这样的方法

其它解决方法如下:

一位网友遇到一个问题,他在生产系统执行RMAN命令删除归档日志时发现归档日志并未被删除。
但在测试环境中这个命令却没有问题。
删除的命令是:
delete archivelog all completed before ‘xxxxx‘;
执行后检查
ASM发现有很多归档日志并未被删除。
实际上并不是
RMAN命令本身有问题。RMAN
删除归档日志的依据是
controlfile中记录的归档日志,
而不是ASM中实际存在的归档日志。
controlfile
中有一部分内容是可以循环使用的,其中归档日志信息和备份信息就使用的是这部分空间。
Oracle用参数control_file_record_keep_time来设置控制文件中可重用的记录在多久以后可以被重用。
通常这个参数的缺省值是7。这就意味着7天前的归档日志和备份信息可能在控制文件中已经不存在了。而
RMAN命令只能删除控制文件中记录的归
档日志,对于那些很早以前的归档日志,它们在控制文件中的信息已经不存在了,
RMAN就无法删除了。对于这部分归档日志,只能其它命令从ASM或文件系统上删除。
另外需要说明的是,用RMAN
删除归档日志时,并不会删除控制文件中对应的归档日志信息,而只
是在控制文件中设置delete状态,即v$archived_log的deleted列。删除归档日志时,建议使用
RMAN命令来删除。如果不使用
RMAN命令而用操作系统命令或
ASM命令删除日志后,最好更新一下控制文件信息,方法是:
RMAN> crosscheck archivelog all;
RMAN> delete expried archivelog all;
如果是RAC环境且archivelog
存储在各节点的本地盘而未使用NFS,直接执行以上命令会导致其它节点上的所有archivelog
都被标识为无效而被删除。这是因为归档日志不是共享的,执行命令的
节点无法访问到其它节点上的归档日志。对于这种情况需要为每个节点分配一个
metainance
channel
来解决。
RMAN > allocate channel for maintenance device type disk
connect‘sys/[email protected]‘;
RMAN > allocate channel for maintenance device type disk
connect‘sys/[email protected]‘;
RMAN > crosscheck archivelog all;
RMAN> delete expried archivelog all;

原文:http://www.itpub.net/thread-934741-2-1.html

时间: 2024-10-12 18:05:33

通过RMAN删除归档日志不释放问题的相关文章

RMAN删除归档日志不释放问题

今天同事问到一个问题,他那边的一套Oracle 11g数据库使用RMAN没办法删除旧的归档,导致磁盘使用率很高. [email protected]:[/opt/oracle/archive/db] ls -ltr |moretotal 3059881082 -rw-r-----   1 oracle     oinstall   725320704 May 20  2016 1_1_91233774.dbf -rw-rw----   1 oracle     oinstall   175693

db_recovery_file_dest_size 修改大一点及删除归档日志 |转|

今天给客户测 试问题,让客户把数据发过来了.解压缩后一看,他们还是用的oracle 815版本的(他们exp导出时,带了导出日志,从导出日志中看出来是oracle 815版本的),不过没有关系,低版本的exp是可以用高版本的imp导入到高版本数据库中的.一看是导入还很正常,导入到其中某个表的时候,突然就不动 了.一开始我还没有弄明白怎末回事.后来,无意中看到了 计算机管理--事件查看器中 ,有很多报错信息: Archive process error: ORA-16038: log 1 sequ

delete archivelog all 无法彻底删除归档日志?

最近在因归档日志暴增,使用delete archivelog all貌似无法清除所有的归档日志,到底是什么原因呢? [python] view plain copy print? 1.演示环境 SQL> select * from v$version where rownum<2; BANNER ---------------------------------------------------------------- Oracle Database 10g Release 10.2.0.

oracle 删除归档日志的正确方式

在使用plsql使用游标的%rowcount时,导致了一个死循环,手动终止后数据库无法连接,服务重启后依然不行.windows日志管理器报归档日志相关的错误,最终手动启动到mount状态,禁用归档日志后,数据库正常.由于是本机的实验数据库,所以希望把归档日志删掉: 以下摘自这里ORACLE正确删除归档并回收空间的方法 一个ORACLE归档日志经常满,表现为/oraarchive 这个文件空间占用100%大家一定抱怨ORACLE为何没有归档维护工具,很多人直接删除了事,错了,ORACLE有,而且很

当ORACLE归档日志满后如何正确删除归档日志

当ORACLE 归档日志满了后,将无法正常登入ORACLE,需要删除一部分归档日志才能正常登入ORACLE. 一.首先删除归档日志物理文件,归档日志一般都是位于archive目录下,AIX系统下文件格式为“1_17884_667758186.dbf”,建议操作前先对数据库进行备份,删除时至少保留最近几天的日志用于数据库恢复. 二.把归档日志的物理文件删除后,我们就可以正常登入ORACLE了,但是还没完全把归档日志删除干净,ORACLE的controlfile中仍然记录着这些archivelog的

12c DataGuard 无法删除归档日志

一.环境描述 Oracle 12c 单实例DataGuard Rhel 7.3 二.测试过程 主库操作 1.关闭DG,切换日志 SQL> alter system set log_archive_dest_state_2=defer; System altered. SQL> show parameter log_archive_dest_state_2 NAME                                 TYPE        VALUE ---------------

Linux下设置定时任务删除归档日志

1.编辑删除归档日志的脚本----/home/oracle/clearlog.sh #! /bin/bash source ~/profile_orcl#记录归档删除的日志exec >> /home/rman_log/log/del_arch`date +%F-%H`.log $ORACLE_HOME/bin/rman target / <<EOF#检查归档crosscheck archivelog all; #列出无效的归档日志list expired archivelog al

rman 还原归档日志(restore archivelog)

听说过还原(restore)数据库,表空间及数据库文件,使用归档日志恢复(recover)数据库,表空间,数据库文件. 咦,还有还原归档日志这一说法呢?没错,可能我们忽略了还原归档日志这一个过程,原因是还原归档日志通常情况下是oracle在recover时自动完成的. 大多数情况下我们是先还原数据库,恢复数据库,打开数据库.实际上在恢复数据库之前有一个动作,那就是还原归档日志,也就是将日志文件还原到缺省的归档位置, 如果我们在备份归档日志时使用了delete [all] input子句的话. 本

RMAN备份归档日志ORA-19575

RMAN备份归档日志ORA-19575 一.问题描述 1)环境oracle 10g; 2)报错现象RMAN进行备份归档报错失败ORA-19575 二.问题处理 1)根据客户说明的现象,百度了一波(详见参考链接) 2)操作系统mv修改名称存在问题的归档日志后,crosscheck检查归档日志,delete删除无效的归档日志后,再次进行备份,问题已解决. 三.参考链接 https://smarttechways.com/2012/11/01/ora-19575-expected-blocks-in-