当前位置: 首页 > ds >正文

oracle rac自动表空间自动扩展脚本

vi check_tablespace.sh

#!/bin/bash
# Oracle RAC表空间监控脚本
# 功能:检查表空间使用率,自动扩展数据文件(需满足磁盘空间条件)# 配置参数
VALT_PERCENT=85       # 表空间使用率阈值(%)
VFREE_SIZE=45         # ASM磁盘组最小空闲空间(GB)
LOG_FILE="/home/oracle/oracle_tablespace_monitor.log"# 初始化日志
log() {echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}# 检查Oracle环境
check_env() {if [ ! -f "$ORACLE_HOME/bin/sqlplus" ]; thenlog "错误:未找到sqlplus,请检查ORACLE_HOME环境变量"exit 1fi
}# 获取表空间使用情况
get_tablespace_usage() {sqlplus -S "/ as sysdba" <<EOFset pagesize 0 feedback off verify off heading off echo offselect tablespace_name || '|' || round(used_percent,2) || '|' ||(select listagg(substr(file_name,2,instr(file_name,'/',1)-2),',')from dba_data_files where tablespace_name=a.tablespace_name)from dba_tablespace_usage_metrics awhere used_percent > $VALT_PERCENTorder by used_percent desc;
EOF
}# 检查ASM磁盘空间
check_asm_space() {local dg_name=$1sqlplus -S "/ as sysdba" <<EOFset pagesize 0 feedback off verify off heading off echo offselect trunc(free_mb/1024) from v\$asm_diskgroup where name='$dg_name';
EOF
}# 添加数据文件
add_datafile() {local ts_name=$1sqlplus -S "/ as sysdba" <<EOFset pagesize 0 feedback off verify off heading off echo offalter tablespace $ts_name add datafile size 1G autoextend on next 100M;
EOF
}# 主流程
main() {check_envlog "===== 开始表空间检查 ====="# 使用临时文件替代进程替换tmp_file=$(mktemp)get_tablespace_usage > "$tmp_file"while IFS='|' read -r ts_name used_percent dg_list; do[ -z "$ts_name" ] && continuelog "警告:表空间 ${ts_name} 使用率 ${used_percent}% 超过阈值 ${VALT_PERCENT}%"# 处理多个磁盘组IFS=',' read -ra dg_array <<< "$dg_list"for dg_name in "${dg_array[@]}"; dofree_gb=$(check_asm_space "$dg_name")if [ $free_gb -ge $VFREE_SIZE ]; thenresult=$(add_datafile "$ts_name")if [ $? -eq 0 ]; thenlog "成功:表空间 ${ts_name} 在磁盘组 ${dg_name} 上添加数据文件"elselog "错误:表空间 ${ts_name} 添加数据文件失败 - $result"fielselog "错误:磁盘组 ${dg_name} 剩余空间不足 (剩余: ${free_gb}GB < 阈值: ${VFREE_SIZE}GB)"fidonedone < "$tmp_file"rm -f "$tmp_file"log "===== 检查完成 ====="
}main "$@"

当空间够的时候,脚本提示:

[oracle@rac1 ~]$ sh check_tablespace.sh

[2025-07-17 11:09:18] ===== 开始表空间检查 =====
[2025-07-17 11:09:19] ===== 检查完成 =====

添加成功

[oracle@rac1 ~]$ sh check_tablespace.sh
[2025-07-17 11:36:23] ===== 开始表空间检查 =====
[2025-07-17 11:36:24] 警告:表空间 TT 使用率 91.25% 超过阈值 85%
[2025-07-17 11:36:48] 成功:表空间 TT 在磁盘组 DATA 上添加数据文件
[2025-07-17 11:36:48] ===== 检查完成 =====

当磁盘组空间少于设置的阀值:

[oracle@rac1 ~]$ sh check_tablespace.sh
[2025-07-17 11:14:55] ===== 开始表空间检查 =====
[2025-07-17 11:14:56] 警告:表空间 TT 使用率 91.25% 超过阈值 85%
[2025-07-17 11:14:57] 错误:磁盘组 DATA 剩余空间不足 (剩余:              49GB < 阈值: 100GB)
[2025-07-17 11:14:57] ===== 检查完成 =====

最后把脚本添加到contab中

http://www.xdnf.cn/news/15754.html

相关文章:

  • 基于 Electron + Vue 3 的桌面小说写作软件架构设计
  • 前端设计模式应用精析
  • 用Python实现神经网络(一)
  • 御控县级供水调度系统:数字化整合,构建全流程智能调度体系
  • day055-Dockerfile与常用指令
  • OPS飞腾主板:开启教与学的深层次互动
  • [IRF/Stack]华为/新华三交换机堆叠配置
  • onenote千年老bug,字体bug (calibri微软雅黑) 的解决
  • 神经网络构建
  • AI+医疗!VR和MR解剖学和针灸平台,智能时代如何重塑健康未来
  • Java常用命令汇总
  • Windows10笔记本电脑开启BIOS
  • (四)OpenCV——特征点检测与匹配
  • 6. 工程化实践类:《Webpack 5 性能优化全指南:从构建速度到输出质量》
  • Flutter状态管理篇之ChangeNotifier(一)
  • 使用 docker 安装 openldap
  • 板凳-------Mysql cookbook学习 (十二--------1)
  • 从零开始的云计算生活——第三十三天,关山阻隔,ELK日志分析
  • 【Leetcode】栈和队列算法题(逆波兰表达式、二叉树层序遍历、最小栈、栈的压入弹出序列)
  • MySQL详解一
  • Oracle 成本优化器(CBO)与数据库统计信息:核心原理与实践
  • 【前端】Power BI自动化指南:从API接入到Web嵌入
  • docker安装与简单项目上手
  • 使用docker安装、启动jenkins服务(mac系统)
  • 3D工业相机是什么?如何选择和使用它?
  • 如何构建一个基于大模型的实时对话3D数字人?
  • 3D Gaussian Splatting (3DGS) 从入门到精通:安装、训练与常见问题全解析
  • c++:类型转换函数
  • 【神经网络在MATLAB中是如何实现的?】
  • 什么是 M4A 和 WAV?这两种音频互转会导致音质发生变化吗