安装和导入目录
前言
在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配置的路径
根据路径配置数据源
四、配置数据源
- 配置/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
- 配置/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
- 配置环境变量
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