Docker中安裝Oracle

lhrbest發表於2020-03-31
--------------- docker安裝Oracle
docker  search oracle 
--------------------- docker安裝Oracle 12.1.0.2  XE版本
1、安裝阿里的docker源:
cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://pee6w651.mirror.aliyuncs.com"]
}
 
2、重啟docker服務
systemctl restart docker
3、這裡選擇獲取12c版本:12.1.0.2.0
docker pull sath89/oracle-12c
docker images|grep 12c
sath89/oracle-12c       latest        ee3351d51185     7 months ago        5.7GB
4、安裝
docker run -d --name oracle12c -h oracle12c -p 8080:8080 -p 1521:1521 -v $PWD/data:/mnt -e TZ=Asia/Shanghai sath89/oracle-12c
5、進入容器
docker exec -it 4d2c0efbb45e /bin/bash
sqlplus sys/lhr@121.36.78.6/xe AS sysdba
docker run -d --name oracle13c -h oracle13c -p 15210:1521  sath89/oracle-12c
--------------------- docker安裝Oracle 11g 11.2.0.1.0 Enterprise Edition Release版本
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
docker run -d --name oracle11g -h oracle12c registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
docker start oracle_11g
docker exec -it oracle11g bash
sqlplus / as sysdba
alter user system identified by oracle;
alter user sys identified by oracle;
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
su root 密碼:helowin
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
source /etc/profile
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin


https://github.com/oracle/docker-images/tree/master/OracleDatabase/SingleInstance#running-oracle-database-11gr2-express-edition-in-a-docker-container


基於docker安裝的oracle安裝

  1. 拉取映象:
    docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

  2. 下載完成後 檢視映象:
    docker images
    在這裡插入圖片描述

  3. 建立容器:
    docker run -d –p 1521:1521 --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    這裡說一下,命令後面的地址一定要是你下載的映象地址也就是你拉取映象名字,否則會出現名字已存在等問題!
    如果空間不足可以清理資料:
    刪除所有dangling資料卷(即無用的Volume):

    docker volume rm $(docker volume ls -qf dangling=true)

  4. 啟動容器
    docker start oracle11g
    在這裡插入圖片描述

  5. 進入映象進行配置

    1. 進入oracle的命令環境中。
      docker exec -it oracle11g bash
      在這裡插入圖片描述
    2. 切換到oracle資料庫的root 使用者下
      su root
      密碼:helowin
      在這裡插入圖片描述
    3. 編輯profile檔案配置ORACLE環境變數
      export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
      export ORACLE_SID=helowin
      export PATH= O R A C L E H O M E / b i n : ORACLE_HOME/bin: O R A C L E H O M E / b i n :PATH
      在最後加上
      在這裡插入圖片描述
    4. 建立軟連線
      ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
    5. 切換到oracle 使用者
      這裡還要說一下,一定要寫中間的內條 - 必須要,否則軟連線無效
      在這裡插入圖片描述
    6. 登入sqlplus–修改sys、system使用者密碼–建立使用者
      在這裡插入圖片描述
      修改密碼:
      alter user system identified by system;
      alter user sys identified by sys;
      ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
      建立使用者
      create user test identified by test;
      並給使用者賦予許可權
      grant connect,resource,dba to test;
      在這裡插入圖片描述
      過程中出現的報錯需要輸入以下內容:
      輸入:alter database mount;
      輸入 :alter database open;
  6. 客戶端安裝:
    1. instantclient_11_2 軟體目錄放置到 C:\Program Files目錄下
    2. 配置環境變數:
                變數名:ORACLE_HOME
                變數值:C:\Program Files\instantclient_11_2
                變數名:TNS_ADMIN
                變數值:C:\Program Files\instantclient_11_2
                變數名:NLS_LANG
                變數值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
                修改Path變數:在後面新增 C:\Program Files\instantclient_11_2
    3. 安裝:plsqldev11.0.4.exe 除了可以選擇安裝路徑外,其他全部預設。
    4. 開啟PLSQL Developer軟體後,取消登入,可以進入軟體內部,進行破解。破解檔案:PLSQL Developer10.0.3.1701_keygen.exe
    5. 配置plsql與客戶端 instantclient的連線
    在這裡插入圖片描述

    1. 把instantclient_11_2目錄中ADMIN資料夾中的 tnsnames.ora連線配置檔案,複製進入instantclient_11_2根目錄,並修改連線配置。
      host:指代服務所在ip地址。port指代:埠號 SERVICE_NAME 指代服務名
      docker_oracle11g =
            (DESCRIPTION =
                  (ADDRESS_LIST =
                              (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.6.136)(PORT = 1521))
                   )
                  (CONNECT_DATA =
                              (SERVICE_NAME = helowinXDB)
                   )
      )
      7.7 登入:
                  管理員賬號sys 密碼sys
                  connect as登入方式 sysdba



二,下載Oracle映象並安裝

