查看: 102|回复: 0

oracle数据库迁移后的数据对比脚本

[复制链接]

6

主题

1

回帖

32

积分

实习版主

积分
32
发表于 2025-11-14 15:20:01 | 显示全部楼层 |阅读模式
#!/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=()

部分脚本数据请回复后查看

游客,如果您要查看本帖隐藏内容请回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2025 Discuz! Team.|蜀ICP备2025161238号-2

在本版发帖
关注公众号
QQ客服返回顶部
快速回复 返回顶部 返回列表