Oracle归档日志清理
摘要
首先删除归档文件在物理主机磁盘中的文件
物理文件删除后Oracle的 controlfile 中仍然记录着这些 archivelog 的信息,在 oracle 的OEM管理器中有可视化的日志展现出,接下来要做的就是从 controlfile 中清除掉多余归档日志文件记录
利用 RMAN 进行删除操作,操作步骤如下:
打开 Rman 连接数据库
1 | rman target / |
查看归档日志的状态
1 | RMAN> list archivelog all; #显示所有的日志及日志地址 |
1 | cd /data/oracle |
我这个日志存放的目录不好,应该单独建一个文件夹存放。
转移或清除对应的归档日志
1 | find /data/oracle/ -xdev -mtime +7 -name "*.dbf" -exec rm -f {} \; |
这样做仍然会在RMAN里留下未管理的归档文件
仍需要在RMAN里执行下面2条命令
执行 archivelog 校验命令
1 | RMAN> crosscheck archivelog all; #把无效的expired的archivelog标出来 |
删除校验失败的记录
1 | RMAN> delete expired archivelog all; #删除所有的无效日志 |
删除当前系统时间-7天之前的归档日志
1 | RMAN> delete archivelog all completed before 'sysdate-7'; |
sysdate-7,表明当前的系统时间7天前,before关键字表示在7天前的归档日志,如果使用了闪回功能,也会删除闪回的数据。
同样道理,也可以删除从7天前到现在的全部日志,不过这个命令要考虑清楚,做完这个删除,最好马上进行全备份数据库
1 | RMAN> delete archivelog from time 'sysdate-7'; # 删除从7天前所有日志,慎用 |
不如上面的方法好用,不过用find的好处就是,可以在条件上,和exec子项上做很多操作,实现更复杂的功能
顺便说一下怎么更换归档日志的路径,我这个路径是忘记最后加个/。
查看归档路径位置明细
1 | SQL> show parameter log_archive_dest_1 |
更改归档路径
1 | SQL> alter system set log_archive_dest_1='location=/data/oracle/archivelog/'; |
scope=spfile
仅仅更改spfile里面的记载,不更改内存,也就是不立即生效,而是等下次数据库启动生效。有一些参数只允许用这种方法更改scope=memory
仅仅更改内存,不改spfile。也就是下次启动就失效了scope=both
内存和spfile都更改
不指定scope参数,等同于scope=both
。
查看归档日志文件格式
1 | SQL> show parameter log_archive_format |
清理脚本(后面不使用了)
1 | !/bin/bash |
目前使用的
1 |
|