Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Snapshot isolation transaction failed accessing database 'tempdb'  [new]
sti
Member

Откуда:
Сообщений: 769
Подскаэите, если кто встречался и знает причину.

Ситуация очень похожа на https://www.sql.ru/forum/791986/snapshot-isolation-transaction-failed-accessing-database-tempdb?hl=snapshot isolation transaction failed accessing database tempdb

В базе с включенной версионностью одна процедура изредко порождает ошибку:

Snapshot isolation transaction failed accessing database 'tempdb' because snapshot isolation is not allowed in this database. Use ALTER DATABASE to allow snapshot isolation.

В процедуре не используются ни временные таблицы, ни табличные переменные. Нет также DDL команд. В общих чертах процедура выглядит так.

ALTER PROCEDURE [FEED].[DeleteProductData]
...
AS

SET NOCOUNT ON;

SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
...
BEGIN TRAN

INSERT INTO Table1
SELECT ... -- Много строк

DELETE FROM Table2
WHERE ... -- Много строк

UPDATE Table3 WHERE ... -- Одна строка

COMMIT TRAN
...
GO


Особых проблем это не создает, так как клиентское приложение в случае ошибки повторяет вызов, но хотелось бы понять причину.

Microsoft SQL Server 2005 - 9.00.5057.00 (X64)
Mar 25 2011 13:33:31
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2)
23 янв 15, 16:29    [17160949]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed accessing database 'tempdb'  [new]
Glory
Member

Откуда:
Сообщений: 104760
sti
В процедуре не используются ни временные таблицы, ни табличные переменные. Нет также DDL команд.

А вы думаете, что снапшоты где создаются ?
23 янв 15, 16:32    [17160973]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed accessing database 'tempdb'  [new]
Glory
Member

Откуда:
Сообщений: 104760
А также где создаются work table запроса, если они есть в плане ?
23 янв 15, 16:34    [17160982]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed accessing database 'tempdb'  [new]
sti
Member

Откуда:
Сообщений: 769
Glory, Снапшоты созаются в tempdb. На tempdb включить версионность нельзя. Обратите внимание на текст ошибки:

Snapshot isolation transaction failed accessing database 'tempdb'

Я кажется нашел причину. Ошибка появляется во время реиндексации одного из индексов таблицы Table2.
23 янв 15, 16:43    [17161054]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed accessing database 'tempdb'  [new]
sti
Member

Откуда:
Сообщений: 769
Если кому-то интересно:
начиная с SQL SERVER 2008 уже возможно
ALTER DATABASE TempDB SET ALLOW_SNAPSHOT_ISOLATION ON

Как бы малоосмысленно это не казалось, но после этого ошибку повторить не удалось. Проверял на

Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
Feb 20 2014 20:04:26
Copyright (c) Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
24 мар 15, 15:37    [17425514]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed accessing database 'tempdb'  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
sti
В процедуре не используются ни временные таблицы, ни табличные переменные.

А в триггерах?
24 мар 15, 15:51    [17425606]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed accessing database 'tempdb'  [new]
sti
Member

Откуда:
Сообщений: 769
Владислав Колосов,

триггеров нет. я же воспроизводил проблему на 2005, см. выше - Ошибка появляется во время реиндексации одного из индексов таблицы Table2.
24 мар 15, 15:57    [17425651]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить