網站首頁 編程語言 正文
Oracle dblink的底層是通過ODBC連接PostgreSQL執行SQL的,需安裝unixODBC和PostgreSQL ODBC驅動(它們的配置文件是:odbcinst.ini和odbc.ini),還需配置Oracle網絡使用這個驅動。以下操作都是在Oracle服務器上進行:
以root用戶安裝unixODBC:
yum install unixODBC unixODBC-devel.x86_64
unixODBC相當于Linux中管理所有數據庫ODBC驅動的管理器。
以root用戶安裝PostgreSQL ODBC驅動
編譯安裝,以root執行:
yum install libpq5-devel.x86_64 wget https://ftp.postgresql.org/pub/odbc/versions/src/psqlodbc-12.02.0000.tar.gz tar xf psqlodbc-12.02.0000.tar.gz cd psqlodbc-12.02.0000 ./configure make make install
默認安裝到/user/local/lib
配置odbcinst.ini和odbc.ini,以root用戶執行:
vim /etc/odbcinst.ini(不區分大小寫)
/usr/local/lib/psqlodbcw.so?是PostgreSQL ODBC驅動的庫。
/usr/lib64/libodbcpsqlS.so?是unixODBC的庫。
vim /etc/odbc.ini
這里Driver應與odbcinst.ini中的[PostgreSQL]對應,可以取任何名字,但兩者需要相同。其它參數視具體PostgreSQL服務器而定。[PG]是一個連接PostgreSQL的配置名稱,其它應用程序(如Oracle)就是引用這個名稱訪問PostgreSQL。
測試一下這個ODBC連接能否工作:
配置Oracle網絡,以oracle用戶執行,涉及3個Oracle配置文件的修改:
$ORACLEHOME/network/admin/listener.ora $ORACLEHOME/hs/admin/init.ora $ORACLEHOME/network/admin/tnsnames.ora
1)在listener.ora中,增加一項配置(紅圈部分),它代表PostgreSQL提供的數據庫服務,Oracle將PostgreSQL也看成一個Oracle實例,SID_NAME = PGINSTANCE是給它定義一個實例名,這個名稱任意,但是這個名稱決定了第二個配置文件$ORACLEHOME/hs/admin/init
2)$ORACLEHOME/hs/admin/init
實例PGINSTANCE連接PostgreSQL數據庫時,Oracle會到$ORACLEHOME/hs/admin/下找名為initPGINSTANCE.ora的配置文件,里面是關于ODBC連接的信息,Oracle使用這些信息連接PostgreSQL,例如,在我的環境中,這個文件內容如下:
HS_FDS_CONNECT_INFO = PG 這個參數指向odbc.ini文件中的ODBC連接名稱[PG],參考前面。HS_FDS_SHAREABLE_NAME =/usr/local/lib/psqlodbcw.so?這個參數設置PostgreSQL ODBC驅動的路徑,與odbcinst.ini中Driver64相同。
如果PostgreSQL的字符編碼是UTF8,那么下面兩個參數應該這樣設置:
HS_NLS_NCHAR=UCS2 HS_LANGUAGE=AMERICAN_AMERICA.AL32UTF8
3)在tnsnames.ora中,增加一項(紅圈):
pglink是客戶端到PostgreSQL實例的連接配置,只要注意一點:“SID = PGINSTANCE”中,SID應設置為listener.ora中PostgreSQL的實例名,例如這里就是PGINSTANCE。pglink這個名稱,將在創建dblink時使用。
創建dblink
在sqlplus或其它終端執行
create database link dl_pgsql connect to "postgres" identified by "post123" using 'pglink';
其中'pglink'是tnsnames.ora文件里定義的,這里把Oracle數據庫作為客戶端,去連接pglink所指的實例。
"postgres" identified by "post123"?是指PostgreSQL中的用戶。
這各名稱為dl_pgsql的dblink所連接的PostgreSQL數據庫名由odbc.ini的Database參數指定。postgres用戶應該對Database所指的數據庫,有足夠訪問權限。
通過dblink訪問PostgreSQL
假設emp表在名為postgres的數據庫中的名為public的schema下,Oracle完成上面的配置后,可以這樣訪問:
select * from "public"."emp"@dl_pgsql;
創建和使用別名
CREATE SYNONYM emp_table FOR "public"."emp"@dl_pgsql; select * from emp_table;
原文鏈接:https://blog.csdn.net/howard_shooter/article/details/123612684
- 上一篇:C++的繼承特性你了解嗎_C 語言
- 下一篇:C#中using語句的用法_C#教程
相關推薦
- 2022-03-07 golang強制類型轉換和類型斷言_Golang
- 2022-10-09 C#實現線性查找算法_C#教程
- 2022-02-23 利用?trap?在?docker?容器優雅關閉前執行環境清理的方案_docker
- 2022-07-20 Spring利用zouzhiy-excel實現自定義表尾導出
- 2022-12-29 React控制元素顯示隱藏的三種方法小結_React
- 2022-05-02 DevOps自動化組件RUNDECK開發部署使用說明_服務器其它
- 2022-05-11 python?DataFrame的shift()方法的使用_python
- 2022-02-03 ionic 富文本編輯樣式后,前臺不能回顯樣式
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支