参考文档Oracle Database Enterprise Edition Installation Guide for Docker Containers For Oracle Linux x86-64,这个文档只有11页。但没有涵盖安装Docker的过程。
Oracle Container Registry中也有详细的帮助。
准备阶段
- 准备一台Linux虚机。本例使用Oracle Linux 8 on OCI。
- 安装docker,参见这里。
sudo -s
dnf install -y dnf-utils zip unzip
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
- 启动docker
systemctl enable docker
systemctl start docker
systemctl status docker
容器中的单实例Oracle数据库企业版
登录Container Registry
docker login container-registry.oracle.com
启动Oracle数据库
第一次需要拉取image,因此时间较长:
# time docker run -d --name ORCLCDB container-registry.oracle.com/database/enterprise:21.3.0.0
Unable to find image 'container-registry.oracle.com/database/enterprise:21.3.0.0' locally
21.3.0.0: Pulling from database/enterprise
66fb34780033: Pull complete
3160e5ce220f: Pull complete
0437799a5b58: Pull complete
482f23cb4332: Pull complete
aa126f7f477e: Pull complete
301b19663f45: Pull complete
05f1fb1cf84e: Pull complete
598f60c72ddf: Pull complete
81e8d20d2156: Pull complete
9d9c75a88c10: Pull complete
bca95ae31b8e: Pull complete
4398a68b7fea: Pull complete
93a2104a5838: Pull complete
26cd4127e02c: Pull complete
5809f26d1dd7: Pull complete
6fe7a53a2535: Pull complete
30c9251aff49: Pull complete
Digest: sha256:e2518d6d42c67a1778b2d0a7b7a447f0dd42d9729d112b4b3e89db874dcc5aac
Status: Downloaded newer image for container-registry.oracle.com/database/enterprise:21.3.0.0
a6e59560a57a5d3f7eb6b9d327cbd5bae8aad13ef2d9fc8adbceefa4acf37131
real 5m13.234s
user 0m0.258s
sys 0m0.122s
此时容器起来了,但还在创建中。
创建完成后,完整的日志如下:
# docker logs ORCLCDB
[2023:04:06 06:16:00]: Acquiring lock .ORCLCDB.create_lck with heartbeat 30 secs
[2023:04:06 06:16:00]: Lock acquired
[2023:04:06 06:16:00]: Starting heartbeat
[2023:04:06 06:16:00]: Lock held .ORCLCDB.create_lck
ORACLE EDITION: ENTERPRISE
LSNRCTL for Linux: Version 21.0.0.0.0 - Production on 06-APR-2023 06:16:00
Copyright (c) 1991, 2021, Oracle. All rights reserved.
Starting /opt/oracle/product/21c/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 21.0.0.0.0 - Production
System parameter file is /opt/oracle/homes/OraDB21Home1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/a6e59560a57a/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 21.0.0.0.0 - Production
Start Date 06-APR-2023 06:16:00
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/homes/OraDB21Home1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/a6e59560a57a/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
The listener supports no services
The command completed successfully
Prepare for db operation
8% complete
Copying database files
31% complete
Creating and starting Oracle instance
32% complete
36% complete
40% complete
43% complete
46% complete
Completing Database Creation
51% complete
54% complete
Creating Pluggable Databases
58% complete
77% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
/opt/oracle/cfgtoollogs/dbca/ORCLCDB.
Database Information:
Global Database Name:ORCLCDB
System Identifier(SID):ORCLCDB
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details.
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Apr 6 06:23:59 2023
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
SQL>
System altered.
SQL>
System altered.
SQL>
Pluggable database altered.
SQL>
PL/SQL procedure successfully completed.
SQL> SQL>
Session altered.
SQL>
User created.
SQL>
Grant succeeded.
SQL>
Grant succeeded.
SQL>
Grant succeeded.
SQL>
User altered.
SQL> SQL> Disconnected from Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
The Oracle base remains unchanged with value /opt/oracle
Executing user defined scripts
/opt/oracle/runUserScripts.sh: running /opt/oracle/scripts/extensions/setup/swapLocks.sh
[2023:04:06 06:24:00]: Releasing lock .ORCLCDB.create_lck
[2023:04:06 06:24:00]: Lock released .ORCLCDB.create_lck
[2023:04:06 06:24:00]: Acquiring lock .ORCLCDB.exist_lck with heartbeat 30 secs
[2023:04:06 06:24:00]: Lock acquired
[2023:04:06 06:24:00]: Starting heartbeat
[2023:04:06 06:24:00]: Lock held .ORCLCDB.exist_lck
DONE: Executing user defined scripts
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
ORCLPDB1(3):CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
ORCLPDB1(3):Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
ORCLPDB1(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
ORCLPDB1(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2023-04-06T06:23:59.190948+00:00
ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORCLCDB/control01.ctl' SCOPE=SPFILE;
2023-04-06T06:23:59.205131+00:00
ALTER SYSTEM SET local_listener='' SCOPE=BOTH;
ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
Completed: ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
这个安装过程从06:16到06:24,又花了8分钟。
数据库此时的STATUS为healthy:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6e59560a57a container-registry.oracle.com/database/enterprise:21.3.0.0 "/bin/sh -c 'exec $O…" 18 minutes ago Up 18 minutes (healthy) ORCLCDB
改SYS/SYSTEM口令:
# docker exec ORCLCDB ./setPassword.sh Welcome1
登录数据库:
# docker exec -it ORCLCDB sqlplus / as sysdba
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Apr 6 06:41:40 2023
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
Enter user-name:
以上方式没有成功,换一种:
# docker exec -it ORCLCDB bash
bash-4.2$ sqlplus / as sysdba
SQL*Plus: Release 21.0.0.0.0 - Production on Thu Apr 6 06:42:54 2023
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
SQL> show parameter cpu_cout
SQL> show parameter cpu
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
cpu_count integer 2
cpu_min_count string 2
parallel_threads_per_cpu integer 1
resource_manager_cpu_allocation integer 0
resource_manager_cpu_scope string INSTANCE_ONLY
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
allow_group_access_to_sga boolean FALSE
lock_sga boolean FALSE
pre_page_sga boolean TRUE
sga_max_size big integer 1536M
sga_min_size big integer 0
sga_target big integer 1536M
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_limit big integer 2G
pga_aggregate_target big integer 512M
启停容器:
docker stop a6e59560a57a
docker start a6e59560a57a
删除容器:
docker stop a6e59560a57a
docker rm a6e59560a57a
确认:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
container-registry.oracle.com/database/enterprise 21.3.0.0 da441e2c6de2 6 months ago 8.01GB
定制化启动:
time docker run -d --name ORCLCDB \
-e ORACLE_SID=ORCLCDB \
-e ORACLE_PDB=ORCLPDB1 \
-e ORACLE_PWD=Welcome1 \
-e INIT_SGA_SIZE=4000 \
-e INIT_PGA_SIZE=2000 \
-e ORACLE_EDITION=enterprise \
-e ORACLE_CHARACTERSET=ZHS16GBK \
-e ENABLE_ARCHIVELOG=true \
container-registry.oracle.com/database/enterprise:21.3.0.0
由于image已经到本地了,因此这个过程实际就是安装数据库的过程,耗时7分钟。
ORACLE_EDITION如指定为standard则是标准版。
XE也是支持的,命令如下:
docker run -d --name ORCLCDB container-registry.oracle.com/database/express:21.3.0-xe
其余过程同前。
又确认了下,Oracle Vagrant Project中并没有Oracle数据库容器,只有一个DockerEngine的虚机和一个ContainerRegistry的虚机。
参考
- https://blogs.oracle.com/coretec/post/oracle-database-with-docker
- https://github.com/oracle/docker-images/blob/main/OracleDatabase/SingleInstance/README.md
- https://github.com/oracle/docker-images
- https://oracle-base.com/articles/linux/docker-oracle-database-on-docker
- https://oracle.github.io/learning-library/data-management-library/database/docker/db-on-docker/workshops/freetier/?lab=create-db-container