一、查询归档日志情况

# 最高权限连接到orcl实例:
sqlplus /@orcl as sysdba
# 查看当前连接的数据库的sid:
select instance_name from v$instance;
# 查看回闪恢复区的大小和存放目标:
show parameter db_recovery_file_dest;
# 修改回闪恢复区的大小:
alter system set db_recovery_file_dest_size = 4G ; (缺省是4G,可以根据实际情况调整大小)
默认情况下我们在dbca建库时,会把归档放在$ORACLE_HOME/ flash_recovery_area 下,并且oracle默认给FRA配置的大为2g还是4G。
如果db_recovery_file_dest 下的存放的归档大小达到db_recovery_file_dest_size 即使该目录下仍然有磁盘空间剩余,oracle也不会去写。

这里我建议按照如下步骤去确定:归档空间是否满了?

1.首先从系统层面确定归档目录存放的磁盘空间情况

  [oracle@localhost bdump]$ df -h

2. 确定归档存放目录,归档存放目录大小

  SQL> archive log list;
--也可以按照以下方式查询归档放置的地方
  SQL> show parameter db_recovery
--这里可以看到闪回恢复区里的空间使用情况:
  SQL> select * From v$flash_recovery_area_usage;  
--注意这一步才是真正查看归档空间的实际使用情况:
  SQL> select * from v$recovery_file_dest; 
但是还是在系统层面去查看磁盘空间。

二、删除归档日志方法

1. 查看归档日志情况

如何确认归档日志是否过期,rman有一个保留策略,可以定义多少天之前的日志算为过期;
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 14 DAYS;  --让恢复窗口成为14天大小。

select count(*) from v$archived_log where archived='YES' and deleted='NO';  --查看所有归档,未删除的归档日志

使用rman清空归档日志
crosscheck archivelog all;  --查看可以所有的归档文件
delete expired archivelog all; --清空过期的归档文件

误区:
在系统清空归档目录的日志信息(即物理删除归档日志,或将归档日志转移至别处)不可取,OS虽然删除了,但oracle系统识别不出来已经清空日志,只能进入oracle清空日志信息,把空间释放出来,(方法二);或者是把归档空间设置更大(方法一)。
建议将两种方法结合使用,减少工作量,也避免数据库频繁挂起。同时定时进行数据库完全备份或其他重要数据备份。

2. 定时删除归档日志方法

步骤一:部署删除脚本
编辑脚本:
vi /home/oracle/delete_arch.sh

添加如下脚本内容:
#!/bin/bash
source .bash_profile
rman target / <<EOF
list archivelog all;
crosscheck archivelog all;
delete expired archivelog all;
delete noprompt archivelog until time 'sysdate-3';
exit
EOF
#说明:'sysdate-3'表示删除3天前的归档日志,请根据实际情况修改

步骤二:定时执行删除脚本
在Oracle crontab,每天0点自动删除归档文件
$ crontab -e
添加定时执行如下:
# 每天0点自动删除归档文件
0 * * * * /home/oracle/delete_arch.sh 1>/home/oracle/delete_arch.sh.out 2>&1
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