虽然能在Docker中用命令行安装Oracle,但是需要自己写配置文件,比较繁琐;最好还是有图形界面,如何在Docker中使用图形化界面参考:

Docker中使用图形化功能:/2022/04/27155304-docker-ui.html

创建Docker

在准备好了创建Docker的服务器之后,用类似下面的命令启动Docker来安装Oracle11gR2。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 1. 可以先构造一个安装环境,保存成docker模板
docker commit -m="Oracle11gR2-ENV" -a="chende" oracleenv111 \
10.10.200.11:5000/ctos79.oracle11gr2.env.220623

# 2. 创建命令
docker run -itd --name=Oracle11gR2-21 -h=fdoracle21 --network=br0 --ip=10.10.14.21 \
-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE \
-v /data/oracle222/install:/home/oracle/soft -v /data/oracle222/oradata:/oradata \
--restart=no --privileged --volume /sys/fs/cgroup:/sys/fs/cgroup:ro -m=56G --memory-swap=56G \
10.10.200.11:5000/ctos79.oracle11gr2.env.220623 /sbin/init

# 上面我们将解压后的安装包放在主机的 /data/oracle222/install 目录
# /data/oracle222/oradata 挂载到 docker中的oradata目录,准备发数据库文件

# 3. 做好的数据库可以作为标准库保存,以后重复使用
docker commit -m="Oracle11gR2-dspdb" -a="chende" Oracle11gR2-000 \
10.10.200.11:5000/ctos79.oracle11gr2.dspdb.220624

安装Oracle11gR2

环境准备

一般原始的Docker缺少很多包,首先就是安装Oracle依赖的各种包。安装软件包:(所有包都要装上对应的32bit版本,没有就算了)。下面是Oracle12cR2在RedHat7上面安装的依赖包,Oracle11gR2在centos7.x上面也需要类似的包。

image-20220427171626103

  1. 安装依赖包
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33i686 \
compat-libstdc++-33.devel compat-libstdc++-33 compat-libstdc++-33.devel gcc gcc-c++ \
glibc glibc.i686 glibc-devel glibc-devel.i686 ksh \
libaio libaio.i686 libaio-devel libaio-devel.devel libgcc libgcc.i686 libstdc++ \
libstdc++.i686 libstdc++-devel libstdc++-devel.devel libXi libXi.i686 libXtst \
libXtst.i686 make sysstat elfutils-libelf-devel \
unixODBC unixODBC.i686 unixODBC-devel unixODBC-devel.i686

# 还有一些工具包可以装一下
rlwrap
openssl
yum install -y java-1.8.0-openjdk
  1. 验证依赖包
1
2
3
rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel \
ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst \
make sysstat elfutils-libelf-devel unixODBC unixODBC-devel rlwrap openssl java-1.8.0-openjdk
  1. 调整系统参数
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# /etc/sysctl.conf
# add by cd.net 20200325 for Oracle 12c install

# shmmni = 4096 (Linux默认页大小是4096)
# shmmax = <50%*RAM> byte 	推荐物理内存的一半以上,接近物理内存大小都是可以的
# shmall = 必须大于shmmax/shmmni
# kernel.shmmni(常量4096)* kernel.shmall= kernel.shmmax = 物理内存/2
# shmmax至少为物理内存的一半;大内存情况下,推荐物理内存的三分之二以上。比如128G内存服务器,推荐96G

# 1GB->1073741824‬ 16GB->‭17179869184‬ 32GB->‭34359738368‬ 64GB->‭68719476736‬ 96GB->103079215104
# 1GB->262144     16GB->4194304‬     32GB->‭8388608‬     64GB->‭16777216‬    96GB->25165824
kernel.shmmax = 103079215104
kernel.shmall = 25165824
kernel.shmmni = 4096

fs.aio-max-nr = 3145728
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

kernel.sysrq = 1
kernel.panic_on_oops=1
vm.swappiness=10
vm.dirty_background_ratio = 3
vm.dirty_ratio = 20
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100

