Problems: I am using AsteriskNow which running asterisk 2.0 server in VirtualBox. And i want to connect Asterisk with MySQL databases using ODBC modules. But it fails. When i started with asterisk*CLI> odbc show The command prompt shows that "No such command ODBC SHOW"
My Objectives: configure ODBC in asterisk to access MySQL from Asterisk's dialplan directly and dynamically.
What i did: I installed my AsteriskNow in VirtualBox. The version of asterisk is 2.0, the CentOS version 5.8 final. I firstly installed related Linux RPMs by
yum -y install unixODBC-devel
yum -y install libdbi-dbd-mysql
yum -y install mysql-connector-odbc
My detail configured files are as follows:
/etc/odbc.ini
[asterisk-connector]
Description = MySQL connection to 'asterisk' database
Driver = MySQL
Database = asterisk
Server = localhost
UserName = root
Password = mypassword
Port = 3306
Socket = /var/lib/mysql/mysql.sock
/etc/odbcinst.ini
# Driver from the mysql-connector-odbc package
# Setup from the unixODBC-libs package
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc3_r.so
Setup = /usr/lib/libodbcmyS.so
;Driver64 = /usr/lib64/libmyodbc3_r.so
;Setup64 = /usr/lib64/libodbcmyS.so
FileUsage = 1
/etc/asterisk/res_odbc.conf
[asterisk]
enabled=>yes
dsn=>asterisk-connector
;dsn=>asterisk
username=>root
password=>mypassword
pooling=>no
limit=>0
pre-connect=>yes
When i used "isql" command to connect MySQL databases, it works fine

But when i started the console in CLI, input command odbc show . it shows No SUCH COMMAND "odbc show "

And i am confusing here, and do not know how to solve it. I googled it and find someone recommend to solve it by having the res_odbc.so module loaded. Thus i went through the file modules.conf and add those modification into files
autoload=yes
preload => res_odbc.so
preload => res_config_odbc.so
After being modified, the complete file is as follow" /etc/asterisk/modules
;
; Asterisk Module Loader configuration file
;
;
[modules]
autoload=yes
;
; Any modules that need to be loaded before the Asterisk core has been
; initialized (just after the logger has been initialized) can be loaded
; using 'preload'. This will frequently be needed if you wish to map all
; module configuration files into Realtime storage, since the Realtime
; driver will need to be loaded before the modules using those configuration
; files are initialized.
;
; An example of loading ODBC support would be:
preload => res_odbc.so
preload => res_config_odbc.so
;
; As FreePBX is using Local as the channel for queue members we need to make sure
; that pbx_config.so and chan_local.so are preloaded. If not, queue members
; will be marked as invalid until app_queue is reloaded.
preload => pbx_config.so
preload => chan_local.so
;
; Uncomment the following if you wish to use the Speech Recognition API
;preload => res_speech.so
;
; If you want, load the GTK console right away.
; KDE console is obsolete and was removed from Asterisk 2008-01-10
;
noload => pbx_gtkconsole.so
;load => pbx_gtkconsole.so
noload => pbx_kdeconsole.so
;
; Intercom application is obsoleted by
; chan_oss. Don't load it.
;
noload => app_intercom.so
;
; DON'T load the chan_modem.so, as they are obsolete in * 1.2
noload => chan_modem.so
noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => chan_modem_i4l.so
; Trunkisavail is a broken module supplied by Trixbox
noload => app_trunkisavail.so
; Ensure that format_* modules are loaded before res_musiconhold
;load => format_ogg_vorbis.so
load => format_wav.so
load => format_pcm.so
; format_au.so is removed from Asterisk 1.4 and later, remove ; to enable
;load => format_au.so
; This isn't part of 'Asterisk' iteslf, it's part of asterisk-addons. If this isn't
; installed, asterisk will fail to start. But it does need to go here for native MOH
; to work using mp3's.
; Note that on a system with a high number of calls, using a compressed audio format for
; musiconhold takes CPU resources. Converting these files to ulaw/alaw makes the job
; much easier for your CPU.
load => format_mp3.so
load => res_musiconhold.so
;
; Load either OSS or ALSA, not both
; By default, load no console driver
;
noload => chan_alsa.so
noload => chan_oss.so
;
noload => app_directory_odbcstorage.so
noload => app_voicemail_odbcstorage.so
After did this, i went back the CLI console to reload the res_odbc.so. But it failed to find the res_odbc.so

I need someone give me hints on solving the ODBC connections problems.
In the AsteriskNOW environment, to get res_odbc.so
, which is the module that provides the ODBC resource to Asterisk, you need to have the asterisk-odbc
package installed.
(Depending on how your AsteriskNOW installation is configured with respect to the packages.asterisk.org repositories, you may need asterisk18-odbc
or a similar versioned package instead.)
If you have res_odbc.so
(check in /usr/lib/asterisk/modules
for this file) and it is still not loading correctly, you should check the Asterisk logs in /var/log/asterisk
for messages relating to res_odbc
for more information.
Try do follwoing:
asterisk -rvvv
module unload res_odbc.so
module load res_odbc.so
And see output.
Note that when you use the isql command you receive an error (Unknown attribute UserName).
Try with this /etc/odbc.ini file:
[asterisk-connector]
Description = MySQL connection to 'asterisk' database
Driver = MySQL
DATABASE = asterisk
SERVER = localhost
USER = root
PASSWORD = mypassword
PORT = 3306
Option = 3
I dont known if is valid for CentOS but in Debian I had to recompile Asterisk and execute menuselect in order to work. To do that, go to your Asterisk fonts directory:
$ ./configure
$ make clean
$ make menuselect
Please verify that the following modules are checked:
[*] cdr_odbc
[*] cdr_adaptive_odbc
[*] func_odbc
[*] func_realtime
[*] pbx_realtime
[*] res_config_odbc
[*] res_odbc
and then:
$ sudo make install
I hope that help you.
It seems that you forget to add some important module when you do "make menuselect" check it.
Besides and it is very important you must establish "limit=>1" in the configuration file that you describe (/etc/asterisk/res_odbc.conf) if your are using mysql as relational database o just comment the line. If you are following the orreilly guide (http://ofps.oreilly.com/titles/9781449332426/asterisk-DB.html) you can see the errata (http://oreilly.com/catalog/errata.csp?isbn=9780596517342).
Do
sudo service asterisk restart
Works like a charm
来源:https://stackoverflow.com/questions/12681048/odbc-connection-errorno-such-command-odbc-show-odbc-connection-fail-in-asteri