VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

asterisk и mssql

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
alexkayzer
Сообщения: 40
Зарегистрирован: 30 окт 2013, 12:39

asterisk и mssql

Сообщение alexkayzer »

Добрый день, коллеги!
Кто-нибудь сталкивался с работой astersik и mssql через freetds?
Проблема заключается в том, что периодически после выполнения процедуры( mssql у нас нужен исключительно для выполнения некоторых процедур, а не логирования CDR), на сервере mssql возникают блокировки таблиц. Прогеры говорят что * не закрывает соединение за собой. Но по факту * держит соединение открытым и в рамках него осуществляет выполнение процедур.
Причем это происходит настолько рандомно, что не знаем от чего отталкиваться. Одна и таже процедура может выполняться 100 раз, а на 101ый блокировка. Или бывает что подряд 2 или 3.
или через 30 попыток.
Version: freetds v0.91
TDS version: 7.4
Astersik 14.6.0-rc1
MSSQL Version 12.0.4100.1 ( 14 сервер)
В чем может быть проблема может кто-то сталкивался?
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: asterisk и mssql

Сообщение zzuz »

Команды SQL выполняются астериском телепатически ?
Линия24 - Системы Массового Телефонного Обслуживания
alexkayzer
Сообщения: 40
Зарегистрирован: 30 окт 2013, 12:39

Re: asterisk и mssql

Сообщение alexkayzer »

Нет, при поступлении вызова в процедуру передается входящий номер и ИД канала.
В другую процедуру при установке ДНД передается номер абонента и статус(снял или поставил ДНД) - вот эта чаще всех вызывает блокировки таблиц
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: asterisk и mssql

Сообщение zzuz »

В какую процедуру ? Настроенную где , как ? Где она вызывается ? Зачем она вызывается ? Почему она вызывается ? Зачем Вы ждете телепатов ? Или это телепаты вызывают процедуру ? Что вообще происходит?
Следующие ответы будут такие же как и ваши вопросы.
Линия24 - Системы Массового Телефонного Обслуживания
alexkayzer
Сообщения: 40
Зарегистрирован: 30 окт 2013, 12:39

Re: asterisk и mssql

Сообщение alexkayzer »

Есть процедура которая вызывается при нажатии на телефоне кнопки ДНД - она пишет в некую таблицу MSSQL время нажатия этой самой кнопки и номер телефона.
Процедуры вызывается на удаленном сервере MSSQL 2014. C которым Asterisk связан через драйвер FREETDS.
Extension.conf
[dnd_on_off]
exten=> line-status,1,NoOp() ; обработка реакции на DND
same => n..............( тут куча всяких действий по определению постановка это или снятие ДНД, присвоение значений переменных PSIP и VAL и т.д.)
same => n,NoOp(${mssql_dnd_status(${PSIP},${VAL})}) PSIP = номер телефона, VAL = 1 или 0 ( снял или поставил)

res_odbc.conf
[mssql]
enables =>yes
dsn => mssql
pre-connect => yes
username => XXXX
password = XXXX

func_odbc.conf
[dnd_status]
prefix=mssql
dsn=mssql
readsql= exec EMIS_SetDND_DIALPLAN 'SIP/${PSIP}','${VAL}'

odbc.ini
[mssql]
Description=MSSQL connection to 'KISDB' database
Driver=FreeTDS
Database=XXXX
username=XXXX
password=XXXX
Server=mssql2014
Port=1433
Trace=No
TDS_Version = 7.4

odbcinis.ini
[ODBC]
Trace = Yes
TraceFile = /var/log/odbc.log
ForceTrace = Yes
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1
[FreeTDS]
Description = TDS driver (Sybase/MS SQL)
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so

freetds.conf
[global]
# TDS protocol version
tds version = 7.4

# Whether to write a TDSDUMP file for diagnostic purposes
# (setting this to /tmp is insecure on a multi-user system)
dump file = /var/log/freetds.log
dump file append = yes
debug flags = 0xffff

# Command and connection timeouts
; timeout = 10
; connect timeout = 10

# If you get out-of-memory errors, it may mean that your client
# is trying to allocate a huge buffer for a TEXT field.
# Try setting 'text size' to a more reasonable limit
text size = 64512
[mssql]
host= mssql2014
port = 1433
tds version = 7.4

Ошибки

func_odbc.c: SQL Execute returned an error -1: 08S01: [FreeTDS][SQL Server]Write to the server failed (47)
WARNING[20653][C-0000a214] func_odbc.c: SQL Exec Direct failed (-1)![exec EMIS_SetDND_DIALPLAN 8115 1]
ERROR[20653][C-0000a214] func_odbc.c: Unable to execute query [exec EMIS_SetDND_DIALPLAN 8115 1]
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: asterisk и mssql

Сообщение zzuz »

В func_odbc.conf у вас у функции только параметр readsql . Запись функция mssql_dnd_status не предусматривает?

Заодно Вы можете протестировать вручную работу самого драйвера odbc , выполнив в цикле что-то типа

Код: Выделить всё

while 1 ; do echo "exec EMIS_SetDND_DIALPLAN 'SIP/$RANDOM','$RANDOM'" | isql mssql ; sleep 0.3 ; done 
на тестовой БД .
Линия24 - Системы Массового Телефонного Обслуживания
alexkayzer
Сообщения: 40
Зарегистрирован: 30 окт 2013, 12:39

Re: asterisk и mssql

Сообщение alexkayzer »

Я же говорю что все корректно отрабатывает, но иногда возникают блокировки.
А read или write роли не играет - mssql сервер сам разбирается с процедурой писать или нет.
Все работает-работает - бац все колом встало, пока программисты блокировку с таблицы не снимут, потом опять все работает.
Repz
Сообщения: 169
Зарегистрирован: 04 мар 2015, 11:35

Re: asterisk и mssql

Сообщение Repz »

alexkayzer писал(а):А read или write роли не играет - mssql сервер сам разбирается с процедурой писать или нет.
Ну и чего вы от asterisk хотите, для read блокировка таблицы не требуется, разбирайтесь с mssql. И блокировка всей таблицы это не айс, привет программистам!
BorisTheBlade
Сообщения: 167
Зарегистрирован: 14 фев 2011, 14:24

Re: asterisk и mssql

Сообщение BorisTheBlade »

Видимо надо дебажить mssql сервер.
Или попробовать воркараунд запуск SQL через agi-скрипт.
alexkayzer
Сообщения: 40
Зарегистрирован: 30 окт 2013, 12:39

Re: asterisk и mssql

Сообщение alexkayzer »

кто-нибудь знает где выключить autocommit для транзакций через ODBC?
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH