怎样批量对比两个数据库的表差异??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

  数据库使用的是oracle,库之间有建立dblink。现在有一个数据库A里有800张表,表名全部列在一个excel里了,表名如ODS_A、ODS_B、ODS_C这样有很多。员工甲负责把A库里的这800张表的数据全部同步到数据库B里,我的工作是负责验证他是否把这800张表里的数据都完整且正确地同步到B了。请问是否有方法不使用其他软件/工具,只通过写sql来验证?有没有做过类似工作的朋友帮忙解答一下。我在上家公司遇到过类似的需求,不过不是我负责的。当时负责的同事好像是写java把对比结果生成了excel。但我不会java🥲

注:只需要验证一次就行,不用每天跑这个验证脚本。脚本不一定要写成存储过程,只要能达到目的,即使仅仅是一大段sql语句也可以。

解决方案

  如下是上述问题的解决方案,仅供参考:

  在Oracle数据库中,你可以通过编写SQL查询来对比两个数据库中表的数据差异。假设你已经通过DBLINK连接了数据库A和数据库B,以下是一个简单的方法来对比每张表的数据是否一致。

步骤 1: 创建比对结果表

首先,你可以在数据库中创建一个表来存储比对结果。

CREATE TABLE comparison_results (table_name VARCHAR2(100),row_count_diff NUMBER,diff_details VARCHAR2(4000)
);

步骤 2: 编写对比SQL

接下来,为了对比两个数据库中的表,你可以编写一个SQL脚本,通过循环所有表名来进行对比。

DECLAREv_table_name VARCHAR2(100);v_sql_count_diff VARCHAR2(2000);v_sql_data_diff VARCHAR2(4000);v_row_count_diff NUMBER;v_diff_details VARCHAR2(4000);
BEGINFOR r IN (SELECT table_name FROM your_table_list_excel) LOOPv_table_name := r.table_name;-- 计算行数差异EXECUTE IMMEDIATE 'SELECT (SELECT COUNT(1) FROM ' || v_table_name || '@DBLINK_A) - (SELECT COUNT(1) FROM ' || v_table_name || '@DBLINK_B) FROM dual'INTO v_row_count_diff;-- 如果行数不同,记录差异信息IF v_row_count_diff != 0 THENv_diff_details := 'Row count difference: ' || v_row_count_diff;INSERT INTO comparison_results (table_name, row_count_diff, diff_details)VALUES (v_table_name, v_row_count_diff, v_diff_details);ELSE-- 比较数据内容EXECUTE IMMEDIATE 'WITH a AS (SELECT * FROM ' || v_table_name || '@DBLINK_A), b AS (SELECT * FROM ' || v_table_name || '@DBLINK_B)SELECT COUNT(1) FROM (SELECT * FROM a MINUS SELECT * FROM b UNION ALL SELECT * FROM b MINUS SELECT * FROM a)'INTO v_row_count_diff;IF v_row_count_diff > 0 THENv_diff_details := 'Data difference found.';INSERT INTO comparison_results (table_name, row_count_diff, diff_details)VALUES (v_table_name, 0, v_diff_details);END IF;END IF;END LOOP;
END;
/

步骤 3: 查询比对结果

在执行完上述SQL脚本之后,你可以通过以下查询查看比对结果:

SELECT * FROM comparison_results;

说明

  • DBLINK_ADBLINK_B:假设你在A和B库之间分别建立了dblink,用于跨库访问。请用实际的dblink名称替换这些占位符。
  • your_table_list_excel:这是一个临时表,存储了从Excel导入的800个表名。你需要先将表名导入到Oracle表中。
  • 行数对比:首先对比两个库中表的行数是否一致。
  • 数据对比:如果行数一致,则进一步对比数据内容。MINUS操作可以查找两个表中的数据差异。

附加说明

  1. 性能问题:在处理大量数据时,直接在数据库中进行数据对比可能会很耗时,尤其是对比大表。你可以考虑根据表的大小和数据量,分批次进行对比。
  2. 数据类型:对比表中所有数据时,需要确保数据类型完全一致,特别是在涉及日期、时间戳、BLOB等复杂数据类型时。
  3. 复杂性:如果数据表结构很复杂或者数据量巨大,建议将这些对比任务分割成小任务,逐个处理。

这种方法通过纯SQL实现了跨数据库的数据对比,可以满足一次性验证的需求。如果有进一步的优化需求,可以再进一步细化对比逻辑。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544886.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

38.重复的子字符串

方法1: class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;String s2(ss).substring(1,(ss).length()-1);//去掉首尾字符return s2.contains(s);//判断是否包含s} } class Solution(object):def rep…

spring boot项目对接人大金仓

先确认一下依赖 第一 是否引入了mybatis-plus多数据源&#xff0c;如果引入了请将版本保持在3.5.0以上 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>${dynam…

接触器和复合开关的具体应用区别

接触器和复合开关在电力系统中都有各自的应用&#xff0c;但它们的功能和用途有所不同&#xff1a; 一、接触器 1、应用&#xff1a; 电动机控制&#xff1a;接触器常用于控制电动机的启停&#xff0c;能够承载电动机的启动电流。 自动控制系统&#xff1a;在自动化控制系统…

2-102基于matlab的蒙特卡洛仿真

基于matlab的蒙特卡洛仿真&#xff0c;对64QAM和BPSK进行蒙特卡洛仿真&#xff0c;并绘出误码率曲线。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a; 2-102基于matlab的蒙特卡洛仿真

【FPGA必知必会】(二)7系列的配置(一)

配置概述 7系列FPGA是通过将bitstream下载到内存中来实现配置的。 既可以通过外部非易失性存储器加载&#xff0c;也可以通过微处理器、DSP处理器、微控制器、PC或者板级测试仪进行加载。 有两种通用的配置路径&#xff0c;一种是串行数据路径&#xff0c;用于减少对器件引脚…

数据丢失不再怕!四款神器助你找回一切

哈喽&#xff0c;大家好&#xff01;今天咱们来聊聊数据恢复工具&#xff1b;在数字化的时代&#xff0c;数据丢失可是个让人头疼的问题&#xff1b;不过别担心&#xff0c;有了这些数据恢复工具&#xff0c;再也不用担心数据不见&#xff1b;下面我给大家推荐五款非常好用的数…

【systemctl start jenkins】启动报错问题解决

问题说明&#xff0c;最终是在jenkins.service中配置JAVA_HOME解决的&#xff0c;但是我的服务器环境中确定已经配置好了Java环境变量&#xff0c;并且java -version也能正常打印信息&#xff0c;不清楚为什么jenkins.service无法读取配置 1.环境配置说明 服务器&#xff1a;…

如何确定SAP 某些凭证或者单号的号码编码范围的 OBJECT 是什么?

在SAP的运维或者项目实施中&#xff0c;有时会如何确定SAP 某些凭证或者单号的号码 OBJECT 是什么&#xff1f; 一般一下常用的可以通过事务代码 例如&#xff1a; XDN1 Create Number Ranges for Customer Accounts&#xff0c;定义客户编码FBN1查看维护会计凭证号范围 我…

破解 oklink 网站加密数据(升级版)

大家好!我是炒青椒不放辣,关注我,收看每期的编程干货。 逆向是爬虫工程师进阶必备技能,当我们遇到一个问题时可能会有多种解决途径,而如何做出最高效的抉择又需要经验的积累。本期文章将以实战的方式,带你详细地分析并破解 oklink 网站加密数据 特别声明:本篇文章仅供学…

屏幕演示工具 | 水豚鼠标助手 v1.0.7

水豚鼠标助手是一款功能强大的屏幕演示工具&#xff0c;专为Windows 10及以上系统设计。这款软件提供了多种实用功能&#xff0c;旨在增强用户的屏幕演示体验&#xff0c;特别适合教师、讲师和需要进行屏幕演示的用户。鼠标换肤&#xff1a;软件提供多种鼠标光标样式&#xff0…

深兰科技陈海波应邀出席2024长三角论坛暨虹桥人才创新发展大会

近日&#xff0c;以“人才引领 联动共融——国际化创新与长三角协同”为主题的“2024长三角人才发展论坛暨虹桥人才创新发展大会”在上海国际会议中心隆重举行。上海市委常委、组织部部长、市委人才办主任张为应邀出席并做大会致辞。 深兰科技创始人、董事长陈海波作为特邀企业…

跑lvs出现soft connect怎么处理?

首先&#xff0c;我们先了解一下什么是soft connect。简而言之&#xff0c;就是工具会将所有连接在psub上的信号认作soft connect&#xff08;也就是short&#xff09;。如图1所示&#xff0c;VSS和AVSS都接到了p上&#xff0c;它们通过psub便有了soft connect。 如果有soft co…

SQLServer运维实用的几个脚本

目录 1、查询出最近所有耗时最大的SQL语句 2、查询数据库每个数据表存储占用 3、当前正在执行的最耗时的前10个SQL语句 4、SQLServer查看锁表和解锁 5、快速清理数据库日志文件 1、查询出最近所有耗时最大的SQL语句 返回的是未关联任何特定对象的最耗费资源的查询信息,包…

剖解相交链表

相交链表 思路&#xff1a;我们计算A和B链表的长度&#xff0c;求出他们的差值&#xff08;len&#xff09;&#xff0c;让链表长的先多走len步&#xff0c;最后在A,B链表一起向后走&#xff0c;即可相逢于相交节点 实现代码如下&#xff1a; public class Solution {public …

string 的介绍及使用

一.string类介绍 C语言中&#xff0c;字符串是以’\0’结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需要用户自己管理&a…

服务设计原则介绍

在Java或任何软件开发中&#xff0c;设计服务时遵循一些核心原则是非常重要的&#xff0c;这些原则不仅有助于构建高质量、可维护的软件系统&#xff0c;还能提高系统的可扩展性和可重用性。以下是一些关键的服务设计原则&#xff1a; 单一职责原则&#xff08;SingleResponsib…

个人量化成功之路-----获取实时OHLC的数据

昨天有一个客户说自己之前交易主要看OHLC线&#xff0c;想问量化软件如何实现获取实时一分钟OHLC的数据并生产图像。 有朋友可能不熟悉OHLC这个名字哈&#xff0c;其实跟K线/蜡烛图的数据是一样的&#xff0c;和蜡烛图的区别只是表现形式的不一致。 O为open、开盘价&#xff…

第6章 常用UI组件库

一.Element Plus组件库 1. 安装Element Plus 什么是Element Plus&#xff1f; Element Plus是基于Vue 3开发的优秀的PC端开源UI组件库&#xff0c;它是Element的升级版&#xff0c;对于习惯使用Element的人员来说&#xff0c;在学习Element Plus时&#xff0c;不用花费太多的…

如何使用ssm实现基于Java的超市管理系统

TOC ssm681基于Java的超市管理系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化…

BUUCTF [SCTF2019]电单车详解两种方法(python实现绝对原创)

使用audacity打开&#xff0c;发现是一段PT2242 信号 PT2242信号 有长有短&#xff0c;短的为0&#xff0c;长的为1化出来 这应该是截获电动车钥匙发射出的锁车信号 0 01110100101010100110 0010 0前四位为同步码0 。。。中间这20位为01110100101010100110为地址码0010为功…