暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 Lucifer三思而后行 2025-07-04
640

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

目录

前言

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

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

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

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

脚本演示

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

测试环境准备

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

-- 创建测试表空间(注意:会删除已存在的同名表空间) DROP TABLESPACE test_auto_ts INCLUDING CONTENTS AND DATAFILES; CREATE TABLESPACE test_auto_ts DATAFILE '/oradata/orcl/test_auto_ts01.dbf' SIZE 1M AUTOEXTEND ON NEXT 1M MAXSIZE 10M; -- 设置较小的MAXSIZE,便于快速达到测试效果 -- 创建测试用户并分配权限 CREATE USER test_auto_user IDENTIFIED BY "Password123" DEFAULT TABLESPACE test_auto_ts QUOTA 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_pct FROM dba_tablespace_usage_metrics WHERE 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 的工作效率。

生产环境部署建议

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

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论