我有一个非常奇怪的用户需求。我已经尝试向他们解释,有更好的支持业务流程的方式,但他们不想听。我很想放弃,但首先想看看是否还有其他方法。
有没有办法锁定整个数据库,而不是行锁或表锁。我知道我可以将数据库置于单用户模式,但这意味着一次只能有一个人使用它。我希望许多人能够同时阅读,但一次只能有一个人能够写入。
他们正在尝试进行一些非常奇怪的数据迁移。
我有一个非常奇怪的用户需求。我已经尝试向他们解释,有更好的支持业务流程的方式,但他们不想听。我很想放弃,但首先想看看是否还有其他方法。
有没有办法锁定整个数据库,而不是行锁或表锁。我知道我可以将数据库置于单用户模式,但这意味着一次只能有一个人使用它。我希望许多人能够同时阅读,但一次只能有一个人能够写入。
他们正在尝试进行一些非常奇怪的数据迁移。
你想要实现什么目标?
但是,从只允许一个人使用数据库的角度来看,“数据库锁”的概念确实不存在。至少在 SQL Server 中没有,我不知道其他情况。那样对您有什么好处呢?
如果您想对此数据库进行数据迁移,则将数据库设置为只读模式(或创建其快照副本)可能已经足够且最简单的方法。
更新: 对于您提到的场景(获取具有笔记本电脑的人的数据,然后重新同步),您应该绝对查看ADO.NET Sync Services - 那正是它的用途!
即使您无法使用 ADO.NET Sync Services,您仍然应该能够有选择地并智能地更新中央数据库,而无需锁定整个数据库。SQL Server 有几种方法可以在数据库正在使用时更新行 - 真的没有必要完全锁定整个数据库以仅更新几行!
例如:您应该在每个数据表上有一个TIMESTAMP
(或 ROWVERSION
)列,这将轻松地使您看到是否发生了任何更改。如果 TIMESTAMP 字段(实际上只是一个计数器 - 它与日期或时间无关)没有更改,则行未更改,因此不需要考虑更新。