Microsoft SQL Server中的数据库级锁定:模式迁移

本文关键字:锁定 模式 迁移 数据库 SQL Server Microsoft | 更新日期: 2023-09-27 18:12:33

我有一个分布式应用程序,多个服务器上的多个进程连接到SQL Server数据库。

我需要在第一次启动时在代码中迁移数据库模式,因为升级部署可以在没有数据库访问的情况下与用户一起完成(我们使用计算机对象数据库访问)。

目前,这是通过提供一个sql文件和语句,然后一个具有db访问权限的用户(但可能没有app访问权限)将独立运行它。

因为应用程序不相互通信(防火墙,不同的dc等),我想我必须指定一个服务器为"主",所有其他作为"从",然后在主服务器上启动的第一个进程将获得互斥锁并进行模式迁移;其他所有人都可以等待,直到看到模式迁移完成。

然而,这对我来说有一定的代码气味。

我试着研究实体框架如何在代码优先迁移中处理这个问题,似乎他们没有(例如,如果两个进程同时启动,他们都会尝试迁移模式)。

还有其他方法吗?

Microsoft SQL Server中的数据库级锁定:模式迁移

可以将数据库模式更改为单用户(其他连接)将被拒绝。修改后再改回多用户模式

编辑:

有一个技巧,如何获得"互斥"。您可以更新/删除记录。在事务打开之前,排他锁仍然被持有。可能,如果您从事务中的每个表中删除0条记录(带有表锁提示),您可能会为数据库用户实现与"全局互斥"相同的行为。但我不知道模式改变后会有什么行为