Database

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) 

解决2:[参考](https://www.cnblogs.com/thg999/p/9982385.html)

留言

您的电子邮箱地址不会被公开。