Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Хоть мой вопрос и непосредственно связан с 1С, думаю, что целесообразнее задать его здесь.

Итак, прелюдия - имеется сервак Win2003 + MS SQL 2005 SP4. Он же терминальный сервер с 1С8. Потребовалось перетащить пару баз 7.7 с локального компа буха на этот сервак.
Поставил 1Ску, сделал все, как надо, начинаю поднимать базу - ловлю какие-то абсолютно невнятные ошибки от скуля.

Дисклеймер: меня не интересует, что делать с 1Ской - меня не обломало поднять эти базы в ДБФном режиме. Меня интересует именно тот аспект, который будет озвучен ниже. Уже просто для себя лично - из принципа "железка не должна быть умнее хозяина".
И да, я гуглил. Ничего внятного гугл не дал. :( Т.е. ощущение, что такие ошибки в 1С были у единственных двоих, кроме меня. И решения они не получили. Или решилось стандартным "Переустанови скуль. Не помогло? Переустанови винду."

Итак, прелюдия №2. Как известно, 7.7 по дефолту не дружит с 2005 скулем. Но есть 2 способа это исправить (ручками поправить 4 байта в ДЛЛке - для релиза 7.7.25; и накатить неофициальный 7.7.27.1 - для 7.7.27). Были испробованы оба варианта - возникающие ошибки были идентичны. Как финальное доказательство того, что дело не в "криво хакнутой" 1С - 7.7.27.1 без проблем подняло базу с размещением ее на соседнем серваке с MS SQL 2008 Express.
Хаки 1С на данной связке винда+скуль точно работают - во второй конторе админа крутится 7.7.25 на такой же связке.
И дело не в конфигурации: я создавал абсолютно пустую конфигурацию - ошибки были ровно те же.

Теперь, к сути вопроса:
1) изменения в конфигурации 1Ска производит без проблем (т.е. модификации таблиц, их добавление-удаление, связанное с изменением метаданных)
2) при попытке монопольного входа в базу (1Ска при этом переводит скулевую базу в сингл-юзер) ловлю вот такую ошибку:
42000/924: Database 'BASE' is already open and can only have one user at a time
01000/7412: OLE DB provider "SQLNCLI" for linked server "SERVER" returned message "Неопознанная ошибка" 

3) при попытке разделенного входа в базу, ловлю уже другую ошибку:
42000/16933: the cursor does not include the table being modified or the table is not updatable through the cursor
HY109/0 Недопустимое положение курсора 


курение профайлера показало, что затык происходит после одних и тех же действий (буду в стиле SSMS через GO писать раздельные запросы):
declare @p1 int
set @p1=1073741825
declare @p2 int
set @p2=180150003
declare @p5 int
set @p5=2
declare @p6 int
set @p6=2
declare @p7 int
set @p7=-1
exec sp_cursorprepexec @p1 output,@p2 output,NULL,N'Select * from _1SUSERS WITH (UPDLOCK)',@p5 output,@p6 output,@p7 output
select @p1, @p2, @p5, @p6, @p7 

GO

exec sp_cursorfetch 180150003,2,0,1 


GO

exec sp_cursor 180150003,4,1,N'',@USRSCNT=0,@NETCHGCN=0 


после этого падает.
Активити монитор последней коммандой показывает вот это:
(@Param000004 smallint,@Param000005 int)INSERT [SERVER].[BASE].[dbo].[_1SUSERS]([USRSCNT],[NETCHGCN]) VALUES(@Param000004,@Param000005) 

(т.е. вроде как прочитали данные о текущих активных юзерах и попытались инсертнуть свои данные - и именно на инсерте скулю плохеет)


после нажатия на ОК в окне с полученным от скуля описанием ошибки 1Ска падает, а в профайлере появляются следующие записи (я не знаю, 1Ска закрывает этот курсор или скуль автоматически; и вообще, имеет ли это значение):
exec sp_cursorclose 180150003 
 
GO

exec sp_cursorunprepare 1073741825 

GO

ALTER DATABASE BASE SET MULTI_USER



