想要連上Oracle資料庫,需要先安裝Oracle資料庫的客戶端程式在作業系統環境中。Oracle資料庫的客戶端有分為「Oracle Client」和「Oracle Instant Client」兩種,前者是完整的Oracle資料庫的客戶端程式和工具,很大一包,需要進行安裝的動作;而後者則拆分出了多個函式庫和執行檔,直接從官網上下載下來解壓縮就可以使用。如果我們只是希望Oracle資料庫的應用程式或是我們自己開發的程式能夠連上並使用PL/SQL來存取Oracle資料庫,只需要使用Oracle Instant Client即可。
在開始這篇文章之前,為了避免各位花費不必要的時間,在此還是先提醒一下。如果您是想找Oracle資料庫的圖形化管理介面,可以直接使用Oracle官方提供的SQL Developer,就不需要再按照本篇文章的方式使用Oracle Instant Client。透過下列網址可以取得SQL Developer:
安裝缺少的套件
Oracle Instant Client所依賴的套件可以先用以下指令來安裝。
Debian或其衍生的Linux發行版:
紅帽系的Linux發行版:
Oracle Instant Client 下載與設置
以下是Oracle Instant Client官網下載頁面的網址:
因為現在我們是要在Linux上使用,所以要選擇Linux版的Oracle Instant Client。
在Oracle Instant Client for Linux的下載頁面會看到很多項目可以下載,我們要下載Basic Package (ZIP)
。
然後在一個您覺得可以的目錄中解壓縮出壓縮檔內的目錄。筆者習慣放置在/opt/odb
中,所以此時的Oracle Instant Client的根目錄就會是/opt/odb/instantclient_21_8
(以21.8版本為例)。
在/etc/profile
中設定需要用到的環境變數,如下:
export ORACLE_HOME="/opt/odb/instantclient_21_8"
export LD_LIBRARY_PATH="$ORACLE_HOME:$LD_LIBRARY_PATH"
export TNS_ADMIN="$ORACLE_HOME/network/admin"
export PATH="$ORACLE_HOME:$PATH"
如此一來您的作業系統環境就有最基本的Oracle資料庫的客戶端能用了!如果有tnsnames.ora
檔案請放置在TNS_ADMIN
環境變數所指的目錄之下。TNS_ADMIN
環境變數可以不用設定,不設定的話通常就會被當作是用$ORACLE_HOME/network/admin
目錄。不過為了避免有些應用程式是直接去讀取TNS_ADMIN
環境變數,還是設定一下比較保險。
SQL*Plus
如果您需要一個CLI的工具來下SQL敘述管理Oracle資料庫,請在Oracle Instant Client for Linux的下載頁面下載SQL*Plus Package (ZIP)
項目並解壓縮,將解壓縮出來的目錄與Basic Package (ZIP)
解壓縮出來的目錄合併在一起即可。
此後就可以使用sqlplus
指令來操作Oracle資料庫。
在 Docker 容器中使用 Oracle Instant Client
Node.js映像加上Oracle Instant Client
Dockerfile
撰寫方式如下:
FROM node:20-slim
RUN apt update && apt install -y curl unzip libaio1 \
&& apt clean && rm -rf /var/lib/apt/lists/*
# Oracle Instant Client
RUN curl -fL https://download.oracle.com/otn_software/linux/instantclient/2112000/instantclient-basic-linux.x64-21.12.0.0.0dbru.zip -o instantclient.zip \
&& mkdir -p /opt/odb \
&& unzip instantclient.zip -d /opt/odb \
&& rm instantclient.zip
ENV ORACLE_HOME="/opt/odb/instantclient_21_12"
ENV LD_LIBRARY_PATH="$ORACLE_HOME:$LD_LIBRARY_PATH"
ENV TNS_ADMIN="$ORACLE_HOME/network/admin"
ENV PATH="$ORACLE_HOME:$PATH"
# ...
至於Node.js的alpine版本的映像,筆者就不建議在那上面使用Oracle Instant Client了。因為Oracle官方根本沒支援alpine,不要為了讓映像更輕巧卻增加潛在的問題。