zabbix监控发现一台测试服务器的D盘磁盘可用容量少于20%,于是查看是什么原因引起的。结果是Oracle数据库文件占用磁盘空间太大引起的,路径为:D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS。路径下有大量的ARC**.001文件,一查资料,都是指向归档数据文件的,所以就从归档数据入手。
1.查看数据库是否处于归档模式,以及归档数据文件路径
- 查看是否处于归档模式
sqlplus / as sysdba
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS
最早的联机日志序列 6335
下一个存档日志序列 6337
当前日志序列 6337
如果存档位置显示的是:USE_DB_RECOVERY_FILE_DEST,就是用下面的命令查询具体的系统路径
SQL> show parameter DB_RECOVERY_FILE_DEST
NAME TYPE VALUE
--------------------- ----------- --------------------------------------
db_recovery_file_dest string /oracle/app/oracle/flash_recovery_area
以上命令结果得知,Oracle数据库目前处于归档模式,归档文件的系统路径是D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS,正是我们看到的那些文件,接下来就需要删除一些归档日志文件了
- 查看归档日志文件状态
select name,completion_time,status from v$archived_log;
D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\RDBMS\ARC0000006311_0935848257.0001 11-8月 -18 A
D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\RDBMS\ARC0000006312_0935848257.0001 11-8月 -18 A
D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\RDBMS\ARC0000006313_0935848257.0001 11-8月 -18 A
......
......
上图截取了部分归档文件,其中最后一列的A,是对应归档文件的状态;
参数 | 状态 | 描述 |
---|---|---|
A | Available | 表示归档日志文件有效 |
U | Unavailable | 表示归档日志文件无效 |
D | Deleted | 表示归档日志文件已被删除 |
X | eXpired | 表示归档日志文件被用户使用操作系统的命令删除了 |
什么是归档日志文件
归档日志(Archive Log)是非活动的重做日志备份。通过使用归档日志,可以保留所有重做历史记录,当数据库处于ARCHIVELOG模式并进行日志切换时,后台进程ARCH会将重做日志的内容保存到归档日志中。当数据库出现介质失败时,使用数据文件备份,归档日志和重做日志可以完全恢复数据库。
如何正确的删除archivelog日志文件
Archivelog并不能直接得从OS层直接物理删除,因为archivelog的相关信息是记录在controlfile中的,当物理删除后不会改变controlfile的设置。并且在查询相关的动态视图(例如v$archived_log)时,该部分日志仍然标注为存在。也就是说Oracle并不认为这些日志被删除了,所以在删除archivelog的时候,需要我们在其他地方做一些设置。
- 1.进入RDBMS文件夹,保留7天内的文件,剩下的都删除。
- 2.RMAN连接服务器并删除Oracle里的记录
RMAN TARGET /
RMAN> crosscheck archivelog all;
RMAN> delete expried archivelog all;
一共三条命令,第一条是RMAN连接到数据库,第二条是检查数据库中记录的归档日志文件和磁盘上的文件的对应关系。如果显示成功,则表示数据库中的记录与磁盘一致,如果显示失败,则表示磁盘上找不到对应的文件。第三条命令就是删除那些失效的文件,这样磁盘文件就和数据库里的文件同步了。
磁盘空间清理完毕!
网友评论