Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) ReconnectNative + терминнал: вылет ((( (число прочтений - 2138 )
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
ReconnectNative + терминнал: вылет (((
24. Октября 2007 :: 23:18
Печать  
Вот такую ошибку словил:
Та же база сейчас перепроводится на локалке и с той-же 1С++.dll (2.0.3.5 / Nightly build 2007-09-27 ).
Уже минуло то критичное количество реконнетов на которых был вылет.
Посмотрите плз, что за дела творятся.
Основное отличие: работа в терминале..
  

badReconn.bmp ( 854 KB | Загрузки )
badReconn.bmp
Наверх
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: ReconnectNative + терминнал: вылет (((
Ответ #1 - 25. Октября 2007 :: 05:29
Печать  
Насколько видно по текущему окну ты как бы не в терминале сидишь а радмином подключен к машине.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #2 - 25. Октября 2007 :: 05:45
Печать  
А какая <БД по-умолчанию> стоит для пользователя MSSQL (тот что в конфигураторе прописывается), под которым работает эта ИБ 1С?
  
Наверх
ICQ  
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #3 - 25. Октября 2007 :: 07:05
Печать  
DmitrO писал(а) 25. Октября 2007 :: 05:45:
А какая <БД по-умолчанию> стоит для пользователя MSSQL (тот что в конфигураторе прописывается), под которым работает эта ИБ 1С?

а какая должна быть? "master"? (это так Улыбка на будущее хочу знать)

п.с.: за ReconnectNative огромное спасибо Подмигивание штука очень нужная
  
Наверх
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #4 - 25. Октября 2007 :: 07:39
Печать  
Да, в принципе не важно какая. Просто бегло анализируя возможные причины описанной ошибки у меня возникло предположение.
Излагаю:
Этот метод как известно закрывает родное соединение 1С и открывает снова.
Дак вот, дело в том, что драйвер ODBC написан так, что вызывая функцию для закрытия соединения, на сервер уходит соответствующая команда, от сервера получается ответ об успешном выполнении этой команды, и функция возвращает управление вызывающему коду. Данное соединение для драйвера ODBC считается закрытым.
НО! Это не означает что сервер к этому моменту уже освободил все ресурсы связанные с этим соединением и собственно удалил процесс связанный с этим соединением.
В результате при выполнении метода ReconnectNative в монопольном режиме, мы можем запросто получить такую ситуацию, что подключаясь снова сразу после завершения соединения, сервер еще не освободит процесс связанный с предыдущим соединением, а так так БД находится в режиме single user он не может создать второе соединеие к этой базе и возвращает описанную ошибку.
Т.е. проблема может быть решена не использованием монопольного режима.

Также есть еще одна особенность драйвера. Сначала соединение всегда устанавливается к БД по-умолчанию, той которая прописана в свойствах пользователя MSSQL. ДАЖЕ в том случае если в строке подключения явно прописана база данных, просто в этом случае драйвер внутренне исполняет инструкцию USE.

На сколько я помню код который я писал в реализации метода ReconnectNative, там инструкция USE какраз исполняется явно (т.е. мной, а не в строке подключения), специально для того, чтобы дождаться освобождения процесса на сервере. При этом, конечно, подключение к БД по-умолчанию должно быть возможно сразу после разрыва соединения.
Т.о. второе решение проблемы - это прописать в БД по-умолчанию базу, которая всегда доступна, например master.
  
Наверх
ICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #5 - 25. Октября 2007 :: 08:07
Печать  
DmitrO писал(а) 25. Октября 2007 :: 07:39:
Т.е. проблема может быть решена не использованием монопольного режима.

Да, сидел монопольно, сегодня ночью попробую еще раз, но не монопольно.

DmitrO писал(а) 25. Октября 2007 :: 07:39:
Т.о. второе решение проблемы - это прописать в БД по-умолчанию базу, которая всегда доступна, например master.

Попробую прописать.
Дело в том что под этим пользователем крутится еще одна БД(рабочаяя), там же рядышком (я проводил тест на тестовой).
ВНИМАНИЕ! Там настроен шедулер на запуск выгрузки рабочей БД: открывеется конфигуратор в пакетном режиме.
Время запуска: 02:20 (сегодня выяснил). Судя по времени ошибки (02:33) они пересеклись.
ТОлько батч баскап работает с рабочей БД, а я работал с тестовой. Пользователь SQL один и тот же.

BatchBackup1C взят отсюда (http://www.script-coding.info/filez.html), немного переделан.
  
Наверх
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #6 - 25. Октября 2007 :: 08:41
Печать  
Ну, если это разные БД то эти соединения друг другу мешать не могут, не смотря на то что соединения используют одного пользователя.  Озадачен
Однако, надеюсь понятно, что в период когда соединение рвется и до того как оно установилось снова может влезть кто угодно(!), различные фоновые задания, или например штатные бекапы базы или журнала транзакций выполняемые агентом, которые вобщем-то обычно часто происходят, и т.п.
Вообще, монопольный режим это зло, особенно в такой задаче с реконнектом.
  
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #7 - 25. Октября 2007 :: 13:10
Печать  
DmitrO, у моих знакомых торгашей проводилось 2 с лишним года с реконнектом даже через 10 (!) доков (см. мою ссылку)... все нормально. По-моему даже монопольно, но запущено было прямо на серваке (робот)

>>Вообще, монопольный режим это зло, особенно в такой задаче с реконнектом.
Можно камент почему?

  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
villy
Senior Member
****
Отсутствует



Сообщений: 287
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #8 - 25. Октября 2007 :: 13:31
Печать  
хотел бы немного уточнить, если можно Подмигивание
в монопольном режиме при использовании ReconnectNative соединение к базе устанавливается "монопольное" или нет?
если память не изменяет то в 2.0.2.2 было не "монопольное".
  
Наверх
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #9 - 26. Октября 2007 :: 04:31
Печать  
Цитата:
DmitrO, у моих знакомых торгашей проводилось 2 с лишним года с реконнектом даже через 10 (!) доков (см. мою ссылку)... все нормально. По-моему даже монопольно, но запущено было прямо на серваке (робот)

Ну я же объяснил уже, что если пользователю MSSQL поставить БД по-умолчанию отличную от текущей БД, то все будет нормально. У твоих знакомых наверно так и стоит.

Цитата:
>>Вообще, монопольный режим это зло, особенно в такой задаче с реконнектом.
Можно камент почему?

Для данной задачи потому, что в момент разрыва соединения базу могут занять другие процессы. А вообще, потому что принцип такой - БД должна работать всегда (чем сложнее система, чем больше в ней узлов связи с другими системами тем этот принцип проявляется сильнее), вместо монопольного режима нужно использовать соответстующие блокировки. Конечно, все зависит от поставленых задач и для каждой надо выбирать максимально эффективный и максимально простой способ решения.

Цитата:
хотел бы немного уточнить, если можно 
в монопольном режиме при использовании ReconnectNative соединение к базе устанавливается "монопольное" или нет?
если память не изменяет то в 2.0.2.2 было не "монопольное".

К базе устанавливается просто соединение. Для mssql нет понятия установить монопольное соединение есть понятие БД в режиме single user это несколько разные вещи. Если в 1С делается вход монопольно, то БД переводится в режим single user. Если после этого использовать ReconnectNative (метод ни как не изменяет режим БД), то у него должна быть возможность после разрыва соединения снова подключиться (т.е. чтобы никто не занял эту БД), если кто-то выполнит подключение после разрыва, то этот кто-то и окажется тем единственным пользователем, которому MSSQL и позволит работать с этой БД, и ReconnectNative подключиться не сможет.
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #10 - 26. Октября 2007 :: 04:47
Печать  
Еще. Чтобы уже до конца разобраться.
Т.к. эта задача весьма экзотическая, я предвидел такое развитие событий с монопольным режимом, и в методе ReconnectNative есть специальный код, который устанавливает подключение с сервером (с БД по-умолчанию конечно), и дальше, в цикле пытается перевести подключение к текущей БД, пока инструкция USE не выполнится успешно. Т.о. ReconnectNative может ждать освобождения БД бесконечно, пока БД не освободится, другого выхода из цикла не предусмотрено, т.к. в этом случае система останется в неработоспособном состоянии.
Т.е. если в разрыв залез какой-нибудь бекап или другая фоновая задача, она сначала доработает, освободит БД, после этого ReconnectNative продолжит свою работу.
  
Наверх
ICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #11 - 27. Октября 2007 :: 12:15
Печать  
Тезис "Мнонопольный режим - зло". Мнонопольный режим, далее МР.
А как быть с такой ситуацией в которой МР необходим, это само перепроведение.
Допустим перепровожу базу с "01.01.06" по сейчас.
Деалаю выборку документов.
Соответственно надо сдвинуть ТА на "01,01,06" но я не могу сделать это не в МР.
если я этого не сделаю, тогда вс перепроводимые документы будут проводиться "Задним числом", что существенно замедлит перепроведение (исользуются стандартные механизмы).
Вывод МР жестко необходим приперепроведении. ((
  
Наверх
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #12 - 29. Октября 2007 :: 02:35
Печать  
trdm писал(а) 27. Октября 2007 :: 12:15:
Тезис "Мнонопольный режим - зло". Мнонопольный режим, далее МР.
А как быть с такой ситуацией в которой МР необходим, это само перепроведение.
Допустим перепровожу базу с "01.01.06" по сейчас.
Деалаю выборку документов.
Соответственно надо сдвинуть ТА на "01,01,06" но я не могу сделать это не в МР.
если я этого не сделаю, тогда вс перепроводимые документы будут проводиться "Задним числом", что существенно замедлит перепроведение (исользуются стандартные механизмы).
Вывод МР жестко необходим приперепроведении. ((

Есть же обработка для переноса ТА, или по скорости будет медленее?
  
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #13 - 29. Октября 2007 :: 05:09
Печать  
Такая простецкая задача как сдвиг ТА вообще не повод для МР, например обработка УстановкаТА.ert (www.dev.citykirov.ru) позволяет сдвигать ТА и в разделенном режиме.
  
Наверх
ICQ  
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ReconnectNative + терминнал: вылет (((
Ответ #14 - 01. Ноября 2007 :: 19:34
Печать  
DmitrO писал(а) 29. Октября 2007 :: 05:09:
Такая простецкая задача как сдвиг ТА вообще не повод для МР, например обработка УстановкаТА.ert (www.dev.citykirov.ru) позволяет сдвигать ТА и в разделенном режиме.

простецкая она для тех, кто разобрался. Я же только представляю себе данные механизмы, но их "изнутри" не счупал.
  
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать