寫在前
由於本機mac空間不夠(哈哈,促進我學習),所以想搭建一個雲Oracle環境。
之前寫過windows搭建的,但是之前11g(項目要求)一直安裝不上,索性就把服務器換成linux,準備改用docker的方式來進行搭建。
總體步驟
- 阿里雲申請 linux 服務器,這裏我的是 CentOS 7.4 。
- 安裝 docker 。
- 下載 Oracle 鏡像並安裝。
- 導入數據(通過DMP導入,需創建表空間,用戶等)。
Docker簡介
Docker簡單來說,就是一個虛擬機,你要什麼應用,就直接輸入命令安裝,不用就直接刪掉,沙盒傻瓜式。官方logo就是鯨魚上面載着貨物,這裏我主要是用來安裝 Oracle,mysql,tomcat什麼的。logo如下圖:
廢話不多說,就讓我們開始吧。
安裝docker
對於 linux 服務器來說,安裝docker非常簡單,不過需要 CentOS 內核版本高於 3.10,使用uname -r 來查看。如下圖:
具體的安裝步驟,可以參考這篇博文 https://blog.csdn.net/qq_36892341/article/details/73918672,寫得很清楚,就不再贅述,如有不懂,可以留言。
下載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)
導入數據、用戶及表空間創建
1,導入 dmp 數據文件
首先,需要從本機拷貝 dmp(從其他庫導出的數據文件,包含數據 + 表結構等) 數據到 Oracle 容器中
格式:docker cp /本地文件地址 容器ID:/容器文件存儲地址,如下:
docker cp /home/oracle/data_20181104.dmp ff94a17f84a7:/home/cloudera
【注:容器ID(這裏我的是ff94a17f84a7)請換成自己的】
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,導入 dmp 文件:
imp TEST/123 file = /data_20181210.dmp full=y;
靜靜等待導入完成即可。
PS:阿里雲記得去雲服務器控制檯開放數據庫對應的端口即可外網連接。
配置規則
選擇克隆一個,輸入 docker ps 中 oracle 對應的主機端口即可:
配上成功圖:
Bingo!
常見問題(不定時更新):
Oracle服務無法連接&掛掉重啓
今天起來準備工作,Oracle無法連接了,可能原因:
- 連接時使用的sid不正確,進入容器,連接後使用 SELECT name FROM v$database; 查看SID。
- dokcer容器中 Oracle 掛了。
- 其他未知原因(如電腦沒有連網,磁盤空間滿了,用戶名密碼錯誤等)。
馬上進服務器去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
重啓容器成功