温馨提示×

Ubuntu Oracle磁盘空间不足怎么处理

小樊
42
2025-11-07 01:41:47
栏目: 云计算

Ubuntu系统层面磁盘空间清理

1. 清理APT缓存

APT缓存会占用大量磁盘空间(尤其是频繁安装/卸载软件后),使用以下命令清理:

sudo apt-get clean  # 清理已下载的软件包缓存(/var/cache/apt/archives/)
sudo apt-get autoclean  # 清理旧版本的软件包缓存
sudo apt-get autoremove  # 删除不再需要的依赖包

2. 删除旧内核文件

旧内核版本会占用/boot分区空间(常见于Ubuntu系统),使用以下命令查看并删除旧内核:

dpkg --list | grep linux-image  # 列出已安装的内核版本
sudo apt-get purge linux-image-<version>  # 删除指定旧内核(保留当前使用的版本)

3. 清理临时文件与系统日志

  • 临时文件:/tmp目录下的文件可在重启后自动清理,或手动删除:
    sudo rm -rf /tmp/*
    
  • 系统日志:使用journalctl清理旧日志(保留最近7天):
    sudo journalctl --vacuum-time=7d
    
  • Oracle相关日志:检查$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/目录,删除过期的alert_<instance>.log或跟踪文件。

4. 查找并清理大文件

使用find命令定位大文件(如大于1GB的文件),并根据实际情况删除或压缩:

sudo find / -type f -size +1G -exec ls -lh {} \;  # 查找大于1GB的文件

重点检查/u01/app/oracle(Oracle安装目录)、/oradata(数据库文件目录)等路径。

Oracle数据库层面空间优化

1. 清理归档日志

归档日志会持续占用磁盘空间,需定期清理:

  • 使用RMAN删除7天前的归档日志:
    rman target /
    RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';
    RMAN> exit
    
  • 若归档日志已满导致数据库无法写入,可临时关闭归档模式(需谨慎,生产环境建议开启):
    sqlplus / as sysdba
    SQL> SHUTDOWN IMMEDIATE;
    SQL> STARTUP MOUNT;
    SQL> ALTER DATABASE NOARCHIVELOG;
    SQL> ALTER DATABASE OPEN;
    

2. 清理回收站

Oracle删除的对象会进入回收站(DBA_RECYCLEBIN),占用表空间空间,需清空:

sqlplus / as sysdba
SQL> PURGE DBA_RECYCLEBIN;

3. 扩展表空间

若表空间使用率过高(如超过90%),可通过以下方式扩展:

  • 添加数据文件:向现有表空间添加新的数据文件(需确保磁盘有足够空间):
    ALTER TABLESPACE <tablespace_name>
    ADD DATAFILE '/u01/app/oracle/oradata/<db_name>/<new_file>.dbf'
    SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
    
  • 扩展现有数据文件:若数据文件支持AUTOEXTEND,可直接调整大小:
    ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/<db_name>/<existing_file>.dbf'
    RESIZE 5G;
    

4. 压缩数据

使用Oracle内置压缩功能减少数据占用空间(对查询性能影响较小):

  • 表压缩
    ALTER TABLE <table_name> MOVE COMPRESS FOR OLTP;
    
  • 分区表压缩:针对大分区表,可单独压缩特定分区。

5. 移动数据到其他表空间

将不常用的表或分区移动到空间充足的表空间,平衡负载:

ALTER TABLE <table_name> MOVE TABLESPACE <new_tablespace_name>;
-- 若表有索引,需同步移动索引
ALTER INDEX <index_name> REBUILD TABLESPACE <new_tablespace_name>;

6. 删除无用用户与对象

清理不再使用的用户及其对象(如表、索引、视图),释放空间:

  • 查询用户占用空间
    SELECT owner, tablespace_name, SUM(bytes)/1024/1024 "占用空间(MB)"
    FROM dba_extents
    WHERE owner = '<username>'
    GROUP BY owner, tablespace_name;
    
  • 删除用户及对象
    DROP USER <username> CASCADE;  -- 删除用户及所有对象
    

7. 收缩表空间文件

若表空间中有未使用的空间,可收缩数据文件释放空间(需确保文件有足够的空闲空间):

ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/<db_name>/<file_name>.dbf'
RESIZE 3G;  -- 调整为目标大小

注意事项

  • 备份数据:操作前务必备份重要数据(如数据库全备、归档日志),避免误删导致数据丢失。
  • 生产环境谨慎操作:如收缩数据文件、修改表空间大小等操作,需在业务低峰期进行,并测试环境验证。
  • 监控空间使用:定期使用df -h(查看磁盘空间)、du -sh /u01/app/oracle/*(查看Oracle目录大小)监控空间使用情况,提前预警。

0