使用 docker search oracle 來搜尋  oracle 的版本,我這裡選用的是  registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g ,這是阿里雲的一個  oracle 11g 版本,需要其他版本的小夥伴可以自行選擇。

使用如下命令來進行映象的拉取

docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

拉取完後,可以使用  docker images 來檢視已有映象

可以看到, REPOSITORY 就是映象名稱, TAG 是版本號, IMAGE ID 是映象的編號,後面的見名知意了。

啟動  Oracle 服務,使用如下命令即可, -p 將容器的  8080 埠對映到主機的  8080 埠(-p 主機埠:容器埠)

docker run --name registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g -p 1521:1521

之後使用  docker ps 來看啟動中的容器。

 這裡可以看到, oracle 服務已經啟動(即 ff94a17f84a7)


三,匯入資料、使用者及表空間建立

3.1,匯入  dmp 資料檔案

首先,需要從本機拷貝  dmp(從其他庫匯出的資料檔案,包含資料 + 表結構等) 資料到 Oracle 容器中

格式: docker cp /本地檔案地址 容器ID:/容器檔案儲存地址,如下:

docker cp /home/oracle/data_20181104.dmp ff94a17f84a7:/home/cloudera

【注:容器ID(這裡我的是ff94a17f84a7 )請換成自己的】 

3.2,建立表空間及使用者

使用如下命令進入  docker 容器內

docker exec -it ff94a17f84a7 bash

使用資料庫管理員方式進行登入

這裡我使用  sqlplus,提示  command not found ,不用擔心,使用  su - oracle 切換下使用者到  oracle 使用者 ,然後  sqlplus,之後  sys/sys as sysdba 進行登入,如下圖,登入成功!

進行表空間的建立:

這裡分為四小步:

1,建立臨時表空間:

create temporary tablespace TEST_DBF_TEMP tempfile '/home/oracle/data/TEST_DBF_TEMP.dbf' size 50m autoextend on next 50m maxsize 2048m;

 

2,建立正式表空間:

create  tablespace TEST_DBF datafile '/home/oracle/data/TEST_DBF.dbf' size 50M autoextend on next 50m maxsize 2048m;

 3,建立使用者並且指定表空間:

create user TEST identified by "123" default tablespace TEST_DBF temporary tablespace TEST_DBF_TEMP;

4,使用者授權:

grant create session,connect,resource,dba to TEST;

 

3.3,匯入 dmp 檔案:

imp TEST/123 file = /data_20181210.dmp full=y;

靜靜等待匯入完成即可。


PS:阿里雲記得去雲伺服器控制檯開放資料庫對應的埠即可外網連線。

 配置規則 

 選擇克隆一個,輸入  docker ps 中  oracle 對應的主機埠即可:

配上成功圖:

 Bingo!


常見問題(不定時更新):

Oracle服務無法連線&掛掉重啟

今天起來準備工作,Oracle無法連線了,可能原因:

  1. 連線時使用的sid不正確,進入容器,連線後使用  SELECT name FROM v$database; 檢視SID。
  2. dokcer容器中 Oracle 掛了。
  3. 其他未知原因(如電腦沒有連網,磁碟空間滿了,使用者名稱密碼錯誤等)。

馬上進伺服器去 docker ps 查詢線上容器,但是發現Oracle還在。

於是, docker exec -it ff94a17f84a7 bash 進入到容器 。

lsnrctl start啟動監聽程式,如下圖,提示已經啟動了。

sqlplus  /nolog進入, conn / as sysdba管理員連線,然後 startup ,如下圖,提示啟動成功,資料庫開啟。

Bingo! 


重啟容器後,埠變更,設定固定埠

1. 檢視需要修改的容器,記住  container id

docker ps -a


2. 停止容器

docker stop xxx

3. 修改容器的埠對映配置檔案

vim /var/lib/docker/containers/{container_id}/hostconfig.json

