Опубликовано в Статьи по 1С 06.11.2019
Приложение на базе платформы «1С:Предприятие 8» отказалось запускаться. Вместо запуска ИБ пользователи получали ошибку «Microsoft SQL Server Native Client 11.0: Запрос COMMIT TRANSACTION не имеет соответствующей инструкции BEGIN TRANSACTION».
Оказалось, похожая проблема случается у многих, но детального и какого-то конкретного решения нет. Наткнулся на похожую тему форумов инфостарта, но решение сводилось к откату на ветку платформы 8.3.8. У нас применяется последняя доступная на сегодня версия 8.3.12.1924. Откатиться на предыдущий версию платформы не предоставляется возожным, т.к. версия конфигурации не позволяется работать на более низких версия 1С Передприятия, это требование применения исходит от поставщиков прикладного решения.
Не сумев найти конкретного решения, начал решать проблему в следующем порядке:
- Тормознул все сервисы (MS SQL, Сервер 1С)
- Почистил весь кэш (на сервере);
- После чистки кэша перезапустил сервисы, конфигуратор стал запускаться, но режим предприятия по-прежнему нет (либо какое то время работает и опять вылетает ошибка).
- Попробовал выгрузить информационную базу. Получилось. Загрузил ее в файловый вариант и запустил тесты в конфигураторе (Проверка логической целостности, реиндексация таблиц).
- Увеличил опцию на SQL-сервере «Network packet size» до 16383 (максимально возможный по заявлению поставщика продукта).
- Выгрузил вариант файловой базы в dt и загрузил в чистую базу на SQL.
- Все заработало.
Увеличение опции на SQL-сервере «Network packet size» помогло решить проблему с вылетом.
Как увеличить размер сетевого пакета:
Параметр network packet size используется для установки размера пакета (в байтах), применяемого во всей сети. Пакеты — это фрагменты данных фиксированного размера, с помощью которых осуществляется передача запросов и ответов между клиентами и серверами. Размер пакетов по умолчанию составляет 4096 байт.
Если приложение осуществляет массовое копирование или отправляет/получает большие объемы данных типа text или image, увеличение размера пакета может повысить эффективность работы системы за счет сокращения числа сетевых операций чтения и записи. Если приложение отправляет и получает небольшие объемы информации, размер пакета можно уменьшить до 512 байт, чего в большинстве случаев достаточно.
Ограничения:
- Максимальный размер сетевого пакета для шифрованных соединений составляет 16 383 байта.
Настройки параметра конфигурации сервера network packet size в SQL Server 2019:
Использование среды SQL Server Management Studio
Настройка параметра network packet size
- В обозревателе объектов щелкните правой кнопкой мыши сервер и выберите пункт Свойства.
- Щелкните узел Дополнительно .
- На вкладке Сетьвыберите значение в поле Размер сетевого пакета .
Параметр вступает в силу немедленно, без перезапуска сервера.
Опубликовано в Статьи по 1С 06.11.2019
Приложение на базе платформы «1С:Предприятие 8» отказалось запускаться. Вместо запуска ИБ пользователи получали ошибку «Microsoft SQL Server Native Client 11.0: Запрос COMMIT TRANSACTION не имеет соответствующей инструкции BEGIN TRANSACTION».
Оказалось, похожая проблема случается у многих, но детального и какого-то конкретного решения нет. Наткнулся на похожую тему форумов инфостарта, но решение сводилось к откату на ветку платформы 8.3.8. У нас применяется последняя доступная на сегодня версия 8.3.12.1924. Откатиться на предыдущий версию платформы не предоставляется возожным, т.к. версия конфигурации не позволяется работать на более низких версия 1С Передприятия, это требование применения исходит от поставщиков прикладного решения.
Не сумев найти конкретного решения, начал решать проблему в следующем порядке:
- Тормознул все сервисы (MS SQL, Сервер 1С)
- Почистил весь кэш (на сервере);
- После чистки кэша перезапустил сервисы, конфигуратор стал запускаться, но режим предприятия по-прежнему нет (либо какое то время работает и опять вылетает ошибка).
- Попробовал выгрузить информационную базу. Получилось. Загрузил ее в файловый вариант и запустил тесты в конфигураторе (Проверка логической целостности, реиндексация таблиц).
- Увеличил опцию на SQL-сервере «Network packet size» до 16383 (максимально возможный по заявлению поставщика продукта).
- Выгрузил вариант файловой базы в dt и загрузил в чистую базу на SQL.
- Все заработало.
Увеличение опции на SQL-сервере «Network packet size» помогло решить проблему с вылетом.
Как увеличить размер сетевого пакета:
Параметр network packet size используется для установки размера пакета (в байтах), применяемого во всей сети. Пакеты — это фрагменты данных фиксированного размера, с помощью которых осуществляется передача запросов и ответов между клиентами и серверами. Размер пакетов по умолчанию составляет 4096 байт.
Если приложение осуществляет массовое копирование или отправляет/получает большие объемы данных типа text или image, увеличение размера пакета может повысить эффективность работы системы за счет сокращения числа сетевых операций чтения и записи. Если приложение отправляет и получает небольшие объемы информации, размер пакета можно уменьшить до 512 байт, чего в большинстве случаев достаточно.
Ограничения:
- Максимальный размер сетевого пакета для шифрованных соединений составляет 16 383 байта.
Настройки параметра конфигурации сервера network packet size в SQL Server 2019:
Использование среды SQL Server Management Studio
Настройка параметра network packet size
- В обозревателе объектов щелкните правой кнопкой мыши сервер и выберите пункт Свойства.
- Щелкните узел Дополнительно .
- На вкладке Сетьвыберите значение в поле Размер сетевого пакета .
Параметр вступает в силу немедленно, без перезапуска сервера.
Here’s a strange problem I’m running into on a production server. It has happened twice in the last two weeks, and this is a server that gets a lot of traffic.
We have some code in a Web Service that executes a BEGIN TRAN
, then runs a few SQL queries (two inserts followed by an update). Then at the end executes a COMMIT
. Twice now we have gotten the message in the logs:
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
Between the first two inserts and the update, we call another web service, so there could be a slight delay between the first two inserts and last update before the COMMIT
is called. Could this be causing our problem? We’re running this on IIS 7 and Server 2008 R2 (all updated applied).
Originally we though it could be the app pools getting recycled, but changed that to recycle in the middle of the night. Now I’m not sure what would be causing SQL server to forget the call to BEGIN TRAN
.
This web service does get called quite a bit. Has anyone seen something like this before? I’m at a total loss at the moment…
Any help or suggestion appreciated greatly!
If you’re receiving error Msg 3902, Level 16, which reads “The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION”, it’s probably because you’ve got a stray COMMIT
statement.
You could be getting this due to implementing error handling, and forgetting that you’ve already committed or rolled back the transaction elsewhere in your code.
Example of Error
Here’s a simple example to demonstrate the error:
SELECT ProductName, ProductPrice FROM Products;
COMMIT TRANSACTION;
Result:
(7 rows affected) Msg 3902, Level 16, State 1, Line 2 The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
This will occur if your SET IMPLICIT_TRANSACTIONS
is OFF
. See below for what happens when SET IMPLICIT_TRANSACTIONS
is ON
.
Example of Error due to Error Handling
You could be getting this due to implementing error handling, and forgetting that you’ve already committed or rolled back the transaction elsewhere in your code.
For example:
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO Orders ( OrderId, OrderDate, CustomerId )
VALUES ( 5006, SYSDATETIME(), 1006 );
INSERT INTO OrderItems ( OrderId, OrderItemId, ProductId, Quantity, ItemPrice )
VALUES ( 5006, 1, 1, 20, 25.99 );
INSERT INTO OrderItems ( OrderId, OrderItemId, ProductId, Quantity, ItemPrice )
VALUES ( 5006, 2, 7, 120, 9.99 );
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH
COMMIT TRANSACTION;
Result:
(1 row affected) (1 row affected) (1 row affected) Msg 3902, Level 16, State 1, Line 20 The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
In this case, I already had COMMIT TRANSACTION
in the TRY
block. So by the time the second COMMIT TRANSACTION
was encountered, the transaction had already been committed.
We would see the same even if the transaction had encountered an error, and was rolled back. A rollback will end the transaction, and therefore, no further COMMIT
statements are required.
So to fix this issue, we’d simply remove the last COMMIT TRANSACTION
, and the transaction code would look like this:
BEGIN TRANSACTION
BEGIN TRY
INSERT INTO Orders ( OrderId, OrderDate, CustomerId )
VALUES ( 5006, SYSDATETIME(), 1006 );
INSERT INTO OrderItems ( OrderId, OrderItemId, ProductId, Quantity, ItemPrice )
VALUES ( 5006, 1, 1, 20, 25.99 );
INSERT INTO OrderItems ( OrderId, OrderItemId, ProductId, Quantity, ItemPrice )
VALUES ( 5006, 2, 7, 120, 9.99 );
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION;
END CATCH
Implicit Transactions
If you have implicit transactions enabled, you might get different results to the first example.
If we set IMPLICIT_TRANSACTIONS
to ON
, here’s what we get:
SET IMPLICIT_TRANSACTIONS ON;
SELECT ProductName, ProductPrice FROM Products;
COMMIT TRANSACTION;
Result:
+---------------------------------+----------------+ | ProductName | ProductPrice | |---------------------------------+----------------| | Left handed screwdriver | 25.99 | | Long Weight (blue) | 14.75 | | Long Weight (green) | 11.99 | | Sledge Hammer | 33.49 | | Chainsaw | 245.00 | | Straw Dog Box | 55.99 | | Bottomless Coffee Mugs (4 Pack) | 9.99 | +---------------------------------+----------------+ (7 rows affected)
No error occurs.
This is because, certain T-SQL statements automatically start a transaction when they run. It’s as if they were preceded by an invisible BEGIN TRANSACTION
statement.
When IMPLICIT_TRANSACTIONS
is OFF
, these statements are automatically committed. It’s as if they’re succeeded by an invisible COMMIT TRANSACTION
statement. In this scenario, the transaction is in autocommit mode.
When IMPLICIT_TRANSACTIONS
is ON
, there is no invisible COMMIT TRANSACTION
statement. These statements are still started by an invisible BEGIN TRANSACTION
, but they need to be ended explicitly.
An implicit transaction remains in progress until it is either explicitly committed or explicitly rolled back.
Therefore, in this example, our stray COMMIT TRANSACTION
statement was actually needed to end the implicit transaction.
|
|||
Amodeus
02.07.14 — 11:05 |
Время от времени при входе в 1С выдает ошибку: Ошибка СУБД: Microsoft SQL Server Native Client 10.0: Запрос COMMIT TRANSACTION не имеет соответствующей инструкции BEGIN TRANSACTION. HRESULT=80004005, SQLSrvr: SQLSTATE=25000, state=1, Severity=10, native=3902, line=1 После n-ного количества попыток все-таки получается зайти. Так же помогает перезапуск сервера. Всвязи с чем возникает эта ошибка и как ее избежать? 1С:Предприятие 8.2 (8.2.19.68) УПП, редакция 1.2 (1.2.12.1) |
||
Maxus43
1 — 02.07.14 — 11:06 |
а скуль какой? в настройках ковырялись? З.ы. 19.68 — старая глючная платформа, поновей не предлагать? |
||
Amodeus
2 — 02.07.14 — 11:12 |
MS SQL Server 2008 R2. А что в настройках ковырять? |
||
ikea
3 — 02.07.14 — 11:20 |
У тебя же все написано. Что зафиксировать транзакцию не имеет соответствующей инструкции начать транзакцию. Значит время от времени 1с пытается выполнить этот запрос, который и падает с ошибкой. |
||
Amodeus
4 — 02.07.14 — 11:44 |
Так как исключить этот запрос? В какую сторону копать? |
||
Maxus43 5 — 02.07.14 — 11:49 |
я бы полатформу обновил… в скуле ничего ковырять не надо, но кто-то мог поковырять и что-то сломать, тут вобще хз. Сначала платформа, потом дальше сомтреть |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Ошибка СУБД
Модератор: Дмитрий Юхтимовский
Ошибка СУБД
Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Запрос COMMIT TRANSACTION не имеет соответствующей инструкции BEGIN TRANSACTION. HRESULT=80004005, SQLSrvr: SQLSTATE=25000, state=1, Severity=10, native=3902, line=1
Добрый день, не знаю можно ли здесь обращаться с подобными вопросами, но если можно, то столкнулся с такой ошибкой, она возникает при установке ролей пользователю, возникает не всегда, а когда либо много пользователей работает, либо запущены все регламентные задания.
Подскажите пожалуйста куда копать.
- Антон
- Сообщений: 4
- Зарегистрирован: 18 июн 2015, 21:41
Re: Ошибка СУБД
Гилёв Вячеслав » 18 июн 2015, 23:27
откатиться к предыдущей версии конфигурации
- Гилёв Вячеслав
- Сообщений: 2543
- Зарегистрирован: 11 фев 2013, 15:40
- Откуда: Россия, Москва
Re: Ошибка СУБД
Антон » 19 июн 2015, 11:16
Вы не про уровень совместимости?
именно про наши доработки?
- Антон
- Сообщений: 4
- Зарегистрирован: 18 июн 2015, 21:41
Re: Ошибка СУБД
Антон » 19 июн 2015, 11:19
такое ощущение, что перед этим уровень совместимости повысили.
- Антон
- Сообщений: 4
- Зарегистрирован: 18 июн 2015, 21:41
Re: Ошибка СУБД
Антон » 19 июн 2015, 11:55
вообще ради интереса, поставил на локальную машину sql server, взял вчерашний бекап, зашел под 10 пользователями, включил все регламентные задания, стал менять права пользователям, все работает.
(при таких же условия и даже меньших пользователях не всегда дает менять права)
единственные отличия на глаз это операционные системы, на локальной машине 7 стоит, на сервере с проблемами 2008 R2.
И на локальной платформа последняя, на сервере предпоследняя, но не думаю что дело в этом. (хотя этот нюанс проверю в выходные.)
- Антон
- Сообщений: 4
- Зарегистрирован: 18 июн 2015, 21:41
Re: Ошибка СУБД
Гилёв Вячеслав » 19 июн 2015, 12:59
я про предыдущую версию кода конфигурации
- Гилёв Вячеслав
- Сообщений: 2543
- Зарегистрирован: 11 фев 2013, 15:40
- Откуда: Россия, Москва
Вернуться в MS SQL Server для целей 1С:Предприятие
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вероятно вы на версии платформы 8.2.13 обновили конфигурацию БП на версию 2.0.42.5, после чего при обновлении платформы на версию 8.2.16.368 или выше при запуске базы после конвертации происходит ошибка SDBL.
Способ обхода сначала обновить платформу, сконвертировать ИБ, и только после этого обновляться на 2.0.42
Если обновление конфигурации на 2.0.42.5 выполнялось на 8.2.13, то режим совместимости оказался с 8.2.16, а изменения структуры таблиц БД, которую сделала бы 8.2.16 при смене режима совместимости, не произошло, т.к. 13-й релиз этого не умеет. Таким образом, если далее запускается платформа 16-го релиза, то она считает, что изменение структуры таблиц уже выполнено, хотя этого не произошло. Это и приводит к описанному эффекту. Как обойти: сначала обновить платформу, сконвертировать ИБ, и только после этого обновляться на 2.0.42; либо 1. Открыть 13-м релизом Конфигуратора 2. Сохранить конфигурацию в файл 3. понизить режим совместимости до 8.1, реструктуризовать 4. установить режим совместимости «Не используется», реструктуризовать 5. Закрыть Конфигуратор 13-го релиза, открыть Конфигуратор 16-го. 6. Выполнить загрузку конфигурации из файла, реструктуризоваться.
ЦитироватьMicrosoft OLE DB Provider for SQL Server:
Запрос COMMIT TRANSACTION не имеет соответствующей инструкции BEGIN TRANSACTION
Такая ошибка происходит в клиент-серверном варианте информационной базы с использованием MS SQL Server.
Она происходит если параллельно с работой пользователей выполнять из кода конфигурации метод глобального контекста УстановитьВремяОжиданияБлокировкиДанных.
В качестве способа обхода рекомендуется исключить вызовы УстановитьВремяОжиданияБлокировкиДанных параллельно с работой пользователей. Обеспечить в конфигурации вызовы метода УстановитьВремяОжиданияБлокировкиДанных только в режиме монопольного доступа к базе данных.
Ошибка исправлена в платформе версии 8.3.9.1818
Вероятно вы на версии платформы 8.2.13 обновили конфигурацию БП на версию 2.0.42.5, после чего при обновлении платформы на версию 8.2.16.368 или выше при запуске базы после конвертации происходит ошибка SDBL.
Способ обхода сначала обновить платформу, сконвертировать ИБ, и только после этого обновляться на 2.0.42
Если обновление конфигурации на 2.0.42.5 выполнялось на 8.2.13, то режим совместимости оказался с 8.2.16, а изменения структуры таблиц БД, которую сделала бы 8.2.16 при смене режима совместимости, не произошло, т.к. 13-й релиз этого не умеет. Таким образом, если далее запускается платформа 16-го релиза, то она считает, что изменение структуры таблиц уже выполнено, хотя этого не произошло. Это и приводит к описанному эффекту. Как обойти: сначала обновить платформу, сконвертировать ИБ, и только после этого обновляться на 2.0.42; либо 1. Открыть 13-м релизом Конфигуратора 2. Сохранить конфигурацию в файл 3. понизить режим совместимости до 8.1, реструктуризовать 4. установить режим совместимости «Не используется», реструктуризовать 5. Закрыть Конфигуратор 13-го релиза, открыть Конфигуратор 16-го. 6. Выполнить загрузку конфигурации из файла, реструктуризоваться.
Я бы посмотрел в чем разница тех баз, которые вылетают от тех, которые нормально работают.
Возможно, что некоторое время назад эти две базы жили под другой платформой и с тех пор платформа поменялась и надо что-то сделать. Например, выгрузить базу на новой платформе и загрузить обратно.
Возможно, что не нужно ничего долго искать, а гораздо быстрей переподключить базы с сервера СУБД заново (т.е. с другими именами, например) к серверу 1С. Или начать хотя бы с того, что кэш сервера 1С почистить.
На сеть и прочее остальное железячное грешить бестолку, т.к. какие-то базы работают, а значит с сетью и серверами в целом все в порядке.
Невосстановимая ошибка Ошибка при выполнении запроса POST к ресурсу /e1cib/modules/call: по причине: Соединение с сервером баз данных непригодно для использования после разрыва соединения администратором и будет переустановлено. Microsoft SQL Server Native Client 11.0: Запрос COMMIT TRANSACTION не имеет соответствующей инструкции BEGIN TRANSACTION.
Круто, как ты этого добился?
Не знаю, и поэтому прошу помочь.
О, у меня бухи тоже так умеют. Появилось после установки Server Native Client и новой платформы. Что за беда — не понятно.
мы тоже обновились до платформы 8.3.9.1818 и словили эту ошибку
8.3.8.2054 — тоже такая ошибка появилась. На 8.3.6.2449 не было.
Хотя пишут что Печаль, что в ветке 8.3.8 это не исправлено. ИМХО, продуктивные базы пока рано на 8.3.9 переводить. Поэтому пока приходится юзать указанный способ обхода:
Поставил 8.3.8.2197, полёт нормальный (за неделю ошибки не было ни разу).
Кто-нибудь нашел решение проблемы? 8.3.9.2033 проблема имеет место быть
режим совместимости вЫключать пробовал?
Native Client этот — 11.0.6538.0 или старше?
У нас тоже 8.3.9.2033 Native Client этот — 11.0.6538.0 Режим совместимости 8.3.8 Работать невозможно, все время выдает ошибку соединения
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
Here’s a strange problem I’m running into on a production server. It has happened twice in the last two weeks, and this is a server that gets a lot of traffic.
We have some code in a Web Service that executes a BEGIN TRAN
, then runs a few SQL queries (two inserts followed by an update). Then at the end executes a COMMIT
. Twice now we have gotten the message in the logs:
The COMMIT TRANSACTION request has no corresponding BEGIN TRANSACTION.
Between the first two inserts and the update, we call another web service, so there could be a slight delay between the first two inserts and last update before the COMMIT
is called. Could this be causing our problem? We’re running this on IIS 7 and Server 2008 R2 (all updated applied).
Originally we though it could be the app pools getting recycled, but changed that to recycle in the middle of the night. Now I’m not sure what would be causing SQL server to forget the call to BEGIN TRAN
.
This web service does get called quite a bit. Has anyone seen something like this before? I’m at a total loss at the moment…
Any help or suggestion appreciated greatly!