Docker容器中的单实例Oracle数据库企业版

参考文档Oracle Database Enterprise Edition Installation Guide for Docker Containers For Oracle Linux x86-64,这个文档只有11页。但没有涵盖安装Docker的过程。

Oracle Container Registry中也有详细的帮助

准备阶段

  1. 准备一台Linux虚机。本例使用Oracle Linux 8 on OCI。
  2. 安装docker,参见这里
sudo -s
dnf install -y dnf-utils zip unzip
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
  1. 启动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

猜你喜欢

转载自blog.csdn.net/stevensxiao/article/details/129988634