天天看點

主控端連接配接oracle容器_從Oracle Docker鏡像啟動Oracle以及基本開發環境配置

### 前言

安裝過Oracle的同學應該都知道,其安裝步驟的繁瑣,以及每一步的小心翼翼,可以說是全程提心吊膽。想想我大學時為了裝Oracle,重裝了多少次系統。。。好不容易裝好了,卻感覺系統被托慢了,學完後解除安裝也會解除安裝不幹淨,不知道會不會影響到其他開發工具。等等諸多困難,現在是真的不想在經曆一次了。是以我打算試着用oracle的docker鏡像來啟動oracle容器,這樣既好解除安裝又不能夠幫助開發,還不影響我的作業系統。**注意:如果你是在校大學生,那麼一定不要偷懶,一定要親自嘗試一下安裝oracle的過程以及oracle的基本指令,折騰那一次對你非常好。哈哈哈** 。 廢話不多說,下邊是本文的大綱:

- 安裝docker

- 拉取Oracle鏡像

- Oracle資料持久化

- 建立表空間、使用者

下邊正式開始

### 安裝Docker

安裝Docker非常簡單,直接訪阿裡雲的鏡像源,其中有詳細的安裝docker過程,下邊是它的連結:

docker安裝方法:

https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.53322f70wQUbMs

### 拉取Oracle鏡像

安裝好Docker後,就可以拉取Oracle鏡像了,執行下邊的指令,大概3個G左右,去睡個覺吧

```bash

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

```

### Oracle容器資料持久化

由于Docker的生命周期很短,是以當容器重新啟動後,Oracle中存儲的資料将會消失,是以需要将Oracle容器的資料持久化到主控端中,同時使容器啟動時通路主控端的oracle資料目錄,進而實作資料持久化。

**上邊拉取**的oracle鏡像的重要資料分别在容器的`/home/oracle/app/oracle/oradata/`目錄和`/home/oracle/app/oracle/flash_recovery_area/helowin/`目錄下,是以我們要把這兩個目錄的檔案儲存到主控端中.

下邊跟着我一步一步來,不要少任何步驟。

#### 在主控端建立兩個目錄

在主控端中建立兩個目錄用來存儲Oracle的必須檔案:

```bash

mkdir -p /opt/oracle11g-demo-pub/flash_recovery_area

mkdir -p /opt/oracle11g-demo-pub/oradata

```

#### 啟動一個臨時Oracle容器

使用如下指令啟動一個臨時Oracle容器,用于将原始鏡像中的資料存儲到主控端目錄中。

```bash

docker run --name oracle11g_test -d registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

```

執行完上邊指令後會輸出一行編碼,該編碼即為該容器的ID,我們可以通過這個ID的前三位通路容器。

#### 複制臨時Oracle容器中的資料到主控端

将臨時容器的Oracle資料複制到剛剛建立好的目錄中,執行如下指令

```bash

docker cp oracle11g_test:/home/oracle/app/oracle/oradata/helowin /opt/oracle11g-demo-pub/oradata

docker cp oracle11g_test:/home/oracle/app/oracle/flash_recovery_area/helowin/ /opt/oracle11g-demo-pub/flash_recovery_area

```

#### 啟動正式容器,使其挂載主控端目錄

啟動正式的容器,并讓其挂載素主機中建立的那兩個目錄,讓容器通路已有資料

```bash

docker run -v /opt/oracle11g-demo-pub/oradata:/home/oracle/app/oracle/oradata -v /opt/oracle11g-demo-pub/flash_recovery_area/helowin/:/home/oracle/app/oracle/flash_recovery_area/helowin/ -p 1521:1521 --name oracle11g -d registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

```

**說明:**`-v`參數後邊為主控端的目錄,`-p`參數表示容器對外開放的端口号,`-name`為容器的名字.

#### 進入正式Oracle容器,授權可通路目錄

執行以下指令,進入正式Oracle容器中:

```bash

docker exec -it oracle11g bash

```

可以嘗試使用如下指令進入挂載的目錄:

```bash

cd /home/oracle/app/oracle/flash_recovery_area/helowin/

```

不出意料,它應該報`bash: cd: /home/oracle/app/oracle/flash_recovery_area/helowin/: Permission denied`這行錯誤,這行錯誤是說oracle使用者沒有權限通路這個目錄.是以我們需要切換到容器的root使用者下,修改該目錄權限

```bash

su root # 秘密輸入helowin,回車即可

cd /home/oracle/app/oracle/ # 進入該目錄

ll # 檢視目錄權限

total 0

drwxr-x--- 1 oracle oinstall 21 Jan 4 2016 admin

drwxr-xr-x 5 oracle oinstall 43 Aug 23 2014 cfgtoollogs

drwxr-xr-x 3 oracle oinstall 17 Aug 23 2014 checkpoints

drwxrwxr-x 1 oracle oinstall 34 Aug 23 2014 diag

drwxr-x--- 4 oracle oinstall 36 Jan 4 2016 flash_recovery_area

drwxr-xr-x 3 root root 21 Aug 14 19:58 oradata # 注意該目錄

drwxr-xr-x 3 oracle oinstall 18 Aug 26 2014 oradiag_oracle

drwxr-xr-x 1 oracle oinstall 20 Aug 27 2014 product

chown -R oracle.oinstall oradata # 使用該指令修改目錄擁有者

ll

total 0

drwxr-x--- 1 oracle oinstall 21 Jan 4 2016 admin

drwxr-xr-x 5 oracle oinstall 43 Aug 23 2014 cfgtoollogs

drwxr-xr-x 3 oracle oinstall 17 Aug 23 2014 checkpoints

drwxrwxr-x 1 oracle oinstall 34 Aug 23 2014 diag

drwxr-x--- 4 oracle oinstall 36 Jan 4 2016 flash_recovery_area

drwxr-xr-x 3 oracle oinstall 21 Aug 14 19:58 oradata # 可以看到已經修改成功

drwxr-xr-x 3 oracle oinstall 18 Aug 26 2014 oradiag_oracle

drwxr-xr-x 1 oracle oinstall 20 Aug 27 2014 product

cd /home/oracle/app/oracle/flash_recovery_area # 打開另一個目錄

ll

total 0

drwxr-x--- 4 oracle oinstall 41 Jan 4 2016 HELOWIN

drwxr-x--- 2 root root 52 Jan 4 2016 helowin # 注意此處

chown -R oracle.oinstall helowin # 修改該目錄所屬

ll

total 0

drwxr-x--- 4 oracle oinstall 41 Jan 4 2016 HELOWIN

drwxr-x--- 2 oracle oinstall 52 Jan 4 2016 helowin # 修改成功

```

上邊的一頓操作後,傳回oracle使用者,可以使用如下指令:

```bash

su - oracle

```

### 重新開機資料庫

繼續操作,需要切換到oracle使用者中!!!切換完畢後,跟着下邊的指令一個一個敲

```bash

source ~/.bash_profile # 加載環境變量,寫入sqlplus到path中

sqlplus /nolog

SQL>conn / as sysdba # 以DBA角色連接配接到資料庫

SQL>shutdown immediate; # 關閉資料庫執行個體

SQL>startup; # 啟動

```

所有指令執行完畢後,大概是這個樣子:

```bash

sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Aug 15 17:47:24 2019

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

SQL> shutdown immediate; # 重點

ORA-01507: database not mounted

ORACLE instance shut down.

SQL> startup # 重點

ORACLE instance started.

Total System Global Area 1603411968 bytes

Fixed Size 2213776 bytes

Variable Size 402655344 bytes

Database Buffers 1191182336 bytes

Redo Buffers 7360512 bytes

Database mounted. # 重點

Database opened # 重點

```

如果輸出的内容**重點**部分和我的一樣,則說明oracle資料庫啟動成功了,可以進行下一步的建立使用者後者表空間了,可以繼續操作 了,否則,停止正在運作的容器,并重新開始。可能用到的指令。

```bash

sudo docker ps # 顯示正在運作的容器

sudo docker stop [容器id] # 停止正在運作的容器

sudo docker start [容器id] # 啟動停止運作的容器

sudo docker rm [容器id] # 删除停止狀态的容器

```

### oracle的常用指令

1. 修改使用者資訊

```sql

alter user [使用者名] identified by [密碼];

alter user [使用者名] identified by [密碼];

```

2. 建立使用者

```sql

create user [使用者名] identified by [密碼];

grant connect,resource,dba to [使用者名]; # 使用者授權

```

3. 導入指令

```bash

imp [使用者名]/[密碼]@helowin file=[dmp檔案所在位置] full=y # 注意helowin,是該鏡像的執行個體名

```

4. 建立臨時表空間

```sql

create temporarytablespace user_temp

tempfile '臨時表空間檔案存放路徑,精确到檔案(自定義的)'

size 50m

autoextend on

next 50m maxsize 20480m

extent management local;

```

5. 建立資料表空

```sql

create tablespace user_data

logging

datafile '資料表空間檔案存放路徑,精确到檔案(自定義的)'

size 50m

autoextend on

next 50m maxsize 20480m

extent management local;

```

6. 修改使用者的預設表空間

```sql

alter user [使用者名] default tablespace [表空間名];

```

至此,關于如何使用Docker部署Oracle已經講解完畢。