我们公司没有聘请专门的 DBA,但有选择的开发人员执行 DBA 职能。我们经常在开发周期中更新我们的数据库,并有一个包含各种更新的发布脚本。我们将数据库架构和对象保存在 Visual Studio 中的数据库项目中。
但是,我们经常会遇到两个导致耗时人工干预的绊脚石问题:
开发人员不能总是从数据库项目同步到他们的本地数据库,因为如果我们在包含数据的现有表中添加了一个 NOT NULL 字段,那么 VS 到数据库的部署过程就不够智能,无法自动插入“测试”数据将字段放入表中(除非这是某个地方的设置?)。如果可能的话,我们当然会跟进这一点,用一个脚本来用真实数据填充该字段,但我们不能,因为部署失败。
有时,开发人员会从任何过去的随机日期恢复备份。没有办法确切知道哪些数据库更新应用到了这个数据库,所以他们不知道要开始应用哪些脚本。在这种情况下,我们所做的是按时间顺序检查每个脚本,以查看该脚本的更改是否已应用于数据库。如果是这样,请继续运行下一个脚本。重复。
我们讨论过的一种方法可能是在数据库中创建一个“数据库更新级别”表,其中包含 1 个字段、1 行。它将保持数据库已更新的级别。例如,当第一个脚本运行时,将级别更新为 2。在每个 db 脚本中,我们会将语句包装在检查中,例如
IF Database_Update_Level < 2 THEN 在这里做一些事情
UPDATE Database_Update_Level SET Database_Update_Level = 2 END IF
然后可以在任何数据库上运行 db 脚本,因为单个语句不会在某个级别以下执行。
这感觉就像我们遗漏了一些东西,因为这一定是每个允许开发人员在本地开发的开发商店都会遇到的常见问题。
任何见解将不胜感激。
谢谢。