Итак, вопросы:
1) есть ли средства (окромя профайлера с дефолтным трейсом), которые помогли бы мне точнее определить момент возникновения ошибки и причину ошибки?
2) Зная предрасположенность 7.7 к работе через курсоры вызов тысяч хранимых процедур - может ли такое поведение быть обусловлено этими особенностями? Изменения метаданных 1Ска делает без ХПшек. Инсерт данных в таблицы - вроде через ХПшки.
3) Есть ли какие-то особо хитрые настройки сервера, которые имело бы смысл покурить? Я сильно склоняюсь к тому, что дело в настройках СКЛ-сервера. Не смотря на то, что СКЛ-сервер ставился "по дефолту".
23 апр 14, 20:44    [15925310]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37138
Ну да, все дело в настройках сервера. Просто надо включить настройку "работать корректно с 1с 7.7".
23 апр 14, 20:45    [15925321]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Гавриленко Сергей Алексеевич,

После того, как я узнал, что под 32-битной виндой можно заставить 2005 скуль использовать более 3 (и даже более 4) гигов оперативки - "я ни во что уже не верю, кроме бочки с мышьяком"©
23 апр 14, 20:55    [15925365]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
NickAlex66
Member

Откуда:
Сообщений: 319
Satans Claws,
Возможный ответ на вторую суть вопроса: шмяк
"Перед заданием параметра SINGLE_USER проверьте, чтобы параметру AUTO_UPDATE_STATISTICS_ASYNC было присвоено значение OFF."
По поводу третьей сути вопроса ничего сказать немогу - 1с не курил ни разу :-)
23 апр 14, 23:56    [15926060]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
NickAlex66,

AUTO_UPDATE_STATISTICS_ASYNC is OFF
24 апр 14, 06:26    [15926505]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Satans Claws
После того, как я узнал, что под 32-битной виндой можно заставить 2005 скуль использовать более 3 (и даже более 4) гигов оперативки...


вообще то Address Windowing Extensions (AWE) - это программный интерфейс Винды...а не ноу-хау сиквела...
вы можете и в своём приложении это реализовать
24 апр 14, 07:28    [15926555]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Knyazev Alexey,

я скорее про то, что чтоб его задействовать в скуле - на сколько я помню - приходится делать вещи несколько менее тривиальные чем ALTER DATABASE SET <option> (точнее, как оно там для сервера выглядит?)

ну и давайте не отвлекаться от основной темы
24 апр 14, 07:48    [15926584]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
https://www.sql.ru/forum/624021/problema-v-rabote-sql-2005-1c-7-7?hl=the cursor does not include the table being modified or the table is not updatable through the cursor
24 апр 14, 08:39    [15926684]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
tpg,

топик видел, полезной информации в нем 0:
1) со стороны 1С проблем нет
2) в 2005 режим совместимости с 2000 включен (хотя для 7.7.27.1 это даже не важно).
3) 1Ска коннектится тупо от имени sa - все права у нее есть (что подтверждается успешными реструктуризациями таблиц при изменении метаданных).
24 апр 14, 09:05    [15926748]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Satans Claws
tpg,

топик видел, полезной информации в нем 0:
И про протоколы читали?
24 апр 14, 09:20    [15926806]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Кстати, что всё же вернет select @@version ?
24 апр 14, 09:21    [15926810]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
tpg,

Microsoft SQL Server 2005 - 9.00.5057.00 (Intel X86) Mar 25 2011 13:50:04 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Для экземпляра разрешены протоколы: TCP/IP, shared memory (+ named pipes для сервера в целом)
1С использует, емнип, исключительно TCP/IP.


На 2008: Microsoft SQL Server 2008 (SP3) - 10.0.5500.0 (Intel X86) Sep 22 2011 00:28:06 Copyright (c) 1988-2008 Microsoft Corporation Express Edition on Windows NT 6.0 <X86> (Build 6001: Service Pack 1)
Для экземпляра разрешены протоколы: TCP/IP
24 апр 14, 10:42    [15927251]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Поскольку (для вин7 и выше) регулярно упоминается необходимость подмены sqlsrv32.dll, sqlsrv32.rll, odbcbcp.dll (если я правильно понимаю - они реализую ОДБЦ-драйвер, через который работает 1С) - их версии 2000.86.3959.0 у всех
24 апр 14, 10:46    [15927288]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Satans Claws
На 2008: Microsoft SQL Server 2008 (SP3) ...
Какой ещё 2008? Про 2008 здесь речи не было.
Так у вас всё же 2008?
И, кстати, кто в конторе 1с официально сказал, что 1с7.7 может работать на 2005 сиквеле?
24 апр 14, 10:49    [15927304]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
tpg,

я, пожалуй, процитирую сам себя:
Satans Claws
Итак, прелюдия №2. Как известно, 7.7 по дефолту не дружит с 2005 скулем. Но есть 2 способа это исправить (ручками поправить 4 байта в ДЛЛке - для релиза 7.7.25; и накатить неофициальный 7.7.27.1 - для 7.7.27). Были испробованы оба варианта - возникающие ошибки были идентичны. Как финальное доказательство того, что дело не в "криво хакнутой" 1С - 7.7.27.1 без проблем подняло базу с размещением ее на соседнем серваке с MS SQL 2008 Express.
Хаки 1С на данной связке винда+скуль точно работают - во второй конторе админа крутится 7.7.25 на такой же связке.
И дело не в конфигурации: я создавал абсолютно пустую конфигурацию - ошибки были ровно те же.
24 апр 14, 13:22    [15928731]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37138
Хаки - это же официально, как же мы сразу не догадались.

Как подружить 1с 7.7 и mssql 2005+ надо спрашивать в форуме по 1с. Сервер тут вообще ни при чем.
24 апр 14, 13:24    [15928754]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
rigus
Member

Откуда: Сургут
Сообщений: 349
SQL Сервер не переименовывали случаем?
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=88849
24 апр 14, 14:15    [15929192]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Гавриленко Сергей Алексеевич,

Видимо я недостаточно убедительно доказал, что "хаки" тут не при чем.
Ок, подробненько:
1) хак 7.7.25 заключается в обходе внутренней проверки 1С на версию скуля. Внутренняя проверка представляет собой, судя по всему, CASE с проверкой на конкретные мажорные версии скуля. Ибо при попытке сконнектить стандартную 7.7 с 2005+ скулем идет ошибка "требуется версия СКЛ сервера 6.5 или выше". В нужных местах ставится джамп - вот и весь хак. Механизмы работы 1С со скулем не затрагиваются вовсе. Отсюда и требование к понижению режима совместимости для базы до 2000.
2) Хак 7.7.27.1 более крутой: стандартная библиотека работы 1С со скулем (bkend.dll) переименовывается, на ее место подсовывается прокси-библиотека. Прокся большую часть вызовов функций просто перенаправляет в стандартную bkend.dll, часть - модифицирует. Так же модифицируется часть запросов, отправляемых на скуль - из-за различий в синтаксисе между 2000, 2005 и 2008 скулем.

