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中

相关推荐
极创信息24 分钟前
信创产品认证怎么做?信创产品测试认证的主要流程
java·大数据·数据库·金融·软件工程
lzhdim1 小时前
SQL 入门 12:SQL 视图:创建、修改与可更新视图
java·大数据·服务器·数据库·sql
2301_795099742 小时前
让 CSS Grid 自适应容器尺寸的动态布局方案
jvm·数据库·python
FQNmxDG4S2 小时前
Maven依赖管理:版本冲突解决与生命周期控制
java·数据库·maven
热爱运维的小七2 小时前
告别内存溢出:ActiveMQ 性能诊断与全流程优化
数据库·it运维·activemq·devops
@小柯555m3 小时前
MySql(高级操作符--操作符混合运用)
数据库·sql·mysql
CDN3603 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
bzmK1DTbd3 小时前
JDBC编程规范:PreparedStatement与事务管理
数据库·python·eclipse
卧室小白3 小时前
Redis-哨兵模式
数据库·redis·缓存