前言

MySQL和Oracle是开发中常用到的两个关系型数据库管理系统,接上一期内容,这一期在Docker中完成oracle-12c的安装和配置。

安装oracle-12c

1、拉取oracle-12c镜像

启动Docker Desktop后在cmd窗口中执行docker search oracle命令,搜索Oracle相关的镜像,可以看到搜索结果中的truevoly/oracle-12c

docker安装pg数据库12 docker 安装oracle12c数据库_oracle


不指定版本则默认下载oracle-12c最新版本的镜像,Oracle的镜像文件较大,拉取镜像会久一些。

# 拉取镜像(默认下载oracle-12c最新版本的镜像)
docker pull truevoly/oracle-12c

docker安装pg数据库12 docker 安装oracle12c数据库_数据库_02


2、创建并启动容器

cmd中执行以下命令,在docker中创建并启动一个oracle-12c容器,对物理机暴露2122、9090和1521三个端口分别映射到容器内的22、8080和1521端口,并且将容器内的oracle目录挂载到物理机的D盘中

# 创建oracle-12c容器并启动
docker run -d -p 2122:22 -p 9090:8080 -p 1521:1521 -v D:\lingSoftware\Docker\WorkSpace\Oracle:/u01/app/oracle/ --name oracle-12c truevoly/oracle-12c

查看容器启动日志(看到Import finished Database ready to use. Enjoy! 即容器创建并启动完成)

# 查看oracle-12c启动日志
docker logs -f oracle-12c

docker安装pg数据库12 docker 安装oracle12c数据库_oracle_03


docker安装pg数据库12 docker 安装oracle12c数据库_表空间_04


若日志中出现以下报错,是因为对外暴露的端口不可用访问权限已被禁止,只要更改创建容器时对外暴露的端口即可

docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:1521 -> 0.0.0.0:0: listen tcp 0.0.0.0:1521: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

可在cmd中执行以下命令查看哪些端口被禁用TCP协议

# cmd命令查看哪些端口被禁用TCP协议
netsh interface ipv4 show excludedportrange protocol=tcp

docker安装pg数据库12 docker 安装oracle12c数据库_表空间_05


3、修改oracle账号密码设置

truevoly/oracle-12c镜像创建的容器默认有syssystem两个用户,密码都是oracle,默认的一个SID/服务名是xe,Oracle的用户密码默认有效期是180天,180天后用户会自动锁住,下面进入oracle-12c容器内将密码的有效期设置为永久!

# 进入oracle-12c容器内
docker exec -it oracle-12c /bin/bash
# 切换成oracle用户
su oracle
# 进入sqlplus
$ORACLE_HOME/bin/sqlplus / as sysdba
# 设置密码有效期为无限制
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
# 解锁system用户
SQL> alter user SYSTEM account unlock;

docker安装pg数据库12 docker 安装oracle12c数据库_docker_06

4、物理机连接oracle-12c

使用PL/SQL或Navicat等工具测试连接oracle-12c

docker安装pg数据库12 docker 安装oracle12c数据库_数据库_07

拓展

Oracle创建表空间与用户

以下创建一个ling_mf3数据表空间

-- 创建ling_mf3数据表空间
create tablespace ling_mf3 datafile '/u01/app/oracle/data/ling_mf3.dbf' size 50M;

创建表空间成功,同时也会在挂载的目录下生成相应数据文件

docker安装pg数据库12 docker 安装oracle12c数据库_数据库_08


以下创建一个用户ling并授权,且设置ling_mf3为它的默认表空间

-- 创建ling用户密码为meet0and1#202302并设置ling_mf3为它的默认表空间
create user ling identified by "meet0and1#202302" default tablespace ling_mf3;
-- 给用户ling授权 dba:管理员的权限
grant connect,resource,dba to ling;

docker安装pg数据库12 docker 安装oracle12c数据库_docker安装pg数据库12_09

重启Oracle服务

Docker Desktop中可以一键重启,但实际开发中一般是在Linux环境中,我这里演示用命令重启Oracle服务

-- 查看监听状态
lsnrctl status
-- 停监听
lsnrctl stop
sqlplus / as sysdba
-- 停止oracle
SQL>shutdown immediate;
-- 启服务
SQL>startup;
SQL>exit
-- 启监听
lsnrctl start

更多常用…

-- 删除表空间
drop tablespace ling_mf3;

-- 查询所有的表空间
select tablespace_name from dba_tablespaces;

-- 查看当前的用户和表空间
select username,default_tablespace from user_users;

-- 查看当前用户的角色
select * from user_role_privs;
-- 查询实例名/SID/服务名
select instance_name from v$instance;
-- 查看Oracle版本
select * from v$version;

-- 查看数据库允许的最大连接数
select value from v$parameter where name = 'processes';

-- 查看当前连接数
select count(*) from v$process;

-- 查看数据库当前会话的连接数
select count(*) from v$session;

-- 查看数据库当前的并发连接数
select count(*) from v$session where status = 'ACTIVE';