安装准备

1、简介

Oracle Database Express Edition ( XE ) 版本是 Oracle 推出的免费版本的数据库产品,非常便于开发者与学习者以及其他想要了解 Oracle 数据库的人来使用。

Oracle XE 版本的大多数功能都与标准版与企业版相同,只是在某些资源上进行了限制,对于开发者或者个人使用也是足够了!

具体的资源限制可参考 Oracle XE 的官网文档:

https://docs.oracle.com/en/database/oracle/oracle-database/18/xelic/licensing-information.html#GUID-3BD43E8F-53C3-42F0-BBBD-B743FD41F951

2、安装环境

Ubuntu 18.04.5
Docker 19.03.6
Oracle Database XE 11g R2 (11.2.0.2)
git 2.17.1

3、安装规划

计划使用 Docker 构建安装并运行一个 Oracle Database XE 11g R2 的实例,方便用于开发与学习 Oracle Dadabase。

4、注意事项

(1) 此安装方法并不是使用 Docker Hub 中的标准镜像安装,而是通过 docker build 的方式自行构建并安装。

(2) 安装的是 Oracle Database Express Edition 版本,不是标准版本也不是企业版本。

(3) 你必须自行下载 Oracle Database XE 版本的安装文件 (oracle-xe-11.2.0-1.0.x86_64.rpm.zip),下载地址见附录。

安装步骤

1、创建一个安装目录

如下示例,在当前用户的家目录下创建一个 oracle 目录用于下载 git 代码,构建等用途。

$ cd ~
$ pwd
/home/jiangzl
$ mkdir -p oracle/oradata

2、下载 oracle/docker-images 代码

$ cd ~/oracle
$ pwd
/home/jiangzl/oracle
$ git clone git@github.com:oracle/docker-images.git
Cloning into 'docker-images'...
Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
remote: Enumerating objects: 12741, done.
remote: Total 12741 (delta 0), reused 0 (delta 0), pack-reused 12741
Receiving objects: 100% (12741/12741), 9.52 MiB | 11.00 KiB/s, done.
Resolving deltas: 100% (7510/7510), done.

3、上传下载的 Oracle Database 11g 的安装包

将 Oracle Database 11g 的安装包上传到 docker-images/11.2 目录下。

$ pwd
/home/jiangzl/oracle
$ cd docker-images/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2

注:安装包不需要解压,不然会失败

4、执行构建镜像脚本

运行 buildDockerImage.sh 脚本,执行如下命令进行构建

./buildDockerImage.sh -v 11.2.0.2 -x

示例:

$ pwd
/home/jiangzl/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildDockerImage.sh -v 11.2.0.2 -x
Checking Docker version.
Checking if required packages are present and valid...
oracle-xe-11.2.0-1.0.x86_64.rpm.zip: OK
...
Complete!
Archive:  oracle-xe-11.2.0-1.0.x86_64.rpm.zip
   creating: Disk1/
   creating: Disk1/upgrade/
  inflating: Disk1/upgrade/gen_inst.sql  
   creating: Disk1/response/
  inflating: Disk1/response/xe.rsp   
  inflating: Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm  
Executing post-install steps...
You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.
Removing intermediate container 589be6941279
 ---> d633c3a1da92
Step 7/8 : HEALTHCHECK --interval=1m --start-period=5m    CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
 ---> Running in 69d47ab9b3f5
Removing intermediate container 69d47ab9b3f5
 ---> d2ad9f723665
Step 8/8 : CMD exec $ORACLE_BASE/$RUN_FILE
 ---> Running in 3414950fe9e8
Removing intermediate container 3414950fe9e8
 ---> c1add68785d0
[Warning] One or more build-args [DB_EDITION] were not consumed
Successfully built c1add68785d0
Successfully tagged oracle/database:11.2.0.2-xe
  Oracle Database Docker Image for 'xe' version 11.2.0.2 is ready to be extended: 
    --> oracle/database:11.2.0.2-xe
  Build completed in 57 seconds.

出现类似的信息表示已经构建成功啦~~

注:

(1) oracle-xe-11.2.0-1.0.x86_64.rpm.zip 文件必须放于 docker-images/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2 目录下,否则不能成功构建。

(2) buildDockerImage.sh 脚本位于 docker-images/OracleDatabase/SingleInstance/dockerfiles 目录,此处只给出了 11.2.0.2 的 XE 版本的命令,其他版本的命令可以执行 ./buildDockerImage.sh -h 查看参数的用法。

(3) -v 11.2.0.2 表示的是构建的是 11.2.0.2 版本,如果要构建其他版本可更改此参数 (参数值只能是以下几个版本之一:11.2.0.2, 12.1.0.2, 12.2.0.1, 18.3.0, 18.4.0, 19.3.0)。

(4) -x 是一个无值参数,表示的是构建 XE 版本,如果要构建其他版本可更改此参数 (只能是以下之一:-x, -s, -e)。-e 表示企业版本,-s 表示标准版本, -x 表示快速版 (Express Edition)

5、校验构建镜像

执行如下命令,查看 docker images 中是否有构建完成的 Oracle XE 镜像

docker images | grep oracle

示例:

$ docker images | grep oracle
oracle/database                  11.2.0.2-xe         c1add68785d0        4 minutes ago       1.15GB
oraclelinux                      7-slim              03c22334cf5a        2 weeks ago         131MB

