You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用GNU SED按SID从文件获取Oracle账号密码及批量操作实现方法

批量连接Oracle数据库执行SQL的实现方案

直接使用Bash脚本即可完成需求,完整实现代码及注意事项如下:

完整执行脚本

#!/bin/bash
# 配置文件路径,可根据实际存放位置修改
PASS_FILE="./pass"
DBLIST_FILE="./dblist"
OUTPUT_LOG="./output.log"
QUERY_SQL="./query.sql"

# 初始化日志文件
> "${OUTPUT_LOG}"

# 逐行读取dblist中的TNS服务名
while read -r TNS || [[ -n "${TNS}" ]]
do
    # 跳过空行
    [[ -z "${TNS}" ]] && continue
    # 匹配pass文件中对应TNS的凭证记录
    MATCH_RECORD=$(grep ":${TNS}:" "${PASS_FILE}")
    if [[ -z "${MATCH_RECORD}" ]]; then
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 警告:未找到TNS[${TNS}]的登录凭证,跳过执行" >> "${OUTPUT_LOG}"
        continue
    fi
    # 拆分凭证字段:pass文件格式为 密码:TNS:用户名
    DB_PASS=$(echo "${MATCH_RECORD}" | awk -F':' '{print $1}')
    DB_USER=$(echo "${MATCH_RECORD}" | awk -F':' '{print $3}')
    
    # 执行SQL查询
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始执行TNS[${TNS}]的查询任务" >> "${OUTPUT_LOG}"
    sqlplus -s /nolog << EOF >> "${OUTPUT_LOG}"
connect ${DB_USER}/${DB_PASS}@${TNS}
spool append
@${QUERY_SQL}
spool off
exit
EOF
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] TNS[${TNS}]的查询任务执行完成" >> "${OUTPUT_LOG}"
    echo "==================================================" >> "${OUTPUT_LOG}"
done < "${DBLIST_FILE}"

echo "所有任务执行完成,执行结果请查看日志文件:${OUTPUT_LOG}"

注意事项

  • 已修正你提供的连接语法错误,Oracle正确的连接格式为用户名/密码@TNS服务名
  • 请为凭证文件pass设置最小权限:执行chmod 600 pass避免账号密码泄露
  • 执行脚本前请确认Oracle客户端环境变量已配置正确,确保可直接调用sqlplus命令
  • 脚本默认跳过无对应凭证的TNS服务,不会中断整体执行流程,跳过记录会在日志中留下警告
  • query.sql文件中不要包含spool off或exit命令,避免执行提前中断

内容的提问来源于stack exchange,提问作者Gaurav Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:39:03