作者:zuoyi88713 | 来源:互联网 | 2014-04-30 14:32
TableDiff是一个把持台,它可以在SQLServer的表之间进行数据比拟。另外,由于它是用SQLServer打包的,所以假如你想在不同的数据库环境下检查查找表的话,你就不需要另外购置其他工具
TableDiff是一个把持台,它可以在SQL Server的表之间进行数据比拟。另外,由于它是用SQL Server打包的,所以假如你想在不同的数据库环境下检查查找表的话,你就不需要另外购置其他工具。
在不同的数据库环境中,DBA经常不得不在查找表中寻找它们的不同(例如:开发、质量保证和生产等不同的环境下)。这些查找表中的数据必需适应于所有的环境,这样才干确保测试的准确。
在市场上有一些非常好的工具可以进行这些比拟,也能履行很多其它功效。但是现在你不需要往购置它们了,由于SQL Server已经自带了这种工具,那就是TableDiff,它能为你完成这些功效。
TableDiff使你可以很轻松地在表中进行数据比拟,同时它也可以会为你创立脚本来同步程序环境。另外,作为一个能使查找表在测试环境和产品环境之间同步的优良工具,TableDiff对于数据在产品服务器和复制服务器之间的同步也同样是非常有用的,这样,当产生复制标题的时候,它就能体现出上风了。
示例
TabelDiff是一个把持台利用软件,所以,你需要通过命令提示符、批处理文件或者通过应用xp_cmdshell的SQL Server来调用它。在这个例子中,我将在同一个服务器上的两个数据库之间搭建一个小的环境,然后比拟两个表中的数据。在这里我是通过一个批处理文件来调用TableDiff。
Listing A中的脚本创立了两个数据库,并在每个数据库中创立了一个SourceTable表。然后将数据分辨插进到每个环境中的SourceTable表里面,这时候,插进到两个表中的数据是明显不同的。(就我的SQL Server 2005环境而言,TableDiff在这个目录下:C:Program FilesMicrosoft SQL ServerCOM。文件的地位对你指定安装是非常重要的,由于你调用批处理文件进行创立的时候需要知道它的确实地位。
批处理文件
在这个例子中,我将调用TableDiff utility,同时带上了一些必要的参数,对DatabaseA和DatabaseB两个数据库中各自的SourceTable表的数据进行比拟。Listing B中的脚本带着参数通过源服务器(SourceServer)、源数据库( SourceDatabase)、源表 SourceTable、目标服务器( DestinationServer)、目标数据库( DestinationDatabase)和目标表(DestinationTable)达到TableDiff utility。对于每一个站点来说,服务器名和表名都是雷同的,由于我是在同一个数据库服务器的两个不同的数据库中比拟应用的同一个名字的表。我通过的最后目标地是当地,同步脚本放置在那里。我将这个脚本存放在C:/根目录下,名字为diffs.txt。
一旦我履行了这个批处理文件,在Listing C中的文本信息就会被放到C:diffs.txt这个文件里面。这个TSQL脚本能同步运行两个数据库之间的表。
应用简略
TableDiff utility应用非常简略,配置也很方便,由于它是用SQL Server打包的,所以不需要购置任何其他附加的工具来同步不同环境下的表。由于它应用非常方便,也很轻易获得它,所以假如有必要,我们就能应用它来开发一些解决计划主动创立脚本,以便同步不同的环境。
Tim Chapman是一位SQL Server数据库治理员,他现在在Louisville, KY的一家银行工作,他具有7年以上的IT经验,同时也获得了微软SQL Server 2000和SQL Server 2005认证。
列表A
以下为引用的内容:
use master
Go
IF DB_ID('DatabaseA') IS NOT NULL DROP DATABASE DatabaseA
GO
IF DB_ID('DatabaseB') IS NOT NULL DROP DATABASE DatabaseB
GO
CREATE DATABASE DatabaseA
GO
CREATE DATABASE DatabaseB
GO
USE DatabaseA
GO
CREATE TABLE SourceTable
( IDCol INT IDENTITY(1,1), Field1 SMALLINT, Field2 SMALLINT, Field3 SMALLINT, Field4 SMALLINT
)
GO
USE DatabaseB
GO
CREATE TABLE SourceTable
( IDCol INT IDENTITY(1,1), Field1 SMALLINT, Field2 SMALLINT, Field3 SMALLINT, Field4 SMALLINT
)
GO
USE DatabaseA
GO
INSERT INTO SourceTable
(Field1, Field2, Field3, Field4)
SELECT 1, 1, 1, 2
UNION
SELECT 1, 1, 2, 2
UNION
SELECT 1, 3, 2, 2
UNION
SELECT 1, 3, 2, 2
UNION
SELECT 4, 3, 2, 2
GO
USE DatabaseB
GO
INSERT INTO SourceTable
(Field1, Field2, Field3, Field4)
SELECT 1, 1, 1, 2
UNION
SELECT 1, 3, 2, 1
UNION
SELECT 1, 3, 2, 2
UNION
SELECT 1, 3, 2, 2
UNION
SELECT 5, 3, 2, 2
UNION
SELECT 5, 4, 3, 2
GO
列表B
以下为引用的内容:
cd Program FilesMicrosoft SQL ServerCOMTableDiff -sourceserver "DatabaseServer" -sourcedatabase "DatabaseA" -sourcetable "SourceTable" -destinationserver "DatabaseServer" -destinationdatabase "DatabaseB" -destinationtable "SourceTable" -f "C:diffs.txt"
PAUSE