我正在寻找一种在更新应用程序版本后验证生产数据库上的SQL架构的方法。如果应用程序与数据库架构版本不匹配,应该有一种方法来警告用户并列出所需的更改。
是否有内置功能的工具或框架(以编程方式使用)? 或者是否有一些简单的算法来运行这种比较?
更新:红门列出“$ 395起”。有空吗?或者比保留版本号更加万无一失?
答案 0 :(得分:22)
试试这个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
答案 1 :(得分:9)
我希望我能提供帮助 - 这是我建议阅读的文章:
Compare SQL Server database schemas automatically
它描述了如何使用T-SQL,SSMS或第三方工具自动执行SQL Server架构比较和同步过程。
答案 2 :(得分:8)
您可以通过查看两个数据库的数据字典(sys.objects,sys.columns等)并进行比较来以编程方式执行此操作。但是,还有像Redgate SQL Compare Pro这样的工具可以帮到您。我现在已将此作为数据仓库系统QA工具的一部分指定,包括我目前正在进行的工作。在我目前的演出中,这根本不是问题,因为DBA已经在使用它了。
使用这些工具的基本方法是维护一个构建数据库的参考脚本,并将其保留在版本控制中。将脚本运行到临时数据库并将其与目标进行比较以查看差异。如果您有这种倾向,它还会生成补丁脚本。
据我所知,除非你想写自己的,否则没有任何自由。 Redgate足够便宜,可能也是免费的。即使作为QA工具来证明生产数据库不在配置中,它也意味着它将在一次事故后为您节省购买价格。
答案 3 :(得分:4)
您现在可以免费使用我的 SQL Admin Studio 来运行架构比较,数据比较并同步更改。不再需要从此处下载许可证密钥http://www.simego.com/Products/SQL-Admin-Studio
也适用于SQL Azure。
[更新:是的我是上述计划的作者,因为它现在免费我只是想与社区分享]
答案 4 :(得分:1)
如果您正在寻找一种可以比较两个数据库的工具,并向您展示Red Gate的差异SQL Compare
答案 5 :(得分:1)
您没有提到您正在使用的RDMBS:如果您的RDBMS中提供了INFORMATION SCHEMA视图,并且您可以从同一主机引用这两个模式,则可以查询INFORMATION SCHEMA视图以识别以下各项中的差异: -tables -列 - 列类型 - 约束(例如主键,唯一约束,外键等)
我已经在SQL Server上为过去的工作编写了一组用于此目的的查询 - 它可以很好地识别差异。许多查询使用带有IS NULL的LEFT JOIN来检查是否缺少预期的项目,其他查询正在比较列类型或约束名称等内容。
这有点乏味,但可能。
答案 6 :(得分:1)
我发现这个小而免费的工具可以满足我的大部分需求。 http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html
这是非常基本的,但它向您展示了两个数据库的架构差异。 它没有任何花哨的东西,比如自动生成的脚本,可以让差异消失,而且不会比较任何数据。
它只是一个小型免费实用程序,可以显示架构差异:)
答案 7 :(得分:0)
制作一张桌子并将版本号存储在那里。只需确保根据需要进行更新。
CREATE TABLE version (
version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');
然后,您可以在应用程序设置期间或方便的地方检查存储在数据库中的版本号是否与应用程序代码匹配。
答案 8 :(得分:0)
答案 9 :(得分:0)
这是哪个RDBMS,潜在的变化有多复杂?
也许这只是比较每个表的行数和索引计数的问题 - 如果您还需要担心触发器和存储过程版本,那么您需要更具工业性的东西
答案 10 :(得分:0)
试试dbForge Data Compare for SQL Server。它可以比较和同步任何数据库,甚至是非常大的数据库。快速,简单,始终提供正确的结果。 在您的数据库上试用它并对产品进行评论。
我们可以为您推荐一个可靠的SQL比较工具,它可以在SQL Server数据库中提供3倍更快的表数据比较和同步。它是SQL Server的dbForge数据比较。
主要优势:
免费30天试用和无风险购买,30天退款保证。