|
#!/bin/bash
# 脚本执行模式:-e 遇到错误立即退出;-o pipefail 管道中任一命令失败则整体失败(确保错误不被掩盖) set -eo pipefail
# ======================================================== # 脚本核心功能说明 # 脚本名称:Data Consistency Checker(数据一致性检查器) # 核心用途:对比两个Oracle数据库(源库SRC、目标库TGT)的「对象定义」和「表数据」一致性 # 输出产物:日志文件、汇总报告(HTML/CSV)、详细行级差异报告(HTML/CSV) # ========================================================
# --- 环境编码配置 --- # 强制Shell环境使用UTF-8编码,避免中文/特殊字符乱码 export LANG="en_US.UTF-8" export LC_ALL="en_US.UTF-8"
# --- 核心配置区(用户可根据需求修改) --- # 源数据库连接信息:格式为「用户名/密码@//IP:端口/数据库实例名」 SRC_CONN="amoss/amoss_prod@//11.88.57.33:1521/test1” # 目标数据库连接信息:与源库格式一致,指向待对比的目标实例 TGT_CONN="amoss/amoss_prod@//11.88.57.33:1531/test2”
# 忽略列配置:逗号分隔的正则表达式(匹配列名后缀),哈希计算时跳过这些列 # 示例:"SHIJIANCUO$,CREATED_AT$,UPDATED_AT$" 表示忽略所有以这三个字符串结尾的列 # 空值表示不忽略任何列(适用于无需排除时间戳等动态列的场景) HULUE_LIE="SHIJIANCUO$,CREATED_AT$,UPDATED_AT$"
# 忽略表配置:逗号分隔的正则表达式(匹配表名),完全跳过这些表的对比 # 示例:"_ARCH$,_FORWARD$" 表示忽略所有以_ARCH或_FORWARD结尾的表(如归档表) # 空值表示不忽略任何表 HULUE_BIAO="_ARCH$"
# 详细对比表配置:逗号分隔的正则表达式(匹配表名),仅对这些表生成行级差异 # 空值表示对所有不一致的表都生成详细行级对比 # 示例:"PHYSFLGT$,TIDYUP_RESULTS$" 仅对这两类表做行级diff XIANGXI_DUIBI_BIAO=""
# 数据导出分页大小:单次导出表数据时的批次大小(10万行/批),避免大表导出超时 PAGE_SIZE=100000 # 并行任务数:最大并发执行的对比任务数(16个),平衡执行效率和数据库压力 MAX_JOBS=16
# --- 输出文件命名配置 --- # 生成时间戳(格式:年月日时分秒),用于区分不同批次的报告文件 SHIJIANCUO=$(date '+%Y%m%d%H%M%S') # 日志文件:记录脚本执行全过程(含信息、警告、错误) RIZHIWENJIAN="compare_${SHIJIANCUO}.log" # 汇总报告:HTML格式(可视化)和CSV格式(便于后续分析),记录整体对比结果 HUIZONG_HTML="diff_report_${SHIJIANCUO}.html" HUIZONG_CSV="diff_report_${SHIJIANCUO}.csv" # 详细报告:HTML格式和CSV格式,记录行级差异(如缺失行、多余行) DETAIL_HTML="diff_detail_report_${SHIJIANCUO}.html" DETAIL_CSV="diff_detail_report_${SHIJIANCUO}.csv"
# --- Oracle编码关键配置 --- # 设置NLS_LANG环境变量为UTF-8,确保sqlplus导出数据时编码统一,避免乱码 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
# --- 工作目录配置 --- # 创建临时工作目录(以时间戳命名),存储导出的临时数据、SQL脚本等 WORKDIR="db_compare_${SHIJIANCUO}_tmp" mkdir -p "$WORKDIR" # -p确保目录不存在时创建,存在时不报错 # 存储需要生成详细报告的表名列表(后续动态填充) DETAIL_TABLE_LIST=()
部分脚本数据请回复后查看
|