首页 > 数据库 > > 跨集群访问其他数据平台-配置访问远端Oracle
当GaussDB 200需要访问远端Oracle数据库数据时或者需要数据互操作时,可以通过配置"对接Oracle"使用该功能。
以配置访问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”中的内容完整以及正确。
参数 | 描述 | 建议填写值 |
|---|---|---|
remote_connect_oracle_driver | oracle odbc driver名称,用户可以根据实际情况自定义名称,以oracle_开头,只允许由字母数字下划线组成,不能超过64个字符。 注意:
| oracle_Driver |
remote_connect_oracle_dsn | 该组配置的DSN标识,以oracle_开头,只允许由字母数字下划线组成,不能超过64个字符。 注意:
| oracle_DSN |
remote_connect_oracle_host | Oracle数据库的主机IP地址。 | - |
remote_connect_oracle_port | Oracle数据库的端口号。 | 1521 |
remote_connect_oracle_servicename | Oracle数据库的监听服务名。 | - |
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}的值。
完成以上操作后,在集群正常的情况下,即可执行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
----
( rows)
postgres=# SELECT * FROM exec_on_extension('ds_oracle', 'insert into a values (119);') AS (c1 text);
c1
----
( rows)
postgres=# SELECT * FROM exec_on_extension('ds_oracle', 'insert into a select * from a;') AS (c1 text);
c1
----
( 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 1
postgres=# INSERT INTO b SELECT * FROM exec_on_extension('ds_oracle', 'select * from a group by c1;') AS (c1 int);
INSERT 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)来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3151143/ ,如需转载,请注明出处,否则将追究法律责任。