如何比较/验证SQL模式

时间:2020-03-06 15:03:31  来源:igfitidea点击:

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

是否存在具有内置功能的工具或者框架(以编程方式使用)?
还是有一些简单的算法可以进行这种比较?

Update: Red gate lists "from 5". Anything free? Or more foolproof than just keeping the version number?

解决方案

制作表格并在其中存储版本号。只要确保根据需要进行更新即可。

CREATE TABLE version (
    version VARCHAR(255) NOT NULL
)
INSERT INTO version VALUES ('v1.0');

然后,我们可以在设置应用程序期间或者方便的地方,检查存储在数据库中的版本号是否与应用程序代码匹配。

Red Gate的SQL比较。

如果我们正在寻找一种可以比较两个数据库并向我们展示差异的工具,则Red Gate可以使SQL Compare

我们可以通过查找两个数据库的数据字典(sys.objects,sys.columns等)并进行比较来以编程方式进行操作。但是,还有像Redgate SQL Compare Pro这样的工具可以为我们执行此操作。现在,我已经几次将它指定为数据仓库系统上质量检查工具的一部分,包括我目前正在使用的工具。在我当前的演出中,这根本没有问题,因为这里的DBA已经在使用它。

使用这些工具的基本方法是维护构建数据库的参考脚本,并将其保留在版本控制中。将脚本运行到临时数据库中,然后将其与目标数据库进行比较,以查看差异。如果我们愿意,它还会生成补丁脚本。

据我所知,除非我们想自己编写,否则没有免费的方法可以做到这一点。 Redgate足够便宜,因此它可能是免费的。即使作为质量检查工具来证明生产数据库未处于配置中,它也可以在发生一次事件后为我们节省购买价格。

这是哪个RDBMS,潜在的变化有多复杂?

也许这只是比较每个表的行数和索引数的问题-如果我们有触发器和存储过程版本需要担心,那么我们还需要一些更工业的东西

试试这个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

我们没有提到要使用哪个RDMBS:如果RDBMS中有INFORMATION SCHEMA视图,并且可以从同一主机引用两个模式,则可以查询INFORMATION SCHEMA视图以识别以下方面的差异:
-表
-列
列类型
-约束(例如主键,唯一约束,外键等)

我已经在SQL Server上为此目的编写了一组查询,以完成过去的工作,可以很好地识别差异。许多查询使用带有IS NULL的LEFT JOINs来检查是否缺少期望的项目,其他查询则在比较列类型或者约束名称之类的东西。

这有点乏味,但是有可能。

尝试使用dbForge Data Compare for SQL Server。它可以比较和同步任何数据库,甚至很大的数据库。快速,轻松,始终可以提供正确的结果。
在数据库上尝试并评论该产品。

我们可以向我们推荐一个可靠的SQL比较工具,该工具可以比SQL Server数据库中的表数据进行3倍的比较和同步。它是用于SQL Server的dbForge数据比较。

主要优点:

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

加上30天免费试用和30天退款保证的无风险购买。