0

我们有一个“主数据库结构”,需要一个例程来保持客户端站点上的数据库结构是最新的。

针对相关问题提出了许多建议,但我正在寻找更具体的解决方案,如下所示:

  1. 我想生成一个描述整个数据库结构的文本文件(XML 或其他可读格式)(这可以进入版本控制)。该例程将在内部运行,以提供与我们产品的下一个版本一起分发的数据库模式文件。
  2. 然后我需要一种方法来更新客户端站点上的数据库结构,使其与主数据库结构相对应。(换句话说,我不想跟踪不同版本的数据库结构的大量更改脚本,而是一个更通用的例程,可以将客户端数据库结构更新为当前的主数据库结构。)

所以我正在寻找的主要功能可以描述为“数据库结构到文本”和“文本到数据库结构”。

4

2 回答 2

1

很多 差异工具可以为您 提供模式和存储过程以及两个数据库之间的约束差异。你可以自己动手,但我认为如果你有一个复杂的模式,它会比这些工具中的一个更贵,许多人会免费试用,这样你就可以测试了。

问题是您必须让主数据库联机才能这样做,并且可以从客户端数据库安装(或将其安装在那里)访问,这可能可行,也可能不可行。

如果您不这样做,我能想到的唯一其他明智的选择是使用迁移的想法,保留 SQL 脚本 + 版本对的列表,以及每个数据库的当前版本。这可以通过不同的工具进行整合,该工具可以从客户端的数据库版本号和更改列表生成单个脚本。如果您没有更改列表,您可以从运行差异工具开始,并从那里跟踪它们。

您似乎更喜欢的比较文本路由(比较两种模式的文本 SQL 转储)在我看来很难正确且自动地完成,看起来不像是正确的路径。

于 2008-10-07T09:40:47.670 回答
1

几种流行的策略是这种情况的变体:

  • 向数据库中添加表:
    CREATE TABLE Release
    (release_number int not null,
    applied datetime not null
    )
  • 作为其发布脚本的一部分,每个发布都会在此表中插入一行。
  • 现在,您可以通过单个查询找出每个客户端正在运行的版本,并运行该版本和他们想要运行的版本之间的所有版本。
  • 此外,您可以通过执行以下操作来检查每个版本的架构是否正确(正确的表名、列等):
    SELECT so.name,
    sc.name
    FROM sysobjects so,
    syscolumns sc
    WHERE type = 'U'
    按 1、2 订购
  • 然后计算结果的哈希并将其与预先计算的哈希(通过在您的参考安装上运行查询生成)进行比较,以查看安装现在是否正确。
于 2008-10-07T12:45:16.237 回答