Oracle 表空间不足?用 Shell 脚本实现自动扩容!

来源:这里教程网 时间:2026-03-03 22:23:04 作者:

大家好,这里是  DBA 学习之路,专注于提升数据库运维效率。

目录

  • 前言
  • 脚本演示
  • 测试环境准备
  • 部署并执行自动扩展脚本
  • 配置定时任务 (crontab)
  • 写在最后

    前言

    最近有客户反馈了一个困扰已久的问题:频繁收到表空间使用率超过 90% 的告警邮件,每次都需要手动添加数据文件来解决。客户询问:Oracle 数据库难道不能自动增加数据文件吗?

    很遗憾,Oracle 数据库原生确实不支持自动添加数据文件功能。想要实现自动化扩容,需要 DBA 自行编写 Shell 脚本。

    今天就来分享一个我在实际工作中常用的 Oracle 表空间自动扩展脚本。

    关注公众号: DBA学习之路,聊天框回复: tbs_autoext 下载脚本。

    脚本演示

    我在测试环境演示一下这个脚本如何使用。

    测试环境准备

    首先,在测试环境创建一个 90% 以上使用率的表空间:

    -- 创建测试表空间(注意:会删除已存在的同名表空间)DROP TABLESPACE test_auto_ts INCLUDING CONTENTS AND DATAFILES;CREATE TABLESPACE test_auto_tsDATAFILE '/oradata/orcl/test_auto_ts01.dbf'SIZE 1MAUTOEXTEND ONNEXT 1MMAXSIZE 10M; -- 设置较小的MAXSIZE,便于快速达到测试效果-- 创建测试用户并分配权限CREATE USER test_auto_user IDENTIFIED BY "Password123"DEFAULT TABLESPACE test_auto_tsQUOTA UNLIMITED ON test_auto_ts;-- 创建测试表CREATE TABLE test_auto_user.test_data (    id NUMBER,    data VARCHAR2(4000)
    ) TABLESPACE test_auto_ts;-- 批量插入数据快速填充表空间BEGIN
        FOR i IN 1..2000 LOOP
            INSERT INTO test_auto_user.test_data        VALUES (i, RPAD('X', 4000, 'X')); -- 每条记录约4K
        END LOOP;    COMMIT;END;
    /-- 检查表空间当前使用率SELECT tablespace_name, ROUND(used_percent, 2) AS usage_pctFROM dba_tablespace_usage_metricsWHERE tablespace_name = 'TEST_AUTO_TS';

    执行结果示意

    表空间使用率接近100%

    部署并执行自动扩展脚本

    1、 上传脚本:将  tbs_autoext.sh 脚本上传到服务器指定目录(例如  /home/oracle/tbs_check/)

    脚本上传示意

    2、 执行脚本

    ./tbs_autoext.sh -t 80 -v

    脚本执行输出示意

    3、 查看执行日志:脚本运行完成后,可通过日志文件查看详细的操作记录

    日志文件内容示意

    配置定时任务 (crontab)

    为了实现完全自动化运维,可以将脚本加入系统定时任务:

    crontab -e# 添加以下配置,设置每天凌晨2点自动执行检查0 2 * * * export ORACLE_SID=orcl; /home/oracle/tbs_check/tbs_autoext.sh -m luciferliu@163.com

    每天 2 点自动运行脚本并且将日志内容发送到邮箱。

    写在最后

    通过这个自动化脚本,我们可以彻底解决 Oracle 表空间手动扩容的烦恼,大幅减少告警干扰,显著提升 DBA 的工作效率。

    生产环境部署建议

  • 务必在测试环境充分验证后再上线
  • 根据实际业务需求调整触发扩容的使用率阈值
  • 合理设置新增数据文件的大小,避免频繁扩容或单次扩容过大

    希望这个脚本能为大家的日常运维工作带来便利!

  • 相关推荐