首页 > 数据库 >Oracle数据库循环重建多个物化视图shell脚本

Oracle数据库循环重建多个物化视图shell脚本

时间:2024-12-16 09:42:32浏览次数:6  
标签:shell NAME DB 视图 物化 MV Oracle echo

#!/bin/bash

# 设置数据库连接信息
DB_HOST="LOCALHOST"
DB_PORT="1521"
DB_SID="pdb"
DB_USER="mics"
DB_PASS="GZL11mics"
TNS_SERVICE="${DB_SID}"

START_TIME=$(date +"%Y-%m-%d %H:%M:%S")
echo "开始时间: $START_TIME"

# 定义物化视图的名称列表
MV_NAMES=("mv_entity_device_data" "mv_device_status" "mv_user_data")  # 添加多个物化视图名称

# 循环处理每个物化视图
for MV_NAME in "${MV_NAMES[@]}"; do

    echo "正在检查物化视图: $MV_NAME"
    
    # 使用 here document 执行 SQL 查询,确保格式正确
    RESULT=$(sqlplus -s "$DB_USER/$DB_PASS@//${DB_HOST}:${DB_PORT}/${TNS_SERVICE}" <<EOF
    SET HEADING OFF
    SET FEEDBACK OFF
    SET VERIFY OFF
    SET ECHO OFF
    SELECT COUNT(*) FROM all_mviews WHERE mview_name = UPPER('$MV_NAME');
    EXIT;
EOF
    )

    # 去除空格、换行等不必要的字符
    RESULT=$(echo "$RESULT" | tr -d '[:space:]')    
    # 检查 RESULT 是否为有效的数字
    if [[ "$RESULT" =~ ^[0-9]+$ ]]; then
        if [ "$RESULT" -gt 0 ]; then

            # 获取创建物化视图的SQL
            CREATE_MV_SQL=$(sqlplus -s "$DB_USER/$DB_PASS@//${DB_HOST}:${DB_PORT}/${TNS_SERVICE}" <<EOF
    SET HEADING OFF
    SET FEEDBACK OFF
    SET VERIFY OFF
    SET ECHO OFF
    SET LONG 10000
    SET LONGCHUNKSIZE 10000
    SELECT DBMS_METADATA.GET_DDL('MATERIALIZED_VIEW',UPPER('$MV_NAME'), 'MICS') FROM dual;
    EXIT;
EOF
)
            # 去除多余的换行和空格
            CREATE_MV_SQL=$(echo "$CREATE_MV_SQL" | tr -d '\n' | tr -s ' ')
            CREATE_MV_SQL="${CREATE_MV_SQL};"
            echo $CREATE_MV_SQL > create_mv_view.sql
            echo "commit;" >> create_mv_view.sql
            echo "exit;" >> create_mv_view.sql
            echo "物化视图 $MV_NAME 存在,正在删除旧的物化视图..."

            # 删除已有的物化视图
            DELETE_MV_SQL="DROP MATERIALIZED VIEW $MV_NAME;"
            # 执行删除物化视图的 SQL
            echo "$DELETE_MV_SQL" | sqlplus -s "$DB_USER/$DB_PASS@//${DB_HOST}:${DB_PORT}/${TNS_SERVICE}"

            echo "物化视图 $MV_NAME 已删除,正在重新创建..."

            # 执行创建物化视图的 SQL
            sqlplus -s "$DB_USER/$DB_PASS@//${DB_HOST}:${DB_PORT}/${TNS_SERVICE}" @create_mv_view.sql > cr.log 2>&1

            echo "物化视图 $MV_NAME 已重新创建。"

        else
            echo "物化视图 $MV_NAME 不存在,请先手动创建视图"
        fi

    else
        # 如果 RESULT 不是有效数字
        echo "查询结果无效或为空,跳过物化视图 $MV_NAME"
    fi

    # 记录结束时间
    END_TIME=$(date +"%Y-%m-%d %H:%M:%S")
    echo "结束时间: $END_TIME"
done

 

标签:shell,NAME,DB,视图,物化,MV,Oracle,echo
From: https://www.cnblogs.com/dll102/p/18609270

相关文章

  • Shell编程语法之变量、常量
    Shell的变量、常量变量变量就是程序运行过程中其值可以发生改变的量变量的命名规范应该见名知意,同时遵循如下规则以字母或下划线开头,剩下的部分可以是:字母、数字、下划线最好遵循下述规范:以字母开头使用中划线或者下划线做单词的连接high_student同类型的用数字......
  • 什么是数据库的视图?
    在数据库中,视图(View)是一种虚拟的表,它是通过查询从一个或多个基本表中派生出来的结果集。视图并不实际存储数据,而是存储SQL查询,查询的结果会在视图被调用时动态生成。视图的作用类似于一个存储的查询,可以简化复杂的查询操作,提供数据的安全性,并且可以为用户提供定制化的视图。视图......
  • Debezium OracleSchemaChangeEventEmitter 分析
    DebeziumOracleSchemaChangeEventEmitter分析目录1.概述2.核心功能3.实现分析4.使用场景5.示例分析6.最佳实践7.总结1.概述OracleSchemaChangeEventEmitter是DebeziumOracle连接器中负责处理和发送Schema变更事件的核心组件,主要负责:捕获DDL......
  • ShellHost 是 Windows 操作系统中的一个系统进程,它负责管理和运行与 Windows Shell(即
    ShellHost进程服务是什么?ShellHost是Windows操作系统中的一个系统进程,它负责管理和运行与WindowsShell(即用户界面)相关的一些功能。具体来说,ShellHost是WindowsShell的一部分,负责执行一些后台任务、处理用户界面请求、和管理Windows桌面环境的某些方面。ShellHost通......
  • #oscp#渗透测试 kioptix level 3靶机getshell及提权教程
    声明!文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!一、靶机搭建点击扫描虚拟机选择靶机使在文件夹即可二、信息收集前言信息收集阶段,因为这里是靶机,所以不需要做什么,但是实际渗透测试中,大家一定要学会正确的隐藏......
  • 泷羽sec-shell编程(7)
    shell(7)声明!学习视频来自B站up主泷羽sec有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主......
  • shell脚本:统计服务器mac地址与ip地址的对应关系
    1.统计当前服务器mac地址与ip地址的对应关系#!/usr/bin/envbashdata=$(ipa;ipr)num=$(echo"$data"|grep-E'^[0-9]{,2}:'|grep-E'^[0-9]{,2}'-o)num2=$(echo-e"$num\ndefault")n=2foriin$num;doend=$(echo"$nu......
  • powershell无法识别pnpm
    npm安装pnpm通过CMD下,通过npm安装pnpmnpmi-gpnpm查看pnpm版本pnpm-vpowershell查看pnpm版本如果通过powershell查看pnpm版本,此时会报错:接触Powershell权限这个时候就是powershell的权限收到了限制,需要打开权限:powershell输入Set-ExecutionPolicyRemoteSigned,选......
  • [20241212]Oracle 多线程测试.txt
    [20241212]Oracle多线程测试.txt--//oracle从12c版本开始支持多线程,各种原因从来没有测试,好像最近很少有人提及,或许使用oracle的人越来越少,或者许多人根--//本没有这样的需求,印象最深的是启用后必须使用口令登录,即使是sys用户.--//自己还是看一些文章,测试看看。1.环境:SYS@book>@......
  • [20241214]Oracle 多线程测试(补充).txt
    [20241214]Oracle多线程测试(补充).txt--//补充测试altersystemkillsession'sid,serial#'immediate;杀线程的情况是否可行。1.环境:SYS@book>@ver2==============================PORT_STRING                  :x86_64/Linux2.4.xxVERSION     ......