一锐借、Mac中Docker的部署
? ? ?首先,你需要在Mac中部署Docker往衷,也就是安裝Docker钞翔。安裝Docker分了兩種途徑,一種是通過terminal終端并下載相關(guān)依賴包進(jìn)行安裝席舍,另一種是通過下載dmg格式的安裝包直接對(duì)Docker進(jìn)行安裝布轿。我推薦使用第二種方式來安裝Docker,本片博文也是基于此種方式進(jìn)行的講解来颤,希望各位熟知汰扭。因?yàn)榈谝环N安裝Docker的方式會(huì)讓我們自己再配置一些Docker的基本配置,對(duì)于不懂的小白來說福铅,不太現(xiàn)實(shí)萝毛。
? ? Docker桌面版本提供了用戶GUI界面的支持,使用戶對(duì)Docker的相關(guān)配置直接通過界面即可滑黔,不過是英文的笆包,不用再寫其他和配置有關(guān)的命令,部分截圖如下:
? ? ? 安裝成功之后會(huì)在Mac中顯示出Docker的Logo略荡。
? ? ? 同時(shí)會(huì)在Mac頂部菜單欄中出現(xiàn)Docker的Logo庵佣,點(diǎn)擊它,如下圖:
? ? ?在成功安裝完Docker桌面版之后汛兜,Docker會(huì)默認(rèn)啟動(dòng)并默認(rèn)開機(jī)啟動(dòng)巴粪,當(dāng)你在菜單欄中發(fā)現(xiàn)Docker Desktop is running時(shí),說明你的Docker桌面版已經(jīng)安裝成功了,我們進(jìn)行接下來的操作肛根。
二衡创、通過Docker來安裝Oracle11g
? ? ? (1)Docker是一個(gè)容器,在容器內(nèi)部存在很多鏡像文件晶通,通過具體的鏡像文件可以運(yùn)行具體的容器璃氢。要想在Docker中安裝Oracle鏡像,我們首先應(yīng)該在Docker的遠(yuǎn)程倉庫中進(jìn)行搜索狮辽,因?yàn)镈ocker沒有自帶Oracle相關(guān)鏡像一也,命令如下(根據(jù)你Mac的實(shí)際情況決定是否要加sudo):
? ? ? ? sudo docker search docker-oracle-xe-11g
? ? ? ? 為什么選擇該Oracle鏡像,因?yàn)樵撶R像是我在安裝了兩三個(gè)Oracle鏡像之后發(fā)現(xiàn)的占用內(nèi)存最小喉脖,功能最全椰苟,安裝簡便的鏡像,前前后后我換了兩三個(gè)鏡像树叽,碰到過5.7GB的舆蝴,碰到過4.2GB的,只有這個(gè)是2.7GB的题诵,而且功能還全洁仗。搜索結(jié)果如下:
? ? ? 我們選擇第一個(gè)STAR最多的一個(gè)鏡像進(jìn)行安裝,拉取鏡像命令如下:
? ? ? ? ? sudo docker pull deepdiver/docker-oracle-xe-11g
? ? ? ?因?yàn)槲乙呀?jīng)安裝過了,所以這里就不再展示了,只需要等待鏡像下載完畢就可深碱。待鏡像下載完畢之后,我們需要將該鏡像轉(zhuǎn)成容器并使用該容器她奥,命令如下:
? ? ? ? ? sudo docker run -d -p 1521:1521 --name oracle11g deepdiver/docker-oracle-xe-11g
? ? ? 值得注意的就是將容器內(nèi)部的1521端口映射到宿主機(jī)中的1521端口,這樣一來就能在宿主機(jī)中通過Navicat等數(shù)據(jù)庫可視化管理工具進(jìn)行連接了怎棱。在這步完成之后哩俭,我們需要進(jìn)到容器內(nèi)部對(duì)已經(jīng)安裝的Oracle進(jìn)行簡單配置。
? ? (2)在Oracle容器中簡單配置你的Oracle數(shù)據(jù)庫并通過Navicat進(jìn)行連接
? ? ? ? ?進(jìn)入容器內(nèi)部的命令如下:
? ? ? ? ?sudo docker exec -it? 你的容器Id(可通過docker ps命令獲得)? /bin/bash
? ? ? ? ?通過sqlplus進(jìn)入Oracle:
? ? ? ? ?sqlplus system/oracle?
? ? ? ? 依次進(jìn)行如下操作:
? ? ? ? ? ? ? 查看數(shù)據(jù)庫用戶名和密碼:
? ? ? ? ? ? ? ? ? select username,password from dba_users;
? ? ? ? ? ? ? 當(dāng)然拳恋,你可以通過已經(jīng)存在的用戶名和密碼來登錄數(shù)據(jù)庫凡资,推薦使用新創(chuàng)建的用戶來進(jìn)行數(shù)據(jù)庫的登錄,sql如下:
? ? ? ? ? ? ? ? ?create user cqj(用戶名) identified by password(密碼)
? ? ? ? ? ? ? ?創(chuàng)建完之后诅岩,可以通過如下sql進(jìn)行驗(yàn)證:
? ? ? ? ? ? ? ? ?select * from all_users;? ? ?
? ? ? ? ? ? ? ?在創(chuàng)建完新用戶之后讳苦,需要對(duì)該用戶進(jìn)行授權(quán),該用戶具有什么權(quán)限都是通過自己指定的吩谦,這也是為什么推薦使用自定義用戶登錄數(shù)據(jù)庫的原因鸳谜,sql如下:
? ? ? ? ? ? ? ? grant connect,resource to CQJ(這里需要將用戶名大寫,否則授權(quán)不成功)
? ? ? ? ? ? ? ? connect表示具有連接數(shù)據(jù)庫的權(quán)限式廷;resource表示具有操作數(shù)據(jù)庫的權(quán)限
? ? ? ? ? ? ? ?至此咐扭,所有需要配置的數(shù)據(jù)庫配置都已經(jīng)配置完畢,可以通過Navicat進(jìn)行連接了,如下圖所示:
? ? ? 幾個(gè)需要注意的地方:
? ? ? ? ? ? ? 主機(jī)就是localhost或127.0.0.1
? ? ? ? ? ? ? 端口為docker內(nèi)部Oracle容器映射到宿主機(jī)的端口蝗肪,上述命令有將袜爪,我的是映射到1521端口
? ? ? ? ? ? ? 選擇服務(wù)名進(jìn)行連接,并且該版本Oracle數(shù)據(jù)庫的服務(wù)名為XE(唯一)
? ? ? ? ? ? ? 角色選擇默認(rèn)就行
? ? ? ? ? ? ? 用戶名和密碼就是我們?cè)谏鲜鰟?chuàng)建的用戶名和密碼
? ? ? 在配置完上述內(nèi)容之后薛闪,點(diǎn)擊連接測試辛馆,即可連接成功:
至此,所有的操作都已經(jīng)完成了豁延,趕快在你的Mac上使用Oracle吧j几荨!
三诱咏、用sys用戶登錄
1.用sys超級(jí)管理員用戶登錄
? ? ?sqlplus / as Sysdba;
2.創(chuàng)建oracle數(shù)據(jù)庫邏輯目錄?
? ? ?create directory datadump as '/datadump';
3.創(chuàng)建cqj用戶并授權(quán)(上面已經(jīng)創(chuàng)建過苔可,此步驟在這里省略)?
? ? ?create user cqj identified by cqj; ? grant dba to cqj;
4.給cqj用戶對(duì)datadump文件的讀寫權(quán)限?
? ? ?grant write,read on directory datapump to cqj;
四、在docker容器中創(chuàng)建目錄并將dmp文件備份到容器中
1.在容器中創(chuàng)建目錄datadump
? ? mkdir datadump
2.將dmp文件備份到datadump目錄下 ??
? ? sudo docker cp /Users/XXX/Desktop/cqj_20191231.dmp ?993746984ba6(容器的id袋狞,可通過docker ps查詢):/datadump/cqj.dmp
3.導(dǎo)入成功后焚辅,查看一下文件的詳細(xì)信息?
? ?ls -l
如果該文件不是oracle dba操作的權(quán)限,可進(jìn)行修改
在root賬戶登錄下: chown oracle:dba cqj.dmp
4.導(dǎo)入數(shù)據(jù)泵命令
impdp cqj/cqj directory=datadump dumpfile=cqj.dmp transform=segment_attributes:n table_exists_action=replace logfile=cqj.log
5.如果導(dǎo)入的表太大苟鸯,擔(dān)心表空間不夠的時(shí)候同蜻,可以適當(dāng)?shù)脑黾颖砜臻g
先查詢一下該用戶使用的哪個(gè)表空間
-- 查看當(dāng)前用戶的缺省表空間
select * from user_users;
因?yàn)槲沂褂玫谋砜臻g是SYSTEM,所以倔毙,增大表空間的命令如下:
ALTER TABLESPACE?SYSTEM(表空間) ?ADD DATAFILE ?'/u01/app/oracle/oradata/XE
/system2.dbf'(文件存放位置) ?SIZE 1024M AUTOEXTEND ON NEXT 1024M MAXSIZE 30720M;
查看數(shù)據(jù)庫表空間使用情況:
SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)",
ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "USED_RATE(%)",FREE_SPACE "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME order by TABLESPACE_NAME) F
WHERE? D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL? --if have tempfile
SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,
USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",
NVL(FREE_SPACE,0) "FREE_SPACE(M)"
FROM
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE,
ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE? D.TABLESPACE_NAME = F.TABLESPACE_NAME(+);