Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 insert, XLOCK и Linked Server  [new]
Vadajer
Guest
Преамбула:
Есть партиционированная вью с таблицами разнесенными по серверам.
Есть триггер на эту вью с хинтом (XLOCK).
При попытке вставить/изменить запись ругается, что выражение СКЛ некорректно, потому как символ "," не уместен.
Профайлер говорит что валится на триггере в месте где UPDATE TABLE WITH ( , XLOCK)

В триггере естественно UPDATE TABLE WITH (XLOCK).
Не поможете объяснить, собственно какого?

Проверено на 2008 и 2008R2
8 дек 13, 02:51    [15259791]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Скрипт таблицы, скрипт view и скрипт триггера покажите.
8 дек 13, 02:57    [15259805]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Vadajer
Guest
ЭЭЭЭЭ......
Боюсь по "политическим" соображениям не могу.
Вью, таблица и триггер платежей в некой АБС.
Вставляю стандартной для этой АБС процедурой вставки документов.
8 дек 13, 03:01    [15259814]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Vadajer
ЭЭЭЭЭ......
Боюсь по "политическим" соображениям не могу.
Вью, таблица и триггер платежей в некой АБС.
Вставляю стандартной для этой АБС процедурой вставки документов.
Тогда ошибка в 17й строке.
8 дек 13, 03:13    [15259831]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Vadajer
Guest
вот что профайлером получено на удаленном сервере. (там таблица с архивными документами)
+

declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 int,@P2 binary(8),@P3 binary(8)',N'SELECT "Tbl1002"."Id" "Col1110","Tbl1002"."MasterId" "Col1111","Tbl1002"."BranchId" "Col1112","Tbl1002"."SourceType" "Col1113","Tbl1002"."TargetType" "Col1114","Tbl1002"."SourceCode" "Col1115","Tbl1002"."TargetCode" "Col1116","Tbl1002"."DebitCode" "Col1117","Tbl1002"."CreditCode" "Col1118","Tbl1002"."DebitInit" "Col1119","Tbl1002"."CreditInit" "Col1120","Tbl1002"."DebitState" "Col1121","Tbl1002"."CreditState" "Col1122","Tbl1002"."CurrencyTag" "Col1123","Tbl1002"."MainAmount" "Col1124","Tbl1002"."CrncyAmount" "Col1125","Tbl1002"."ActionId" "Col1126","Tbl1002"."Invert" "Col1127","Tbl1002"."ProcessFlag" "Col1128","Tbl1002"."PatternFlag" "Col1129","Tbl1002"."TreatFlag" "Col1130","Tbl1002"."PermitFlag" "Col1131","Tbl1002"."Kind" "Col1132","Tbl1002"."FileNo" "Col1133","Tbl1002"."ReceiverId" "Col1134","Tbl1002"."Code" "Col1135","Tbl1002"."OrgDate" "Col1136","Tbl1002"."DayDate" "Col1137","Tbl1002"."EndDate" "Col1138","Tbl1002"."ExtDate" "Col1139","Tbl1002"."Note" "Col1140","Tbl1002"."Info" "Col1141","Tbl1002"."DebitName" "Col1142","Tbl1002"."CreditName" "Col1143","Tbl1002"."Purpose" "Col1144","Tbl1002"."Ctrls" "Col1145","Tbl1002"."Sign" "Col1146","Tbl1002"."SignNBU" "Col1147","Tbl1002"."OtherType" "Col1148","Tbl1002"."OtherId" "Col1149","Tbl1002"."SenderId" "Col1150","Tbl1002"."Stamp" "Col1151","Tbl1002"."AccessFlag" "Col1152","Tbl1002"."CreatorId" "Col1153","Tbl1002"."Created" "Col1154","Tbl1002"."ChangerId" "Col1155","Tbl1002"."Changed" "Col1156","Tbl1002"."DebitId" "Col1157","Tbl1002"."CreditId" "Col1158","Tbl1002"."SystemId" "Col1159","Tbl1002"."PayDate" "Col1160","Tbl1002"."OperationId" "Col1108", -(1)*"Tbl1002"."DayDate" "Expr1003" FROM "ARCHIVEDB"."dbo"."Archive" "Tbl1002" WITH (,XLOCK) WHERE "Tbl1002"."Id"=@P1 AND (@P2 IS NULL OR @P3="Tbl1002"."Stamp")',1477287,0x000000000B33F8BB,0x000000000B33F8BB
select @p1


По коду можно догадаться что за АБС
смущает вот это FROM "ARCHIVEDB"."dbo"."Archive" "Tbl1002" WITH (,XLOCK)
8 дек 13, 03:41    [15259847]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Не люблю двоякости в интерпретации.
Vadajer
Есть триггер на эту вью с хинтом (XLOCK).
Это что за оксюморон?
У триггера нет свойства - хинт.
Хинт ставится в запросах, данный - на конкретную таблицу.
При использовании вью нельзя повесить данный хинт на неё или на таблицу использующуюся внутри неё.
(И кажись на таблицы с другого сервера)

Тут можно играться только со всей транзакции в целом, типа:
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

Vadajer
UPDATE TABLE WITH (XLOCK)
Грёбаный синтаксис говнокодера. Имейте за правило писать в данной части только алиас:
UPDATE	[Alias]
SET	...
FROM	... [Table_View] AS [Alias] ...
WHERE	...
8 дек 13, 04:10    [15259859]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Vadajer
По коду можно догадаться что за АБС
А, ну тогда причём тут этот форум, обращайтесь к производителю этой АБС.

Хотя надо найти или добавить на connection.microsoft.com просьбу добавить в энтерпрайз версию механизм замены запросов на лету.
8 дек 13, 04:16    [15259862]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Чёрд, доходит очень медленно. Стиль писанины конечно этому помогает.

Как я понял, информацию про АБС, про вью и про триггер можно тупо выкинуть из разговора полностью - ТС это привёл для дезориентации.

Есть некая инструкция UPDATE которая пытается заменить данные таблицы с линкованного сервера.
На эту таблицу ТС пытается навешать хинт XLOCK. И некоторый механизм скуля его неправильно обрабатывает.

Вопрос - а накуя этот хинт вообще нужен?

И я вообще удивлён что скуль это разрешает.
Какова версия скуля?
Искали про этот баг на connection.microsoft.com?
8 дек 13, 04:35    [15259868]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Вот к примеру: View with Named Linked Server and NOLOCK hint can target itself, causing loops and Server Crash / Stack dump
Mnior
connection.microsoft.com
fix
8 дек 13, 04:47    [15259870]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Vadajer
Guest
Какая дезориентация? ТС (То есть я) ничего не писал.
Привел куски кода для понимания. Весь код выложить не могу, так как здесь присутствуют разработчики этой АБС. И я не знаю, как они к этому отнесутся.
Для увеличения производительности они разбили таблицу платежей по дате и создали парт вью.
Я же пытаясь вынести старые данные на другой сервер наткнулся на описанное выше. А именно при изменении платежа стандартными механизмами этой АБС sp_prepexec на линкед сервере получает запрос вида "SELECT bla from TABLE WITH ( , XLOCK)" на чем и валится.
Хинт XLOCK присутствует в выражениях обновлениях этой парт вью. А именно в тригере на этой парт вью и в процедуре изменении платежа.
При изменении XLOCK на UPDLOCK - все успешно. Вот я и спрашиваю собственно какого?
8 дек 13, 14:58    [15260400]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Vadajer
Guest
А обратиться к производителям этой АБС я не могу. Они просто неадекватные. Причем Очень!
8 дек 13, 15:02    [15260406]     Ответить | Цитировать Сообщить модератору
 Re: insert, XLOCK и Linked Server  [new]
Glory
Member

Откуда:
Сообщений: 104751
Vadajer
А обратиться к производителям этой АБС я не могу. Они просто неадекватные. Причем Очень!

Сервер сам не может подменять неправильные тексты запросов на правильные.
8 дек 13, 21:10    [15261462]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить