Ubuntu 24.04 配置ODBC连接ORACLE 11G数据库
1. 安装必要工具和驱动
1.1 安装unixODBC和依赖库
# apt update
# apt install unixodbc unixodbc-dev libaio1
执行失败,报错
libaio1包找不到,先跳过,安装其他两个。
# apt install unixodbc unixodbc-dev
安装成功
1.2 下载Oracle Instant Client
访问 Oracle Instant Client下载页面,
https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
选择以下两个RPM包(需转换为Debian格式):
Basic Package(基础库,oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm)
ODBC Package(ODBC驱动,oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm)
1.3 转换为Debian包并安装
安装转换工具
# apt install alien
转换刚才下载的RPM为DEB并安装
# alien -k --scripts *.rpm
# dpkg -i oracle-instantclient*.deb
1.4 创建符号链接(解决库路径问题)
# sh -c "echo /usr/lib/oracle/11.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
# ldconfig
2. 配置Oracle网络连接
2.1 创建TNS配置文件目录
# mkdir -p /usr/lib/oracle/11.2/client64/network/admin
2.2 配置tnsnames.ora
编辑文件 /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora,添加远程Oracle服务器的连接信息:
# cd /usr/lib/oracle/11.2/client64/network/admin
# vi tnsnames.ora
添加以下内容
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.200)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = ORCL)
)
)
3. 配置ODBC驱动和数据源
3.1 配置ODBC驱动
编辑 /etc/odbcinst.ini,添加Oracle驱动配置:
# vi /etc/odbcinst.ini
[Oracle11g] # 驱动名称(自定义)
Description = Oracle ODBC Driver for 11g
Driver = /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
FileUsage = 1
3.2 配置ODBC数据源
编辑 /etc/odbc.ini,添加数据源:
# vi /etc/odbc.ini
[OracleTest] # 数据源名称(自定义)
Description = Oracle 11g Connection
Driver = Oracle11g # 与odbcinst.ini中的驱动名称一致
ServerName = ORCL # 与tnsnames.ora中的条目一致
UserID = 你的用户名
Password = 你的密码
Port = 1521
4. 测试连接
4.1 使用isql命令行工具
# isql -v OracleTest
报错了
提示找不到libsqora.so.11.1
但目录下有这个文件
检查驱动库依赖
# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
有“not found”,应该是之前libaio1没装的问题
apt 始终找不到,只能手动下载安装包
# wget http://archive.ubuntu.com/ubuntu/pool/main/liba/libaio/libaio1_0.3.112-5_amd64.deb
安装依赖和包
# apt install ./libaio1_0.3.112-5_amd64.deb
验证安装
# dpkg -l libaio1
再测试
# isql -v OracleTest
仍然报错
检查驱动库依赖
# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
查到有说Ubuntu 24.04 默认不提供 libodbcinst.so.1,手动创建符号链接
# ln -s /usr/lib/x86_64-linux-gnu/libodbcinst.so.2 /usr/lib/x86_64-linux-gnu/libodbcinst.so.1
重新检查 libsqora.so.11.1 的依赖关系:
# ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1 | grep odbc
再测试
# isql -v OracleTest
仍然报错,但错误信息变了。
检查TNS 配置文件,确认 tnsnames.ora 路径和权限正常,tnsnames.ora 内容也正确。
Oracle Instant Client 需要通过环境变量明确指定 TNS 配置目录,尝试设置 TNS_ADMIN 变量
# export TNS_ADMIN=/usr/lib/oracle/11.2/client64/network/admin
再测试
# isql -v OracleTest
连接成功
将环境变量写入配置文件
# echo "export TNS_ADMIN=/usr/lib/oracle/11.2/client64/network/admin" >> ~/.bashrc
测试结束。