首頁 > 軟體

Oracle設定dblink存取PostgreSQL的操作方法

2022-03-21 13:03:11

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<SID_NAME>.ora
$ORACLEHOME/network/admin/tnsnames.ora

1)在listener.ora中,增加一項設定(紅圈部分),它代表PostgreSQL提供的資料庫服務,Oracle將PostgreSQL也看成一個Oracle範例,SID_NAME = PGINSTANCE是給它定義一個範例名,這個名稱任意,但是這個名稱決定了第二個組態檔$ORACLEHOME/hs/admin/init<SID_NAME>.ora的檔名,例如initPGINSTANCE.ora。

2)$ORACLEHOME/hs/admin/init<SID_NAME>.ora
範例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;

到此這篇關於Oracle設定dblink存取PostgreSQL的文章就介紹到這了,更多相關Oracle dblink存取PostgreSQL內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com