安装数据库时候会设置SGA和PGA的大小

1
2
3
4
# kernel.shmmax要大于SGA,否则Oracle可能无法启动

# 查询数据库为PGA分配的最大值:
# select value from v$PGASTAT where name='maximum PGA allocated';

上面可能出现下面的错误:

1
2
3
4
5
6
7
sysctl: cannot stat /proc/sys/net/core/rmem_default: No such file or directory
sysctl: cannot stat /proc/sys/net/core/rmem_max: No such file or directory
sysctl: cannot stat /proc/sys/net/core/wmem_default: No such file or directory
sysctl: cannot stat /proc/sys/net/core/wmem_max: No such file or directory

# 目前版本的Docker中没有相关的文件提设置,也不能创建。
# 最好在Docker主机中设置这一些参数,一般docker是会继承主机内核参数的。
  1. 添加用户和组,做如下配置:
1
2
3
4
5
su – root
groupadd oinstall   #创建基本组 oinstall
groupadd dba        #创建附加组 dba
groupadd oper       #创建附加组 oper
useradd -m -g oinstall -G dba,oper oracle   #创建 用户
  1. 新建目录,并加入权限:
1
2
3
4
5
6
cd opt
mkdir /opt/oracle
mkdir /opt/ogg
mkdir /opt/oraInventory

chown –R oracle:oinstall /opt/oracle /opt/ogg /opt/oraInventory
  1. 加入如下几行:vi /etc/security/limits.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# /etc/security/limits.conf
## added by qinchende ##
oracle soft nproc 8192
oracle hard nproc 16384
oracle soft nofile 8192
oracle hard nofile 65536
oracle soft stack 10240
oracle hard memlock unlimited
oracle soft memlock unlimited
# End of file
  1. 先查找文件的路径,加入如下两行:
1
2
3
4
# vi /etc/pam.d/login,加入下面两行
# session required /lib64/security/pam_limits.so # 不同系统路径可能不一样
session required /usr/lib64/security/pam_limits.so
session required pam_limits.so
  1. 检查/etc/hosts,加入地址解析,这个一定要加,否则Oracle安装依赖的时候会报错:
1
2
# /etc/hosts
10.10.200.xxx   fdoracle21
  1. 在Oracle用户目录下设置环境变量
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# su - oracle
# vi .bash_profile

umask 022
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0.4/dbhome_1
export GG_HOME=/opt/ogg
export ORACLE_SID=dspdb
export ORACLE_OWNER=oracle
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/sbin:$PATH
#export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export LANG=C

alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
  1. 其它系统配置,比如禁用透明大页
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 在系统启动自动脚本中加入, vi /etc/rc.local (如果是Docker,请在宿主机也设置这个)
ulimit -n 655350
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 关闭iptables和SELINUX
getenforce							# 查看selinux状态
setenforce 0 						# 重启sshd失败,关闭selinux,但重启失效
SELINUX=disabled					# vi /etc/sysconfig/selinux
systemctl stop firewalld.service	# 可以考虑先关闭防火墙,方便操作
systemctl disable firewalld.service # 永久关闭,不要重启

# 先查询开启的系统服务
systemctl list-unit-files|grep enabled
# 关闭不必要的系统服务
systemctl disable sendmail.service
systemctl disable httpd.service
systemctl disable irqbalance.service
systemctl disable bluetooth.service
systemctl disable isdn.service
systemctl disable pcmcia.service
systemctl disable mdmonitor.service
systemctl disable rhnsd.service
systemctl disable smartd.service
systemctl disable cups.service
systemctl disable cups-config-daemon.service
systemctl disable iiim.service
systemctl disable squid.service
systemctl disable smb.service
systemctl disable gpm.service
systemctl disable xend.service
systemctl disable bluetooth.service
systemctl disable hidd.service
systemctl disable pcscd.service
systemctl disable iscsi.service
systemctl disable iscsid.service
systemctl disable avahi-daemon.service
systemctl disable tog-pegasus.service
systemctl disable yum-updatesd.service
systemctl disable mcstrans.service
hwclock –w