Позволю себе некоторый квотинг автора ДЛЛки (подробнее тут: http://infostart.ru/public/82018/ - но там среди 700+ комментов надо искать комменты автора)
Дошли до момента, где база переводится в родной режим (90-2005, 10-2008)
Так как уже имеется опыт подмены вызовов ODBCAPI, то ничто не запрещает быть последовательным далее.
Как известно odbc может непосредственно передавать инструкцию на исполнение, так и через механизм предварительной подготовки. А именно:
- непосредственно SQLExecDirect: http://msdn.microsoft.com/en-us/library/ms713611(v=VS.85).aspx
- подготовленный SQLPrepare: http://msdn.microsoft.com/en-us/library/ms710926(v=VS.85).aspx

Правда имеется таких функций пара (A/W), и помня, что 1с далеко не юникод, то пара W-функций нам не нужна.
Вот и все проблемы с запуском на 2005/2008 свелись к узкому горлышку, мимо которого ничто не проскочет.

Применяя сим-салабим, получаем в руки все запросы, уходящие на сервер - делай с ними что хочешь. А хотим мы, чтобы они воспринимались скулем 2005/2008.

В чем проблема с запросами?
1. С SQL2005 ужесточили синтаксис табличных хинтов (это которые в скобках идут после имени таблицы), теперь нужно указывать ключ. слово WITH:
- про 2000 читаем с абзаца Table Hints: http://technet.microsoft.com/en-us/library/aa258869(SQL.80).aspx
- про 2005 читаем с абзаца WITH ( ): http://msdn.microsoft.com/ru-ru/library/ms177634(v=SQL.90).aspx
- про 2008: http://msdn.microsoft.com/ru-ru/library/ms187373(v=SQL.100).aspx

Вывод: если есть хинты, то разделяем их запятыми и вставляем ключ. слово WITH. Если хинт один, то на всякий случай вставляем WITH тоже - после SQL2008 обещают запретить вообще не указывать это ключ. слово. А таааакже вырезаем нафиг хинт, указывающий какой индекс использовать.

Так как разнообразие запросов, генерируемых 1с, мало, то проблема решилась небольшим регулярным выражением.

2. После реструктуризации 1с обрезает журнал транзакций: DUMP TRANSACTION ...
Вот этот момент спорный и каюсь поспешил - заменил на ALTER DATABASE SET SINGLE_USER
В следующей версии просто ничего слаться не будет. Потому как у некоторых включен режим FULL, и после такой инструкции нужно прописывать руками. Ну и если не слать ничего, то и бекапирование ломаться не будет.

Т.е. в 7.7.27.1 потенциально возможны ошибки при конвертации запросов (и они были в ранних версиях - но с января 12 года апдейтов не было - так что можно утверждать о достаточной стабильности релиза).


Так что я уверен на 95%, что дело не в 1С.

ЗЫ
Я достаточно долго и достаточно много писал на 7.7++
Я знаком лично с некоторыми разработчиками 1С++ (работали вместе) и из общения с ними представляю, как устроены потроха 1С.
Все мои знания говорят о том, что 1С работает со скулем слишком примитивно, чтоб иметь странные глюки.

Более того, я имел доступ к дестяку-двум 1Сок с хаками той или иной степени, работающих с 2005 скулем.
Я имею статистику о работе значительного количества людей на всевозможных связках NT5-based виндах и 2005 скулях.
И даже сам факт того, что данная ошибка применительно к 1С гуглингом встречается ровно 2 раза, говорит о том, что проблема слишком специфична. А массово распространенных релизов 7.7 всего 2 - 25 и 27.

Ну и последнее - допустим, что при стечении каких-то невероятных обстоятельств 1С выполняет какую-то странную последовательность действий, которая отрабатывает на 2000 скуле, отрабатывает на 2008 скуле, отрабатывает на большинстве релизов 2005 скуля и не отрабатывает на конкретных релизах 2005 скуля, чей это баг - 1С или скуля? Зависит от того, что прописано в стандарте скуля - будет ли это недокументированная фича, существующая в одних версиях и не существующая в других, или же банальный баг.

Я не исключаю, что дело в версии ОДБЦ-драйверов. Хотя тоже не считаю это сильно вероятным.
24 апр 14, 14:28    [15929304]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Glory
Member

Откуда:
Сообщений: 104760
Satans Claws
Так что я уверен на 95%, что дело не в 1С.

Сервер сам по себе не переводит базы в одно/многопользовательские режимы.
Сервер сам по себе не создает необновляемые курсоры.
24 апр 14, 14:33    [15929343]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
rigus
SQL Сервер не переименовывали случаем?
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=88849


Сетевое имя сервера с 2005 скулем менялось, да.
И первые запуски 7.7 были с кривизной в sys.servers (и была ругань, что необходимо прилинковать экземпляр скуля с моим последующим выполнением sp_addlinkedserver).

Потом сделал нормально (именно в менеджмет студии, запущенной на том компе, где стоит 2005 скуль):
sp_dropserver <old_name>; (для всех кривых имен)
sp_addserver <new_name>, local;
ошибки не исчезли

попутно заметил, что комп с 2008 скулем тоже менял сетевое имя - ему это вообще никак не помешало держать семерочную базу
24 апр 14, 14:43    [15929411]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
rigus
Member

Откуда: Сургут
Сообщений: 349
А службу sql сервера после смены имени через sp_addserver не забыли перезапустить?
24 апр 14, 14:48    [15929461]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Перезапускал, да. Но @@servername возвращает старое имя.

Еще раз удалил, добавил локально, перезапустил службу - теперь правильное имя возвращает.
24 апр 14, 14:55    [15929527]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Йеееее, запустилась.

По хорошему, еще бы понять, почему @@servername после прошлого перезапуска службы осталось старым...
24 апр 14, 14:57    [15929540]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Видимо, скопипастив отсюда: http://technet.microsoft.com/en-us/library/ms143799(v=sql.90).aspx так без кавычек и выполнил
а скуль даже не ругнулся на непонятный аргумент
24 апр 14, 15:04    [15929615]     Ответить | Цитировать Сообщить модератору
 Re: Невнятные ошибки на MS SQL 2005  [new]
Satans Claws
Member

Откуда:
Сообщений: 64
Glory
Сервер сам по себе не переводит базы в одно/многопользовательские режимы.
Сервер сам по себе не создает необновляемые курсоры.


Однако, я был прав - решение заключалось в ответе на вопрос №3.
24 апр 14, 15:06    [15929640]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить