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