MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2016年7月1日 星期五

從 EnterpriseDB 到 Oracle 資料庫的 Database Link 設定

DBLink 是一種資料庫之間連線、交換資料的工具,不管是在常見的 Oracle 資料庫之間,或是原生的 PostgreSQL 之間,都有提供這樣的功能;尤其以 Oracle 資料庫的 DBLink 最常耳聞其應用。

對於從 Oracle 系統逐漸轉向兼用 EnterpriseDB 的用戶來說,時常會需要維持既有的系統間資料交換架構,因此而產生了 Oracle 與 EnterpriseDB 之間,異質資料庫間的 DBLink 連線需求。而 EnterpriseDB 的 Oracle 資料庫相容功能內,就提供了可以連接到 Oracle 資料庫的 DBLink 功能,而且操作上,相當接近 Oracle 的操作方式。在這篇演練中,即演習這樣的一個功能。


在此以 CentOS 上所安裝的 EnterpriseDB 9.5 版進行操作。


設置 EnterpriseDB 對 Oracle 的 DBLink 功能,需要安裝 Oracle Instant Client ,才可以透過 DBLink 從 EDB 連到 Oracle。Oracle Instant Client 對 Linux 提供 zip 壓縮檔或 rpm 安裝檔兩種安裝選擇。以下使用 rpm 進行安裝:

取得 rpm 安裝檔:
 oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm

安裝:
[root@edb95 ~]# rpm -ivh oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm

接著,在作業系統帳戶 enterprisedb( PostgreSQL process owner )中設定環境變數 LD_LIBRARY_PATH,使 EDB 找到 Oracle 提供的 library,像是 libnnz11.so


使用 Oracle Instant Client 壓縮檔:
[enterprisedb@edb95 ~]$ export LD_LIBRARY_PATH="/path/to/OCI/location/lib/":$LD_LIBRARY_PATH
使用 Oracle Instant Client 的 rpm 安裝檔:
[enterprisedb@edb95 ~]$ export LD_LIBRARY_PATH="/usr/lib/oracle/11.2/client64/lib/":$LD_LIBRARY_PATH

Note:永久生效的設定方式(官方使用手冊未提及)
            在 /etc/ld.so.conf 中將 Oracle lib 所在目錄路徑設定進去(紅字部份),然後再重新載入:
[root@edb95 ~]# echo "/usr/lib/oracle/11.2/client64/lib/" >>  /etc/ld.so.conf
[root@edb95 ~]# ldconfig

由於 EnterpriseB 盡量對現行版本的 Oracle 支援,於是需要把 Oracle 提供的 library,做出 soft link,以便使 EnterpriseDB 認得 libocci.so 以及 libclntsh.so
[root@edb95 ~]# ln -s /usr/lib/oracle/11.2/client64/lib/libocci.so.11.1 /usr/lib/oracle/11.2/client64/lib/libocci.so
[root@edb95 ~]# ln -s /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 /usr/lib/oracle/11.2/client64/lib/libclntsh.so

以上就已經把 EnterpriseDB 需要的環境設置設完畢了

接著,便是進行資料庫裡面的設定。
首先登入資料庫,設定 postgresql.conf 裡面的參數(官方使用手冊),這裡不直接調整設定檔,而是利用系統指令設置(相關設定會出現在 postgresql.auto.conf):
edb=# ALTER SYSTEM SET oracle_home ="/usr/lib/oracle/11.2/client64/lib/";
ALTER SYSTEM
edb=# 

Note:使用手冊中未提及 Linux 下設置:$PGDATA/postgresql.conf 內的 oracle_home 指的是 OCI library libclntsh.so 的位置,與 Oracle 資料庫中環境變數 $ORACLE_HOME 是不同的意思


然後重新啟動 Enterprisedb:
[enterprisedb@edb95 ~]$ . /opt/PostgresPlus/9.5AS/pgplus_env.sh
[enterprisedb@edb95 ~]$ pg_ctl -D ~/data/ restart


以上就已經把 EnterpriseDB 的環境設置完畢。

