Mac下使用IDEA連接Docker中的Oracle

一、安裝Docker

  1. 這里我們使用Docker Toolbox來安裝Docker。Docker Toolbox 下載地址

  2. 安裝就不需要我多說了,安裝之后多出3個應用程序。

    • 第一個是docker命令行界面。
    • 第二個是docker gui操作界面。
    • 第三個是 虛擬機。
  3. 這里我們啟動Docker Quickstart Terminal該程序會為我們做以下事項。

    1. 打開命令控制臺。

    2. 創建VirtualBox ISO虛擬機和證書ssh key。

    3. 啟動VirtualBox并運行docker進程。

    4. 創建default的碼頭。

    5. 注意:如果你沒有出現上圖藍色框中的內容并且紅色框中什么都沒有,那么說明初始化失敗了,這時關掉這個命令控制臺,在重新啟動一下Docker Quickstart Terminal就好了。

  4. 啟動完畢之后,你就可以運行docker命令了。下面運行hello-world來校驗是否安裝成功。

    docker run hello-world

    • 出現圖上的情況說明Docker已經成功安裝。
  5. 而如果你出現圖下這種情況的話,說明你是在Mac終端運行的該命令,解決方法有兩種。

    1. 啟動Docker Quickstart Terminal在該命令窗口執行上述命令。
    2. 獲取default虛擬機的環境變量,在連接到default虛擬機之后執行第四步就沒問題了。

    docker-machine env default
    eval $(docker-machine env default)

       ![](http://upload-images.jianshu.io/upload_images/5344304-344a4b7869e15eb0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    

二、配置Oracle加速器

  1. 安裝Oracle之前,我們可以給docker配置一個加速器。PS:配不配置都無所謂,不過配置后等會你下載Oracle速度應該會快一點。

  2. 這里我使用的是阿里云提供的加速器。加速器地址

    • 點擊加速器,就可以看到你的專屬加速器地址了。
  3. 我們可以通過修改daemon配置文件/etc/docker/daemon.json來使用加速器。PS:link是你的專屬加速地址。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["link"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

三、安裝Oracle

  1. 執行該命令下載Oracle鏡像。

    docker pull alexeiled/docker-oracle-xe-11g

  2. 啟動Oracle鏡像,并命名Oracle。

    docker run -h "oracle" --name "oracle" -d -p 49160:22 -p 49161:1521 -p 49162:8080 alexeiled/docker-oracle-xe-11g

  3. 查看Oracle是否成功安裝。

    docker ps


    • 49160:是連接ssh對應的端口。
    • 49161:是連接sqlplus對應的端口。
    • 49162:是連接oem對應的端口。
  4. 成功安裝后我們試試連接Oracle。

    docker exec -it CID /bin/bash

    • 這里的CID是你自己的CONTAINER ID,不知道自己的CID的請查看第三步。

      * 仔細看,在執行紅色框中的命令后,藍色區域的變化。

  5. 進入Oracle中的root用戶后,在連接sqlplus

    • Oracle有兩個用戶syssystem默認密碼都是oracle。

    • 這里我用sys賬戶登錄。

      1. 首先進入sqlplus

      sqlplus
      2. 執行上述命令后,會提示你輸入賬號和密碼,這里有個注意的地方!直接上圖講解。
      >


      3. 上圖第4點另外還有個注意的地方,就是第一次進入sqlplus時,會提示這個信息,大意就是密碼將在7天內過期。
      ERROR: ORA-28002 : the password will expire within 7 days
      * 出現上述情況的原因在于Oracle11gdefault profile中設定了180 days。PS:有人肯定會問這不是180天嗎跟7天有什么關系,在這里不作詳細解釋。
      * 具體解決方案等會使用Intellij IDEA 連接后解決。PS:主要是好操作。


三、使用 Intellij IDEA 連接 Oracle 數據庫

  1. 隨便創建一個項目。

  2. 然后連接Oracle數據庫。

  3. 配置。


    * 這里注意Port端口是49161。
    * Host通過docker-machine ip命令獲取。
    * 最后點擊Test Connection 出現上圖顯示則代表成功連接上Oracle。

  4. 現在來解決關于密碼7天過期的問題。

    1. 首先檢查該用戶的profile是哪個,一般都是DEFAULT。

      SQL SELECT username,PROFILE FROM dba_users;


      2. 查看該DEFAULT的密碼有效期配置。

    SQL SELECT * FROM dba_profiles d WHERE d.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';



    3. 將密碼有效期由180天改成無期限。

     > SQL ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;    
    
Paste_Image.png
4. 到這里就已經搞定,但是這只是代表了后面用別的用戶登錄不會出現`ORA-28002`錯誤,但之前我們用`sys`用戶登錄該用戶密碼依然會在7天后過期,所以只需要我們在修改一次密碼行了。

    > alter user sys identified by 密碼
5. 眼尖的人在第一步發現我解鎖了`HR`用戶和`SCOTT`用戶,既然都給你們看了,就順便說下怎么解鎖和創建吧!
    1. 解鎖`HR`用戶
        * 首先查看用戶名和用戶狀態
        
            >SQL SELECT username,account_status FROM dba_users ORDER BY username;       


* 然后解鎖HR用戶

         > SQL ALTER USER hr ACCOUNT UNLOCK ;
    2. 創建`SCOTT`用戶
        * 首先創建用戶
        
            > SQL CREATE USER  scott IDENTIFIED  BY tiger;
        * 然后授權
            
            >SQL GRANT CONNECT ,RESOURCE ,DBA TO scott;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容