如何对SQL Server数据库进行版本控制?

12 浏览
0 Comments

如何对SQL Server数据库进行版本控制?

我想要将我的数据库纳入版本控制。

我总是希望至少有一些数据存在于其中(正如 alumb所提到的:用户类型和管理员)。 我还经常需要生成大量的测试数据进行性能测试。

我如何将版本控制应用于我的数据库?

admin 更改状态以发布 2023年5月20日
0
0 Comments

有几个商业产品可以提供此功能:

对于RedGate用户

如果你使用Red Gate的SQL Compare产品,你可以进行对象级别的比较,并生成更改脚本。它还可以让你将数据库对象导出到按对象类型组织的文件夹层次结构中,每个目录中每个对象都有一个[objectname].sql创建脚本。对象类型的层次结构如下:

\Functions
\Security
\Security\Roles
\Security\Schemas
\Security\Users
\Stored Procedures
\Tables

如果您在进行更改后将脚本转储到相同的根目录中,则可以使用此方法更新您的SVN存储库,并保留每个对象的历史记录。

0
0 Comments

马丁·福勒(Martin Fowler)撰写了我最喜欢的关于该主题的文章,http://martinfowler.com/articles/evodb.html。我选择不像Alumb和其他人建议的那样将模式转储存放在版本控制下,因为我想要一种简便的方法来升级我的生产数据库。

对于一个拥有单个生产数据库实例的Web应用程序,我使用了两种技术:

数据库升级脚本

包含将模式从版本N移动到N+1所需的DDL的序列数据库升级脚本。 (这些脚本放在您的版本控制系统中。)一个_version_history_表,例如

create table VersionHistory (
    Version int primary key,
    UpgradeStart datetime not null,
    UpgradeEnd datetime
    );

每次运行升级脚本时都会得到一个新条目,对应于新版本。

这可以确保轻松查看数据库模式的版本,并且仅运行一次数据库升级脚本。 再次强调,这些不是数据库转储。 相反,每个脚本代表从一版本到下一版本所需的更改。 它们是您应用于生产数据库以“升级”其的脚本。

开发人员沙盒同步

  1. 备份,清理和缩小生产数据库的脚本。 每次升级生产DB后运行此脚本。
  2. 将备份还原(如果需要,则调整)到开发人员的工作站上的脚本。 每个开发人员在升级生产DB后都运行此脚本。

注意:我的自动化测试针对的是一个正确但为空的模式数据库,因此这个建议并不完全适合您的需求。

0