我有非常奇怪的用户需求。我试图向他们解释有更好的方法来支持他们的业务流程,但他们不想听。我很想走开,但我首先想看看是否还有其他方法。
有什么方法可以锁定整个数据库而不是行锁或表锁。我知道我也许可以将数据库置于单用户模式,但这意味着一次只有一个人可以使用它。我希望许多人能够同时阅读,但一次只有一个人能够写入。
他们正在尝试进行一些非常奇怪的数据迁移。
你想实现什么目标?
- 您想让整个数据库只读吗?你绝对可以做到
- 您想阻止任何新客户端连接到数据库吗?你也绝对可以做到
但就只允许一个人使用数据库而言,实际上不存在“数据库锁”的概念。据我所知,至少在 SQL Server 中不是这样。无论如何,这对你有什么好处呢?
如果您想从该数据库中迁移数据,那么将数据库设置为只读模式(或创建它的快照副本)可能就足够了,也是最简单的方法。
UPDATE:对于您提到的场景(为拥有笔记本电脑的人获取数据,然后重新同步),您绝对应该检查一下ADO.NET 同步服务 http://msdn.microsoft.com/en-us/library/bb726002.aspx- 这正是它的用途!
即使您无法使用 ADO.NET 同步服务,您仍然应该能够根据笔记本电脑中的更改有选择地、智能地更新中央数据库,而无需锁定整个数据库。 SQL Server 有多种方法可以在数据库正在使用时更新行 - 实际上没有必要仅仅为了更新几行而完全锁定整个数据库!
例如:你应该有一个TIMESTAMP http://technet.microsoft.com/en-us/library/ms182776.aspx (or ROWVERSION http://technet.microsoft.com/en-us/library/ms182776.aspx)列在每个数据表上,这可以让您轻松查看是否发生了任何更改。如果 TIMESTAMP 字段(实际上只是一个计数器 - 它与日期或时间无关)没有更改,则该行没有更改,因此不需要考虑更新。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)