Skip to main content
Version: v1

使用 Oracle DBLink 連結到 Canner Enterprise

5_Oracle_dblink

1. 在 Oracle Server 安裝 PostgreSQL ODBC Drivers

請使用以下指令進行安裝 PostgreSQL ODBC Drivers

yum install postgresql-odbc

2. 在 Oracle Server 編輯 odbc.ini 檔案並測試 DSN 連接性

/etc 目錄下建立 odbc.ini 檔案

vi /etc/odbc.ini

新增如下內容

[PG]
Description = PG
Driver = /usr/lib64/psqlodbc.so
ServerName = $server_name
Username = $username
Password = $password
Port = $port
Database = $database
[Default]
Driver = /usr/lib64/libodbcpsqlS.so
  • ServerName: 使用 service domain 或 IP e.g. 192.168.0.12
  • Username: canner
  • Password: 資料來源使用者的密碼
    • 在 Canner Enterprise 中去建立使用在 PostgreSQL wire protocol 的 Personal Access Token,並以此做為密碼。關於 Personal Access Token 參考文件
  • Port: Datasource 的 port e.g. 7432
  • Database: 資料庫名稱
    • 使用 Canner Enterprise Workspace 中的 SQL Name (e.g. wire_protocol_test_84077)。SQL Name 位置位於 Workspace 中 Config 設定內容中。 1_oracle_dblink

完成之後,使用以下指令來驗證 DSN 對 Database 的連接性

isql -v pg

若成功連接後,我們將會看到以下結果

+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+

3. 建立 initPG.ora 檔案

$ORACLE_HOME/hs/admin 目錄下建立 initPG.ora,並新增以下參數

cd $ORACLE_HOME/hs/admin
vi initPG.ora

參數內容

# This is a sample agent init file that contains the HS parameters that are
# needed for the Database Gateway for ODBC
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = PG
HS_FDS_TRACE_LEVEL = 4
HS_FDS_TRACE_FILE_NAME=/tmp/ora_hs_trace.log
HS_FDS_SHAREABLE_NAME = /usr/lib64/psqlodbc.so
HS_LANGUAGE = AMERICAN_AMERICA.WE8ISO8859P9
#
# ODBC specific environment variables
#
set ODBCINI=/etc/odbc.ini
#
# Environment variables required for the non-Oracle system
#

4. 配置 tnsnames.ora & listener.ora 檔案

配置 tnsnames.ora

執行以下指令

vi $ORACLE_HOME/admin/ORCLCDB/tnsnames.ora

新增以下內容

PG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = $your_oracle_host)(PORT = 1521))
)
(CONNECT_DATA =
(SID = PG)
)
(HS = OK)
)
  • HOST: 使用你的 Servcie Domain 或 IP e.g. 192.168.0.12
  • 因為我們將 PostgreSQL 作為 remote data source,因此將 PG 設定為 SID

配置 listener.ora

在進行編輯之前,我們需要先停止 Oracle Listener,我們可以在 $ORACLE_HOME/bin 找到指令

 lsnrctl stop

新增以下內容

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(PROGRAM = dg4odbc)
(SID_NAME = PG)
(ORACLE_HOME = $oracle_home)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = $host)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
  • ORACLE_HOME: 使用 home path e.g /u01/app/oracle/product/19.3.0/db_1

  • Host: 使用 Servcie Domain 或 IP e.g. 192.168.0.12

    完成後,重新啟動 Oracle Listener

lsnrctl start

啟動後,我們可以看到以下的 Log

Services Summary...
Service "PG" has 1 instance(s).
Instance "PG", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

執行以下指令

CREATE PUBLIC DATABASE LINK PG_DBLINK CONNECT TO $username IDENTIFIED BY $secret USING 'PG';
  • PG_DBLINK: 可以取代或使用其他名稱
  • $username: canner
  • $secret: 使用前面步驟建立的 Personal Acess Token

驗證連接結果

使用以下指令,確認我們成功透過 Oracle DB Link 讀取 Canner Enterprise Workspace 上的資料

select * from "foo1"@PG_DBLINK;

以 Canner Workspace 上的 foo1 這張 table 為範例,此為資料內容 3_oracle_dblink

使用熟悉的 IDE,根據以上的指令建立 DB Link,並連接 Canner Enterprise 上 foo1 這張 table,驗證資料成功連接 4_oracle_dblink