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。

create extension oracle_fdw;
create server to_ora42 foreign data wrapper oracle_fdw options(dbserver '//192.168.237.42:1521/SOGG');
grant usage on foreign server to_ora42 to user_ora;
create user mapping for user_ora server to_ora42 options(user 'user01',password 'user01');

server與mapping 創建后,在pg_foreign_server 和pg_user_mappings 會有相應條目

test=# select * from pg_foreign_server where srvname='to_ora42';
  oid  | srvname  | srvowner | srvfdw | srvtype | srvversion | srvacl |              srvoptions               
-------+----------+----------+--------+---------+------------+--------+---------------------------------------
 16552 | to_ora42 |       10 |  16549 |         |            |        | {dbserver=//192.168.237.42:1521/SOGG}

test=# select * from pg_user_mappings where srvname='to_ora42';
 umid  | srvid | srvname  | umuser | usename  |           umoptions           
-------+-------+----------+--------+----------+-------------------------------
 16553 | 16552 | to_ora42 |  16550 | user_ora | {user=user01,password=user01}
(1 row)

3、外部表

create foreign table ft_t1(id integer,name char(9)) server to_ora42 options(schema 'USER01', table 'T1');

注意:這里的  'USER01' 和 'T1' 都是大寫的,與Oracle 數據字典的信息大小寫一致。否則在訪問時會有如下問題:

test=> create foreign table ft_t1(id integer,name char(9)) server to_ora42 options(schema 'USER01', table 't1');
CREATE FOREIGN TABLE
test=> select * from ft_t1;                                                                                     
ERROR:  Oracle table "USER01"."t1" for foreign table "ft_t1" does not exist or does not allow read access
DETAIL:  ORA-00942: table or view does not exist
HINT:  Oracle table names are case sensitive (normally all uppercase).

三、可以手動創建wrapper

create extension 后,pg_foreign_data_wrapper 默認就有 oracle_fdw , fdwoptions 為空。默認的wrapper 可能不能使用,可以新建wrapper,在 fdwoptions 可以指定些選項,比如字符集。

create foreign data wrapper oracle_fdw_1 handler oracle_fdw_handler validator oracle_fdw_validator options (nls_lang 'AMERICAN_AMERICA.ZHS16GBK');

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM