一、拉取镜像(这里是我使用oracle官方的dockerfile构建的镜像)

$ docker pull registry.cn-hangzhou.aliyuncs.com/it-boy/oracle19c
Using default tag: latest
latest: Pulling from it-boy/oracle19c
f09c1d3b7e7b: Pull complete
e21babc95602: Pull complete
0f5197b95f24: Pull complete
81249adac3a0: Pull complete
2bd243282769: Downloading [=======================> ] 1.241GB/2.611GB
c97d0f42641c: Download complete

二、启动容器(这里我用作测试就没挂载数据目录,有需要 可以配置挂载到容器的/opt/oracle/oradata目录)

  1. docker run -d --name oracle-19c --restart=always \
  2. -e ORACLE_SID=ORCL \
  3. -e ORACLE_PDB=TEST \
  4. -e ORACLE_PWD=123456 \
  5. -p 1521:1521 -p 5500:5500 \
  6. registry.cn-hangzhou.aliyuncs.com/it-boy/oracle19c:latest

三、创建用户

从Oracle 12C开始引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。
image.png
通常在CDB上建立的用户是common user,新建用户名前要加C##。在PDB上创建的用户是local user。

3.1 在CDB上创建用户

3.1.1 连接并创建用户
  1. $ docker exec -it oracle-19c /bin/bash
  2. [oracle@2079a6e391ad ~]$ sqlplus / as sysdba
  3. SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 11 13:44:08 2022
  4. Version 19.3.0.0.0
  5. Copyright (c) 1982, 2019, Oracle. All rights reserved.
  6. Connected to:
  7. Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
  8. Version 19.3.0.0.0
  9. SQL>select name,cdb from v$database;
  10. NAME CDB
  11. --------- ---
  12. ORCL YES
  13. SQL> create user C##test identified by testpass;
  14. User created.

3.1.2 授权
  1. SQL> grant dba,connect,resource,create view to C##test;
  2. Grant succeeded.
  3. SQL> grant create session to C##test;
  4. SQL> grant select any table to C##test;
  5. SQL> grant update any table to C##test;
  6. SQL> grant insert any table to C##test;
  7. SQL> grant delete any table to C##test;

3.1.3 删除用户
SQL> drop user C##test cascade;

User dropped.

3.2 在PDB上创建用户

3.2.1 查看PDB name并进入
SQL> select pdb_id,pdb_name,dbid,status,creation_scn from dba_pdbs;

PDB_ID
----------
PDB_NAME
--------------------------------------------------------------------------------
DBID STATUS     CREATION_SCN
---------- ---------- ------------
3
TEST
1104146582 NORMAL          2123203

2
PDB$SEED
2864464127 NORMAL          2002450

PDB_ID
----------
PDB_NAME
--------------------------------------------------------------------------------
DBID STATUS     CREATION_SCN
---------- ---------- ------------


SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;

CON_ID       DBID
---------- ----------
NAME
--------------------------------------------------------------------------------
OPEN_MODE
----------
2 2864464127
PDB$SEED
READ ONLY

3 1104146582
TEST
READ WRITE

CON_ID       DBID
---------- ----------
NAME
--------------------------------------------------------------------------------
OPEN_MODE
----------


SQL> alter session set container=TEST;

3.2.2 在PDB上创建用户并授权

SQL> create user test2 identified by test2pass;

User created.

SQL> grant dba,connect,resource,create view to test2;

Grant succeeded.

SQL> grant select any table to test2;

Grant succeeded.

3.2.3 登录方式 sqlplus 用户名/密码@PDB

[oracle@2079a6e391ad ~]$ sqlplus test2/test2pass@TEST

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jan 11 14:02:52 2022
Version 19.3.0.0.0

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


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

四、SpringBoot中配置连接方式

4.1 CDB模式

spring.datasource.url=jdbc:oracle:thin:@192.168.186.10:1521:ORCL
spring.datasource.username=C##test
spring.datasource.password=testpass

4.2 PDB模式

spring.datasource.url=jdbc:oracle:thin:@//192.168.186.10:1521/TEST
spring.datasource.username=test2
spring.datasource.password=test2pass