"PortBindings": {"80/tcp": [{"HostIp": "","HostPort": "8080"//宿主機ip}]},

4.重啟docker服務

service docker restart


5.啟動容器

docker start xxx


Error response from daemon: Cannot XX container

這個錯誤還真的是奇葩,我放個元旦回來,就什麼都操作不了了?

解決方案

重啟  docker 服務

systemctl restart docker

重啟容器成功 






使用Docker安裝Oracle資料庫

  在很多時候,我們需要在本地安裝Oracle資料庫,但是整個安裝的過程時間非常長而且安裝檔案大,那麼有不有更好的辦法來安裝Oracle資料庫既能減少安裝的時間而且還能夠快速進行部署呢?答案就是使用Docker來資料庫容器,那麼具體該怎麼進行呢?本文介紹如何在Win7和Win10上面進行Oracle映象的安裝以及如何使用DataGrip建立連線。

  一 Windows7上面的安裝

       首先就是在Window7上面安裝Docker Toolbox,具體安裝的過程,請參考 這篇文件。安裝完成後在桌面上一般會有一個Oracle VM VirtualBox和一個Docker Quickstart Terminal,一般在進行操作之前右鍵單擊Docker Quickstart Terminal,然後進入啟動介面,如果出現下面的介面就表示安裝已經成功了。

圖一 啟動Docker Quickstart Terminal

  啟動完畢後我們就可以進行映象的拉取和執行了,這裡我們使用 docker search oracle 來搜尋oralce映象。 

  A    搜尋映象

圖二 搜尋Oracle映象

  B 建立volume以持久化資料

  在命令列輸入 docker volume create exeed-db命令建立名稱為exeed-db的volume

  C 建立並執行Oracle資料庫

        在命令列中輸入:docker run -d --name exeed-db -p 1521:1521 -p 8080:8080 --shm-size=1g --restart=always -e ORACLE_PWD=XXX -v exeed-db:/u01/app/oracle/oradata zerda/oracle-database:11.2.0.2-xe

  這裡有幾點需要注意的是:

  1 --name exeed-db指定建立的volume .

  2  --shm-size=1g:設定/dev/shm的大小。格式為:。number必須大於0。unit可選,可以是b,k,m或g。如果不指定unit,系統預設使用位元組。如果此引數不指定,預設使用64m。

  3  --restart=always  --restart 標誌會檢查容器的退出程式碼,並據此來決定是否要重啟容器,預設是不會重啟。--restart的引數說明  always:無論容器的退出程式碼是什麼,Docker都會自動重啟該容器。on-failure:只有當容器的退出程式碼為非0值的時候才會自動重啟。另外,該引數還接受一個可選的重啟次數引數,`--restart=on-fialure:5`表示當容器退出程式碼為非0時,Docker會嘗試自動重啟該容器,最多5次。(注意:這裡如果不限定該重啟策略,那麼每一次重啟電腦後都要手動通過docker start命令來重啟當前容器)

  4   ORACLE_PWD用於設定當前Oracle資料庫密碼。

  5   -v exeed-db:/u01/app/oracle/oradata zerda/oracle-database:11.2.0.2-xe用於指定使用的Oracle映象如果本地找不到的話那麼就會去聯網進行下載。

  當上面的命令執行完畢以後,如果出現下面的提示,則表示Oracle已經在當前機器上安裝完畢並且沒有錯誤。  

  SQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
  #########################
  DATABASE IS READY TO USE!
  #########################

  D 檢視安裝映象的狀態

圖三 檢視已經正確執行的映象

  E  使用DataGrip來連線建立的Oracle資料庫

圖四 DataGrip連線Oracle資料庫

  這裡也許對Host有疑問,不應該是localhost,這裡其實我們安裝的oracle是跑在虛擬機器上面的,這裡的地址指的是虛擬機器的地址,我們可以在命令列中輸入 docker-machine ls來檢視當前的虛擬機器的地址。

圖五 獲取當前的Docker Machine 資訊

  這裡我們使用sys as sysdba來作為登入使用者,這裡的密碼就是執行docker run 執行時建立的密碼,然後點選測試就可以連線自己的oracle資料庫了。

  F 後續操作

  使用sys as sysdba登入後建立新的使用者:AfterSales,這裡記住要建立預設的表空間,接著我們就可以給剛才建立的使用者AfterSales授予許可權了,這樣下次我們就可以通過新建的賬戶來進行資料庫操作了。

  -- Oracle 管理使用者

  -- 建立使用者
  CREATE USER AfterSales IDENTIFIED BY XXX  DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users;

  -- 賦予許可權
  GRANT CONNECT, CREATE TABLE, CREATE TRIGGER, CREATE PROCEDURE, CREATE VIEW, CREATE SEQUENCE, DEBUG CONNECT SESSION TO AfterSales ;

  -- 刪除使用者
  DROP USER AfterSales CASCADE;

   二  Windows10上面的安裝

  Windows10上面的安裝和Windows7上面有些差別,具體使用的技術也是完全不同的。

   A   啟用Hyper-V

  開啟控制皮膚 - 程式和功能 - 啟用或關閉Windows功能,勾選Hyper-V,然後點選確定即可,如圖:

圖六 開啟Hyper-V

  B 安裝Docker

  Docker下載地址請點選 這裡, 點選如圖處即可下載安裝包,然後進行安裝。

  C 重啟機器

  在重啟機器後我們可以在工作列中發現已經執行的Docker,這點和Windows7上面不同,Windows7需要每次重啟啟動Docker Quickstart Terminal,Windows10則不需要。  

圖七 Windows10中Docker工作列圖示

  另外後續的過程和Windows7中完全一樣,只不過Windows10中Host不再是虛擬機器的地址了,而是直接使用localhost便可以進行登入了。

  最後附上Oracle官方給出的在Docker上面安裝Oracle的文件,請點選 這裡。 








About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( DB寶)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2020-03-01 06:00 ~ 2020-03-31 24:00 在西安完成

● 最新修改時間:2020-03-01 06:00 ~ 2020-03-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( DB寶)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2683586/,如需轉載,請註明出處,否則將追究法律責任。

相關文章