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

vi check_tablespace.sh

bash 复制代码
#!/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" ]; then
        log "错误:未找到sqlplus,请检查ORACLE_HOME环境变量"
        exit 1
    fi
}

# 获取表空间使用情况
get_tablespace_usage() {
    sqlplus -S "/ as sysdba" <<EOF
    set pagesize 0 feedback off verify off heading off echo off
    select 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 a
    where used_percent > $VALT_PERCENT
    order by used_percent desc;
EOF
}

# 检查ASM磁盘空间
check_asm_space() {
    local dg_name=$1
    sqlplus -S "/ as sysdba" <<EOF
    set pagesize 0 feedback off verify off heading off echo off
    select trunc(free_mb/1024) from v\$asm_diskgroup where name='$dg_name';
EOF
}

# 添加数据文件
add_datafile() {
    local ts_name=$1
    sqlplus -S "/ as sysdba" <<EOF
    set pagesize 0 feedback off verify off heading off echo off
    alter tablespace $ts_name add datafile size 1G autoextend on next 100M;
EOF
}

# 主流程
main() {
    check_env
    log "===== 开始表空间检查 ====="

    # 使用临时文件替代进程替换
    tmp_file=$(mktemp)
    get_tablespace_usage > "$tmp_file"

    while IFS='|' read -r ts_name used_percent dg_list; do
        [ -z "$ts_name" ] && continue

        log "警告:表空间 ${ts_name} 使用率 ${used_percent}% 超过阈值 ${VALT_PERCENT}%"

        # 处理多个磁盘组
        IFS=',' read -ra dg_array <<< "$dg_list"
        for dg_name in "${dg_array[@]}"; do
            free_gb=$(check_asm_space "$dg_name")

            if [ $free_gb -ge $VFREE_SIZE ]; then
                result=$(add_datafile "$ts_name")
                if [ $? -eq 0 ]; then
                    log "成功:表空间 ${ts_name} 在磁盘组 ${dg_name} 上添加数据文件"
                else
                    log "错误:表空间 ${ts_name} 添加数据文件失败 - $result"
                fi
            else
                log "错误:磁盘组 ${dg_name} 剩余空间不足 (剩余: ${free_gb}GB < 阈值: ${VFREE_SIZE}GB)"
            fi
        done
    done < "$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中

相关推荐
SirLancelot14 分钟前
AI大模型-基本介绍(一)RAG、向量、向量数据库
数据库·人工智能·ai·向量·向量数据库·rag
李慕婉学姐10 分钟前
Springboot面向电商的仓库管理系统05uc4267(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
imbackneverdie15 分钟前
AI工具如何重塑综述写作新体验
数据库·人工智能·考研·自然语言处理·aigc·论文·ai写作
Warren981 小时前
datagrip新建oracle连接教程
数据库·windows·云原生·oracle·容器·kubernetes·django
焦糖玛奇朵婷1 小时前
扭蛋机小程序:线上扭蛋机模式发展新形势[特殊字符]
大数据·数据库·程序人生·小程序·软件需求
YMatrix 官方技术社区1 小时前
YMatrix 高可用详解:3 种镜像策略在节点宕机时表现有何不同?
运维·数据库·数据仓库·ai·数据库开发·数据库架构·ymatrix
嘟嘟w1 小时前
SQL注入是什么
数据库·sql·oracle
摇滚侠1 小时前
Redis 零基础到进阶,Redis 主从复制,笔记55-62
数据库·redis·笔记
surtr11 小时前
数据库基础(数据库原理和应用)
数据库·sql·mysql·oracle·database
张人玉1 小时前
c# DataSet 类
数据库·c#·dataset