在上一期的文章中,介绍了SQL Compare,这是一个用于比较和同步MicrosoftSQL Server数据库结构的工具。如果需要自动化SQL Server数据库的比较和同步,有一个工具,SQL Comparison and Synchronization Toolkit(SQL Toolkit),它允许做到这一点。SQL Toolkit不仅可以自动化SQL Server数据库结构的比较和同步,还可以通过使用SQL Compare和SQL Data Compare背后的引擎来同步数据库中的数据。
SQL Toolkit允许:
以下是一个非常基本的例子,展示了如何自动化SQL Compare的功能。要完全理解可以用SQL Toolkit做什么,应该自己尝试。
首先,需要创建一个新项目。将创建一个“控制台应用程序”。然而,可以在Windows窗体应用程序、ASP.NET应用程序或任何其他.NET应用程序中使用SQL Toolkit。控制台应用程序将通过自动化SQL Compare引擎来同步两个数据库WidgetProduction和WidgetStaging的结构。将使用C#,但可以选择使用Visual Basic.NET或任何其他.NET语言。
接下来,需要添加对SQL Toolkit DLLs的引用,它们将显示在列表中。
为了能够将应用程序重新分发给最终用户,假设有一个有效的SQL Toolkit许可证,需要创建一个许可文件。为此,创建一个名为“licenses.licx”的空文件,然后向其中添加一个类条目:
RedGate.SQLCompare.Engine.Database
需要在代码的开头添加几行,以指示正在使用的两个程序集:
using System;
using RedGate.SQL.Shared;
using RedGate.SQLCompare.Engine;
想要比较和同步两个数据库。为此,需要创建两个数据库对象,它们代表参与比较的两个数据库:
Database db1 = new Database();
Database db2 = new Database();
db1.Register(new ConnectionProperties("", "WidgetStaging"), Options.Default);
db2.Register(new ConnectionProperties("", "WidgetProduction"), Options.Default);
可以选择使用之前保存的快照中的数据库,这对于离线比较很有用,但在这种情况下,从实时服务器注册了数据库。
在编写代码时,请注意使用智能感知。
SQL Toolkit的主要目的是比较和同步数据库,但可以使用对象模型检索有关数据库表、存储过程和视图的信息(见图5)。
SQL Toolkit为提供了一个深入的文档对象模型,就像一个非常快速的SQL DMO。
注册数据库后,下一步是进行比较。通过使用“CompareWith”方法来实现这一点:
Differences differences = db1.CompareWith(db2, Options.Default);
这返回一个差异集合,其中包含两个数据库之间差异的摘要。可以遍历这个集合并在屏幕上打印出摘要:
foreach (Difference d in differences)
{
Console.WriteLine("{0} {1} {2}", difference.Type.ToString(), difference.DatabaseObjectType.ToString(), difference.Name);
difference.Selected = true;
}
还设置选定属性为“true”,以指示希望在下一步生成的脚本中使用每个差异。
一旦有了差异集合,需要实例化一个工作对象来生成同步脚本。调用“w.BuildFromDifferences”并传递“true”作为最后一个参数,因为希望在第二个数据库上运行生成的脚本:
Work w = new Work();
w.BuildFromDifferences(differences, Options.Default, true);
这个工作对象现在代表了需要完成的工作,以同步数据库。
工作对象暴露出一些有趣的属性。例如,“Messages”集合包含描述需要完成的工作的消息列表,而“Execution Block”属性代表需要运行的SQL,以同步两个数据库。
接下来要做的事情是运行脚本。SQL Compare提供了一个帮助类来做到这一点:
Utils u = new Utils();
u.ExecuteBlock(b, "", "WidgetProduction");
编码的最后一部分是处理使用过的对象:
b.Dispose();
db1.Dispose();
db2.Dispose();
这样做是为了SQL Compare可以释放它可能使用过的任何资源,如临时文件。
接下来,需要通过点击“构建”菜单中的“构建解决方案”来构建应用程序。
当构建应用程序时,应该检查以确保没有错误。一旦完成,就可以运行应用程序。通过按下以下按钮来做到这一点:
应用程序将运行。
应用程序运行后,将能够看到差异的摘要、需要运行的步骤以及需要运行的SQL。
应用程序然后将同步两个数据库。
这只是一个SQL Toolkit能做的非常基本的例子。了解它是否适合需求的最好方法是查看帮助文件(包括示例项目)、观看在线演示,或通过下载试用版自己尝试。
SQL Toolkit为提供了用于比较和同步SQL Server数据库的工具的API,以及将它们纳入代码并在应用程序中分发的权利。随SQL Toolkit一起提供的是一个帮助文件,其中包含:
自动化MicrosoftSQL Server数据库比较和同步最好使用SQL Toolkit。它将为节省大量时间,并从过程中消除了人为错误的可能性。
这个工具的一个主要新版本于12月1日发布。阅读更多信息,请访问。