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

Откуда: Lithuania
Сообщений: 6994
Надеюсь форумом не ошибся. Хоть использую C#, но ошибка SQL сервера.
Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
Dec 28 2012 20:23:12
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

Есть процедура
ALTER PROCEDURE [dbo].[sproc_UbdateData]
AS
BEGIN
	-- SET NOCOUNT ON added to prevent extra result sets from
	-- interfering with SELECT statements.
	SET NOCOUNT ON;

	INSERT INTO dbo.Table1 SELECT * FROM database1.dbo.Table 
	INSERT INTO dbo.Table2 SELECT * FROM database2.dbo.Table 
	INSERT INTO dbo.Table3 SELECT * FROM database3.dbo.Table 
	INSERT INTO dbo.Table4 SELECT * FROM database4.dbo.Table 
END

Вызываю её из C# и получаю ошибку:
Snapshot isolation transaction failed accessing database '' because snapshot isolation is 
not allowed in this database. Use ALTER DATABASE to allow snapshot isolation.

Вылазит только после того, как запускается синхронизация баз данных по сценарию, иписанному в Microsoft Synchronization Framework Synchronizing SQL Server and SQL Express.

Собственно вопрос - что это такое и как от этого избавиться? Права в базах только на чтение, то есть сделать предложенный ALTER DATABASE не могу.
18 янв 14, 22:28    [15434717]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Ну, если Microsoft Synchronization Framework пытается запустить транзакцию с TIL SNAPSHOT, а эта опция не включена для бд, то задача решения не имеет.
18 янв 14, 22:34    [15434734]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 6994
Не уловил связь. Ошибку вызывает не Microsoft Synchronization Framework, а простой запуск процедуры пока в другом потоке работает Microsoft Synchronization Framework.
Ошибка на этом
                using (var conn = new SqlConnection(@""))
                using (var command = new SqlCommand("dbo.sproc_UbdateData", conn)
                {
                    CommandType = CommandType.StoredProcedure
                })
                {
                    conn.Open();
                    command.ExecuteScalar();
                    conn.Close();
                }

Но если вызвать процедуру из MS SQL Management Studio - она отрабатывает без ошибок.
18 янв 14, 22:47    [15434774]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Cheerful Calf,

автор
Ошибка на этом

...
Но если вызвать процедуру из MS SQL Management Studio - она отрабатывает без ошибок.


Чудес не бывает. Берем профайлер и при запуске "этого" смотрим, какой TIL устанавливается.
18 янв 14, 22:55    [15434799]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 6994
pkarklin
Берем профайлер
Там много всего )
Смотреть при запуске синк фреймворка или процедуры?
18 янв 14, 22:59    [15434810]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Cheerful Calf
Смотреть при запуске синк фреймворка или процедуры?


Процедуры.
18 янв 14, 23:28    [15434921]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 6994
Без ошибки
Audit Login>> -- network protocol: TCP/IP
set quoted_identifier on
set arithabort off
set numeric_roundabort off
set ansi_warnings on
set ansi_padding on
set ansi_nulls on
set concat_null_yields_null on
set cursor_close_on_commit off
set implicit_transactions off
set language us_english
set dateformat mdy
set datefirst 7
set transaction isolation level read committed
RPC:Completed>> exec dbo.sproc_UbdateData 
Audit Logout>>
RPC:Completed>> exec sp_reset_connection


С ошибкой, когда нет set transaction isolation level read committed
Только никак не пойму почему - код работает в сервисе по таймеру, это не я кривыми руками его запускаю то так, то сяк....
19 янв 14, 00:07    [15435073]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 6994
И еще походу вопрос по Microsoft Synchronization Framework - смотрю в профайлере что там (на удаленном сервере) творится, вижу добавление записей по 6-8 в секунду... Это мне куда копать? Или это нормально для этого Фреймворка?
19 янв 14, 00:32    [15435141]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31444
Cheerful Calf
С ошибкой, когда нет set transaction isolation level read committed
То есть при выполнении одного и того же кода вызова процедуры, который вы привели выше, transaction isolation level для коннекта то устанавливается, то не устанавливается?
Чудно как то...
19 янв 14, 01:07    [15435285]     Ответить | Цитировать Сообщить модератору
 Re: Snapshot isolation transaction failed...  [new]
Cheerful Calf
Member

Откуда: Lithuania
Сообщений: 6994
alexeyvg,

Да, именно так. И самому странно, если б думал, что умею программировать прям бы изумился :)
Но повторюсь - своего косяка я не вижу. Его даже и по логике быть не может - работает скомпилированный Windows Service и по таймерам запускает процедуру и синхронизацию (из разных тридов соответственно). Единственно что заметил: как только запускатор процедуры выдаст ошибку - следом синхронизатор сообщает что отработал. Также ошибка бывает только при долгой синхронизации (более 20 минут).
19 янв 14, 03:23    [15435712]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить