Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
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] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Ну да, все дело в настройках сервера. Просто надо включить настройку "работать корректно с 1с 7.7". |
23 апр 14, 20:45 [15925321] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
Гавриленко Сергей Алексеевич, После того, как я узнал, что под 32-битной виндой можно заставить 2005 скуль использовать более 3 (и даже более 4) гигов оперативки - "я ни во что уже не верю, кроме бочки с мышьяком"© |
23 апр 14, 20:55 [15925365] Ответить | Цитировать Сообщить модератору |
NickAlex66 Member Откуда: Сообщений: 319 |
Satans Claws, Возможный ответ на вторую суть вопроса: шмяк "Перед заданием параметра SINGLE_USER проверьте, чтобы параметру AUTO_UPDATE_STATISTICS_ASYNC было присвоено значение OFF." По поводу третьей сути вопроса ничего сказать немогу - 1с не курил ни разу :-) |
23 апр 14, 23:56 [15926060] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
NickAlex66, AUTO_UPDATE_STATISTICS_ASYNC is OFF |
24 апр 14, 06:26 [15926505] Ответить | Цитировать Сообщить модератору |
Knyazev Alexey Member Откуда: Екб -> Мск Сообщений: 10234 Блог |
вообще то Address Windowing Extensions (AWE) - это программный интерфейс Винды...а не ноу-хау сиквела... вы можете и в своём приложении это реализовать |
||
24 апр 14, 07:28 [15926555] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
Knyazev Alexey, я скорее про то, что чтоб его задействовать в скуле - на сколько я помню - приходится делать вещи несколько менее тривиальные чем ALTER DATABASE SET <option> (точнее, как оно там для сервера выглядит?) ну и давайте не отвлекаться от основной темы |
24 апр 14, 07:48 [15926584] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
tpg, топик видел, полезной информации в нем 0: 1) со стороны 1С проблем нет 2) в 2005 режим совместимости с 2000 включен (хотя для 7.7.27.1 это даже не важно). 3) 1Ска коннектится тупо от имени sa - все права у нее есть (что подтверждается успешными реструктуризациями таблиц при изменении метаданных). |
24 апр 14, 09:05 [15926748] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
|
||
24 апр 14, 09:20 [15926806] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
Кстати, что всё же вернет select @@version ? |
24 апр 14, 09:21 [15926810] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
Поскольку (для вин7 и выше) регулярно упоминается необходимость подмены sqlsrv32.dll, sqlsrv32.rll, odbcbcp.dll (если я правильно понимаю - они реализую ОДБЦ-драйвер, через который работает 1С) - их версии 2000.86.3959.0 у всех |
24 апр 14, 10:46 [15927288] Ответить | Цитировать Сообщить модератору |
tpg Member Откуда: Novosibirsk Сообщений: 23902 |
Так у вас всё же 2008? И, кстати, кто в конторе 1с официально сказал, что 1с7.7 может работать на 2005 сиквеле? |
||
24 апр 14, 10:49 [15927304] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
tpg, я, пожалуй, процитирую сам себя:
|
||
24 апр 14, 13:22 [15928731] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37138 |
Хаки - это же официально, как же мы сразу не догадались. Как подружить 1с 7.7 и mssql 2005+ надо спрашивать в форуме по 1с. Сервер тут вообще ни при чем. |
24 апр 14, 13:24 [15928754] Ответить | Цитировать Сообщить модератору |
rigus Member Откуда: Сургут Сообщений: 349 |
SQL Сервер не переименовывали случаем? http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=88849 |
24 апр 14, 14:15 [15929192] Ответить | Цитировать Сообщить модератору |
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+ комментов надо искать комменты автора)
Т.е. в 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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Сервер сам по себе не переводит базы в одно/многопользовательские режимы. Сервер сам по себе не создает необновляемые курсоры. |
||
24 апр 14, 14:33 [15929343] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
Сетевое имя сервера с 2005 скулем менялось, да. И первые запуски 7.7 были с кривизной в sys.servers (и была ругань, что необходимо прилинковать экземпляр скуля с моим последующим выполнением sp_addlinkedserver). Потом сделал нормально (именно в менеджмет студии, запущенной на том компе, где стоит 2005 скуль): sp_dropserver <old_name>; (для всех кривых имен) sp_addserver <new_name>, local; ошибки не исчезли попутно заметил, что комп с 2008 скулем тоже менял сетевое имя - ему это вообще никак не помешало держать семерочную базу |
||
24 апр 14, 14:43 [15929411] Ответить | Цитировать Сообщить модератору |
rigus Member Откуда: Сургут Сообщений: 349 |
А службу sql сервера после смены имени через sp_addserver не забыли перезапустить? |
24 апр 14, 14:48 [15929461] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
Перезапускал, да. Но @@servername возвращает старое имя. Еще раз удалил, добавил локально, перезапустил службу - теперь правильное имя возвращает. |
24 апр 14, 14:55 [15929527] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
Йеееее, запустилась. По хорошему, еще бы понять, почему @@servername после прошлого перезапуска службы осталось старым... |
24 апр 14, 14:57 [15929540] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
Видимо, скопипастив отсюда: http://technet.microsoft.com/en-us/library/ms143799(v=sql.90).aspx так без кавычек и выполнил а скуль даже не ругнулся на непонятный аргумент |
24 апр 14, 15:04 [15929615] Ответить | Цитировать Сообщить модератору |
Satans Claws Member Откуда: Сообщений: 64 |
Однако, я был прав - решение заключалось в ответе на вопрос №3. |
||
24 апр 14, 15:06 [15929640] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |