Linux ODBC方式远程访问Oracle数据库--Doris的ODBC方式导入数据

前言

在doris导入数据的时候,碰到了很多问题,参照了好多文章,整理编写了一份odbc访问oracle数据库,访问通了之后再用doris进行数据导入的文章,文章是我遇到的问题以及个人的看法,欢迎大佬来批评指正!

一、安装unixODBC

1.自带方式

yum install -y unixODBC

如果yum成功就不用看2了

2.如果yum失败就安装以下:【推荐】

unixODBC-2.3.0.tar.gz下载路径:http://www.unixodbc.org/

如果没法下载,我在结尾处提供网盘的下载链接

cd /opt/odbc/
# 把unixODBC-2.3.0.tar.gz这个包上传上去 然后解压
tar xvf unixODBC-2.3.0.tar.gz
cd /opt/odbc/unixODBC-2.3.0
./configure
make
make install
(默认是被安装到/usr/local)

./configure可能会编译失败 这里就是gcc有问题就yum一个gcc的包,然后把它软连接到/usr/bin下面即可继续编译

二、下载Oracle客户端依赖包和Oracle ODBC驱动包

需要下载instantclient-odbc-linux.x64-11.2.0.4.0.zip 和 instantclient-basic-linux.x64-11.2.0.4.0.zip

下载官网链接在:http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

这里可以根据Oracle的版本下载,Oracle版本是11,所以安装的是11.2

[结尾我给提供了压缩包]

三、解压安装

1.把文件上传解压到/usr/local/oracle/下

mkdir /usr/local/oracle
unzip instantclient-basic-linux.x64-11.2.0.4.0.zip -d /usr/local/oracle/
unzip instantclient-odbc-linux.x64-11.2.0.4.0.zip -d /usr/local/oracle/


#  LD_LIBRARY_PATH这个环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。
export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2:$LD_LIBRARY_PATH
echo -en 'export LD_LIBRARY_PATH=/usr/local/oracle/instantclient_11_2:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc 
# 进入
cd /usr/local/oracle/instantclient_11_2 

chmod 775 odbc_update_ini.sh

./odbc_update_ini.sh /usr/local
# (这里没有提示表示安装成功)

注意:这里可能会出现安装失败的情况

报错为:INI file not found. Driver Manager not installed
在这里插入图片描述
出现这个错误我认为是找不到之前安装的unixODBC 的Driver Manager,我是通过上传了unixODBC-2.3.0.tar.gz,也就是第一步的第2步安装编译成功就好了

安装结束再试一遍:

./odbc_update_ini.sh /usr/local
# (这里没有提示表示安装成功)

2.成功即可继续

# 修改odbc目录权限
chown -R 775 /usr/local/oracle/

3.先找到文件位置:

odbcinst -j

看odbcinst.ini和odbc.ini配置的路径
在这里插入图片描述
根据路径配置数据源

四、配置数据源

  1. 配置/usr/local/etc/odbcinst.ini
[oracle11]
Description     = Oracle ODBC driver for Oracle 11c
Driver          = /usr/local/oracle/instantclient_11_2/libsqora.so.11.1
FileUsage       = 1
  1. 配置/usr/local/etc/odbc.ini
[orac]
Description = ODBC for Oracle
Driver      = oracle11   #这里odbcinst.ini的配置名
Server = 10.152.160.66   #这里填ip
ServerName = 10.152.160.66:65534/ORCL	
UserId =root
Password =123456
  1. 配置环境变量
export ODBCINI=/usr/local/etc/odbc.ini 
export ODBCSYSINI=/usr/local/etc/

# 加入到该用户所使用的环境变量中
echo -en 'export ODBCINI=/usr/local/etc/odbc.ini ' >> ~/.bashrc
echo -en 'export ODBCSYSINI=/usr/local/etc/ ' >> ~/.bashrc

五、测试链接

isql orac -v

这里会出现一些问题:

1、libsqora.so.11.1 file not find或者file not 打开 如果权限都有的话,查看动态链接库

ldd /usr/local/oracle/instantclient_11_2/libsqora.so.11.1

一般会有文件 =>not find

我的问题是 libodbcinst.so.1 =>not find

我查了好长时间,发现可能是unixODBC编译的问题,因为我们下载安装的包是unixODBC-2.3.0,所以在/usr/lib64下面可以查到:
在这里插入图片描述
所以它没有libodbcinst.so.1 但是有libodbcinst.so.2.0.0,所以我们只需要创建一个软连接就可以啦!

cd /usr/lib64/
ln –s /usr/lib64/libodbcinst.so.2.0.0 libodbcinst.so.1

再执行

ldd /usr/local/oracle/instantclient_11_2/libsqora.so.11.1

在这里插入图片描述
没有not find情况了
解决报错问题。

2、报错:

[Ora]ORA-12162: TNS:net service name is incorrectly specified

[ISQL]ERROR: Could not SQLConnect

出现这种问题的话,是这个odbc.ini中的数据库配置有问题,就是信息配置的不对,自行查看一下哪里配置的不对。

以上是通过ODBC方式远程访问Oracle数据库。

以下是Doris从Oracle导数据。

六、配置doris的驱动

找到doris下be的安装目录,找到conf文件,配置odbcinst.ini,配置与之前配置的一样即可导入数据。

vim /opt/doris/be/conf/odbcinst.ini
[oracle11]
Description     = Oracle ODBC driver for Oracle 11c
Driver          = /usr/local/oracle/instantclient_11_2/libsqora.so.11.1
FileUsage       = 1

七、向doris导入表

1、进入doris,并使用一个数据库。

mysql -h 192.168.0.152 -P9030 -uroot -p123456

use test;

2、创建一个外部资源

CREATE EXTERNAL RESOURCE `Oracle_resource`
PROPERTIES (
"type" = "odbc_catalog",
"host" = "10.152.160.66",
"port" = "65534",
"user" = "root",
"password" = "123456",
"database" = "ORCL",
"odbc_type" = "oracle",
"driver" = "Oracle11" #这里是驱动的名字
);

3、创建一个外表

CREATE EXTERNAL TABLE `oracle_table_external` (
  `id` varchar(100) NULL COMMENT "",
  `name` varchar(100) NULL COMMENT "",
  `password` varchar(100) NULL COMMENT "",
  `address` varchar(100) NULL COMMENT ""
) ENGINE=ODBC
COMMENT "ODBC"
PROPERTIES (
"odbc_catalog_resource" = "Oracle_resource",
"database" = "ORCL",
"table" = "xy.table1"  #Oracle数据库的表
);

4、再创建一个内表,将外表中的数据拉取即可

CREATE EXTERNAL TABLE `oracle_table_inner` (
  `id` varchar(100) NULL COMMENT "",
  `name` varchar(100) NULL COMMENT "",
  `password` varchar(100) NULL COMMENT "",
  `address` varchar(100) NULL COMMENT ""
)
DISTRIBUTED BY HASH(id) BUCKETS 3
PROPERTIES("replication_num" = "1");

5、数据插入内表

insert into oracle_table_inner select * from oracle_table_external;

附需要下载内容的链接(永久有效):

链接:https://pan.baidu.com/s/18DYVNSJAlKsrRyjFvBuKUg
提取码:x0zm

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值