Docker 简单部署 Oracle11 超详细图文步骤

1、引言

1.1、Oracle 简介

Oracle 是甲骨文公司开发的‌关系型数据库管理系统(RDBMS)‌,自1979年发布首个商用版本以来,凭借高性能、高可用性和强大的功能,一直是数据库领域的领导者。它支持 SQL 语言,具有数据安全性强、稳定性高、跨平台兼容性好等特点,适用于各类大、中、小微机环境。

1.2、Docker 环境

CentOS7 安装 Docker

1.3、Docker 镜像国内加速

渡渡鸟镜像同步站

2、Oracle 安装

2.1、创建 bridge 网络并指定 IP 区间

bash 复制代码
# 创建自定义网络
docker network create --driver bridge --subnet 172.0.0.0/16 woniu_network
 
# 查看已存在网络
docker network ls

2.2、创建数据和配置存放目录

bash 复制代码
# 创建 oracle 文件映射目录
mkdir -p /home/docker/oracle/ORCLfmap/prot1_64 && chmod 777 /home/docker/oracle/ORCLfmap/prot1_64

# 创建 oracle 应用目录
mkdir -p /home/docker/oracle/app && chmod 777 /home/docker/oracle/app

2.3、下载国内镜像

从渡渡鸟镜像同步站下载国内 Oracle 国内镜像

bash 复制代码
# yycx/oracle11:11.2.0.4 镜像下载地址
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/yycx/oracle11:11.2.0.4

# yycx/oracle11:11.2.0.4 镜像重新命名
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/yycx/oracle11:11.2.0.4 yycx/oracle11:11.2.0.4

# yycx/oracle11:11.2.0.4 镜像重新命名后可以选择删除,根据自己喜好执行
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/yycx/oracle11:11.2.0.4

2.4、安装并运行 Oracle

bash 复制代码
docker run -d \
  --name oracle \
  -p 1521:1521 \
  -e ORACLE_PWD=oracle \
  -e ORACLE_CHARACTERSET=AL32UTF8 \
  -e ORACLE_DATABASE=ORCLCDB \
  yycx/oracle11:11.2.0.4

2.5、复制 Oracle 相关文件

bash 复制代码
# 复制 Oracle 数据文件到指定目录
docker cp -a oracle:/opt/oracle/app/oradata/ /home/docker/oracle/app/

# 复制 Oracle 快速恢复区到指定目录
docker cp -a oracle:/opt/oracle/app/fast_recovery_area/ /home/docker/oracle/app/

# 复制 Oracle 数据泵到指定目录
docker cp -a oracle:/opt/oracle/dpdump/ /home/docker/oracle/app/

# 复制 Oracle 配置文件到指定目录
docker cp -a oracle:/opt/ORCLfmap/prot1_64/etc /home/docker/oracle/ORCLfmap/prot1_64

# 复制 Oracle 日志文件到指定目录
docker cp -a oracle:/opt/ORCLfmap/prot1_64/log /home/docker/oracle/ORCLfmap/prot1_64

# 删除 Oracle 容器
docker rm -f oracle

2.6、自定义启动 Oracle

bash 复制代码
docker run -d \
--name oracle \
--network woniu_network \
--ip 172.0.0.68 \
--restart=always \
-p 1521:1521 \
-e ORACLE_PWD=oracle \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-e ORACLE_DATABASE=ORCLCDB \
-v /home/docker/oracle/app/oradata:/opt/oracle/app/oradata/ \
-v /home/docker/oracle/app/fast_recovery_area:/opt/oracle/app/fast_recovery_area/ \
-v /home/docker/oracle/dpdump:/opt/oracle/dpdump/ \
-v /home/docker/oracle/ORCLfmap/prot1_64/etc:/opt/ORCLfmap/prot1_64/etc/ \
-v /home/docker/oracle/ORCLfmap/prot1_64/log:/opt/ORCLfmap/prot1_64/log/ \
yycx/oracle11:11.2.0.4

2.7、Oracle 初始化

bash 复制代码
# 在容器 oracle 中开启一个交互模式的终端
docker exec -it oracle /bin/bash

# 切换到 oracle 用户
su - oracle

# 连接到数据库
sqlplus / as sysdba

# 验证实例状态,STATUS 应为 OPEN,LOGINS 应显示 ALLOWED(而非RESTRICTED)
SELECT status, logins FROM v$instance;

2.7、Oracle 验证

当前数据库中所有用户的密码都是 5208

2.8、Oracle 修改密码

当前数据库中所有用户的密码都是 5208,如果想要修改可以通过下面的语句进行修改,将每个语句中最后的 5208 改成你想要的新密码。

sql 复制代码
ALTER USER SYS IDENTIFIED BY 5208;

ALTER USER SYSTEM IDENTIFIED BY 5208;

3、Oracle 实战

3.1、表空间创建与管理

表空间是 Oracle 数据库的逻辑存储单元,用于组织数据文件与临时文件。创建时需指定数据文件路径、初始大小及扩展策略。

