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