我在解决一个问题上遇到了困难.

操作系统为CentOS,MariaDB版本为10.4.

UnixODBC已使用odbc.ini和odbcinit.ini正确安装和配置.

当我try 使用‘isql-v ORCL Scott Tiger’连接时,连接成功.

但是,当我在MariaDB中try 相同的操作时,我遇到以下错误:

Maria02 [test]> CREATE TABLE ora_emp -> ENGINE=CONNECT -> TABLE_TYPE=ODBC TABNAME='EMP' CONNECTION='DSN=orcl;UID=scott;PWD=tiger'; ERROR 1105 (HY000): SQLDriverConnect: [unixODBC][Driver Manager]Can't open lib '/home/oracle/instantclient_11_2/libsqora.so.11.1': file not found 个 将LD_LIBRARY_PATH环境变量设置为/home/oracle/INSTEMCLIENT_11_2.

[root@localhost instantclient_11_2]# ldd libsqora.so.11.1
linux-vdso.so.1 => (0x00007fff0d2b5000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fb5a7c54000)
libm.so.6 => /lib64/libm.so.6 (0x00007fb5a7952000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb5a7736000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00007fb5a751c000)
libclntsh.so.11.1 => /home/oracle/instantclient_11_2/libclntsh.so.11.1 (0x00007fb5a4bad000)
libodbcinst.so.1 => /lib64/libodbcinst.so.1 (0x00007fb5a499b000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb5a45cd000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb5a7e58000)
libnnz11.so => /home/oracle/instantclient_11_2/libnnz11.so (0x00007fb5a4200000)
libaio.so.1 => /lib64/libaio.so.1 (0x00007fb5a3ffe000)
libltdl.so.7 => /lib64/libltdl.so.7 (0x00007fb5a3df4000)

以上是‘ldd’命令的结果,似乎没有任何问题.

文件‘/home/oracle/instantclient_11_2/libsqora.so.11.1’肯定存在.

如果能帮助解决这个问题,我将不胜感激.

谢谢.

$ rpm -qa unixODBC*
unixODBC-2.3.1-14.el7.x86_64
unixODBC-devel-2.3.1-14.el7.x86_64
$ export ORACLE_HOME=/home/oracle/instantclient_11_2
$ export LD_LIBRARY_PATH=$ORACLE_HOME

$ vi /etc/odbcinst.ini
​[Oracle 11g ODBC driver]
Description  = Oracle ODBC driver for Oracle 11g
Driver       = /home/oracle/instantclient_11_2/libsqora.so.11.1

 
$ vi /etc/odbc.ini  
​[orcl]
Driver       = Oracle 11g ODBC driver
ServerName   = //192.168.80.1:1521/oracle
DSN          = orcl
UserName     = scott
Password     = tiger

$ isql -v orcl scott tiger

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

$ mysql -uroot

MariaDB [(none)]> install plugin connect soname 'ha_connect.so';
MariaDB [(none)]> use test;
MariaDB [test]> CREATE TABLE ora_emp ENGINE=CONNECT TABLE_TYPE=ODBC TABNAME='EMP' CONNECTION='DSN=orcl;UID=scott;PWD=tiger';

ERROR 1105 (HY000): SQLDriverConnect: [unixODBC][Driver Manager]Can't open lib '/home/oracle/instantclient_11_2/libsqora.so.11.1' : file not found 

推荐答案

因为MariaDB通常是由CentOS(和其他操作系统)上的SYSTEM D启动的,而默认的SYSTEM D服务有ProtectHome=yes,导致服务无法访问/home文件.

推荐:

mv /home/oracle /usr/local

并将路径更改为/usr/local/oracle/instantclient_11_2

对于system d服务,还需要存在LD_LIBRARY_PATH.

systemctl edit mariadb.service并附加到此文件:

[Service]
Environment="LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2"

Linux相关问答推荐

如何将参数传递给Bash函数

boost-iostreams 1.59 sparc-solaris 交叉编译失败

需要获取文件名、行号、模式在文件中的匹配位置

如何摆脱管道分隔字段中不需要的管道符号 - Linux

如何从 AWK 中的 CSV 列中获取中值? (Linux)

递归/详尽地将点插入字符串

如何在ubuntu中通过.sh文件启动多个服务

Linux time 命令输出中 real、user 和 sys 的含义

从 .war 文件外部化 Tomcat webapp 配置

为什么在编译 K&R2 第 1 章中最长的行示例时出现getline 的类型冲突错误?

用于 Linux 的 Less 编译器

如何通过 ssh 判断 ubuntu 服务器上是否存在 php 和 apache

Linux 上真的没有异步块 I/O 吗?

crt1.o:在函数_start中:-Linux 中未定义对main的引用

在没有 python 命令的情况下在终端中运行 python 脚本

网络共享文件夹上的 GIT 存储库中的并发性

仅当文件存在于 shell 脚本中时才移动

如何在没有 root 用户的情况下在 Linux (CentOS) 中安装软件包并进行自动依赖处理?

在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异

如何制作和应用SVN补丁?