sql-server-2005 - SQL/Schema 比较和升级

标签 sql-server-2005 delphi delphi-2007 adox

我的情况很简单。一个大型组织正在使用某些(桌面)应用程序的多个不同版本,每个版本都有自己的数据库结构。大约有 200 个办公室,每个办公室都有自己的版本,可以是 7 个不同版本之一。该公司希望将所有应用程序升级到最新版本,即版本 8。

问题是他们没有为每个版本提供单独的数据库。他们也没有为每个办事处提供单独的数据库。他们拥有一个由专用服务器处理的数据库,从而使管理和备份等工作变得更加容易。每个办公室都有自己的数据库模式,并且在模式内有其特定应用程序版本的整个数据库结构。因此,我正在处理 200 个需要升级的不同模式,每个模式都有 7 个可能的版本。幸运的是,每个模式都知道正确的版本,因此检查版本并不困难。

但我的问题是,我需要创建可以从版本 1 升级到版本 2、版本 3 等等的升级脚本……基本上,所有模式都需要升级一个版本,直到它们全部升级到版本 8。编写执行此操作的代码没有问题。挑战是如何创建从一个版本到另一个版本的升级脚本?最好使用一些自动化工具。我已经研究过 RedGate 的 SQL Compare 和 Altova 的 DatabaseSpy,但它们并不实用。阿尔托瓦太慢了。 RedGate 之后需要太多处理,因为生成的 SQL 脚本仍然有一些错误,并且它引用了模式名称。此外,代码需要成为存储过程的一部分,而 RedGate 生成的代码并不真正适合单个过程。 (另外,它进行了太多的事务处理,而我需要在单个事务中处理所有内容。

<小时/>

我一直在考虑使用另一个 SQL 比较工具,但在我看来,我的情况与标准工具可以提供的情况有很大不同。所以我要编写自己的比较工具。为此,我将使用 ADOX 和 Delphi 来读取数据库中每个架构版本的目录,然后使用它来编写需要将这些架构升级到下一个版本的 SQL 语句。 (比较 1 与 2、2 与 3、3 与 4 等)我对生成 SQL 脚本生成器并不陌生,所以我预计不会有太多问题。我只会升级表结构,而不升级任何其他数据库对象。

那么,在进行这种比较时,有没有人有一些好的提示和技巧可以应用?需要注意什么?提高速度的实用技巧?

最佳答案

我仍然认为 RedGate 是最佳选择。确实,它并不总是捕获所有依赖项,您可能需要对其进行一些修改,但它可以让您完成 95% 的工作,并且在我看来,这将节省大量时间。

生成脚本后,您可以轻松地破解错误处理和事务完成的方式,输出有很好的文档记录,因此查看发生了什么很简单。

一种可能性是,不要修改每个数据库,而是这样做:

  • 创建新的版本 8 数据库 (DB_NEW)
  • 从旧数据库 (DB) 迁移所有数据(为此您最多需要 7 个不同的数据迁移脚本)
  • 验证新数据库
  • 如果成功,将DB重命名为DB_OLD并将DB_NEW重命名为DB

关于sql-server-2005 - SQL/Schema 比较和升级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2803180/

相关文章:

delphi - 使用 Delphi IDE 搜索 DFM 文件

delphi - 将 TServerSocket 应用程序从 D5 移动到 D2007 有什么问题吗?

sql-server - 仅在我的机器上运行缓慢的查询

sql-server - 为什么 [FireDAC][Phys][ODBC]-345 说 Max len 是 256 个字符?

delphi - delphi的数据访问框架

delphi - 如何在Delphi 2007中的标签中显示大写希腊字母delta?

delphi - 在 Delphi 2007 中将具有透明度的位图保存为 PNG

SQL 在 If 和 Else block 中插入临时表

sql - 使用大型 Excel 文件插入/更新 SQL

sql - 无法调用 char 上的方法