【问题标题】:how to compare/validate sql schema如何比较/验证 sql 模式
【发布时间】:2010-09-14 23:45:53
【问题描述】:

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

是否有具有内置功能的工具或框架(以编程方式使用)来做到这一点? 或者是否有一些简单的算法来运行这个比较?

更新:红门列出“395 美元起”。有什么免费的吗?还是比只保留版本号更万无一失?

【问题讨论】:

  • 我已经修改了这个并添加了一个“redgate”标签,因为有大量回复建议它。

标签: sql redgate


【解决方案1】:

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

【讨论】:

  • 显然一个综合工具更好,但这是一个很好的快速和肮脏的方法!
  • 漂亮!源代码通常比已编译的工具更好。这节省了我几个小时!
【解决方案2】:

我希望我能提供帮助 - 这是我建议阅读的文章:

Compare SQL Server database schemas automatically

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

【讨论】:

    【解决方案3】:

    您可以通过查看两个数据库的数据字典(sys.objects、sys.columns 等)并比较它们来以编程方式进行操作。但是,也有像 Redgate SQL Compare Pro 这样的工具可以为您执行此操作。我已经在一些场合将其指定为数据仓库系统质量保证工具的一部分,包括我目前正在研究的那个。在我目前的演出中,这完全没有问题,因为这里的 DBA 已经在使用它了。

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

    据我所知,除非您想自己编写,否则没有任何免费的东西可以做到这一点。 Redgate 足够便宜,它还不如免费。即使作为一个 QA 工具来证明生产数据库不在配置中,它也会在一次事件后为您节省购买价格。

    【讨论】:

    • 我们喜欢 SQL 比较。它让事情变得非常简单。
    【解决方案4】:

    您现在可以免费使用我的 SQL Admin Studio 来运行 Schema CompareData Compare 并同步更改。不再需要从这里下载许可证密钥http://www.simego.com/Products/SQL-Admin-Studio

    也适用于 SQL Azure。

    [更新:是的,我是上述程序的作者,因为它现在是免费的,我只是想与社区分享]

    【讨论】:

      【解决方案5】:

      如果您正在寻找可以比较两个数据库并向您展示 Red Gate 的不同之处的工具SQL Compare

      【讨论】:

        【解决方案6】:

        您没有提及您使用的是哪个 RDMBS:如果您的 RDBMS 中提供了 INFORMATION SCHEMA 视图,并且您可以从同一主机引用这两个架构,则可以查询 INFORMATION SCHEMA 视图以识别以下方面的差异: - 表 -列 - 列类型 - 约束(例如主键、唯一约束、外键等)

        我在 SQL Server 上为过去的工作编写了一组正是出于此目的的查询 - 它可以很好地识别差异。许多查询使用带有 IS NULL 的 LEFT JOIN 来检查是否缺少预期的项目,其他查询则比较列类型或约束名称等内容。

        这有点乏味,但有可能。

        【讨论】:

          【解决方案7】:

          我发现这个小而免费的工具可以满足我的大部分需求。 http://www.wintestgear.com/products/MSSQLSchemaDiff/MSSQLSchemaDiff.html

          这是非常基本的,但它向您展示了两个数据库的架构差异。 它没有任何花哨的东西,比如自动生成的脚本来消除差异,它不比较任何数据。

          它只是一个向您展示架构差异的免费小实用程序 :)

          【讨论】:

            【解决方案8】:

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

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

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

            【讨论】:

              【解决方案9】:

              【讨论】:

                【解决方案10】:

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

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

                【讨论】:

                  【解决方案11】:

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

                  我们可以向您推荐一个可靠的 SQL 比较工具,它可以将您的 SQL Server 数据库中的表数据的比较和同步速度提高 3 倍。它是用于 SQL Server 的 dbForge 数据比较。

                  主要优点:

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

                  另外还有 30 天免费试用和无风险购买以及 30 天退款保证。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2013-12-08
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-08-13
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多