如何比较/验证SQL架构

15

我正在寻找一种方法,在更新应用程序版本后验证生产数据库的SQL架构。如果应用程序与数据库架构版本不匹配,应该有一种方法来警告用户并列出所需的更改。

是否有一个工具或框架(可编程使用),内置特性可以完成这项任务?还是有一些简单的算法可以运行比较操作?

更新:Red Gate公司列出了“从$395起”。是否有免费的工具?或者比仅保持版本号更可靠的解决方案?


我已经进行了修改,并添加了“redgate”标签,因为有很多回复建议这样做。 - ConcernedOfTunbridgeWells
11个回答

23

尝试这个SQL语句。
- 在每个数据库中运行它。
- 将输出保存到文本文件中。
- 对比这些文本文件。

/* get list of objects in the database */
SELECT name, 
       type 
FROM  sysobjects
ORDER BY type, name

/* get list of columns in each table / parameters for each stored procedure */
SELECT so.name, 
       so.type, 
       sc.name, 
       sc.number, 
       sc.colid, 
       sc.status, 
       sc.type, 
       sc.length, 
       sc.usertype , 
       sc.scale 
FROM   sysobjects  so , 
       syscolumns  sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.name

/* get definition of each stored procedure */
SELECT so.name, 
       so.type, 
       sc.number, 
       sc.text 
FROM   sysobjects  so , 
       syscomments sc 
WHERE  so.id = sc.id 
ORDER BY so.type, so.name, sc.number 

显然,一个全面的工具更好,但这是一种不错的快速且简单的方法! - Rory
1
太棒了!源代码通常比编译后的工具更好。这节省了我几个小时的时间! - Derek Tomes

9

我希望能帮到你-这是我建议阅读的文章:

自动比较 SQL Server 数据库架构

它描述了如何使用 T-SQL、SSMS 或第三方工具自动化 SQL Server 架构比较和同步过程。


8
您可以通过查看两个数据库的数据字典(sys.objects,sys.columns等)并进行比较来以编程方式完成此操作。但是,也有一些工具如Redgate SQL Compare Pro可以为您完成此操作。我已将其指定为数据仓库系统QA工具的一部分,包括我目前正在处理的一个项目。在我的当前任务中,这不是问题,因为DBA已经在使用它。
使用这些工具的基本方法是维护一个构建数据库的参考脚本,并将其保留在版本控制中。将脚本运行到临时数据库中,并将其与目标数据库进行比较以查看差异。如果您愿意,它还会生成补丁脚本。
据我所知,除非您想自己编写代码,否则没有免费的工具可以做到这一点。 Redgate的价格便宜得足以免费。即使作为QA工具来证明生产数据库不处于预期配置中,它在一次事件后就能为您节省购买价格。

我们喜欢 SQL Compare。它让事情变得非常容易。 - Bob King

4
您现在可以免费使用我的SQL Admin Studio来运行模式比较、数据比较和同步更改。不再需要许可证密钥,从这里下载:http://www.simego.com/Products/SQL-Admin-Studio。同时也支持对SQL Azure的操作。
[更新:是的,我是上述程序的作者,由于现在它是免费的,所以我想与社区分享它。]

1

如果您正在寻找一种可以比较两个数据库并显示差异的工具,Red Gate SQL Compare 是一个不错的选择。


1

您没有提到您使用的RDMBS:如果您的RDBMS中有INFORMATION SCHEMA视图,并且您可以从同一主机引用两个模式,则可以查询INFORMATION SCHEMA视图以识别以下差异:

  • 列类型
  • 约束(例如主键、唯一约束、外键等)

我曾经为SQL Server编写了一组查询,专门用于此目的 - 它可以很好地识别差异。许多查询都使用LEFT JOIN和IS NULL来检查预期项的缺失,其他查询则比较列类型或约束名称。

这可能有点繁琐,但是它是可行的。


1

我发现了一个小巧且免费的工具,它可以满足我的大部分需求。 http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

它非常基础,但可以显示两个数据库之间的模式差异。 它没有任何花哨的功能,如自动生成脚本来消除差异,也不会比较任何数据。

它只是一个小巧、免费的实用程序,可以显示模式差异 :)


0

试试dbForge Data Compare for SQL Server。它可以比较和同步任何数据库,即使是非常大的数据库。快速、简单,总是提供正确的结果。 在您的数据库上尝试并评论该产品。

我们可以向您推荐一款可靠的SQL比较工具,它可以在您的SQL Server数据库中以3倍的速度比较和同步表数据。这就是dbForge Data Compare for SQL Server。

主要优点:

  • 更快速地比较和同步大型数据库
  • 支持本地SQL Server备份
  • 自定义映射表、列和模式
  • 多种选项来调整您的比较和同步
  • 生成比较和同步报告

此外还有免费的30天试用期和30天无风险购买保证。



0
这是哪个关系型数据库?潜在的更改有多复杂?
也许只需要比较每个表的行数和索引数 - 如果您还需要担心触发器和存储过程版本,那么您需要更专业的工具。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接