创建普通表空间

sql 复制代码
CREATE TABLESPACE woniu 
DATAFILE '/opt/oracle/app/oradata/woniu.dbf' 
SIZE 500M 
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;

参数说明:

1、CREATE TABLESPACE woniu‌

  • 创建名为 woniu 的逻辑表空间。

‌2、DATAFILE '/opt/oracle/app/oradata/woniu.dbf'‌

  • 指定物理数据文件路径(.dbf 后缀为 Oracle 数据文件标准格式)。

3‌、SIZE 500M‌

  • 初始分配空间大小为 500MB。

4‌、AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED‌

  • AUTOEXTEND ON:空间不足时自动扩展
  • NEXT 10M:每次扩展 10MB
  • MAXSIZE UNLIMITED:不设空间上限

5、EXTENT MANAGEMENT LOCAL‌

  • 使用本地管理表空间(Oracle 推荐方式),通过位图自动管理存储空间分配。

3.2、表模式创建与管理

3.2.1、创建用户并指定默认表空间

sql 复制代码
-- 以 SYSDBA 身份执行
CREATE USER woniu IDENTIFIED BY woniu2026
DEFAULT TABLESPACE woniu
TEMPORARY TABLESPACE temp;  -- 指定临时表空间

3.2.2、授予必要权限

sql 复制代码
-- 基本连接权限
GRANT CREATE SESSION TO woniu;

-- 创建表权限
GRANT CREATE TABLE TO woniu;

-- 如需创建其他对象,可授予更多权限
GRANT CREATE VIEW, CREATE SEQUENCE, CREATE PROCEDURE TO woniu;

-- 或者授予更高级的角色(开发环境推荐)
GRANT CONNECT, RESOURCE TO woniu;

3.3、创建表

3.3.1、创建自增序列

Oracle 11g及以下版本(使用序列+触发器)

sql 复制代码
CREATE SEQUENCE woniu.seq_user_info_id
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;

3.3.2、创建表(使用普通NUMBER类型)

sql 复制代码
CREATE TABLE woniu.user_info (
    id         NUMBER        PRIMARY KEY,
    name       VARCHAR2(50)  NOT NULL,
    age        NUMBER(3)     CHECK (age BETWEEN 0 AND 150),
    money      NUMBER(15,2)  DEFAULT 0.00,
    sex        VARCHAR2(10)  CHECK (sex IN ('MALE', 'FEMALE', 'OTHER')),
    creat_time TIMESTAMP     DEFAULT SYSTIMESTAMP NOT NULL
) TABLESPACE woniu;

-- 添加表注释和列注释(保持不变)
COMMENT ON TABLE woniu.user_info IS '用户基本信息表';
COMMENT ON COLUMN woniu.user_info.id IS '主键ID(自增长)';
COMMENT ON COLUMN woniu.user_info.name IS '用户姓名';
COMMENT ON COLUMN woniu.user_info.age IS '用户年龄';
COMMENT ON COLUMN woniu.user_info.money IS '账户余额(单位:元)';
COMMENT ON COLUMN woniu.user_info.sex IS '用户性别';
COMMENT ON COLUMN woniu.user_info.creat_time IS '创建时间(精确到毫秒)';

3.3.3、创建自动赋值的触发器

sql 复制代码
CREATE OR REPLACE TRIGGER woniu.trg_user_info_id
BEFORE INSERT ON woniu.user_info
FOR EACH ROW
BEGIN
    IF :NEW.id IS NULL THEN
        :NEW.id := woniu.seq_user_info_id.NEXTVAL;
    END IF;
END;

本文教程到此结束,祝愿小伙伴们在编程之旅中能够愉快地探索、学习、成长!

相关推荐
xiaoyustudiowww14 小时前
Oracle 19,21,23 JDBC 版本官方下载
数据库·oracle
jogging14 小时前
mysql导出表结构信息到excel【DBeaver】
mysql·oracle·excel·导出·表结构
slient_love14 小时前
n8n部署安装(docker)、支持Code in Python (Native)节点
python·docker·n8n
jessezappy15 小时前
记录:老电脑安装 Docker 4.40 不支持 WSL 2 时这样处理
docker·容器·wsl·硬件不支持·i5-3470
C_心欲无痕1 天前
浏览器缓存: IndexDB
前端·数据库·缓存·oracle
剑来.1 天前
事务没提交,数据库为什么会越来越慢?
数据库·oracle
Leon-Ning Liu1 天前
19c RAC 环境 Patch 38326922 应用实战
数据库·oracle
赵文宇(温玉)1 天前
免费|不限速|不限流量|多架构|容器镜像服务---第1批同步:Docker官方维护的143个library镜像仓库
docker·容器·架构
工具罗某人1 天前
docker快速部署redis
redis·docker·容器
a587691 天前
Oracle数据库体系结构深度解析:从内核到应用的理论全景
数据库·oracle