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

liunx 计划任务

任务脚本

#!/bin/bash

# 配置项
# Oracle 安装路径,根据实际情况修改,查看安装地址:cat /etc/oratab
ORACLE_HOME='/home/database/oracle/product/11.2.0'
# Oracle 实例名,根据实际情况修改
ORACLE_SID=
# 数据库用户名
USER=
# 数据库密码
PASSWORD=''
# 存放多个 SQL 文件的目录
SQL_FILES_DIR='/home/database/oracle/product/11.2.0/runsql'
# 日志文件存放目录
LOG_DIR='/home/database/oracle/product/11.2.0/runsql/logs'

# 导入 Oracle 环境变量
export ORACLE_HOME
export ORACLE_SID
export PATH=$PATH:$ORACLE_HOME/bin

# 创建日志目录(如果不存在)
mkdir -p $LOG_DIR

# 获取当前日期和时间,用于生成日志文件
CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
# 日志文件的时间后缀,精确到秒
LOG_TIME_SUFFIX=$(date +"%Y%m%d%H%M%S")  
# 日志文件路径,带时间后缀
LOG_FILE=$LOG_DIR/sql_log_$LOG_TIME_SUFFIX.log

# 记录日志
echo "[$CURRENT_TIME] 开始执行 SQL 脚本..." >> $LOG_FILE

# 遍历 SQL 文件目录下的所有 .sql 文件并依次执行
for sql_file in $SQL_FILES_DIR/*.sql; do
    echo "[$CURRENT_TIME] 执行 SQL 文件: $sql_file" >> $LOG_FILE
    
    # 执行 SQL 文件,并在发生错误时退出 SQL*Plus
    sqlplus -s / as sysdba <<EOF >> $LOG_FILE
WHENEVER SQLERROR EXIT SQL.SQLCODE
START $sql_file
EXIT;
EOF

    # 检查 SQL 执行状态
    if [ $? -eq 0 ]; then
        echo "[$CURRENT_TIME] SQL 文件 $sql_file 执行成功。" >> $LOG_FILE
    else
        echo "[$CURRENT_TIME] SQL 文件 $sql_file 执行失败。" >> $LOG_FILE
        echo "[$CURRENT_TIME] 停止后续 SQL 文件的执行。" >> $LOG_FILE
        break  # 停止后续 SQL 文件的执行
    fi
done

# 记录脚本结束时间
CURRENT_TIME=$(date +"%Y-%m-%d %H:%M:%S")
echo "[$CURRENT_TIME] 脚本执行结束。" >> $LOG_FILE

1、脚本尽量在oracle数据库的安装用户下执行:切换用户sudo su - oracle
2、加入为linux定时任务
    查看当前定时任务
    crontab -l
    修改当前的定时任务
    crontab -e
    定时任务例子
    */5 * * * * /home/oracle/runsql_test/sqlfilerun.sh
    给权限
3、脚本基本逻辑
    1)指定Oracle的安装目录
    2)指定日志目录
    3)指定sql文件所在目录
    4)执行逻辑
        - 从sql文件所在目录获取所有*.sql文件
        - 循环sql文件逐个执行(使用sqlplus)
        - 异常处理逻辑
            - 如果sql文件中的sql报错则终止执行
            - 如果默认sql文件执行失败后续文件不继续执行
4、使用方式建议
    1)对于不同业务模块的sql处理,建议以此sh为模板,编写多个脚本
    2)基于脚本构建多套sql文件、日志目录
5、日志文件
    1)每执行一次会在日志目录中,生成一个日志文件日志文件名中有当前时间精确到秒
    2)日志文件中会记录每条sql的执行结果
    3)日志文件会记录执行了哪些sql文件和执行结果


http://www.kler.cn/news/312201.html

相关文章:

  • VRRP协议原理
  • 《计算机网络名词解释》
  • 【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
  • 量化交易软件、接口、API、区别、用法,有什么好用的么
  • Vue2中路由的介绍和使用
  • UDS诊断-面试题2
  • 掌握Protobuf精髓:深入解析.proto文件语法及高效应用
  • 蓝桥杯4. Fizz Buzz 经典问题
  • sql基础语法及常见函数等
  • 解决:The play() request was interrupted by a call to pause().报错
  • Android Glide:让图片加载从未如此简单
  • 14_input子系统my_touch_device,my_touch_handlerLinux内核模块
  • Android 将EasyPermissions进一步封装,使得动态权限申请更加简明
  • Java 23、JDK 23正式发布!
  • C++之第十二课
  • 红日药业携手实在智能,构建RPA数字员工平台满足业务一体化需求 | 实在RPA案例
  • Java 多态(难)
  • VS运行程序时报错--无法定位程序输入点
  • Gitlab学习(007 gitlab项目操作)
  • 电影《祝你幸福!》观后感
  • 梧桐数据库(WuTongDB):SQL Server Query Optimizer 简介
  • OSPFv3协议几类LSA介绍
  • 【图像压缩与重构】基于标准+改进BP神经网络
  • Linux实操笔记2 Ubuntu安装Nginx的不同方法
  • python检测keycloak证书连接报错问题
  • 基于多域名,通过云运营商弹性负载,Nginx配置等基于的多租户系统部署
  • 有没有通过倾斜摄影文件直接导出DSM/DOM的文件软件?
  • npm发布插件超级简单版
  • django分发路由
  • alias 后门从入门到应急响应