错误在sql server中创build表上的索引,如何解决它?

替代文字

在SQL SERVER 2008(LIVE DB)的表上创build聚簇索引时出现了上述错误。 表中的logging总数是1046789

我已经创build相同的索引在testing数据库相同数量的logging,并成功创build。

谢谢。

我想你的问题是“我能做些什么来解决这个问题?”

做出这样的假设:

执行以下任务来缓解问题:

如果可能的话,find持有所需资源locking的事务。 使用sys.dm_os_waiting_tasks和sys.dm_tran_locksdynamicpipe理视图。

如果交易仍持有locking,则在适当的情况下终止该交易。

再次执行查询。

如果频繁出现此错误,请更改locking超时期限或修改违规事务,以便locking时间更短。

如果这不起作用:

在这种情况下,必须在违规事务中进行以下更改:1)修改事务使用查询提示(使用RECOMPILE,MAXDOPhints)2)在较小的事务中运行大事务。 3)如果可能,升级硬件。

从这里到这里

使用以下命令准确找出哪些进程在您的表上持有独占锁。 仅供参考,由于任务的复杂性,创build任何types的索引都必须在表格上排除locking。 在聚簇索引中,数据在物理上重新排列在磁盘上。 除非在创build索引时指定选项ONLINE = OFF,否则将不能访问表。

在运行之前,用实数整数值replaceDATABASE_NAME,DB_ID,OBJ_ID和SPID。

CREATE TABLE tempdb ..#temp_lock
(spid int,dbid int,ObjId int,IndId int,typesnvarchar(30),资源nvarchar(100),模式nvarchar(10),状态nvarchar(30))

使用DATABASE_NAME

插入tempdb ..#temp_lock exec master..sp_lock

从tempdb中selectspid,ObjId,mode,name。#temp_lock作为内部连接[test2] .. sysobjects as b on a.ObjId = b.id其中a.dbid = DB_ID

确定在桌子上持有“X”模式的Spid锁。 记下从以前的查询ObjIdSPID值。

找出lockingSpid正在执行的内容。

dbcc inputbuffer( SPID

或更详细的:

DECLARE @Handle二进制(252)

SELECT @Handle = sql_handle FROM master..sysprocesses WHERE spid = SPID

SELECT * FROM :: fn_get_sql(@Handle)去

如果知道谁(用户)正在执行,请决定是终止进程还是提交事务。

杀死SPID

再次创build索引。