大家好,这里是 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';
执行结果示意:

部署并执行自动扩展脚本
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




