删除SQL中的约束花费的时间太长
我正在SQL Server 2008 R2上运行下面的查询,以禁用一个约束,以便能够进行一些修改删除SQL中的约束花费的时间太长,sql,database,sql-server-2008-r2,Sql,Database,Sql Server 2008 R2,我正在SQL Server 2008 R2上运行下面的查询,以禁用一个约束,以便能够进行一些修改 ALTER TABLE mytable NOCHECK CONSTRAINT UCxxxx 已经50分钟了,而且还在运行 表中有大约200万行 有什么想法吗?表上可能有一个模式锁。模式锁用于阻止其他线程在使用对象时更改对象 您可以通过检查sys.dm_tran_locks来了解情况: select * from sys.dm_tran_locks where resource_associate
ALTER TABLE mytable NOCHECK CONSTRAINT UCxxxx
已经50分钟了,而且还在运行
表中有大约200万行
有什么想法吗?表上可能有一个模式锁。模式锁用于阻止其他线程在使用对象时更改对象 您可以通过检查sys.dm_tran_locks来了解情况:
select * from sys.dm_tran_locks
where resource_associated_entity_id = object_id('YourTable');
我还使用此查询查找当前用户的会话,然后将其终止
SELECT DISTINCT
name AS database_name,
session_id,
host_name,
login_time,
login_name,
reads,
writes
FROM sys.dm_exec_sessions
LEFT OUTER JOIN sys.dm_tran_locks ON sys.dm_exec_sessions.session_id = sys.dm_tran_locks.request_session_id
INNER JOIN sys.databases ON sys.dm_tran_locks.resource_database_id = sys.databases.database_id
WHERE resource_type <> 'DATABASE'
--AND name ='YourDatabaseNameHere'
ORDER BY name
KILL 58 -- Kill process having session_id 86
参考资料:您使用哪种数据库管理系统?您可能仍然在SMS中打开该表。它正在阻止ALTER执行。尝试关闭所有查询选项卡。几乎可以肯定,有其他东西正在阻止此查询。另一方面,禁用约束应该是只启用元数据的更改,需要检查所有现有数据是否符合