kinbase访问oracle数据库oracle_fdw介绍

Oracle_FDW 使用介绍
本文以例子的形式介绍 KingbaseES(Postgresql)数据库如何通过 oracle_fdw 扩展访问Oracle数据库。以下例子在PG12.3 与 KingbaseES V8R6进行过实际验证。
一、准备数据
1、Oracle端
IP:192.168.237.42, SID:SOGG ,数据库用户:user01 / user01
SQL> create table t1(id integer,name char(9));
2、KingbaseES 端
IP:192.168.237.43
create role user_ora with login password ‘user_ora’;
create schema user_ora authorization user_ora;
二、安装配置
1、安装fdw
将官方提供的oracle_fdw包解压,将解压后相关的文件拷贝到对应的 share , lib 目录。注意:要确认安装包是否包含 libclntsh.so 文件,如果没有,需要从oracle 安装路径拷贝,或者安装instantclient。
2、创建扩展
oracle_fdw 包安装后,查 sys_available_extensions 可以看到 oracle_fdw extension。
1 create extension oracle_fdw;
2 create server to_ora42 foreign data wrapper oracle_fdw options(dbserver ‘//192.168.237.42:1521/SOGG’);
3 grant usage on foreign server to_ora42 to user_ora;
4 create user mapping for user_ora server to_ora42 options(user ‘user01’,password ‘user01’);
若存在,则删除用户映射bob,服务器foo :
DROP USER MAPPING IF EXISTS FOR bob SERVER foo;

来自 <https://www.php.cn/manual/view/20828.html> 

server与mapping 创建后,在pg_foreign_server 和pg_user_mappings 会有相应条目
1 test=# select * from pg_foreign_server where srvname=‘to_ora42’;
2   oid  | srvname  | srvowner | srvfdw | srvtype | srvversion | srvacl |              srvoptions              
3 -------±---------±---------±-------±--------±-----------±-------±--------------------------------------
4  16552 | to_ora42 |       10 |  16549 |         |            |        | {dbserver=//192.168.237.42:1521/SOGG}
5  
6 test=# select * from pg_user_mappings where srvname=‘to_ora42’;
7  umid  | srvid | srvname  | umuser | usename  |           umoptions          
8 -------±------±---------±-------±---------±------------------------------
9  16553 | 16552 | to_ora42 |  16550 | user_ora | {user=user01,password=user01}
10 (1 row)
3、外部表
1 create foreign table ft_t1(id integer,name char(9)) server to_ora42 options(schema ‘USER01’, table ‘T1’);
注意:这里的  ‘USER01’ 和 ‘T1’ 都是大写的,与Oracle 数据字典的信息大小写一致。否则在访问时会有如下问题:
1 test=> create foreign table ft_t1(id integer,name char(9)) server to_ora42 options(schema ‘USER01’, table ‘t1’);
2 CREATE FOREIGN TABLE
3 test=> select * from ft_t1;                                                                                    
4 ERROR:  Oracle table “USER01”.“t1” for foreign table “ft_t1” does not exist or does not allow read access
5 DETAIL:  ORA-00942: table or view does not exist
6 HINT:  Oracle table names are case sensitive (normally all uppercase).
三、可以手动创建wrapper
create extension 后,pg_foreign_data_wrapper 默认就有 oracle_fdw , fdwoptions 为空。默认的wrapper 可能不能使用,可以新建wrapper,在 fdwoptions 可以指定些选项,比如字符集。
1 create foreign data wrapper oracle_fdw_1 handler oracle_fdw_handler validator oracle_fdw_validator options (nls_lang ‘AMERICAN_AMERICA.ZHS16GBK’);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值