# 建议用户启动在多用户模式,而不是图形界面模式
# systemctl get-default
# 推荐:multi-user.target

安装Oracle

首先通过VNC连接到主机的图形界面,在窗口中打开控制台:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@WEB-DB121 ~]# xdpyinfo |grep name
name of display:    :2
# 记住上面的 :2 后面在Docker中需要用到

[root@WEB-DB121 ~]# xhost 
access control disabled, clients can connect from any host
SI:localuser:root
[root@WEB-DB121 ~]# docker exec -it Oracle11gR2-23 bash
[root@fdoracle23 /]# su - oracle
Last login: Thu Apr 28 06:51:10 UTC 2022 on pts/2
[oracle@fdoracle23 ~]$ export DISPLAY=:2
# 执行完上面的命令后,进入Docker就可以调出Oracle的安装界面设置安装了。

执行:./runInstaller,看到界面证明成功了一大步,注意如果是centos系统,最好用下面这条语句,否则安装过程中有些弹出提示框看不到(显示一条竖线)。如果没有jre,推荐docker中安装openjdk:yum install -y java-1.8.0-openjdk

1
./runInstaller -jreLoc /etc/alternatives/jre_1.8.0

有时候检测环境会报错。可以看下日志究竟是什么错误,如果是操作系统版本检测不符合要求,可以暂时忽略,继续往下执行。

安装的过程可以参考以前安装Oracle12cR2的文章/2020/10/08215703-install-12cr2.html

问题1:

安装时提示缺少依赖包pdksh,网上有个说法供参考:https://www.136.la/mysql/show-54979.html

image-20220428150835702

上面的这几个警告可以全部忽略。

问题2:

可能遇到下面的错误,解决办法:https://blog.csdn.net/aaabbb126/article/details/121863343

image-20220427195625226

1
2
3
4
5
6
# 在root控制台下打开文件编辑
vi /opt/oracle/product/11.2.0.4/dbhome_1/sysman/lib/ins_emagent.mk

# 找到下面的代码,在后面加上 -lnnz11 参数,保存回到安装retry
$(SYSMANBIN)emdctl:
        $(MK_EMAGENT_NMECTL) -lnnz11 

安装数据库

命令行下输入dbca安装数据库,下面几个重要步骤截图一下:

Custom Database

image-20220428154936570

这两个Tab中的选择都去掉(不要界面管理工具)

image-20220428155006799

自定义数据库文件存放目录

image-20220428155203397

先不打开闪回,但是打开归档,而且设置归档文件的存放路径

image-20220428155417342

image-20220428155356312

全部组件都不要,包括标准组件都去掉

SGA+PGA要尽量大一些,现在服务器普遍很大内存。

image-20220623171859368

这里一定要修改下面的配置,否则后面安装会报错。同时将open_cursors改成较大的30000。

image-20220428161603145

PS: 这里截图说明一下上面这个问题:

image-20220428110309872

在网上找到针对这个问题的说明:

image-20220428110339936

后面就是对数据库文件大小的调整了,建议大小(或者默认大小,不用改动):

image-20220428170443352

注意要将Redo日志的三个文件大小都调整到256MB或者512MB。

image-20220623181833983

安装开始,过程如下(这里的列表每个人根据所选组件不同而不一样):

image-20220623182130762

恭喜顺利完成DB的安装。

image-20220428171043952

安装监听

netca安装监听配置文件。这个非常简单,直接下一步点击完就好。以后通过命令行修改监听配置文件。

参考文章

https://www.cnblogs.com/zhangyachao/p/15320791.html

https://blog.csdn.net/qq_39065491/article/details/120513791

https://blog.csdn.net/qq_43561410/article/details/90239838

https://blog.csdn.net/weixin_34770855/article/details/116336169

https://blog.csdn.net/qq_34462698/article/details/115380647

写在最后

大功告成,以后可以享受用Docker带来的便利了。

(完)