ubuntu - 连接到 IBM AS/400 DB2 数据库

标签 ubuntu db2 ibm-midrange unixodbc

我正在尝试使用 PHP 的 ODBC 驱动程序 从 Ubuntu 服务器连接到客户的 IBM AS/400 DB2 数据库。我也安装了 unixODBC。我的 odbcinst.ini 如下所示:

[IBM DB2 ODBC DRIVER]
Description = ODBC 5.1 Driver for Database
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
FileUsage = 1

我的 odbc.ini 看起来像这样:

[IBM DB2 ODBC DRIVER]
Driver = IBM DB2 ODBC DRIVER
Description = ODBC 5.1 Driver DSN

现在,我的连接代码是:

$server = '12.345.678.90' //IP
$port = '446' //PORT
$username = 'my_username';
$password = 'my_password';

$connect = odbc_connect("DRIVER = {IBM DB2 ODBC DRIVER};System=$server:$port;Uid=$username;Pwd=$password;", $username, $password);

if(!$connect)
    echo 'Cannot Connect!';
else
    echo 'Connected!';

我得到的错误是这样的:

Warning: odbc_connect(): SQL Error: [unixODBC][MySQL][ODBC 5.1 Driver]Access denied for user 'my_username'@'localhost' (using password: YES), SQL state S1000 in SQLConnect

我也尝试过使用 PDO ODBC 驱动程序。这是我得到的错误:

$connect = new PDO("odbc:DRIVER={IBM DB2 ODBC DRIVER};HOSTNAME=$server;PORT=$port;Uid=$username;Pwd=$password");

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] SQLDriverConnect: 1045 [unixODBC][MySQL][ODBC 5.1 Driver]Access denied for user 'my_username'@'localhost' (using password: YES)' in /var/www/test_file.php Stack trace: #0 /var/www/test_file.php: PDO->__construct('odbc:DRIVER={IB...') #1 {main} thrown in /var/www/test_file.php

我是不是做错了什么?是不是需要用别的驱动,因为用户名和密码是正确的,我看到客户端用我有的用户名和密码登录数据库。我认为用户名和密码是错误的,因为它显示拒绝用户访问。好像不是这样的。可能还有其他问题。

感谢您的帮助。我希望我把问题说得很清楚了。谢谢!

最佳答案

您的 odbcinst.ini 文件说要使用 MySQL ODBC 驱动程序:

Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so

但您需要使用iSeries Access ODBC 驱动程序。您收到 Access Denied for User 消息的原因是因为您正在尝试使用 IBM i 的凭据连接到 MySQL 数据库。

以下是有关如何在 Ubuntu 上连接到 DB2 for i(在 IBM i 上)的分步说明:

从 IBM 下载免费的 iSeriesAccess-6.1.0-1.2.i386.rpm 文件(您必须创建一个免费帐户才能获取它 - 我相信还有更多最近的版本比 6.1.0-1.2)

将 RPM 文件转换为 Ubuntu 可以理解的内容:sudo alien iSeriesAccess-6.1.0-1.2.i386.rpm

安装生成的 .deb:sudo dpkg -i iseriesaccess_6.1.0-2.2_i386.deb

将已安装的 iSeries 库复制到 Ubuntu 期望的位置:sudo cp/opt/ibm/iSeriesAccess/lib/*/usr/lib

编辑 /etc/odbc.ini 文件以包含:

[primary]
Description             = primary
Driver                  = iSeries Access ODBC Driver
System                  = IP_ADDRESS
UserID                  = USERNAME
Password                = PASSWORD
Naming                  = 1
DefaultLibraries        = QGPL
Database                = XXXXXXXXXX
ConnectionType          = 0
CommitMode              = 2
ExtendedDynamic         = 0
DefaultPkgLibrary       = QGPL
DefaultPackage          = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression    = 1
LibraryView             = 0
AllowUnsupportedChar    = 0
ForceTranslation        = 0
Trace                   = 0

编辑 /etc/odbcinst.ini 文件以包含:

[iSeries Access ODBC Driver]
Description     = iSeries Access for Linux ODBC Driver
Driver          = /usr/lib/libcwbodbc.so
Setup           = /usr/lib/libcwbodbcs.so
NOTE1           = If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2           = the following Driver64/Setup64 keywords will provide that support.
Driver64        = /usr/lib/lib64/libcwbodbc.so
Setup64         = /usr/lib/lib64/libcwbodbcs.so
Threading       = 2
DontDLClose     = 1
UsageCount      = 1

然后创建与 PDO 的连接:

$pdo = new PDO("odbc:DRIVER={iSeries Access ODBC Driver};SYSTEM=$server;PROTOCOL=TCPIP", $username, $password);

关于ubuntu - 连接到 IBM AS/400 DB2 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19184302/

相关文章:

ubuntu - 制作 Cuda-5.0 SDK(Ubuntu 64)时出错,未定义对 'dlsym' 的引用

将值插入标识列 db2

python - 为什么 Python 的 .decode ('cp037' ) 不适用于特定的二进制数组?

ibm-midrange - CPYTOIMPF 到 qtemp 是否比到其他库更快?

ubuntu - 未能为语言环境加载 hunspell 字典

ubuntu - 在 ubuntu 18.04 上安装 samba 时出错

mongodb - 使用mongodb+srv配置Mongo

sql - 让 SQL UPDATE 像 native IO 一样在记录锁上抛出错误消息

sql - 如何在没有周六和周日的情况下获得 db2 中的工作日差异?

sql - 主变量或参数的转换错误 *N