我正在尝试获得在Linux上工作的ODBC连接到在Docker容器中运行的DB2 Community。本机db2cli
命令可以工作,但我无法连接unixODBC工具isql
。我想我有一个配置问题,但我卡住了。有什么想法吗?
动机:尝试让DB2自动化测试为arrow-odbc工作,以解决这个问题:https://github.com/pacman82/arrow-odbc/issues/63
DB2 ODBC/CLI驱动安装
从以下网址下载:https://www.ibm.com/support/pages/download-fix-packs-version-ibm-data-server-client-packages
mkdir -p /opt/ibm/
cp v11.5.8_linuxx64_odbc_cli.tar.gz /opt/ibm/
cd /opt/ibm/
tar xvf v11.5.8_linuxx64_odbc_cli.tar.gz
export PATH=/opt/ibm/odbc_cli/clidriver/bin/:$PATH
export LD_LIBRARY_PATH=/opt/ibm/odbc_cli/clidriver/lib/
Docker上的DB2社区
现在在docker容器中启动DB2 LUW
docker run -itd --name mydb2 --privileged=true -p 50000:50000 -e LICENSE=accept -e DB2INST1_PASSWORD=testpassword -e DBNAME=testdb -v $HOME/db2_community:/database icr.io/db2_community/db2:latest
DB2 CLI/ODBC配置
https://www.ibm.com/docs/en/db2-warehouse?topic=package-configuring
请注意,此命令仅适用于Windows:db2cli registerdsn -add -dsn db2docker
sudo chgrp ross /opt/ibm/odbc_cli/clidriver/cfg/db2dsdriver.cfg
sudo chmod 664 /opt/ibm/odbc_cli/clidriver/cfg/db2dsdriver.cfg
cd $HOME
db2cli writecfg add -dsn db2docker -database testdb -host localhost -port 50000
产生
ross@ross-T480-linux:/opt/ibm/odbc_cli/clidriver/cfg$ cat db2dsdriver.cfg
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<configuration>
<dsncollection>
<dsn alias="db2docker" host="localhost" name="testdb" port="50000"/>
</dsncollection>
<databases>
<database host="localhost" name="testdb" port="50000"/>
</databases>
</configuration>
连接验证
ross@ross-T480-linux:~$ db2cli validate -dsn db2docker -connect -user db2inst1 -passwd testpassword
===============================================================================
Client information for the current copy:
===============================================================================
Client Package Type : IBM Data Server Driver For ODBC and CLI
Client Version (level/bit): DB2 v11.5.8.0 (s2209201700/64-bit)
Client Platform : Linux/X8664
Install/Instance Path : /opt/ibm/odbc_cli/clidriver
DB2DSDRIVER_CFG_PATH value: <not-set>
db2dsdriver.cfg Path : /opt/ibm/odbc_cli/clidriver/cfg/db2dsdriver.cfg
DB2CLIINIPATH value : <not-set>
db2cli.ini Path : /opt/ibm/odbc_cli/clidriver/cfg/db2cli.ini
db2diag.log Path : /opt/ibm/odbc_cli/clidriver/db2dump/db2diag.log
===============================================================================
db2dsdriver.cfg schema validation for the entire file:
===============================================================================
Success: The system db2dsdriver.cfg schema validation completed successfully without any errors.
===============================================================================
db2cli.ini validation for data source name "db2docker":
===============================================================================
Note: The validation utility could not find the configuration file db2cli.ini.
The file is searched at "/opt/ibm/odbc_cli/clidriver/cfg/db2cli.ini".
===============================================================================
db2dsdriver.cfg validation for data source name "db2docker":
===============================================================================
[ Parameters used for the connection ]
Keywords Valid For Value
---------------------------------------------------------------------------
DATABASE CLI,.NET,ESQL testdb
HOSTNAME CLI,.NET,ESQL localhost
PORT CLI,.NET,ESQL 50000
===============================================================================
Connection attempt for data source name "db2docker":
===============================================================================
[SUCCESS]
===============================================================================
The validation is completed.
===============================================================================
现在,尝试一个测试脚本
ross@ross-T480-linux:~$ echo "VALUES current_schema;" > db2_test_script.sql
ross@ross-T480-linux:~$ db2cli execsql -dsn db2docker -user db2inst1 -passwd testpassword -inputsql db2_test_script.sql
IBM DATABASE 2 Interactive CLI Sample Program
(C) COPYRIGHT International Business Machines Corp. 1993,1996
All Rights Reserved
Licensed Materials - Property of IBM
US Government Users Restricted Rights - Use, duplication or
disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
> VALUES current_schema;
FetchAll: Columns: 1
1
DB2INST1
FetchAll: 1 rows fetched.
>
DB2 LUW的unixODBC配置
好吧,现在,我被卡住了
编辑/etc/odbcinst.ini:
[Db2]
Description = Db2 Driver
Driver = /opt/ibm/odbc_cli/clidriver/lib/libdb2o.so
fileusage=1
dontdlclose=1
https://www.ibm.com/docs/en/db2/11.5?topic=keywords-dbalias
https://www.ibm.com/docs/en/db2/11.5?topic=file-data-server-driver-configuration-example
$HOME/.odbc.ini
[db2dockerodbc]
DRIVER=DB2
DBAlias=db2docker
然而,这失败了
ross@ross-T480-linux:~$ isql -v db2dockerodbc db2inst1 testpassword
[ ][unixODBC][IBM][CLI Driver] SQL1531N The connection failed because the name specified with the DSN connection string keyword could not be found in either the db2dsdriver.cfg configuration file or the db2cli.ini configuration file. Data source name specified in the connection string: "DB2DOCKERODBC".
[ISQL]ERROR: Could not SQLConnect
1条答案
按热度按时间ldioqlga1#
我发现我做错了什么!DBBLOG是
db2cli.ini
的关键字,但它不在.odbc.ini
中相反,您需要
.odbc.ini
中的DSN名称与db2driver.cfg
中的名称匹配,在我的示例中是db2docker
。(仅供参考,看起来还有其他DB2配置文件可以用来定义DSN。)这样就行了
ODBC驱动程序配置
IBM驱动程序配置
ODBC连接配置
那么,这个有效