数据库数据迁移完成后完整性的校验

0    44    1

👉 本文共约17138个字,系统预计阅读时间或需65分钟。

本页目录 隐藏

数据库数据验证是指对迁移后数据库数据的一致性进行验证。

数据库的迁移大体上可以分为物理全量迁移、物理增量迁移、逻辑全量迁移和逻辑增量迁移。其中,针对数据库物理全量迁移来说,迁移前的源库和迁移后的目标库肯定是一致的。因为物理全量迁移是基于物理文件的冷备迁移,不存在数据的变动,所以,数据库的一致性可以得到保证。

  • 物理冷备全量迁移(例如rman全备、冷备等方式),数据肯定是一致的。

  • 数据校验主要是针对增量迁移和逻辑迁移来说的。

  • 增量迁移对Oracle来说,若增量点不一致,则不能恢复,所以一般也不会丢失数据。

    但是,针对MSSQL从阿里云到华为云做增量恢复碰到过一次数据丢失的情况。

  • 逻辑迁移要有严格的步骤,步骤不报错,基本数据也不丢失。

不过,客户肯定不认啥物理迁移,逻辑迁移、增量还是全量迁移的,只要数据迁移前后数据比对的一个结果。

所以,我们可以从以下几个方面来比对

1,从数据库对象方面上来判断、鉴别

  • 从总数量上来进行判断,看迁移前后,表、视图、存储过程、存储函数、触发器等用户对象的 总数量 能否和源库对应上。
  • 然后 , 再 对各个 表的总记录数做一个count 操作,来比对行数 。
  • 最后,对于视图、存储过程、函数等内容,可以将其DDL语句导出成txt可读文件,再通过文本比对工具进行比对即可。

2,从业务上来判断,把应用程序跑起来,进应用程序界面上,跑一整套流程下来,看看是否正常

3、 对数据库表内容进行比对,一般使用工具或脚本进行比对。

  • Oracle数据库:dbms_comparison包、minus相减法、dbms_utility.get_hash_value计算hash值、 PL/SQL Developer 工具等
  • SQL Server数据库:Visual Studio工具即SQL Server Data Tools (SSDT)、SQLDiff或tablediff.exe工具针对单表比对、Red Gate的SQL Compare工具,需要注意: 对于 SSDT工具来说,需要对比的2个库都必须有主键或唯一键才能进行比对
  • MySQL数据库:用mysqldiff+mysqldbcompare工具


Oracle 数据库

在开发过程中,遇到了需要比对两个数据库是否完全一致。通过PL/SQL可以为我们提供很好的帮助。

方式1:使用 \dbms_comparison包****

官方文档:

DBMS_COMPARISION简介:

​ 这个软件包是oracle提供的可以再两个数据之间做object是比对。并且呢如果在比对过程中如果源端数据和目标端数据不一致,那么可以选择是从源端在将数据复制到目标端,还是从目标端在复制到源端,最终达到数据一致性的结果。该包也是通过创建dblink来实现的。这个工具的使用大体分为四步:

第一步:使用create_compare去创建一个比对动作

第二步:使用compare函数去进行数据对象之间的比对

第三步:我们在去查看比对结果,相应的record会记录到不同视图中如下:

DBA_COMPARISON_SCAN

USER_COMPARISON_SCAN

DBA_COMPARISON_SCAN_VALUES

USER_COMPARISON_SCAN_VALUES

DBA_COMPARISON_ROW_DIF

USER_COMPARISON_ROW_DIF

第四不:如果数据不一致,那么可以使用convert去将数据同步

大家可能会说,如果我进行了两次数据比对,那么如何区分呢,这就是oracle自己会给你设计一个标示了。这个函数是recheck。后续介绍:

还有一个问题,那就是这个包能做哪些数据比对?

答案是:对表、视图、物化视图、同义词等

DBMS_COMPARISION限制:

当然了任何一个工具都有自己的限制,那么这个包呢?

1、对于源端数据库版本必须是高于11.1,对于目标端数据库版本必须高于10.1

2.对于所有比对的数据库对象,必须是共享对象,也就是说每个对象的列个数和列的类型必须一致。如果列不一致,那么需要将比对的列使用column_list做个列表。

Database objects of different types can be compared and converged at different databases. For example, a table at one database and a materialized view at another database can be compared and converged with this package.

以上是说了比较容易理解的限制,下面在说一下索引列的限制:

1、在全库比对模式下,必须要有一个在 number, timestamp, interval, or DATE 数据类型的单一索引列,或是仅仅有一个包括这几种数据类型的复合索引,但是这个复合索引中设计到的列必须都是not null或是其中一列是一个主键列。

2、

For the scan modes CMP_SCAN_MODE_FULL and CMP_SCAN_MODE_CUSTOM to be supported, the database objects must have one of the following types of indexes:

  • A single-column index on a number, timestamp, interval, DATE, VARCHAR2, or CHAR data type column
  • A composite index that only includes number, timestamp, interval, DATE, VARCHAR2, or CHAR columns. Each column in the composite index must either have a NOT NULL constraint or be part of the primary key.

如果数据库没有满足这些要求,那么这个包将无法进行数据比对。

if the database objects have only one index, and it is a composite index that includes a NUMBER column and an NCHAR column, then the DBMS_COMPARISON package does not support them.

If these constraints are not present on a table, then use the index_schema_name and index_name parameters in the CREATE_COMPARISONprocedure to specify an index whose columns satisfy this requirement.

When a single index value identifies both a local row and a remote row, the two rows must be copies of the same row in the replicated tables. In addition, each pair of copies of the same row must always have the same index value.

DBms_comparison不支持的数据类型:

LONG、LANG RAW、ROWID、urowid、clob、nclob、blob、bfile另外还有如下两种:

1、udt(user-defined types,including object types, REFs, varrays, and nested tables)

2、oracle-supplied type (including any types, XML types, spatial types, and media types)


假设你所要进行数据比对的数据库其中有一个版本为11g且该表上有相应的主键索引(primary key index)或者唯一非空索引(unique key &not null)的话,那么恭喜你! 你可以借助11g 新引入的专门做数据对比的PL/SQL Package dbms_comparison来实现数据校验的目的,如以下演示:

以上源端数据库版本为11.2.0.3 , 源表结构为test1(t1 number primary key,t2 varchar2(128),透过dblink链接到版本为10.2.0.1的目标端

目标端版本为10.2.0.1 , 表结构为test2(t1 number primary key,t2 varchar2(128))。

注意这里2张表上均必须有相同的主键索引或者伪主键索引(pseudoprimary key伪主键要求是唯一键且所有的成员列均是非空NOT NULL)。

实际创建comparison对象,并实施校验:

利用dbms_comparison.create_comparison创建comparison后,新建的comparison会出现在user_comparison视图中;

以上我们完成了comparison的创建,但实际的校验仍未发生我们利用10046事件监控这个数据对比过程:

可以看到以上过程中虽然没有避免对TEST1、TEST2表的全表扫描(FULL TABLE SCAN), 但是好在实际参与HASH JOIN FULL OUTER 的仅是访问索引后获得的少量数据,所以效率还是挺高的。

此外可以通过user_comparison_row_dif了解实际那些row存在差异,如:

以上利用dbms_comparison包完成了一次简单的数据比对,该方法适用于11g以上版本且要求表上有主键索引或非空唯一索引, 且不支持以下数据类型字段的比对

  • LONG
  • LONG RAW
  • ROWID
  • UROWID
  • CLOB
  • NCLOB
  • BLOB
  • BFILE
  • User-defined types (including object types, REFs, varrays, and nested tables)
  • Oracle-supplied types (including any types, XML types, spatial types, and media types)

若要比对存有以上类型字段的表,那么需要在create_comparison时指定column_list参数排除掉这些类型的字段。

方法1 dbms_comparison的优势在于可以提供详细的比较信息,且在有适当索引的前提下效率较高。
缺点在于有数据库版本的要求(at least 11gR1), 且也不支持LONG 、CLOB等字段的比较。

方式2:

利用minus Query 对比数据

这可以说是操作上最简单的一种方法,如:

MINUS Clause会导致2张表均在本地被全表扫描(TABLE FULL SCAN),且要求发生SORT排序。 若所对比的表上有大量的数据,那么排序的代价将会是非常大的, 因此这种方法的效率不高。

方式2 MINUS的优点在于操作简便,特别适合于小表之间的数据检验。
缺点在于 由于SORT排序可能导致在大数据量的情况下效率很低, 且同样不支持LOB 和 LONG 这样的大对象。

查询2个表之间的不同:

方式3:

使用not exists子句,如:

照理说在数据量较大的情况下not exists使用的HASH JOIN ANTI是在性能上是优于MINUS操作的, 但是当所要比较的表身处不同的2个数据库(distributed query)时将无法使用HASH JOIN ANTI,而会使用FILTER OPERATION这种效率极低的操作:

可以从以上执行计划看到FILTER 操作是十分昂贵的。

补充:

有网友反映可以通过增加 unnest hint 让CBO优化器在远程子查询有效的情况下整体考虑整个查询块,这样可以让执行计划用上HASH JOIN RIGHT ANTI, 这是我一开始没有考虑到的。

在此基础上加入ordered hint 可以让执行计划使用HASH JOIN ANTI

方式3 的优点在于操作简便, 且当需要对比的表位于同一数据库时效率要比MINUS方式高,但如果是distributed query分布式查询则效率可能会因FILTER操作而急剧下降,这时候需要我们手动添加unnest这样的SQL提示,以保证执行计划使用HASH JOIN ANTI操作,这样能够保证not exists方式的性能。not exists同样不支持CLOB等大对象。

方式4:

Toad、PL/SQL Developer等图形化工具都提供了compare table data的功能, 这里我们以Toad工具为例,介绍如何使用该工具校验数据:

打开Toad 链接数据库-> 点击Database-> Compare -> Data

toad_compare_data6

分别在Source 1和Source 2对话框中输入源表和目标表的信息

因为Toad的底层实际上使用了MINUS操作,所以提高SORT_AREA_SIZE有助于提高compare的性能,若使用AUTO PGA则可以不设置。

toad_compare_data6

选择所要比较的列

toad_compare_data6

toad_compare_data6

首先可以比较2张表的行数,点击Execute计算count

toad_compare_data6

使用MINUS 找出其中一张表上有,而另一张没有的行

toad_compare_data6

使用MINUS 找出所有的差别

toad_compare_data6

Toad的compare data功能是基于MINUS实现的,所以效率上并没有优势。但是通过图形界面省去了写SQL语句的麻烦。这种方法同样不支持LOB、LONG等对象。

1. PL/SQL Developer 工具使用


PLSQL Developer Tools菜单下有Compare User Objects和Compare Table Data功能。

① Tools –> compare user objects

该功能用于比较不同用户所拥有的对象(包括table、sequence、function、procedure、view等),并生成同步差异的sql脚本,用户通过执行该脚本,可保持两个用户的对象结构的同步,当然你也可以选择一个对象或者多个对象来进行比较。

操作步骤:
\1. 选择样本库的对比对象
\2. 选择目标库(Target Session..),即需修改和被同步的库
\3. 点击Compare按钮
\4. 在Differences选项卡,点击每个对象能查看消除差异的SQL,点击Apply SQL in Target Session执行
\5. 点击Show Differences按钮,显示具体区别

② Tools –> compare table data

该功能用于比较某些个表里面的数据是否一致,并自动生成同步差异的sql脚本,用户通过执行该脚本,就可以保持比较对象与被比较对象里面数据的同步。

操作步骤:
\1. 选择样本库的对比表
\2. 选择目标库(Target Session..),即需修改和被同步的库
\3. 点击Compare按钮
\4. 在Differences选项卡,点击每个表能查看消除差异的SQL
\5. 点击Apply SQL in Target Session执行

注: 主键相同值的记录做更新(Update)其他字段。


本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!


  1. 登录数据库A
  2. 打开【工具】菜单下的【比较用户对象】
  3. 点【目标会话】,登录数据库B

img

  1. 点击【比较】
  2. 切换到【差异】面板可以看到不同的对象以及更新语句
  3. 同理,我们也可以通过【比较表数据】来查看两库表数据的不同。

img

  1. 如果要将两库的表结构或者表数据进行同步的话,则拷贝出脚本并执行。

注意以下几种数据比对方式适用的前提条件:

\1. 所要比对的表的结构是一致的
\2. 比对过程中源端和 目标端 表上的数据都是静态的,没有任何DML修改

方式5:

这是一种别出心裁的做法。 将一行数据的上所有字段合并起来,并使用dbms_utility.get_hash_value对合并后的中间值取hash value,再将所有这些从各行所获得的hash值sum累加, 若2表的hash累加值相等则判定2表的数据一致。

简单来说,如下面这样:

对于列较多的表,手动去构造所有字段合并可能会比较麻烦,利用以下SQL可以快速构造出我们所需要的语句:

使用示范:

方式5 利用累加整行数据的hash来判定表上数据是否一致, 仅需要对2张表做全表扫描,效率上是这几种方法中最高的, 且能保证较高的准确率。

但是该hash方式存在以下几点不足:

\1. 所有字段合并的整行数据可能超过4000字节,这时会出现ORA-1498错误。换而言之使用这种方式的前提是表中任一行的行长不能超过4000 bytes,当然常规情况下很少会有一行数据超过4000 bytes,也可以通过dba_tables.avg_row_len平均行长的统计信息来判定,若avg_row_len<<4000 那么一般不会有溢出的问题。

\2. 该hash 方式仅能帮助判断 数据是否一致, 而无法提供更多有用的,例如是哪些行不一致等细节信息

\3. 同样的该hash方式对于lob、long字段也无能为力




SQL Server数据库

可以使用微软提供的专用数据库比对工具:Visual Studio 2017 (SSDT) --

SQL Server Data Tools (SSDT)

img

1.准备两个要比较的数据库

我这里有两个数据库,一个是本地的(JXPT_CS),一个是测试服务器的(JXPT_MS)。本次演练我将连接这两个数据库。

2.连接源数据库和目标数据库

所谓的源数据库和目标数据库也就是字面的意思(源>目标)将源数据中新增修改删除的数据同步到目标数据库中。

首先我们打开VS>工具>SQL Server>新建数据比较。

技术分享

选择源数据库

技术分享

我们选择数据库,点击连接

技术分享

选择目标 操作和选择源一样

技术分享

然后我们点击下一步

技术分享

3.比较源数据库和目标数据库

源数据库和目标数据库都选择完成后,然后选择要比较的表、字段和视图

技术分享

点开表,也可以根据需求选择相应的表

技术分享

点击完成,开始比较

技术分享

上面我们会看到各个表之间的数据差异,可以选择查看,可以以在下面Tab页切换查看。

4.更新目标数据库

比较完成后我们可以看到源数据和目标数据中不同的数据还有只存在源中的、只存在目标中的、以及相同的记录。

想要同步我们选择左上角“生成脚本”,也可以选择“更新目标”

技术分享

技术分享

本次我选择更新前两张表的数据,更新完成后刷新列表,就可以看到我们已经将数据同步到目标数据库表了。

技术分享

这个时候我们会发现刚才同步的已经同步完成了,如果想全部同步,全部勾选就是啦,数据比较就是这么简单,

1.安装SQL SERVER Data Tools 最新版本(低版本可能出现兼容问题),会安装最新版的VS,只不过功能不全;

2.安装完毕后,打开VS,这里以VS2012为例:

2.1、架构比较

a. 选择"SQL->架构比较->新建架构比较",打开架构比较窗口:

img

b. 在"选择源"中设置新版的数据库连接,"选择目标"中设置旧版的数据库连接,完成后点击比较按钮,VS分析完成后会生成如下界面,在该界面可以去掉不需要更新的脚本,完成后点击生成脚本按钮生成数据库结构升级脚本;

img

注:在旧版的数据库中执行数据库结构升级脚本(生产环境下数据库必须先备份),在SQL查询器中必须选中SQLCMD模式

img

2.2、数据比较

a. 选择"SQL->数据比较->新建数据比较",打开数据比较弹出框;源数据库设置新数据库,目标数据库设置旧数据库;一般不会对旧数据库的原有数据进行删除操作,故可以撤销要比较的记录后两项,如下图:

img

b. 点击下一步,设置需要比较的数据库( 注:只有设置了主键的表才能进行比较,进入此界面)

img

c. 点击完成后,VS会显示下图的差异化界面,在该界面去掉无需升级的差异化表数据,设置完成后点击"生成脚本"按钮,生成数据库升级脚本,执行该脚本到原始库中,完成整个数据库升级过程。

img

------------------------- MSSQL若对单个表比对,那么以下工具也不错

简介

数据库数据对比工具(MSSQL版)是针对MS SQL Server的一款小工具,可以针对两个数据进行表结构和数据的对比。

1、表结构对比:如开发库和正式库之间的结构和数据同步,此工具可以告诉您哪个表结构有字段的增加减少,或者字段类型的改变,并生成sql进行结构的同步。

2、数据对比:如对比两个数据库中的某个表的数据差异,有差异的行会用颜色进行标记,可生成sql脚本进行两个库的同步。

下载地址

下载地址:

Csdn下载地址:

运行环境

1、可执行程序SQLDiff.exe

2、需要.net framework4.0,如果没有环境,请先下载安装

运行图:

img

具体操作过程

设置数据源

下载完毕后解压。

img

运行:

img

设置数据源:

img

img

点确定后,可以显示两个数据库之间差异的表,如下图红色行中显示。

img

表结构对比

点击行后面的比结构,可以详细比较表结构之间的差异,并形成sql脚本,用户点确定后执行。

img

点确定后,即可执行成功,目标表中的表结构也将改变。

表中字段增减也可以同步,如下图:

img

如上图中,dept表中的字段差异,也可以检查出来,并形成脚本进行同步。

数据对比

选择某张表,然后,点【比数据】,如下图。

img

然后,就可以看到如下图,有区别的数据用红色标识,并且会将两行数据放在一起对比,并用颜色区分出差异数据。

img

生成修改的脚本,如下图。

img

---单个表比对,也可以使用

tablediff.exe

tablediff.exe,这个工具就用于表内部数据比较,是MS SQL Server自带的一个工具。各位可以自行搜索自己机器上的这个文件所在的路径。

在这里插入图片描述

三、构建数据表比较SQL语句:

use UFDATA_006_2015_好酷

SELECT ‘tablediff.exe -sourceserver 127.0.0.1\SQL2008R2 -sourceuser sa -sourcepassword dst -sourcedatabase UFDATA_006_2015_好酷 -sourceschema dbo -sourcetable ‘+object_name (id)
+’ -destinationserver 127.0.0.1\SQL2008R2 -destinationuser sa -destinationpassword dst -destinationdatabase UFDATA_006_2015_好酷_out -destinationschema dbo -destinationtable ’
+object_name (id)+’ -et Difference -f c:\data’+object_name (id)+’.sql’ as SQL
from sysObjects where type =‘U’


解析:-sourceserver 127.0.0.1\SQL2008R2 原始数据库实例
sourceuser sa -sourcepassword dst -sourcedatabase UFDATA_006_2015_好酷
sa是原始数据库用户,dst是sa用户的密码,各位根据自己的设置更改,UFDATA_002_2017_原始好库是原始数据库。
-destinationserver 127.0.0.1\SQL2008R2 -destinationuser sa -destinationpassword dst -destinationdatabase UFDATA_002_2017_好库导出
127.0.0.1\SQL2008R2 是目标数据库实例,可以跨越实例比较,sa dst UFDATA_006_2015_好酷_out 都是目标数据库用户名、密码、库名称

f c:\data’+object_name (id)+’.sql’ 这个是把比较结果,写道c:\data目录下,用表的名字命名。

在这里插入图片描述
四、语句执行方法:
找到tablediff.exe文件路径
在这里插入图片描述
进入cmd模式下,在路径上输入cmd,回车
在这里插入图片描述
在这里插入图片描述
把得到的SQL语句复制,贴到cmd窗口上。
在这里插入图片描述
建好c:\data 目录,修改好权限
在这里插入图片描述

设置sa登录,及密码
在这里插入图片描述

在这里插入图片描述

把得到的SQL语句复制,贴到cmd窗口上:
在这里插入图片描述

自动运行:
在这里插入图片描述

五、等待运行结果
在这里插入图片描述

总结查看不同的结果,把结果做成汇总,



SQL Compare是一款比较和同步SQL Server数据库结构的工具。现有超过150,000的数据库管理员、开发人员和测试人员在使用它。当测试本地数据库,暂存或激活远程服务器的数据库时,SQL Compare将分配数据库的过程自动化。

点击下载SQL Compar最新使用版

这篇文章主要介绍,演示两个SQL Server数据库的基本比较和部署的工作示例。

在这个示例中,Magic Widget Company具有在实时Web服务器上运行的SQL Server数据库。此数据库包含许多表,视图,存储过程和其他数据库对象。Magic Widget Company的开发团队一直在努力升级到他们的网站。作为这次升级的一部分,他们对数据库的结构做了一些更改。他们已将更改从开发服务器部署到登台服务器。他们现在需要将更改部署到生产服务器。

这个例子有四个步骤:

1、建立数据库

在SQL Server上创建示例数据库。

2、建立比较

指定要比较的数据源。

3、选择要部署的对象

查看结果并选择要部署的对象。

4、部署数据库

创建并运行部署脚本。

一、建立数据库

工作示例使用以下数据库:

  • WidgetStaging是登台数据库
  • WidgetProduction是生产数据库

要在SQL Server上创建这两个数据库:

1、如果它们已经存在,请删除数据库 WidgetStaging 和 WidgetProduction。

2、单击此处下载数据库的SQL创建脚本。

3、复制脚本,将其粘贴到SQL编辑器应用程序中,然后运行它。创建数据库及其架构。

二、建立比较

1、如果尚未运行,请启动SQL Compare。将显示“项目配置”对话框:

image2018-9-6_10-48-44.png

您可以编辑当前项目,也可以创建新项目。

如果要创建新项目,请单击“ 取消” 关闭对话框,然后单击工具栏上的“ image2016-8-31+13_17_39.png新建项目”(New Project)

2、在对话框的两侧,选择“ 数据库”。

在这个例子中,我们将比较数据库。您还可以比较备份,SQL比较快照和脚本文件夹。

3、对于每个数据源,在“ 服务器”中,键入或选择设置数据库的服务器的名称。

4、对于源文件,在 Database中,键入或选择WidgetStaging。为目标键入或选择WidgetProduction。如果数据库未显示在“ 数据库” 列表中,请单击“ 刷新”。

image2016-8-31+13_20_24.png

5、单击“ 立即比较”。

SQL Compare显示一个消息对话框,显示比较的进度。

比较完成后,单击“ 确定"关闭消息框。

Red Gate系列文章:

Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程

Red Gate系列之二 SQL Source Control 3.0.13.4214 Edition 数据库版本控制器 完全破解+使用教程

Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程

Red Gate系列之四 SQL Data Compare 10.2.0.885 Edition 数据比较同步工具 完全破解+使用教程

Red Gate系列之五 .NET Reflector 7.6.1.824 Edition .NET程序反编译神器(另附插件安装教程) 完全破解+使用教程

Red Gate系列之六 SQL Test 1.0.12.3 Edition SQL测试工具 完全破解+使用教程

Red Gate系列之七 SQL Search 1.1.6.1 Edition SQL查询分析工具使用教程

Red Gate系列之八 SQL Connect 1.1.1.19 Edition 数据库连接及操作工具 完全破解+使用教程

一、使用教程

SQL Compare是编程人员常用的比较两个数据库之间差异的工具。可以用来比较数据库里面的对象。比如存储过程,数据库中的数据,表的结构。

下面我就简单介绍一下如何使用

1、选择要比较的数据库,点“Compare Now”进行比较

img

2、对比两个数据库之间的差异,选择要同步的东西。红框出是对比窗口,可以看到两个数据库之间的差异

img

3、同步数据库中的对象,点“Synchronization Wizard”

img

4、开始同步,因为一直按“下一步”,这里只上图,不在说明步骤。

img

img

img

img


二、破解教程

由于我是刚才破解过程忘记截图了,Sorry。不过内容以及界面和以下都是一样!

第一步。打开SQL Server → 菜单栏 → 工具 → SQL Compare

img

第二步。SQL Compare → Help → Enter Serial Number

img

第三步。从Keygen获取序列号

获取序列号

第四步。输入序列号

输入序列号

第五步。点击Activate(注册),注意要先断网,等待一会会提示网络错误

提示网络错误

第六步。 点击Activate Manually(离线注册)

复制生成代码

第七步。把代码复制到注册机中间的文本框内生成相应的代码

复制生成代码

第八步。把生成的代码复制到右边的文本框中,然后点击Finish(完成)

破解成功

附上成功后的About截图。

img

SQL Compare 10.4.8.87 Edition Download CSDN下载地址:

SQL Compare 10.4.8.87 Edition Download官方下载地址: http://www.red-gate.com/products/sql-development/sql-compare/

SQL Compare 10.4.8.87 Edition Keygen注册机(7z格式)下载:

(有些人的电脑没安装或者不是最新版本的解压软件所以解压不了7z格式的压缩文件,我重新压缩成rar格式上传上去了,都是免积分免登陆下载的,请各位放心下载吧!)

SQL Compare 10.4.8.87 Edition Keygen注册机(rar格式)下载:

Red Gate系列未完,待续。



MySQL数据库

可以用 mysqldiff+mysqldbcompare工具。

MySQL数据一致性验证方式:

如果要比较数据库表结构就使用mysqldiff,并生成差异SQL语句

​ 如果要比较数据库主从一致使用pt-table-checksum,生成差异报告,在利用pt-table-sync 数据修复

如果要比较数据库数据就使用mysqldbcompare,并生成差异SQL语句(全能比较)

mysqldbcompare是官方提供一个可以实现多库或单库比较数据一致(无法基于表级别使用)工具,对于表数据很大情况下,测试运行效率并不是很高,有时候会报异常超时等。
官方文档:http://dev.mysql.com/doc/mysql-utilities/1.3/en/mysqldbcompare.html
工具下载地址:
二、安装
解压安装后,需要使用python命令进行安装
cd mysql-utilities-1.4.0-labs-fabric
python setup.py install
安装完成后,mysqldbcompare命令在/usr/local/bin下面
用法:
mysqldbcompare --server1=dlan:root123@172.16.32.10:3307 --server2=dlan:root123@172.16.32.11:3307 --run-all-test --changes-for=server1 --difftype=sql ms:ms
img
对于差异的展现能通过参数--difftype调控
① unified (default)
② context
③ differ
④ sql
参数选项
--version show program's version number and exit
--help 帮助信息
--license 版权信息
--server1=SERVER1 connection information for first server in the form:

[:]@[:][:] or
[:][:].
--server2=SERVER2 connection information for second server in the form:
[:]@[:][:] or
[:][:].
--character-set=CHARSET
设置客户端字符集。默认是以'character_set_client'变量值.
-f FORMAT, --format=FORMAT
指定缺失或改变行的显示格式,有grid (default), tab, csv,
or vertical
--skip-checksum-table
skip CHECKSUM TABLE step in data consistency check.
--skip-object-compare
skip object comparison step.
--skip-row-count skip row count step.
--skip-diff skip the object diff step.
--skip-data-check skip data consistency check.
--skip-table-options skip check of all table options (e.g., AUTO_INCREMENT,
ENGINE, CHARSET, etc.).
--width=WIDTH display width
-t, --run-all-tests 首次发现差异时不中止
-a, --all 检测所有库,1.4.0版本引入
-x EXCLUDE, --exclude=EXCLUDE
排除一个或多个特定的数据库。1.4.0版本引入
exclude one or more databases from the operation using
either a specific name (e.g. db1), a LIKE pattern
(e.g. db%) or a REGEXP search pattern. To use a REGEXP
search pattern for all exclusions, you must also
specify the --regexp option. Repeat the --exclude
option for multiple exclusions.
-c, --compact compact output from a diff.
--disable-binary-logging
防止比较操作被写入二进制日志,如果二进制启用
(SQL_LOG_BIN=1).需要SUPER权限.
Prevents compare operations from being written to the
binary log.
--span-key-size=SPAN_KEY_SIZE
changes the size of the key used for compare table
contents. A higher value can help to get more accurate
results comparing large databases, but may slow the
algorithm. Default value is 8.
--use-indexes=USE_INDEXES
for each table, indicate which index to use as if were
a primary key (each of his columns must not allow null
values).
-v, --verbose control how much information is displayed. e.g., -v =
verbose, -vv = more verbose, -vvv = debug
-q, --quiet turn off all messages for quiet execution.
-d DIFFTYPE, --difftype=DIFFTYPE
指定不同的显示格式。: [unified|context|differ|sql]
(default: unified).
--changes-for=CHANGES_FOR
执行要显示的转换与其他服务器匹配。如, 要看到server1的对象定义
与server2相匹配,使用 --changes-for=server1。合法的值有
'server1' or 'server2'。默认'server1'。
--show-reverse produce a transformation report containing the SQL
statements to transform the object definitions
specified in reverse. For example if --changes-for is
set to server1, also generate the transformation for
server2. Note: the reverse changes are annotated and
marked as comments.
-G, --basic-regexp, --regexp
use 'REGEXP' operator to match pattern. Default is to
use 'LIKE'.
--ssl-ca=SSL_CA The path to a file that contains a list of trusted SSL
CAs.
--ssl-cert=SSL_CERT The name of the SSL certificate file to use for
establishing a secure connection.
--ssl-key=SSL_KEY The name of the SSL key file to use for establishing a
secure connection.

mysqldbcompare从两个数据库比较对象和数据的不同。显示差异可以使用不同风格,如GRID, CSV, TAB, 或 VERTICAL。

在比较过程中数据不可以改变,否则出现错误。

数据库中的对象包括:表、视图、触发器、存储过程、函数和事件。每一个对象类型计数可以使用-vv选项显示。

通过一系列步骤检查进行测试,默认情况下,一旦测试失败就终止检测。可以指定 --run-all-tests 选项来进行所有的测试。

### 比较检测的内容包括:

\1. 数据库定义的检查

一个数据库存在的前提是检测确保数据库都存在。如果不存在,不需要进行下一步检测, --run-all-tests选项也被忽略的。

\2. 检测数据库的对象

检测两者数据库中的对象是否丢失。剩余的检测是针对这些数据库对象的。可以使用--skip-object-compare跳过该测试。当你已知缺少某些对象这个选项是有用的。

\3. 比较对象的定义

对对象的定义(CREATE语句)进行比较和显示不同。可以使用 --skip-diff 选项跳过这步。当你已知对象不同想忽略可用这个选项。

\4. 检测表的行数

这个检查确保这两个表有相同的行数,但这并不确保表的数据是一致性的。只是粗略性的检查表数据行数的缺失与否,识别丢失的行。可以使用 --skip-row-count选项跳过这步。

\5. 检查表数据的一致性

这个检查包括检查第四步的行数,同时也检查数据是否一致。行不同显示不同的风格报告,缺失的行也是如此,默认是GRID。

这个检查分为两步:首先对全表进行checksum校验,然后如果这步失败了算法将找出不同。

可以使用--skip-checksum-table 选项跳过表校验,使用--skip-data-check选项跳过数据检查。

如果你不想进行所有的检查,可以使用 --skip-xxx 选项来只进行某个测试。这在只想同步避免执行所有的测试非常有用。

### 测试的状态信息:

- **pass**测试成功
- **FAIL**测试失败
- **SKIP**缺少或跳过测试
- **WARN**测试时出现不寻常的但不是错误
- **-**测试不适用于该对象

### 指定如何显示 diff-style输出:

可以通过--difftype选项来定义输出风格。

- **unified** (default)统一的格式输出
- **context**上下文格式输出
- **differ**differ-style格式输出
- **sql**SQL转换语句输出

### 指定如何显示行丢失或改变的输出:

可以通过使用--format选项来定义。

- **grid** (default)网格化输出,类似于mysql命令行客户端输出
- **csv**逗号分隔格式输出
- **tab**制表符格式输出
- **vertical**类似于mysql命令行客户端\G执行的输出

--changes-for选项控制着差异报告(默认)还是转换报告(需要--difftype=sql选项),以谁为参照物。如:

```
mysqldbcompare ``--server1=root@host1 --server2=root@host2 --difftype=sql db1:dbx
```

最左边的db1对应于--server1选项,最右边的dbx对应于--server2选项。

- --changes-for=server1: 针对server1,以server2为参照物(默认)
- --changes-for=server2: 针对server2,以server1为参照物

需要指定连接参数同时还需要一定的访问权限。

如果服务器上启用二进制日志,不想比较日志这步,可以使用 --disable-binary-logging 选项来禁用。

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

2 − 2 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部