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