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;

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

相关推荐
Alsn8610 分钟前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
曹牧2 小时前
Oracle EXPLAIN PLAN
数据库·oracle
贤时间2 小时前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心2 小时前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
程序员老赵3 小时前
服务器没有桌面?Docker 跑个 Chrome,浏览器就能远程用
docker·容器·devops
杨浦老苏3 小时前
轻量级Docker仪表板Servedash
运维·docker·监控·群晖·仪表板
正经教主3 小时前
【docker基础】 第八周:容器监控与应用更新策略
运维·docker·容器
kiros_wang4 小时前
Docker 使用完整指南
运维·docker·容器
正经教主4 小时前
【docker基础】第九周:Docker安全与镜像优化
运维·docker·容器
Curvatureflight5 小时前
MySQL 深分页越来越慢?从 LIMIT OFFSET 改成游标分页
数据库·oracle