配置访问远端Oracle
操作场景
当GaussDB 200需要访问远端Oracle数据库数据时或者需要数据互操作时,可以通过配置"对接Oracle"使用该功能。
约束限制
- 仅支持连接Oracle11.2.0.1至Oracle12.2.0.1。
- 要求Oracle-ODBC驱动的版本为12.2.0.1.0。
- unixODBC的版本要求为2.3.6。
- 支持最多配置20组远端Oracle配置。
- 配置所需要的Oracle ODBC请从Oracle官网下载。如: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html。
以配置访问Oracle12.2.0.1为例,需要下载:“oracle-instantclient-basic-linux.x64-12.2.0.1.0.zip”、“oracle-instantclient-sqlplus-linux.x64-12.2.0.1.0.zip”、“oracle-instantclient-odbc-linux.x64-12.2.0.1.0.zip”。并将上述三个zip文件打包压缩为“package.zip”。
说明:
用户需要保证“package.zip”中的内容完整以及正确。
前提条件
- Oracle数据库和GaussDB 200集群状态正常。
- Oracle数据库物理节点和GaussDB 200集群之间可以互相通信。
操作步骤
- 登录FusionInsight Manager。
- 选择“集群 > 待操作的集群名称 > 服务 > MPPDB > 对接 > 对接Oracle”,单击“创建”,填写配置组名称,单击“确定”。
- 填写配置参数,配置参数参见表1。
表1 GaussDB 200配置访问远端Oracle的配置项 参数
描述
建议填写值
remote_connect_oracle_driver
oracle odbc driver名称,用户可以根据实际情况自定义名称,以oracle_开头,只允许由字母数字下划线组成,不能超过64个字符。
注意:- “remote_connect_oracle_driver”值作为配置标示,保存配置后将不能修改,请用户慎重填写。
- 不同Oracle配置组中的“remote_connect_oracle_driver”参数值不能相同。
oracle_Driver
remote_connect_oracle_dsn
该组配置的DSN标识,以oracle_开头,只允许由字母数字下划线组成,不能超过64个字符。
注意:- “remote_connect_oracle_dsn”值作为配置标示,保存配置后将不能修改,请用户慎重填写。
- 不同Oracle配置组中的“remote_connect_oracle_dsn”参数值不能相同。
oracle_DSN
remote_connect_oracle_host
Oracle数据库的主机IP地址。
-
remote_connect_oracle_port
Oracle数据库的端口号。
1521
remote_connect_oracle_servicename
Oracle数据库的监听服务名。
-
- 上传驱动文件“package.zip”,单击“上传并部署”,等待部署完成。
- 单击“保存”。等待保存配置成功,单击“完成”。
- 选择“更多 > 重启”,执行相应操作重启服务。
- 创建Data Source。
- 连接数据库。
- 创建Data Source。
postgres=#CREATE DATA SOURCE ds_oracle TYPE 'ORACLE' OPTIONS (DSN 'oracle_DSN', USERNAME 'oracle_user', PASSWORD 'oracle_pwd', ENCODING 'UTF8');
说明:
其OPTIONS中DSN字段为用户填写的{remote_connect_oracle_dsn}的值。
- 连接Oracle数据库。
完成以上操作后,在集群正常的情况下,即可执行GaussDB 200数据库对Oracle数据库进行SQL操作。比如查询Oracle的一张表a(c1 int):
postgres=#SELECT * FROM exec_on_extension('ds_oracle', 'select * from a;') AS (c1 int);
说明:
使用“exec_on_extension”之前需要创建Data Source对象。
示例
-- 创建Data Source(这里的username/password是指待连接的Oracle数据库的用户名/密码) postgres=#CREATE DATA SOURCE ds_oracle OPTIONS (dsn 'oracle_DSN', username 'user_ora', password 'pwd_ora', encoding 'utf8'); -- 建远程表、插入数据、查询数据 postgres=#SELECT * FROM exec_on_extension('ds_oracle', 'create table a (c1 int);') AS (c1 text); c1 ---- (0 rows) postgres=#SELECT * FROM exec_on_extension('ds_oracle', 'insert into a values (119);') AS (c1 text); c1 ---- (0 rows) postgres=#SELECT * FROM exec_on_extension('ds_oracle', 'insert into a select * from a;') AS (c1 text); c1 ---- (0 rows) postgres=#SELECT * FROM exec_on_extension('ds_oracle', 'select * from a;') AS (c1 int); c1 ----- 119 119 (2 rows) postgres=#SELECT * FROM exec_on_extension('ds_oracle', 'select * from a a1 inner join a a2 on a1.c1=a2.c1;') AS (c1 int, c2 int); c1 | c2 -----+----- 119 | 119 119 | 119 119 | 119 119 | 119 (4 rows) -- 查询结果入本地表 postgres=#CREATE TABLE b AS SELECT * FROM exec_on_extension('ds_oracle', 'select * from a group by c1;') AS (c1 int); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'c1' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. INSERT 0 1 postgres=#INSERT INTO b SELECT * FROM exec_on_extension('ds_oracle', 'select * from a group by c1;') AS (c1 int); INSERT 0 1 -- 查询结果与本地表关联查询 postgres=#SELECT * FROM b INNER JOIN (SELECT * FROM exec_on_extension('ds_oracle', 'select * from a;') AS (c1 int)) a ON a.c1=b.c1; c1 | c2 -----+----- 119 | 119 119 | 119 119 | 119 119 | 119 (4 rows)
查看更多:华为GaussDB 200 跨集群访问其他数据平台「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论
- 连接Oracle数据库。