Docker安裝Oracle11g


為什么使用docker安裝oracle,因為自己搭建配置的話可能時間太久太繁瑣等等原因,也因為docker實在太方便了

本文主要是使用docker-compose安裝Oracle 11g,因為使用docker 直接pull啟動的話沒辦法做到數據持久化,重啟容器數據就不存在了很蛋疼~

不過有同學可能需要,本文也說一下,啊哈哈~

 

Docker和Docker-compose安裝

詳見之前博客:  https://www.cnblogs.com/mike666/p/13674180.html

 

Oracle鏡像拉取:

[root@Mike-node1 ~]#  docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

鏡像是某位大神制作分享在阿里雲上的,由於鏡像比較大(6.9G),可能拉取時間會很久,需要耐心等待

 

第一種方式(不持久化)

使用Docker 啟動容器:

[root@Mike-node1 ~]# docker run -d -p 1521:1521 --name oracle registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
1cab53ad073d078736018a8a5906c5670fe0ae90671675f53eb18f18d4216e06
[root@Mike-node1 ~]# ss -ntl
State       Recv-Q Send-Q                                          Local Address:Port                                                         Peer Address:Port              
LISTEN      0      128                                                         *:22                                                                      *:*                  
LISTEN      0      100                                                 127.0.0.1:25                                                                      *:*                  
LISTEN      0      128                                                      [::]:1521                                                                 [::]:*                  
LISTEN      0      100                                                     [::1]:25                                                                   [::]:*                  
[root@Mike-node1 ~]# 
[root@Mike-node1 ~]# docker ps 
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED              STATUS              PORTS                    NAMES
1cab53ad073d        registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g   "/bin/sh -c '/home/o…"   About a minute ago   Up 37 seconds       0.0.0.0:1521->1521/tcp   oracle
[root@Mike-node1 ~]# 

可以看到已經啟動一個 叫 oracle 的容器,並且端口映射到宿主機的  1521 端口

 

進入Oracle容器創建用戶:

容器鏡像系統用戶root密碼為 helowin

