当前位置:  开发笔记 > 数据库 > 正文

ADO.NET SQLServer:如何防止关闭连接持有S-DB锁?

如何解决《ADO.NETSQLServer:如何防止关闭连接持有S-DB锁?》经验,为你挑选了1个好方法。

我处理一个SqlConnection对象,但当然它并没有真正关闭.我需要关闭连接以不保持数据库对象的锁定.如何防止闭合连接锁定?


不知道的人对上述信息的解释:

关闭ADO或ADO.NET连接时,实际上并未切断与SQL Server的连接.ADO/ADO.NET基础结构可以保持连接,以防您再次使用它.这些连接在所谓的"连接池"中保持不变.

在没有使用几分钟后,连接将实际关闭.虽然,不是真的.TCP/IP有自己的方法来保持TCP连接打开几分钟(处于" CLOSE_WAIT "状态).如果您要求打开到同一IP:端口的TCP连接,则会执行此操作.如果是这样,它可以使用已经打开的TCP连接.

使用连接池和SQL Server,仍然建立与SQL Server的连接.每个连接都有一个它所在的数据库上下文.只要连接位于该数据库中:它就拥有该数据库上的共享数据库(S-DB)锁.

共享数据库锁只是意味着"请不要删除此数据库."

如何防止它在我的数据库上持有共享锁,同时保持连接池的好处?


我的ad-hoc解决方案现在每次都是开发人员调用Dispose:

connection.Dispose()

将其更改为对全局辅助函数的调用:

Database.DisposeConnection(connection);

它将数据库上下文更改为master:

public static void DisposeConnection(SqlConnection connection)
{
    //Stop holding a database lock - in my database at least
    ADOHelper.ExecuteNonQuery(connection, "USE master");

    connection.Dispose();
}

它解决了我眼前的问题; 关闭的连接没有锁定我的数据库.

但现在我担心连接池会让它的大脑混乱 - 因为我将数据库上下文切换回来.


如果有人不知道,或者不这么认为:

从SDK:

关闭处置在功能上是等效的.

Eamon Nerbon.. 7

您可以将数据库置于单用户模式以便还原它.IIRC,这样的......

ALTER DATABASE TheDatabaseToRestore SET SINGLE_USER WITH  ROLLBACK IMMEDIATE;
RESTORE DATABASE TheDatabaseToRestore 
FROM DISK =N'Z:\Path\To\Backup\BackupFile';
ALTER DATABASE TheDatabaseToRestore SET MULTI_USER;

请参阅:获取使用SQL 还原SQL Server和/或还原数据库备份的独占访问权限以获取更多背景信息.

编辑: 单用户模式用于备份和恢复(在非快速版本上,我是定期使用它).使用它会启动所有其他连接,并且无法建立新连接.我没有使用各种"WITH"选项,例如"ROLLBACK IMMEDIATE",但它们的用法似乎很简单.



1> Eamon Nerbon..:

您可以将数据库置于单用户模式以便还原它.IIRC,这样的......

ALTER DATABASE TheDatabaseToRestore SET SINGLE_USER WITH  ROLLBACK IMMEDIATE;
RESTORE DATABASE TheDatabaseToRestore 
FROM DISK =N'Z:\Path\To\Backup\BackupFile';
ALTER DATABASE TheDatabaseToRestore SET MULTI_USER;

请参阅:获取使用SQL 还原SQL Server和/或还原数据库备份的独占访问权限以获取更多背景信息.

编辑: 单用户模式用于备份和恢复(在非快速版本上,我是定期使用它).使用它会启动所有其他连接,并且无法建立新连接.我没有使用各种"WITH"选项,例如"ROLLBACK IMMEDIATE",但它们的用法似乎很简单.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有