全網最全的linux上docker安裝oracle的詳細文檔,遇到了n個問題,查了幾十篇文章,最終彙總版,再有解決不了的,私聊我,我幫你解決 1. 拉取阿裡鏡像oracle docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11 ...
目錄
- 全網最全的linux上docker安裝oracle的詳細文檔,遇到了n個問題,查了幾十篇文章,最終彙總版,再有解決不了的,私聊我,我幫你解決
- 1. 拉取阿裡鏡像oracle
- 2. 創建初始化數據
- 3. 創建啟動容器 數據持久化
- 4. 進入oracle容器
- 5. 切換到root用戶下進行配置
- 6. 編輯profile文件配置ORACLE環境變數
- 7. 創建軟連接
- 8. 切換到oracle 用戶
- 9. 登錄sqlplus並修改sys、system用戶密碼
- 10. 修改sys、system用戶密碼並刷新許可權
- 11. 查看一下oracle實例狀態
- 12. 用navicat連接oracle資料庫
- 12.1 用navicat連接報錯ORA-12514: TNS :no listener
- 12.2 結果navicat連接繼續報錯ORA-12514:TNS:listener does not currently know of service requested in connect descriptor
- 12.3 The listener supports no services
- 12.4 oracle修改埠啟動的別忘了遇到的1521全改成自定義的,仔細看我上面的listener.ora和tnsname.ora里host和port我全改成一致的了,在此就不多說了。
- 12.5 就在我滿心歡喜的時候又報了個錯ORA-01031: insufficient privileges
全網最全的linux上docker安裝oracle的詳細文檔,遇到了n個問題,查了幾十篇文章,最終彙總版,再有解決不了的,私聊我,我幫你解決
1. 拉取阿裡鏡像oracle
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
2. 創建初始化數據
#容器啟動
docker run -di --name oracle11521 --restart=always \
-p 1521:1521 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
# 創建文件夾
mkdir -p /home/esopadm/data/oracle
#複製文件出來
docker cp oracle11521:/home/oracle/app/ /home/esopadm/data/oracle
docker cp oracle11521:/etc/profile /home/esopadm/data/oracle/
cd /home/esopadm/data/oracle
# 500 500 是容器內 oracle 組和用戶的 id
chown -R 500.500 app
# 刪除容器
docker rm -f oracle11521
3. 創建啟動容器 數據持久化
docker run -d -p 11521:11521 -v /home/esopadm/data/oracle/app:/home/oracle/app \
-v /home/esopadm/data/oracle/profile:/etc/profile \
--restart=always --name oracle11521 registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
4. 進入oracle容器
docker exec -it oracle /bin/bash
這個命令就是我噩夢的開始,由於我用的是公司的開發環境的伺服器,別人已經事先裝過oracle了,所以我上面那個命令進入的是別人oracle,導致下麵執行的命令都是在別人地盤上玩的,白白浪費了好長時間,所以我只能改個埠號繼續玩,那容器名也不能一樣了,我把埠改成了11521,容器名為oracle11521。
那正確的命令應該是下麵這個
docker exec -it oracle11521 /bin/bash
5. 切換到root用戶下進行配置
su root
#密碼:helowin
6. 編輯profile文件配置ORACLE環境變數
vi /etc/profile
# 添加:
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
7. 創建軟連接
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
8. 切換到oracle 用戶
su - oracle
9. 登錄sqlplus並修改sys、system用戶密碼
sqlplus /nolog
conn /as sysdba
10. 修改sys、system用戶密碼並刷新許可權
alter user system identified by 123456;
alter user sys identified by 123456;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
exit 退出
上面簡單的三步我這就開始報錯了,下麵是我遇到的錯誤及解決辦法
10.1 當執行修改密碼的時候出現 :database not open
提示資料庫沒有打開,不急按如下操作
輸入:alter database open;
10.2 又提示另一個錯誤: ORA-01507: database not mounted
輸入:alter database mount;
10.3 又提示另一個錯誤:ORA-00214:control file
這個解決方法很多,我只用了其中一個,想看其他方法,查看這篇文章:https://blog.csdn.net/Ruishine/article/details/115323525
由於control102.ctl版本號是845比control101.ctl版本號841高,所以我將control101.ctl刪除,然後將control102.ctl拷貝到control101.ctl目錄下並改名為control101.ctl。
也就是說用高版本的覆蓋低版本的
11. 查看一下oracle實例狀態
lsnrctl status
12. 用navicat連接oracle資料庫
服務名:helowin(一定要填寫helowin)
用戶名:system 第10步設置的用戶)
密碼:123456(第10步設置的密碼)
終於大功告成了,這回開始使用吧。。。結果。。。
12.1 用navicat連接報錯ORA-12514: TNS :no listener
這個錯誤卡了我很久,我也不能每次都指定ip吧,其他同事用我再把他們ip加上?太蠢了。最後終於找到一個靠譜的
修改/home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/listener.ora文件里的host
HOST預設是localhost ,本機連接正常,遠程無法連接。改為機器名,本地、遠程都可以連接!
那我們就通過hostname查看主機名唄。
註意:是容器的主機名,而不是宿主機的。
修改完需要重新開啟監聽。先停止,再啟動。
lsnrctl stop
lsnrctl start
12.2 結果navicat連接繼續報錯ORA-12514:TNS:listener does not currently know of service requested in connect descriptor
大概意思是當前服務不可用
結果又是一頓瞎搞,結果lsnrctl status命令顯示的內容和以前又不一樣了,沒有可用的服務。
12.3 The listener supports no services
這個問題也找到解決辦法了。
繼續修改listener.ora 文件。
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = helowin)
(SID_NAME = helowin)
)
)
繼續lsnrctl stop然後lsnrctl start
熟悉的服務、實例終於又回來了。
12.4 oracle修改埠啟動的別忘了遇到的1521全改成自定義的,仔細看我上面的listener.ora和tnsname.ora里host和port我全改成一致的了,在此就不多說了。
12.5 就在我滿心歡喜的時候又報了個錯ORA-01031: insufficient privileges
許可權不足???
這個簡單查了一下
解決Navicat連接Oracle資料庫用戶許可權問題:
第一步:在cmd視窗運行[sqlplus],
第二步:輸入Oracle的用戶名和口令連接Oracle資料庫,
第三步:執行授權代碼,給用戶授予DBA許可權 [grant dba to 用戶名;],
如果還有許可權不足問題再執行第四步,
第四步:執行[grant all privileges to 用戶名;]
我這裡用戶名就是system了,執行完了沒什麼鳥用。
後來想起來了,之前蒙頭撞牆的時候改了高級里的角色為sysdba,改回default試一下。
居然成功了!!!
就這樣吧。洗洗睡吧。真的累了。