[root@Mike-node1 ~]# docker exec -it oracle /bin/bash
[oracle@1cab53ad073d /]$ cd /home/oracle/
[oracle@1cab53ad073d ~]$ source .bash_profile 
[oracle@1cab53ad073d ~]$ 
[oracle@1cab53ad073d ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov 18 11:10:07 2020

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

SQL> conn /as sysdba
Connected.
SQL> alter user system identified by system;

User altered.

SQL> alter user sys identified by system;

User altered.

SQL> create user mike identified by mikeops;

User created.

SQL> grant connect,resource,dba to mike;

Grant succeeded.

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Profile altered.

SQL> alter system set processes=2000 scope=spfile;

System altered.

SQL> select * from dba_users t where t.username = 'MIKE';

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
MIKE                       91

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
OPEN

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
USERS                   TEMP                  18-NOV-20

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
DEFAULT                DEFAULT_CONSUMER_GROUP

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------


USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
10G 11G  N PASSWORD

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------


SQL> 

其中涉及到的命令含義:

cd /home/oracle                                                        # 進入到 oracle 用戶目錄

source .bash_profile                                                  # 加載 oracle 環境變量

sqlplus /nolog                                                           #  登錄oracle數據庫

conn /as sysdba                                                        #  切換管理用戶

alter user system identified by system;                    #  修改system用戶賬號密碼為system

alter user sys identified by system;                          #  修改sys用戶賬號密碼為system

create user mike identified by mikeops;                  #   創建內部管理員賬號mike 密碼為mikeops

grant connect,resource,dba to mike;                       #  將dba權限授權給內部管理員賬號

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;                # 修改密碼規則策略為密碼永不過期

alter system set processes=2000 scope=spfile;                                                  # 修改數據庫最大連接數據

select * from dba_users t where t.username = 'MIKE';                                       # 查看mike用戶創建信息           

 

使用 Navicat 連接

連接類型: Basic
主機:你的ip
端口: 1521
服務名: helowin
SID
用戶名:mike
密碼:mikeops

關於使用 Navicat 連接oracle

需要到官網下載對應的插件     https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html

然后找到     

Name

Download

Description

Instant Client Package - Basic All files required to run OCI, OCCI, and JDBC-OCI applications

(54,956,947 bytes)

注冊一個用戶登錄下載這個zip包

 

在工具>選項>環境>OCI環境,這里點剛剛解壓的文件就可以了

 

 

第二種方式(持久化)

使用docker-compose安裝:

創建docker-compose文件

[root@Mike-node1 ~]# mkdir -p /data/oracle
[root@Mike-node1 ~]# cd /data/oracle
[root@Mike-node1 oracle]# vim docker-compose.yml

version: '3.1'
services:
  master:
    image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    container_name: oracle
    privileged: true
    ports:
      - 1521:1521

[root@Mike-node1 oracle]# 

啟動容器進去修改配置:

[root@Mike-node1 oracle]# docker-compose up -d
Creating network "oracle_default" with the default driver
Creating oracle ... done
[root@Mike-node1 oracle]# docker exec -it oracle bash
[oracle@7b3e628db32d /]$ cd /home/oracle/
[oracle@7b3e628db32d ~]$ source .bash_profile 
[oracle@7b3e628db32d ~]$ 

在容器里配置數據庫用戶:

[oracle@7b3e628db32d ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov 18 13:14:15 2020

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

SQL> conn /as sysdba
Connected.
SQL> alter user system identified by system;

User altered.

SQL> alter user sys identified by system;

User altered.

SQL> create user mike identified by yca1cahk; 

User created.

SQL> grant connect,resource,dba to mike;

Grant succeeded.

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Profile altered.

SQL> alter system set processes=2000 scope=spfile;

System altered.

SQL> select * from dba_users t where t.username = 'MIKE';

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
MIKE                       91

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
OPEN

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
USERS                   TEMP                  18-NOV-20

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
DEFAULT                DEFAULT_CONSUMER_GROUP

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------


USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
10G 11G  N PASSWORD

USERNAME              USER_ID PASSWORD
------------------------------ ---------- ------------------------------
ACCOUNT_STATUS             LOCK_DATE EXPIRY_DA
-------------------------------- --------- ---------
DEFAULT_TABLESPACE           TEMPORARY_TABLESPACE          CREATED
------------------------------ ------------------------------ ---------
PROFILE                INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
EXTERNAL_NAME
--------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------


SQL> 

配置用戶 mike 

密碼為  yca1cahk

使用 Navicat 連接是否可以登錄(Navicat)教程上面有

 

持久化操作,在宿主機上使用命令

[root@Mike-node1 ~]# docker cp oracle:/home/oracle/app/oracle/oradata/helowin/ /data/oracle/
[root@Mike-node1 ~]# cd /data/oracle/
[root@Mike-node1 oracle]# ll -h
total 8.0K
-rw-r--r-- 1 root root  176 Nov 18 13:07 docker-compose.yml
drwxr-x--- 2 root root 4.0K Nov 18 13:10 helowin
[root@Mike-node1 oracle]# 
[root@Mike-node1 oracle]# chown -R 500.500 helowin/
[root@Mike-node1 oracle]# ll
total 8
-rw-r--r-- 1 root root  176 Nov 18 13:07 docker-compose.yml
drwxr-x--- 2  500  500 4096 Nov 18 13:10 helowin
[root@Mike-node1 oracle]# cd helowin/
[root@Mike-node1 helowin]# ll
total 1626084
-rw-r----- 1 500 500  10076160 Nov 18 13:21 control01.ctl
-rw-r----- 1 500 500   9748480 Jan  4  2016 control01.ctl.bak
-rw-r----- 1 500 500 104865792 Nov 18 13:10 example01.dbf
-rw-r----- 1 500 500  52429312 Nov 18 13:21 redo01.log
-rw-r----- 1 500 500  52429312 Nov 18 13:10 redo02.log
-rw-r----- 1 500 500  52429312 Nov 18 13:10 redo03.log
-rw-r----- 1 500 500 534781952 Nov 18 13:21 sysaux01.dbf
-rw-r----- 1 500 500 713039872 Nov 18 13:21 system01.dbf
-rw-r----- 1 500 500  30416896 Jan  4  2016 temp01.dbf
-rw-r----- 1 500 500  99622912 Nov 18 13:21 undotbs01.dbf
-rw-r----- 1 500 500   5251072 Nov 18 13:10 users01.dbf
[root@Mike-node1 helowin]# 

並且把 helowin 目錄所有者賦予 500,因為500是容器內 oracle 組合用戶的 id

 

關閉容器並且添加配置

[root@Mike-node1 oracle]# docker-compose down
Stopping oracle ... done
Removing oracle ... done
Removing network oracle_default
[root@Mike-node1 oracle]# vim docker-compose.yml 

version: '3.1'
services:
  master:
    image: registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
    container_name: oracle
    privileged: true
    ports:
      - 1521:1521
    volumes:
      - ./helowin/:/home/oracle/app/oracle/oradata/helowin/

[root@Mike-node1 oracle]# 
[root@Mike-node1 oracle]# docker-compose up -d
Creating network "oracle_default" with the default driver
Creating oracle ... done
[root@Mike-node1 oracle]# 

查看容器日志

[root@Mike-node1 oracle]# docker logs -f oracle
/home/oracle/app/oracle/product/11.2.0/dbhome_2
Processing Database instance "helowin": log file /home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.log
Redo Buffers            7360512 bytes
ORA-00214: control file '/home/oracle/app/oracle/oradata/helowin/control01.ctl'
version 851 inconsistent with file
'/home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl' version 841


SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/dbstart: Database instance "helowin" warm started.
tail: unrecognized file system type 0x794c7630 for `/home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.log'. Reverting to polling.

發現有錯誤我們進入容器內部解決一下

[root@Mike-node1 oracle]# docker exec -it oracle bash
[oracle@1de544fa2642 /]$ cd /home/oracle/
[oracle@1de544fa2642 ~]$ source .bash_profile 
[oracle@1de544fa2642 ~]$ rm -rf /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl
[oracle@1de544fa2642 ~]$ 
[oracle@1de544fa2642 ~]$ cp /home/oracle/app/oracle/oradata/helowin/control01.ctl /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl     
[oracle@1de544fa2642 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Wed Nov 18 13:36:42 2020

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> 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.
SQL> 

里面的操作是刪除新生成的版本控制文件,將數據卷中的版本控制文件復制為新生成的版本控制文件

然后關閉數據庫實例,再啟動數據庫實例

再次使用 Navicat 連接 Oracle,使用剛剛的用戶看是否可以連接

檢查發現可以正常連接之后,我們身邊在數據庫創建幾張表或者用戶

然后我們做一波騷操作,重啟一下 oracle 容器看是否可以保存數據不丟失!!!

[root@Mike-node1 oracle]# ll
total 8
-rw-r--r-- 1 root root  249 Nov 18 13:30 docker-compose.yml
drwxr-x--- 2  500  500 4096 Nov 18 13:10 helowin
[root@Mike-node1 oracle]# docker-compose stop
Stopping oracle ... done
[root@Mike-node1 oracle]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@Mike-node1 oracle]# 
[root@Mike-node1 oracle]# docker-compose start
Starting master ... done
[root@Mike-node1 oracle]# docker ps
CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS              PORTS                    NAMES
1de544fa2642        registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g   "/bin/sh -c '/home/o…"   16 minutes ago      Up 2 seconds        0.0.0.0:1521->1521/tcp   oracle
[root@Mike-node1 oracle]# 
[root@Mike-node1 oracle]# ss -ntl
State       Recv-Q Send-Q                                          Local Address:Port                                                         Peer Address:Port              
LISTEN      0      128                                                         *:22                                                                      *:*                  
LISTEN      0      100                                                 127.0.0.1:25                                                                      *:*                  
LISTEN      0      128                                                      [::]:1521                                                                 [::]:*                  
LISTEN      0      100                                                     [::1]:25                                                                   [::]:*                  
[root@Mike-node1 oracle]# 

然后可以發現數據庫里面的用戶和表都還在,持久化順利完成

后期還是建議使用持久化來搭建 oracle,因為不做持久化重啟的話數據會丟失哦~

 

本文分享完畢,感謝支持點贊~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM