在MogDB数据库中通过和ORACLE一致的dblink语法来访问ORACLE数据库中的表以进行增删改查操作
原作者:王勇昱
- 适用范围
- 问题概述
- 问题原因
- 解决方案
- 参考文档
适用范围
MogDB 5.0.0 及以上版本
问题概述
期望在MogDB数据库中通过和ORACLE一致的dblink语法来访问ORACLE数据库中的表以进行增删改查操作
问题原因
部分客户对插件的安装机制不熟,或者对linux操作系统的动态库加载机制不熟,按照公开文档操作可能会操作不成功
解决方案
以kylin v10 x86_64环境中的MogDB 5.0.5为例,介绍完整的oracle_fdw插件安装及使用流程
- 安装libnsl
yum install libnsl
- 从MogDB官网下载MogDB对应版本的oracle_fdw插件,注意版本要完全匹配
- 通过PTK将oracle_fdw安装至集群的各个节点
ptk cluster install-plugin -n 集群名称 -p oracle_fdw-1.0-5.0.5-01-Kylin-x86_64.tar.gz
如果不是通过ptk安装的MogDB,可以手动把插件包传到集群的每个节点的数据库用户目录下,解压压缩包,进入解压后的目录,执行make来实现安装
- 下载Oracle客户端并解压,这里注意当前操作系统环境为x86_64,因此下载的是x64的包,如果是arm环境,则需要下载arm的包
su - omm
wget https://download.oracle.com/otn_software/linux/instantclient/1919000/instantclient-basic-linux.x64-19.19.0.0.0dbru.zip
unzip instantclient-basic-linux.x64-19.19.0.0.0dbru.zip
- 复制必要文件到MogDB的lib目录(注意文件属主,集群的每个节点都需要复制,如果只复制主节点,那么节点切换后将无法使用此功能)
解释cp -p instantclient_19_19/libclntsh.so.19.1 $GAUSSHOME/lib/
cp -p instantclient_19_19/libnnz19.so $GAUSSHOME/lib/
cp -p instantclient_19_19/libclntshcore.so.19.1 $GAUSSHOME/lib/
cp -p instantclient_19_19/libociei.so $GAUSSHOME/lib/
- 生成加密密码和加密因子文件(为了加密user mapping的密码),注意,每个节点都要执行
gs_guc generate -D $GAUSSHOME/bin -o usermapping
- 连接需要使用dblink的数据库(假设数据库名叫testdb)
gsql -r -d testdb -U admin -W password
- 创建插件
create extension oracle_fdw;
- 创建外部数据服务器(相当于create dblink,此处的ora_sv为自定义的dblink名称)
create server ora_sv foreign data wrapper oracle_fdw options(dbserver '192.168.163.123:1521/pdb1');
- 创建用户匹配的 连接外部数据服务器的 验证方式(此步绑定mogdb的指定用户mogdb_user使用哪个用户名密码访问oracle)
create user mapping for mogdb_user server ora_sv options(user 'oracle_user',password 'oracle_password');
- 测试查询(oracle 语法)
select username from all_users@ora_sv where rownum