Linux搭建docker oracle 19c
1. 镜像制作 (可选)
使用oracle 19c官方dockerfile,若直接使用wl4g/oracle制作好的镜像,可忽略此步骤
git clone https://github.com/oracle/docker-images.git
cd docker-images/OracleDatabase/SingleInstance/dockerfiles
cd 19.3.0
# 下载安装包
# a). 从官网下载(注:需登录)
https://download.oracle.com/otn/linux/oracle19c/190000/LINUX.X64_193000_db_home.zip
# b). 或从百度云下载
链接: https://pan.baidu.com/s/1BiV62QAfDM1A00wyvZUJ9A 密码: bu3w
# c). 或从私有仓库下载
https://pkg.wl4g.com/software/oracle
# 开始构建镜像(注:需至少有18G可用空间)
./buildContainerImage.sh -v 19.3.0 -s
.......静静的等待大约20分钟........
inflating: apex/images/flashchart/anychart_6/swf/maps/usa/sub_regions/states/east_north_central.amap
creating: apex/images/flashchart/anychart_6/swf/maps/usa/sub_regions/zip3/
inflating: apex/images/flashchart/anychart_6/swf/maps/usa/sub_regions/zip3/mountain.amap
.............
Changing groupname of /opt/oracle/oraInventory to dba.
The execution of the script is complete.
Check /opt/oracle/product/19c/dbhome_1/install/root_0dc6b9ce0dda_2021-07-11_10-11-10-771834136.log for the output of root script
Removing intermediate container 0dc6b9ce0dda
---> eb89b8571657
Step 19/22 : USER oracle
---> Running in cfb182a52432
Removing intermediate container cfb182a52432
---> 80d89c6ce14a
Step 20/22 : WORKDIR /home/oracle
---> Running in fd829c3478e4
Removing intermediate container fd829c3478e4
---> 44607556d2db
Step 21/22 : HEALTHCHECK --interval=1m --start-period=5m CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1
---> Running in fbed89eb389c
Removing intermediate container fbed89eb389c
---> 9363fc97f5c5
Step 22/22 : CMD exec $ORACLE_BASE/$RUN_FILE
---> Running in 1a194019aba8
Removing intermediate container 1a194019aba8
---> 857264863d42
Successfully built 857264863d42
Successfully tagged oracle/database:19.3.0-se2
Oracle Database container image for 'se2' version 19.3.0 is ready to be extended:
--> oracle/database:19.3.0-se2
Build completed in 690 seconds.
2. 创建&启动oracle 19c 容器
# 拉取已构建好的镜像
sudo docker pull registry.cn-shenzhen.aliyuncs.com/wl4g/oracle:19.3.0-se2
Oracle offical run container docs
mkdir -p /mnt/disk1/oradata
groupadd -f oinstall && useradd oracle -G oinstall
chown -R oracle:oinstall /mnt/disk1/oradata
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/19c/dbhome_1
export ORACLE_PATH=${ORACLE_HOME}/bin:${ORACLE_HOME}/OPatch/:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
docker run -tid --name=oracle19c \
-p 1521:1521 -p 5200:5500 \
-e ORACLE_SID=WL4G \
-e ORACLE_PDB=WL4G_PDB1 \
-e ORACLE_PWD=WL4G.com \
-e ORACLE_BASE=${ORACLE_BASE} \
-e ORACLE_HOME=${ORACLE_HOME} \
-e PATH=${ORACLE_PATH} \
-e INIT_SGA_SIZE=1024 \
-e INIT_PGA_SIZE=1024 \
-e ORACLE_EDITION=standard \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-e ENABLE_ARCHIVELOG=true \
-v /mnt/disk1/oradata:/opt/oracle/oradata \
registry.cn-shenzhen.aliyuncs.com/wl4g/oracle:19.3.0-se2
2.1.1 查看日志等待启动完成
docker logs -f --tail 100 oracle19c
当出现 DATABASE IS READY TO USE
则表示部署成功了

2.1.2 使用 sqlplus
新建用户及授权管理
sqlplus / as sysdba
SQL>
SQL> select * from v$instance;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION VERSION_LEGACY VERSION_FULL STARTUP_T STATUS PAR
----------------- ----------------- ----------------- --------- ------------ ---
....
....
SQL>
# 创建用户
SQL> create user C##test1 identified by 123456;
# 删除用户及对应数据
SQL> drop user C##test1 cascade;
# 授权用户SQL> grant create session,create table,create view,connect,resource,unlimited tablespace to C##test1 container=all;
# 解锁用户
SQL> alter user C##test1 account unlock;
SQL>
- 正常查询
v$isntance
虚表表示服务启动正常; - 从 oracle 12c 开始增加了CDB,默认连接都是CDB,在不切换到PDB的情况下,创建用户名需加前缀
C##
; - 注意使用
sqlplus / as sysdba
登录,和使用sqlplus sys/WL4G.com@WL4G_PDB1 as sysdba
登录的区别。
2.3 修改Oralce数据库密码(可选)
docker exec oracle19c ./setPassword.sh 123456
Notes:修改完密码后可以关闭之前终端了,出现 DATABASE IS READY TO USE之后,后边都是显示的日志,可以关闭终端,关闭终端不会导致它停止运行
2.3 打开 Oracle Enterprise Manager Database Express
控制台页面
https://localhost:5200/em 注:是 https
协议

登录账号信息:
账号 | system/sys/等 |
密码 | WL4G.com |
容器名 | WL4G_PDB1 |
3. 客户端连接
由于 oracle 19c 较新,本示例测试成功的使用的客户端是 DBeaver Community 7.0.5 和 Navicat Premium 15



注:尽量使用 ServiceName=WL4G_PDB1
连接,本示例中当使用 SID=WL4G
连接时,登录之后不能在 DBeaver Communtiy 7.0.5 中创建 Create new schema
4. 其他
4.1 若需在 oracle
容器中安装软件,请用管理员进入环境
docker exec -it -u root oracle19c bash
yum install 包名
5. FAQ
错误1:all appropriate instances are in restricted mode
解决1:
sqlplus /nolog
SQL> conn / as sysdba;
SQL> alter system disable restricted session;
System altered.
错误2: oracle创建用户报错(ORA-65096: invalid common user or role name)