接著,便是啟用 DBLink
edb=# -- 先以資料庫的管理者登入,才能建立 DBLink
edb=# \c edb enterprisedb
You are now connected to database "edb" as user "enterprisedb".
edb=# CREATE PUBLIC DATABASE LINK oralink
edb-#  CONNECT TO hr IDENTIFIED BY 'hr_pwd'
edb-#  USING '//10.140.0.2:1521/xe';
CREATE DATABASE LINK
edb=# -- 列舉 DBLink 的訊息
edb=# SELECT lnkname, lnkuser, lnkconnstr
edb-#  FROM pg_catalog.edb_dblink;
 lnkname | lnkuser |      lnkconnstr    
---------+---------+----------------------
 oralink | hr      | //10.140.0.2:1521/xe
(1 row)

上面列舉 DBLink 訊息的指令,也能由下列指令進行確認:
edb=# SELECT dblink_ora_connect('oralink','10.140.0.2','xe',
edb-#  'hr','hr_pwd','1521');
 dblink_ora_connect
--------------------
 OK
(1 row)

建立 DBLink 完畢後,使用 Oracle-xe 內建範例 schema,HR schema,測試 DBLink。使用 DBLink 存取表格時,不需要管理者權限的帳戶,就可以進行 Oracle 表格的查詢:
edb=# SELECT job_id FROM employees@oralink;
   job_id
------------
 AC_ACCOUNT
 AC_MGR
...(略)
(107 rows)

以上便是從 EnterpriseDB 連線到 Oracle 的 DBLink 功能。

目前已知的問題是,當 Oracle 資料庫上面所設定的資料庫系統編碼是不支援 User-Define Characters 功能的

順帶一提,Foreign Data Wrapper 是 PostgreSQL 用來連線到到其他 PostgreSQL 或其他類型資料庫(像是:Oracle FDWGreenplum FDWMongoDB FDWHadoop FDWElasticSearch FDW ... 等)存取資料的連線套件。這些套件,讓 PostgreSQL 成為最適合介接各種資料的工具之一。




參考資料:
EnterpriseDB DBLinkto Oracle

艾力克斯札記: Oracle dblink to Postgres Plus Enterprise Edition (PPEE)
在EnterpriseDB中建立指向Oracle的Database Link-pugna_zfr-ChinaUnix博客
EDB建立连接Oracle的DBlink_lxg0618_新浪博客
EnterpriseDB: Oracle Database Links
CREATE [PUBLIC] DATABASE LINK -  Documentation | EnterpriseDB
dblink_ora - Documentation | EnterpriseDB
dba - A issue on DB link between Postgres and Oracle? - Database Administrators Stack Exchange

Oracle上相關:
查看及修改oracle編碼格式方法 @ 資訊園 :: 痞客邦 PIXNET ::
昭佑.天翔: Oracle PL/SQL: 讓 "字串資料" 進行 "字元集轉換"


以下為額外資訊:


Postgres DBLink
資料庫-工作日誌: PostgreSQL 跨資料庫查詢!!!!
PostgreSQL跨库查询 - 豆瓣
PostgreSQL: Documentation: 9.5: dblink
Using DbLink to access other PostgreSQL Databases and Servers - Postgres OnLine Journal
Google Search - postgres dblink remote plpgsql
Google Search - postgres dblink encoding

各式 Foreign Data Wrapper
Foreign data wrappers - PostgreSQL wiki
A look at Foreign Data Wrappers Craig Kerstiens
SQL Server and PostgreSQL Foreign Data Wrapper Configuration - Part 3
Connecting your PostgreSQL instance to an Oracle database - The PostgreSQL 9.5 way - Blog dbi services
Playing with Foreign Data Wrappers in PostgreSQL | Kartoza
Setup Mysql Foreign Data Wrapper in Postgresql - Stack Overflow
Import Foreign Schema for ogr_fdw for PostgreSQL 9.5 - Postgres OnLine Journal
Import Foreign Schema hack with OGR_FDW and reading LibreOffice calc workbooks - Postgres OnLine Journal
Specific SQL Database Wrappers - PostgreSQL wiki
HadoopFDW: PostgreSQL Foreign Data Wrapper for Hadoop - BigSQL

沒有留言:

張貼留言