前提

在網上找到很多mac安裝oracle的版本是amd架構,奈何本人的電腦是arm架構。查看自己的電腦是什麼架構可以進入終端

輸入uname -m

可以看到本人的是arm架構

mac下Docker安裝oracle_oracle

安裝步驟

1、打開終端,拉取 Oracle 19c 鏡像(ARM64 架構),安裝的時間可能有點久,需要等待一會

這一步驟參考文章:MacBook M系列芯片基於docker安裝Oracle 19c

docker pull docker.cnb.cool/kangaroohy/open-source/images/oracle:19.19.0-ee-arm64

安裝成功後在終端中輸入 docker images,出現以下內容

mac下Docker安裝oracle_數據庫_02

2、由於我的電腦在docker下創建文件夾的話會報錯,所以選擇換一種方法

方法一(直接創建):失敗

mac下Docker安裝oracle_數據庫_03


方法二:成功

3、在終端中輸入:

docker run -d \
--name oracle \   # (自己設計)容器名稱,我這裏設置為了oracle
-p 1521:1521 \    # (不變)Oracle 數據庫端口映射(本機可訪問)
-p 5500:5500 \    # (不變)Enterprise Manager 控制枱端口
-e ORACLE_PDB=ORCL \   # 不變
-e ORACLE_PWD=12345678 \   # (自己設計)設置oracle初始密碼
-e ORACLE_CHARACTERSET=AL32UTF8 \   # 不變
-e INIT_SGA_SIZE=3000 \             # 不變
-e INIT_PGA_SIZE=1000 \             # 不變
# (自己設計)注意這一步,我首先在自己電腦中創建了oracle-data文件夾,然後把本地目錄掛載為 Oracle 數據文件存儲目錄
-v /自己電腦中oracle-data的文件夾路徑/oracle-data:/oracle-data \
# 剛剛安裝的Oracle 19c 鏡像
docker.cnb.cool/kangaroohy/open-source/images/oracle:19.19.0-ee-arm64

4、驗證容器是否正常運行

查看日誌確認數據庫是否啓動完成,輸入

docker logs -f oracle   # oracle是剛剛起的容器名稱

如果出現以下內容則證明啓動完成,第一次輸入需要初始化,可能要等待一段時間:

mac下Docker安裝oracle_數據庫_04

5、驗證掛載是否生效
進入容器,輸入

docker exec -it oracle /bin/bash   # 注意oracle是剛剛起的容器名字

如果看到了以下提示符,則已經成功進入了 Oracle 容器的 Bash 終端,當前提示符 bash-4.4$ 表示已經在容器內部了

mac下Docker安裝oracle_oracle_05


然後執行

ls /oracle-data

如果出現空目錄,則表示容器成功掛載了你自己電腦中oracle-data的文件夾路徑

mac下Docker安裝oracle_數據庫_06

6、連接oracle數據庫
bash-4.4$中輸入

sqlplus / as sysdba

如果成功,會看到類似下方的內容

mac下Docker安裝oracle_docker_07

在上一步中顯示目前已經成功登錄了容器內部的 Oracle 數據庫,説明數據庫服務已正常啓動,下面需要確認 Docker 容器是否暴露了1521 端口

7、確認 Docker 容器是否暴露了 1521 端口
先輸入exit退出容器,回到自己的macOS終端,然後再執行docker ps命令
如果 1521:1521 存在,説明 Oracle 數據庫的監聽端口已經映射出來,可以在 Navicat 中使用

mac下Docker安裝oracle_數據庫_08


8、使用Navicat連接Oracle

在Navicat中新建Oracle,本人的信息填寫如下,點擊測試鏈接後卻顯示未加載oracle數據庫。於是開始排錯

mac下Docker安裝oracle_oracle_09

排錯步驟一:確認服務名
輸入

docker exec -it oracle bash
cat $ORACLE_HOME/network/admin/tnsnames.ora

可以看到文件中同時出現 ORCLCDB ORCL,這是 Oracle 19c 多租户架構下的標準現象

mac下Docker安裝oracle_數據庫_10


查詢之後發現結論如下,還是推薦使用ORCL連接

mac下Docker安裝oracle_數據庫_11

排錯步驟二:測試數據庫監聽是否開放
在終端上執行

telnet localhost 1521

或(Mac 沒有 telnet 時)用

nc -zv localhost 1521

輸出如果類似紅框內容,説明監聽服務正常。如果失敗,説明監聽器沒啓用(容器內部監聽未啓動)

mac下Docker安裝oracle_oracle_12


排錯步驟三:容器內檢查監聽器狀態

終端輸入

docker exec -it oracle bash
lsnrctl status

如果顯示類似於下方圖片內容,則表示監聽器狀態成功啓動

mac下Docker安裝oracle_docker_13


可以看到本人電腦這兩個內容都沒有問題,後來查出這不是數據庫沒連接上,而是我的Navicat 本身缺少 Oracle 客户端庫

問題本質:
Navicat 連接 Oracle 時需要調用 Oracle 客户端驅動(OCI 動態庫),而 macOS 默認是沒有安裝這個驅動的,Navicat 會報這個錯:

mac下Docker安裝oracle_docker_14


9、現在開始安裝 Oracle Instant Client(輕量官方驅動)

下載後解壓
instantclient-basic-macos.arm64-19.22.0.0.0dbru.dmginstantclient-sdk-macos.arm64-19.22.0.0.0dbru.dmg

mac下Docker安裝oracle_oracle_15


mac下Docker安裝oracle_oracle_16

假設解壓在/Users/123/ins路徑下,打開終端執行

echo 'export DYLD_LIBRARY_PATH=/Users/123/ins' >> ~/.zshrc
source ~/.zshrc

之後重啓Navicat,再次連接,發現還是顯示測試失敗

mac下Docker安裝oracle_數據庫_17


10、需要在程序簡介中勾選Rosetta,勾選完成之後再次重啓Navicat

mac下Docker安裝oracle_數據庫_18

連接成功

mac下Docker安裝oracle_docker_19