|
Проблема при связке 1с8 MSSQL и внешнего MySQL сервера | ☑ | ||
---|---|---|---|---|
0
memogolik
22.11.12
✎
14:15
|
Есть самописный документ "Путевой лист".
При его проведении идет вызов глобальной функции общего модуля(самописный) "ЛогистикаИТранспорт", который получает данные с Mysql сервера и записывает некоторые данные в документ "Путевой". Проблема следующая, после некоторого времени работы при проведении документа начинает выскакивать ошибка: Ошибка при выполнении обработчика - 'ОбработкаПроведения' по причине: {ОбщийМодуль.ЛогистикаИТранспорт.Модуль(43)}: Ошибка при вызове метода контекста (Выполнить) по причине: по причине: Ошибка выполнения запроса по причине: Ошибка внешней базы данных: ошибка при выполнении запроса по причине: Ошибка ODBC. SQLSTATE: 08S01 Номер ошибки: 2006 Описание: [MySQL][ODBC 5.1 Driver][mysqld-5.0.51a-community]MySQL server has gone away вот функция, в которой вылетает ошибка: Функция РасчитатьРасстояниеПоДанныхСпутника(ВыбТС,ВыбДатаНачала,ВыбДатаКонца) Экспорт Если ЛогистикаИТранспорт.ИнициализацияПодключенияMySQL() Тогда Запрос = Новый Запрос; Запрос.УстановитьПараметр("ИдентификаторТС",ВыбТС.ИдентификаторТС); Запрос.УстановитьПараметр("ВыбДатаНачала",ПолучитьUnixTS(ВыбДатаНачала)); Запрос.УстановитьПараметр("ВыбДатаКонца",ПолучитьUnixTS(ВыбДатаКонца)); Запрос.Текст="ВЫБРАТЬ | navdata.Track |ИЗ | ВнешнийИсточникДанных.БазаТранспорт.Таблица.navdata КАК navdata |ГДЕ | navdata.GMTime >= &ВыбДатаНачала И | navdata.GMTime <= &ВыбДатаКонца И | navdata.VehicleId=&ИдентификаторТС |"; Выборка=Запрос.Выполнить();//вот на этой строчке ошибка. Если Выборка.Пустой() Тогда Возврат 0 Иначе Таблица = Выборка.Выгрузить(); Возврат Таблица.Итог("track")/1000; КонецЕсли; Иначе Возврат 0; КонецЕсли КонецФункции Есть идеи с чем это может быть связано? После перезапуска сервака какое то время ошибки не возникает. |
|||
1
memogolik
22.11.12
✎
14:23
|
Причем сам mysql сервер работает и к нему можно делать запросы.
|
|||
2
Александр_
Тверь 22.11.12
✎
14:24
|
не знаю как работают "ВнешнийИсточникДанных", но проверь после выполнения запроса, корректно ли закрывается ли соединение с MySQL?
Может оно у тебя не закрывается вовсе, а открывается открывается открывается и после отваливается ODBC (если через него соединение)? |
|||
3
Александр_
Тверь 22.11.12
✎
14:27
|
раз в явном виде вызваешь ИнициализацияПодключенияMySQL()
попробуй принудительно взывать что-нибудь типа ОтключитьMySQL() Типа Connection.Close(); |
|||
4
memogolik
22.11.12
✎
14:27
|
Очень может быть.
Вот функция ЛогистикаИТранспорт.ИнициализацияПодключенияMySQL() Функция ИнициализацияПодключенияMySQL() Экспорт ПараметрыСоединенияССерверомСбораДанных = Новый ПараметрыСоединенияВнешнегоИсточникаДанных; ПараметрыСоединенияССерверомСбораДанных.СтрокаСоединения= " |DRIVER={MySQL ODBC 5.1 Driver}; |SERVER=********; |DATABASE=navdb; |UID=root; |PWD=******;"; ВнешниеИсточникиДанных.БазаТранспорт.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединенияССерверомСбораДанных); Попытка ВнешниеИсточникиДанных.БазаТранспорт.УстановитьСоединение(); Возврат 1; Исключение Сообщить("Не удалось соединиться с базой по данным спутника"); Возврат 0; КонецПопытки; КонецФункции Какой код нужно добавить после выполнения запроса? |
|||
5
Александр_
Тверь 22.11.12
✎
14:29
|
РазорватьСоединение (Disconnect)
Синтаксис: РазорватьСоединение() Описание: Выполняет разрыв соединения с внешним источником данных. Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
6
memogolik
22.11.12
✎
14:29
|
Спасибо, буду пробовать
|
|||
7
Александр_
Тверь 22.11.12
✎
14:29
|
т.е. в твоем случае должно выполняться как-то так:
ВнешниеИсточникиДанных.БазаТранспорт.РазорватьСоединение(); |
|||
8
Александр_
Тверь 22.11.12
✎
14:31
|
Код семерошник писал?
в 1С 8 давно присутствуют значения типа булево... возврат 0 возврат 1 :) |
|||
9
memogolik
22.11.12
✎
14:34
|
Проблема походу не там, ведь он проходит успешно функцию ИнициализацияПодключенияMySQL(). Значит авторизация прошла успешно и соединение тоже.
|
|||
10
Александр_
Тверь 22.11.12
✎
14:37
|
(9)
ты не понял. Ты открываешь открываешь и еще открываешь соединения. А кто их закрывает? |
|||
11
Serginio1
22.11.12
✎
14:38
|
Попробуй дату так указать
ДатаСтр=Формат(НачалоДня(ДатаПрайса),"ДФ='yyyy-MM-dd ЧЧ:мм:сс'"); ТекстЗапроса=ТекстЗапроса+" |and (navdata.GMTime >='"+ДатаСтр+"' .... |
|||
12
memogolik
22.11.12
✎
14:43
|
(11) но после перезагрузке сервака все же работает нормально.
(10) т.к. вызов ИнициализацияПодключенияMySQL() проходит нормально значит соединился он без проблем. Проблема в том, что сразу обновление не могу поставить на рабочую базу. Вот пока анализирую. На тестовой базе таких ошибок не выявлял. (win7, файловая база). Рабочий сервак winserv 2008 sql 2008 |
|||
13
Александр_
Тверь 22.11.12
✎
14:45
|
(12) да все правильно. Соединился без проблем, а как начал передавать данные - выяснил, что какой-то ресурс (может порт, может еще что-то) кончился.
Возможно ODBC драйвер падает. У меня были похожие проблемы (правда я не через встроенный механизм подключаюсь, а через программное создание). |
|||
14
Serginio1
22.11.12
✎
14:51
|
||||
15
memogolik
22.11.12
✎
15:02
|
Самое интересное, что эту ошибку он выдает даже при остановленном mysql сервере.
|
|||
16
memogolik
22.11.12
✎
15:10
|
(13) а если действитель ODBC драйвер "Падает" как его перезапустить?
|
|||
17
memogolik
22.11.12
✎
15:16
|
Еще такой факт - если скопировать тестовую базу на сервак, где наблюдалась ошибка, то при проведении все нормально. Т.е. ошибка наблюдается только в серверной версии,а в файловой все норм.
|
|||
18
sapphire
22.11.12
✎
15:19
|
(0) На unix-е mysqld падает.
|
|||
19
memogolik
22.11.12
✎
15:24
|
(18) причем тут unix?
Проблема что на одном и том же компе в серверной версии базы ошибка есть, а в файловой нет - вот что не понятно. |
|||
20
Serginio1
22.11.12
✎
15:25
|
А сервер 1С 64 разрядный?
|
|||
21
memogolik
22.11.12
✎
15:27
|
(20) а как это можно проверить? вроде 32 разрядный, он вроде дешевле.
|
|||
22
rsv
22.11.12
✎
15:27
|
(0) Ну как вариант выкинь 1C - й объект ВнешнийОбъектДанных и подключайся к мускулу по ADO.
|
|||
23
memogolik
22.11.12
✎
15:29
|
(20) rmngr.exe (32) Это оно?
|
|||
24
rsv
22.11.12
✎
15:30
|
+(22) По крайней мере все это будет попрозрачней и не обернуто 1С еще в свой интерфейс.
|
|||
25
Serginio1
22.11.12
✎
15:31
|
Посмотри какой агент работает в сервисах
|
|||
26
memogolik
22.11.12
✎
15:32
|
(25) rmngr.exe 32
|
|||
27
Serginio1
22.11.12
✎
15:34
|
Панель управления\Все элементы панели управления\Администрирование\службы\Агент сервера 1С:Предприятия 8.2 (x86-64)
Обычно его переодически приходится перезапускать |
|||
28
memogolik
22.11.12
✎
15:36
|
32 разрядный... а драйвер mysql вроде 64.... попробовать поставить 32?
|
|||
29
Serginio1
22.11.12
✎
15:40
|
(28) Да трам помоему разные. 64 разрядный работает только для 64 разрядных приложений. У самого в так было. На сервере 64 разрядном выполняется, а с клиента нет.
|
|||
30
memogolik
22.11.12
✎
16:13
|
(29) и какой выход? в 64 драйвере он вроде оба ставит?
|
|||
31
Serginio1
22.11.12
✎
16:26
|
(30) Сноси 64 и Ставь 32 разрядный.
|
|||
32
memogolik
26.11.12
✎
18:08
|
(29) а почему тогда после перезагрузки сервера некоторое время все работает нормально? И ошибка обычно появляется через несколько часов работы. При этом из файловой копии той же базы на том же серваке все работает нормально. Какие дрова посоветуете на 32битный 1с сервер + server 2008&MSSQL 2008 64bit?
|
|||
33
Serginio1
27.11.12
✎
10:55
|
(32) У меня 64 разрядный 1С сервер был. Дрова стандартные последние. Подключение к американскому серверу. Особых проблем не было Но MySQL конечно очень капризный. Нужно было запросы подбирать. Попробуй через ADO. Не доверяю я этим ВнешнийИсточникДанных. Тем более тебе то не нужно соединять данные.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |