前提
在網上找到很多mac安裝oracle的版本是amd架構,奈何本人的電腦是arm架構。查看自己的電腦是什麼架構可以進入終端
輸入uname -m
可以看到本人的是arm架構
安裝步驟
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,出現以下內容
2、由於我的電腦在docker下創建文件夾的話會報錯,所以選擇換一種方法
方法一(直接創建):失敗
方法二:成功
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是剛剛起的容器名稱
如果出現以下內容則證明啓動完成,第一次輸入需要初始化,可能要等待一段時間:
5、驗證掛載是否生效
進入容器,輸入
docker exec -it oracle /bin/bash # 注意oracle是剛剛起的容器名字
如果看到了以下提示符,則已經成功進入了 Oracle 容器的 Bash 終端,當前提示符 bash-4.4$ 表示已經在容器內部了
然後執行
ls /oracle-data
如果出現空目錄,則表示容器成功掛載了你自己電腦中oracle-data的文件夾路徑
6、連接oracle數據庫
在bash-4.4$中輸入
sqlplus / as sysdba
如果成功,會看到類似下方的內容
在上一步中顯示目前已經成功登錄了容器內部的 Oracle 數據庫,説明數據庫服務已正常啓動,下面需要確認 Docker 容器是否暴露了1521 端口
7、確認 Docker 容器是否暴露了 1521 端口
先輸入exit退出容器,回到自己的macOS終端,然後再執行docker ps命令
如果 1521:1521 存在,説明 Oracle 數據庫的監聽端口已經映射出來,可以在 Navicat 中使用
8、使用Navicat連接Oracle
在Navicat中新建Oracle,本人的信息填寫如下,點擊測試鏈接後卻顯示未加載oracle數據庫。於是開始排錯
排錯步驟一:確認服務名
輸入
docker exec -it oracle bash
cat $ORACLE_HOME/network/admin/tnsnames.ora
可以看到文件中同時出現 ORCLCDB 和 ORCL,這是 Oracle 19c 多租户架構下的標準現象
查詢之後發現結論如下,還是推薦使用ORCL連接
排錯步驟二:測試數據庫監聽是否開放
在終端上執行
telnet localhost 1521
或(Mac 沒有 telnet 時)用
nc -zv localhost 1521
輸出如果類似紅框內容,説明監聽服務正常。如果失敗,説明監聽器沒啓用(容器內部監聽未啓動)
排錯步驟三:容器內檢查監聽器狀態
終端輸入
docker exec -it oracle bash
lsnrctl status
如果顯示類似於下方圖片內容,則表示監聽器狀態成功啓動
可以看到本人電腦這兩個內容都沒有問題,後來查出這不是數據庫沒連接上,而是我的Navicat 本身缺少 Oracle 客户端庫
問題本質:
Navicat 連接 Oracle 時需要調用 Oracle 客户端驅動(OCI 動態庫),而 macOS 默認是沒有安裝這個驅動的,Navicat 會報這個錯:
9、現在開始安裝 Oracle Instant Client(輕量官方驅動)
下載後解壓
instantclient-basic-macos.arm64-19.22.0.0.0dbru.dmginstantclient-sdk-macos.arm64-19.22.0.0.0dbru.dmg
假設解壓在/Users/123/ins路徑下,打開終端執行
echo 'export DYLD_LIBRARY_PATH=/Users/123/ins' >> ~/.zshrc
source ~/.zshrc
之後重啓Navicat,再次連接,發現還是顯示測試失敗
10、需要在程序簡介中勾選Rosetta,勾選完成之後再次重啓Navicat
連接成功