【问题标题】:Database level lock in Microsoft SQL Server : schema migrationsMicrosoft SQL Server 中的数据库级锁:架构迁移
【发布时间】:2015-09-14 09:06:08
【问题描述】:

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

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

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

因为应用程序不相互通信(防火墙、不同的 DC 等)我在想我必须将一个服务器指定为“主服务器”,所有其他服务器都指定为“从属服务器”,然后在主服务器上执行第一个进程那将开始将获得互斥体并进行架构迁移;所有其他人都可以简单地等待,直到他们可以看到架构已迁移。

但是,这对我来说有一定的代码味道。

我尝试研究 Entity Framework 如何在代码优先迁移中处理此问题,但似乎没有(例如,如果两个进程同时启动,它们都会尝试迁移架构)。

还有其他方法吗?

【问题讨论】:

    标签: c# .net sql-server


    【解决方案1】:

    您可以将数据库模式更改为单用户(其他连接)将被拒绝。进行更改,然后改回多用户模式。

    编辑:

    有一个窍门,如何获得“互斥锁”。您可以更新/删除记录。直到事务打开,排他锁仍然被持有。可能,如果您从事务中的每个表中删除 0 条记录(带有表锁提示),您可能会为数据库用户实现与“全局互斥锁”相同的行为。但我不知道架构更改会有什么行为。

    【讨论】:

    • 这仅在没有事务日志传送的情况下有效;复制的 db 无法输入 SUM。
    猜你喜欢
    • 2022-12-20
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2016-05-22
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多