温馨提示×

CentOS Oracle磁盘空间优化

小樊
46
2025-12-31 03:55:30
栏目: 云计算

CentOS 上 Oracle 磁盘空间优化实操指南

一 快速定位空间占用

  • 系统层快速盘点
    • 查看总体占用:df -h
    • 定位大目录:du -sh /u01 /var/log /tmp 2>/dev/null | sort -hr | head
    • 交互式分析:ncdu /u01(需安装:yum install -y ncdu
  • Oracle 层关键视图
    • 数据文件与空闲:select d.tablespace_name, d.file_name, d.bytes/1024/1024 "MB", s.bytes/1024/1024 "FreeMB" from dba_data_files d, dba_free_space s where d.file_id=s.file_id order by 1,4;
    • 临时表空间:select file_name, tablespace_name, bytes/1024/1024 "MB", autoextensible from dba_temp_files;
    • 默认临时表空间:select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
    • 占用排序段(定位大对象/SQL):select owner, segment_name, segment_type, bytes/1024/1024 "MB" from dba_segments order by bytes desc fetch first 20 rows only;
    • 活跃排序会话(定位占用 TEMP 的会话):select se.username, se.sid, se.serial#, su.tablespace, su.segtype, su.blocks*to_number(rtrim(p.value))/1024/1024 "MB", sql_text from v$sort_usage su, v$parameter p, v$session se, v$sql s where p.name='db_block_size' and su.session_addr=se.saddr and s.hash_value=su.sqlhash and s.address=su.sqladdr order by 5 desc;

二 立即释放空间的要点

  • 删除历史数据后“空间不降”的处理
    • 分区表优先:alter table <tab> drop partition <pname> UPDATE GLOBAL INDEXES;(减少高水位与碎片)
    • 非分区表:先收缩再回收
      • 收缩表/索引:alter table <tab> shrink space compact; alter index <idx> shrink space;
      • 回收高水位:alter table <tab> deallocate unused;
    • 数据文件可回收空间足够时再收缩:alter database datafile '<file>' resize <合适大小>M;
    • 建议关闭不必要的自动扩展:alter database datafile '<file>' autoextend off;(避免再次暴涨)
  • 临时表空间膨胀的处置
    • 新建临时表空间并切换默认:create temporary tablespace temp02 tempfile '<newpath>/temp02.dbf' size 2G autoextend on next 100M; alter database default temporary tablespace temp02;
    • 终止占用 TEMP 的会话:alter system kill session '<sid>,<serial#>';
    • 删除旧临时表空间:drop tablespace temp including contents and datafiles;
    • 如需恢复原路径:create temporary tablespace temp tempfile '<oldpath>/temp01.dbf' size 2G autoextend on next 100M maxsize 15G; alter database default temporary tablespace temp; drop tablespace temp02 including contents and datafiles;
  • 归档日志与备份清理
    • 归档位置检查:show parameter log_archive_dest_1;
    • 按需备份后删除过期归档:RMAN> delete archivelog all completed before 'sysdate-7';(示例:保留近 7 天)
    • 清理过期备份:RMAN> delete obsolete;(依据配置的保留策略)

三 扩容与数据文件迁移

  • LVM 在线扩容(适用于使用 LVM 的 CentOS)
    • 新增磁盘后扩容卷组与逻辑卷:pvcreate /dev/sdb1vgextend <vgname> /dev/sdb1lvextend -L +<size>G /dev/<vg>/<lv>
    • 扩展文件系统:XFS 执行 xfs_growfs <挂载点>;ext4 执行 resize2fs <设备>
  • 数据文件迁移(停机窗口)
    • 停库:shutdown immediate;
    • 操作系统层移动文件:mv <old.dbf> <new.dbf>
    • 启动到 mount:startup mount;
    • 重命名数据文件:alter database rename file '<old.dbf>' to '<new.dbf>';
    • 打开数据库:alter database open;
  • 在线迁移替代(部分场景可用,需评估兼容性):alter tablespace <ts> offline;(拷贝后)alter tablespace <ts> rename datafile '<old>' to '<new>'; alter tablespace <ts> online;
  • 预防再次爆满
    • 为热点表空间新增数据文件到新盘:alter tablespace <ts> add datafile '<newpath>/file.dbf' size <init>M autoextend on next <step>M maxsize <limit>;
    • 关闭不必要的自动扩展,按“初始大小+监控+按需加文件”的策略运维

四 长期治理与存储优化

  • 存储分层与压缩(Oracle 12c 及以上)
    • 分区裁剪冷热数据,热数据放高性能盘,历史数据放低成本盘
    • 压缩选型:OLTP 用 高级行压缩(Advanced Row Compression),仓库/归档用 混合列压缩(Hybrid Columnar Compression,需 Exadata/ZFS 等支持)
    • 热图 Heat Map + 自动数据优化 ADO:按访问频率自动压缩与分层迁移,降低存储成本并提升性能
  • 表/索引与 I/O 布局
    • 表与索引分离到不同表空间,并在物理上分离到不同磁盘,减少 I/O 争用
    • 重做日志、归档日志、数据文件分离存放;条件允许时条带化与多盘并行
    • 启用异步 I/O:确保 OS 支持后设置 disk_asynch_io=true,提升写入吞吐

五 安全操作清单

  • 变更前:完整备份(数据库与归档)、选择低峰时段、准备回滚方案
  • 变更中:严格按步骤执行,每一步核验返回码与告警日志;迁移时确保文件权限与属主正确
  • 变更后:校验业务连通性、监控空间回落与性能表现,固化运维基线(告警阈值、清理策略、扩容阈值)

0