6、运行容器

现在你可以在任何目录下通过 docker 命令来执行如下命令运行容器

docker run -d \
--name <container name> \
--shm-size=1g \
-p 1521:1521 -p 8080:8080 \
-e ORACLE_PWD=<your database passwords> \
-v [<host mount point>:]/u01/app/oracle/oradata \
oracle/database:11.2.0.2-xe

示例:

$ docker run -d \
--name oracle11g-xe \
--shm-size=1g \
-p 1521:1521 -p 8080:8080 \
-e ORACLE_PWD=oraclepwd \
-v /home/jiangzl/oracle/oradata:/u01/app/oracle/oradata \
oracle/database:11.2.0.2-xe

08481ae7389da35836b0d52c71edd9b5cff1adde7e866790e41e2f1fc4e0af8f

注: 

(1) –name 后面的 oracle11g-xe 是容器的名字,可以自行更改,也可以不指定都不影响。

(2) -v /home/jiangzl/oracle/oradata 的路径是宿主机的路径,也是可自行指定,这个路径就是 Oracle Database 存储数据文件的物理路径。

(3) -e ORACLEE_PWD 是一个环境变量参数,用于指定 oracle 实例的数据库的 sys 和 system 的密码。建议指定,否则将会生成一个随机密码。

(4) Oracle Database XE 11.2.0.2 使用 Docker 运行的实例 ID 只能是 XE,不能改变。请注意!

(4) 另外强调一点就是如果不指定 -v /home/jiangzl/oracle/oradata:/u01/app/oracle/oradata 这个参数,那么当你重新运行容器时,你的数据就会丢失。如果你指定了一个宿主机的目录挂载到 docker 容器中的目录,那么你的容器中的数据实际是存在于宿主机中的。这时,只要你删除容器的时候不手动指定 -v 参数 (docker rm -v {CONTAINER_NAME/ID}) 删除数据卷,那你的容器中的数据将会一直存在于宿主机。简单点说,如果指定了此参数,你重新运行容器时原来的数据库表中的数据可以不丢失。

更多的 docker 运行容器相关的命令,请参考官方给出的参数解释:

https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/README.md


运行验证

1、查看 docker 进程

$ docker ps | grep oracle
b1701f1bb2b4        oracle/database:11.2.0.2-xe   "/bin/sh -c 'exec $O…"   12 minutes ago      Up 12 minutes (healthy)   0.0.0.0:1521->1521/tcp, 0.0.0.0:8080->8080/tcp   oracle11g-xe

2、查看运行日志

$ docker logs oracle11g-xe
ORACLE PASSWORD FOR SYS AND SYSTEM: oraclepwd
Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g Express 
Edition.  The following questions will determine whether the database should 
be starting upon system boot, the ports it will use, and the passwords that 
will be used for database accounts.  Press <Enter> to accept the defaults. 
Ctrl-C will abort.
...
Specify the HTTP port that will be used for Oracle Application Express [8080]:
Specify a port that will be used for the database listener [1521]:
Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of 
different passwords for each database account.  This can be done after 
initial configuration:
Confirm the password:
...
Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:
Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.
...
SQL>
System altered.
SQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
.  Current log# 5 seq# 4 mem# 0: /u01/app/oracle/oradata/XE/redo05.log
.      ALTER DATABASE DROP LOGFILE GROUP 1
Deleted Oracle managed file /u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_hqq1px4g_.log
Completed:       ALTER DATABASE DROP LOGFILE GROUP 1
.      ALTER DATABASE DROP LOGFILE GROUP 2
Deleted Oracle managed file /u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_hqq1px7x_.log
Completed:       ALTER DATABASE DROP LOGFILE GROUP 2
Cleared LOG_ARCHIVE_DEST_1 parameter default value
Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/app/oracle/product/11.2.0/xe/dbs/arch
ALTER SYSTEM SET db_recovery_file_dest='' SCOPE=BOTH;
Mon Oct 05 21:00:03 2020
Starting background process VKRM
Mon Oct 05 21:16:42 2020
VKRM started with pid=23, OS id=241 
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Mon Oct 05 21:16:42 2020
QMNC started with pid=24, OS id=243 
Completed: ALTER DATABASE OPEN
Starting background process CJQ0
Mon Oct 05 21:16:42 2020
CJQ0 started with pid=22, OS id=266

3、连接到 Oracle 数据库

连接到 Oracle Database 并查看数据库版本:

$ docker exec -it oracle11g-xe sqlplus sys/oraclepwd@//localhost:1521/XE as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Mon Oct 5 20:59:42 2020
Copyright (c) 1982, 2011, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0      Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

至此,已经通过 Docker Build Image 的方式安装了一个正常且可用的 Oracle Database XE 11.2.0.2 版本。Enjoy it~

附录

Oracle Database Download page:

https://www.oracle.com/database/technologies/oracle-database-software-downloads.html

Oracle Database XE index page

https://www.oracle.com/database/technologies/appdev/xe.html

Oracle Database XE Download page:

https://www.oracle.com/database/technologies/xe-prior-releases.html

Oracle Docker Image:

https://github.com/oracle/docker-images

 Oracle Database 单实例安装文档:

https://github.com/oracle/docker-images/blob/master/OracleDatabase/SingleInstance/README.md