我正在使用分区切换来重建临时表上的索引,而不像microsoft's article那样将它们放在分区表上。
我有什么归结为
BEGIN TRAN
ALTER INDEX IX_Working ON dbo.WorkingTable DISABLE
INSERT INTO dbo.WorkingTable ( Id, PartitionColumn, Values...)
SELECT Id, PartitionColumn, Values...
FROM PartitionedTable WITH (HOLDLOCK)
WHERE PartitionColumn <= @rightboundary
AND PartitionColumn > @leftboundary
INSERT INTO WorkingTable ( Id, PartitionColumn, Values...)
SELECT Id, PartitionColumn, Values...
FROM Imports
ALTER INDEX IX_Working ON WorkingTable REBUILD -- SLOW BIT
ALTER TABLE PartitionedTable SWITCH PARTITION @partition TO SwapTable
ALTER TABLE WorkingTable SWITCH TO PartitionedTable PARTITION @partition
TRUNCATE TABLE SwapTable
COMMIT
现在在此操作期间,我需要阻止对正在重建索引的分区的任何更新,但仍允许在其他分区上使用它们。 PartionedTable的锁升级设置为auto。我试图用HOLDLOCK做这个,但我仍然能够在慢速位期间从另一个连接执行INSERT INTO PartionedTable(Id,@ somevalueInTheRange,Values ...)。
如何在仍允许选择的情况下阻止此操作?
答案 0 :(得分:0)
您可以尝试使用TABLOCKX和HOLDLOCK吗?目前,选择将放置由于HOLDLOCK而未释放的SHARED锁。但是SHARED锁不会阻止插入。