UNIXODBC安装
在银河麒麟操作系统下,使用QT连接达梦数据库,一般需要DMODBC,但是DMODBC依赖UNIXODBC,因此需要安装unixodbc,在unixodbc官网下载源码进行编译和安装。
说明:root为管理员用户,adminyw为常用一般用户(与达梦教程中dmdba用户性质一样),在adminyw用户下安装了达梦数据库。
前提:DM数据库已安装,DM数据库为银河麒麟-飞腾2000版本。
1.下载
官网https://www.unixodbc.org/下载安装包unixODBC-2.3.12.tar.gz。
进入官网后,点击左侧Download按钮,进入DOWNLOAD界面,然后点击:Via HTTP: unixODBC-2.3.12.tar.gz进行下载,也可点击该链接下载。
2.安装
解压安装包,目录无中文,我是安装到/usr/local/unixodbc/目录下,默认安装/usr/local/目录下,我的这种方式需要配置很多环境变量,但只要按照我的步骤一定能正确连接达梦数据库。
-
使用解压命令tar -zxvf unixODBC-2.3.12.tar.gz -C /home/adminyw/soft/unixodbc
-
也可使用解压工具解压(在银河麒麟操作系统下,很多操作可以不使用命令行)
-
解压后文件夹是unixODBC-2.3.12,在该目录下打开终端,执行以下命令
//执行su命令,输入root密码,切换到root用户,不使用root权限,执行make install报权限不足 adminyw@adminyw-pc:~/soft/UnixODBC/unixODBC-2.3.12$ su 输入密码 root@adminyw-pc:/home/adminyw/soft/UnixODBC/unixODBC-2.3.12#./configure --prefix /usr/local/unixodbc root@adminyw-pc:/home/adminyw/soft/UnixODBC/unixODBC-2.3.12# make -j4 root@adminyw-pc:/home/adminyw/soft/UnixODBC/unixODBC-2.3.12# make install //执行完以上命令后,一般不会报错,如果报错,处理报错,重新make install
-
执行完成后,/usr/local/unixodbc是unixodbc安装目录,执行以下命令可查看安装内容
//执行结束后,cd到unixodbc安装目录 root@adminyw-pc:/home/adminyw/soft/UnixODBC/unixODBC-2.3.12# cd /usr/local/unixodbc root@adminyw-pc:/usr/local/unixodbc# ll 总用量 28 drwxr-xr-x 7 root root 4096 12月 29 15:45 ./ drwxr-xr-x 14 root root 4096 12月 29 15:45 ../ drwxr-xr-x 2 root root 4096 12月 29 15:45 bin/ drwxr-xr-x 3 root root 4096 12月 29 15:45 etc/ drwxr-xr-x 3 root root 4096 12月 29 15:45 include/ drwxr-xr-x 3 root root 4096 12月 29 15:45 lib/ drwxr-xr-x 3 root root 4096 12月 29 15:45 share/ //bin目录是执行脚本 //etc下有odbc.ini,odbcinst.ini两个配置文件 //include是一些头文件 //lib是unixodbc的动态
-
需要查看odbc.ini,odbcinst.ini配置文件的路径是不是在真实路径下/usr/local/unixodbc/etc
//查看两个配置文件的真实位置 root@adminyw-pc:/usr/local/unixodbc# odbcinst -j unixODBC 2.3.12 DRIVERS............: ../etc/odbcinst.ini SYSTEM DATA SOURCES: ../etc/odbc.ini FILE DATA SOURCES..: ../etc/ODBCDataSources USER DATA SOURCES..: ../etc/odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 //这上面的路径和真实路径是不一致的,需要执行下面脚本将配置文件添加的环境变量中 //建议执行下面内容,否则有可能出错
-
修改adminyw(安装达梦数据库用户)用户对odbc.ini和odbcinst.ini的拥有权和执行权
//赋予adminyw用户拥有权 root@adminyw-pc:/usr/local/unixodbc# chown -R adminyw:adminyw /usr/local/unixodbc //赋予adminyw用户执行权 root@adminyw-pc:/usr/local/unixodbc# cd etc/ root@adminyw-pc:/usr/local/unixodbc/etc# ls ODBCDataSources odbc.ini odbcinst.ini root@adminyw-pc:/usr/local/unixodbc/etc# chmod a+w odbc.ini root@adminyw-pc:/usr/local/unixodbc/etc# chmod a+w odbcinst.ini
-
填写两个配置文件内容
//在/usr/local/unixodbc/etc路径下,双击打开两个文件,进行以下配置 //odbc.ini进行以下修改: [DM8] Description = DM ODBC DSN Driver = DM8 ODBC DRIVER SERVER = 127.0.0.1 UID = SYSDBA PWD = sa12345678 TCP_PORT = 5236 odbcinst.ini进行以下修改: //odbcinst.ini进行以下修改: [DM8 ODBC DRIVER] Description = ODBC DRIVER FOR DM8 Driver = /home/adminyw/soft/dminstall/bin/libdodbc.so //注意:=左右两边各有一个空格;首行和每行开始没有空格;以上信息一定要完成 //程序先读取odbc.ini内容,再从odbcinst.ini中读取驱动信息 /*参数说明: odbc.ini: [DM8]为索引名称; Description为描述信息; Driver为驱动名称,会从odbcinst.ini中读取驱动动态库,因此odbcinst.ini中索引名[DM8 ODBC DRIVER]必须与odbc.ini中驱动名称一致,就是DM8 ODBC DRIVER; SERVER为达梦数据库服务器所在主机ip,本机可使用127.0.0.1或localhost; UID为数据库名称; PWD为密码; TCP_PORT为数据库监听端口号。 odbcinst.ini: [DM8 ODBC DRIVER]为索引名称,与odbc.ini中Driver = DM8 ODBC DRIVER保持一致; Description为描述信息; Driver为驱动真实位置,达梦数据库安装成功后,会有一个odbc的驱动,达梦数据库是以adminy用户安装的,位置在/home/adminyw/soft/dminstall/bin/libdodbc.so。*/
-
将以下信息添加到环境变量中,使用adminyw用户
//切换到adminyw用户 root@adminyw-pc:/usr/local/unixodbc/etc# su adminyw //将达梦数据库bin目录和unixodbc的lib目录添加到环境变量中,bin和lib目录下有数据库驱动等相关动态库,不执行该操作,会报无法找到动态库错误 adminyw@adminyw-pc:/usr/local/unixodbc/etc$ echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/adminyw/soft/dminstall/bin" >> ~/.bashrc adminyw@adminyw-pc:/usr/local/unixodbc/etc$ source ~/.bashrc adminyw@adminyw-pc:/usr/local/unixodbc/etc$ echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/unixodbc/lib" >> ~/.bashrc //将unixodbc中的/usr/local/unixodbc/etc添加到环境变量中,为odbc系统初始化是需要访问路径 adminyw@adminyw-pc:/usr/local/unixodbc/etc$ echo "export ODBCSYSINI=/usr/local/unixodbc/etc" >> ~/.bashrc //将/usr/local/unixodbc/etc/odbc.ini添加到环境变量中,为odbc初始化信息 adminyw@adminyw-pc:/usr/local/unixodbc/etc$ echo "export ODBCINI=/usr/local/unixodbc/etc/odbc.ini" >> ~/.bashrc //将/usr/local/unixodbc/bin添加到PATH环境变量中,需要在任意路径使用bin目录下各种执行命令,不设置,无法在任意路径isql命令 adminyw@adminyw-pc:/usr/local/unixodbc/etc$ echo "export PATH=/usr/local/unixodbc/bin:$PATH" >> ~/.bashrc //以上参数立马生效,切永久生效 adminyw@adminyw-pc:/usr/local/unixodbc/etc$ source ~/.bashrc //在adminyw用户任意目录执行export,可查看以上变量是否设置成功 adminyw@adminyw-pc:~$ export //显示以下信息(只粘贴与该安装有关信息),则表示成功 declare -x LD_LIBRARY_PATH="/home/adminyw/soft/dminstall/bin:/usr/local/unixodbc/lib" declare -x PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/unixodbc/bin" declare -x ODBCINI="/usr/local/unixodbc/etc/odbc.ini" declare -x ODBCSYSINI="/usr/local/unixodbc/etc" //再次查看odbc.ini和odbcinst.ini的真实路径,显示以下信息则表示路径正确 adminyw@adminyw-pc:~$ odbcinst -j unixODBC 2.3.12 DRIVERS............: /usr/local/unixodbc/etc/odbcinst.ini SYSTEM DATA SOURCES: /usr/local/unixodbc/etc/odbc.ini FILE DATA SOURCES..: /usr/local/unixodbc/etc/ODBCDataSources USER DATA SOURCES..: /usr/local/unixodbc/etc/odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 adminyw@adminyw-pc:~$
-
以上内容执行成功后,在adminyw用户下,任意路径执行以下脚本
//dm8为odbc.ini中索引名称 adminyw@adminyw-pc:~$ isql dm8 -v +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | echo [string] | | quit | | | +---------------------------------------+ SQL> //显示以上信息说明unixodbc配置成功,可以通过odbc连接达梦数据库,也就可以使用odbc提供的API操作数据库
3.问题
一定认真阅读以上安装步骤,如果操作过程中遇到以下问题,请按以下解决办法执行
adminyw@adminyw-pc:~$ isql dm8 -v
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
//该错误表示找不到数据源名称
/*有以下几种原因:
1.odbc.ini索引[]信息错误,与dm8不一致,导致找不到数据源;
2.odbc.ini没有添加到环境变量中,echo "export ODBCINI=/usr/local/unixodbc/etc/odbc.ini" >> ~/.bashrc;
3.ODBCSYSINI没有添加到环境变量中,echo "export ODBCSYSINI=/usr/local/unixodbc/etc" >> ~/.bashrc;
4.odbc.ini驱动名称和odbcinst.ini索引名称不一致,导致找不到数据源;
5.adminyw用户没有/usr/local/unixodbc/etc的权限,root@adminyw-pc:/usr/local/unixodbc# chown -R adminyw:adminyw /usr/local/unixodbc/etc。
*/
adminyw@adminyw-pc:~$ isql dm8 -v
[01000][unixODBC][Driver Manager]Can't open lib '/home/adminyw/soft/dminstall/bin/libdodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
//该错误表示不能打开驱动
/*有以下几种原因:
1.需将达梦数据库安装目录下的bin添加到环境变量中,echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/adminyw/soft/dminstall/bin" >> ~/.bashrc;
2.odbcinst.ini中驱动配置路径不对,Driver = /home/adminyw/soft/dminstall/bin/libdodbc.so。
*/
4.讨论
如果还是解决不了,可留言,咱们可以互相讨论学习。