AI火起来了,以我自己可以了,实质中发现,很多东西,要么就是你没有描述清楚,要么就是LLM洗回来的数据都是那样,它压根不知道本质是什么。
老的常规办法,前面没有大问题:
·安装unixODBC及相关开发包
sudo yum install -y unixODBC unixODBC-devel
·安装Oracle Instant Client及ODBC驱动,自己根据服务器版本和官方说明下载,我这里服务器是11g的,InstantClient可以用到19c
这里自己上官网找对应的,一般安装base包、odbc包和tools工具包。
oracle-instantclient19.-basic-.rpm
oracle-instantclient19.-odbc-.rpm
oracle-instantclient19.-sqlplus-.rpm(可选,用于测试连接)
·设置环境变量,在/etc/profile.d/oracle.sh中添加:
export ORACLE_HOME=/usr/lib/oracle/19.9/client64
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin
#这里配置的确保中文不乱码
export NLS_LANG="AMERICAN_AMERICA.UTF8"
·配置Oracle的ODBC驱动
cat /etc/odbcinst.ini
[Oracle19]
Description = Oracle ODBC driver
Driver = /usr/lib/oracle/19.9/client64/lib/libsqora.so.19.1
·配置ODBC数据源
cat /etc/odbc.ini
[ORACLE_SOURCE]
Driver = Oracle19 #这里和上面驱动同名
ServerName = LISSER #这是定义服务名对应的是TNS里的配置
TNS_ADMIN = /usr/lib/oracle/19.9/client64/network/admin
·配置ORACLE的TNS,一般照抄可用的tns配置就行
cat $TNS_ADMIN/tnsnames.ora
LISSER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
·到此,你应该可以使用SqlPlus 或者 isql 连接上你的服务器
isql -v 数据源的名字ORACLE_SOURCE 你的用户名 你的密码
sqlplus 你的用户@你的tns名LISSER
然后是到折腾Maria了: 下班了待续。
·在MariaDB中创建远程连接表
DROP TABLE IF EXISTS INFO;
CREATE TABLE INFO ENGINE=CONNECT TABLE_TYPE=ODBC
BLOCK_SIZE=50
CONNECTION='DSN=ORACLE_SOURCE;UID=你的用户名;PWD=你的密码';
为了提高性能,建议把连接表复制到本地中,再使用;同时使用定时任务同步。
MariaDB的问题:
- 是否有权限读取到/etc/odbc.ini和/etc/odbcinst.ini文件
- 是否单独给MariaDB配置环境变量
1.给配置文件设置可读权限;
2.systemctl edit mariadb
添加下面运行变量,并重启Mariadb服务,这样MariaDB就可以使用DSN来连接Oracle。
[Service]
Environment="TNS_ADMIN=/usr/lib/oracle/19.9/client64/network/admin"
Environment="ORACLE_HOME=/usr/lib/oracle/19.9/client64"
3.如果中文乱码,确认一下MaridDB进程是否有NLS变量且配置编码方式合适系统使用。
ps aux | grep mariadb
grep -a NLS_LANG /proc/(MariaDB进程ID)/environ