YCVisionLog
返回笔记
Computer Knowledge2026-10-1130 minYygz3145 人浏览已发布

数据库管理与开发(Oracle 19c)完整学习指南

用于自己学习数据库管理与开发的指南

Notes

适用对象:正在学习《数据库管理与开发》《Oracle 数据库应用》《Oracle 19c 数据库管理》等课程的本科生,以及希望系统掌握 Oracle 19c 的初学者。
建议环境:Oracle Database 19c + SQL*Plus + Oracle SQL Developer。
核心目标:不仅会写 SQL,还要理解数据库的体系结构、存储、用户权限、事务、网络连接、PL/SQL、备份恢复和基础性能优化,最终能够独立完成一套 Oracle 数据库的设计、部署、开发、管理、排错与实验报告。


1. 这门课到底在学什么

很多同学会把“数据库管理与开发”理解成“会写 SELECT、INSERT、UPDATE、DELETE 就行”。这远远不够。

一门完整的数据库管理与开发课程,实际上有两条主线:

TEXT
数据库开发
    +
数据库管理 

数据库开发主要包括:

TEXT
数据建模
SQL
数据库对象
PL/SQL
事务
应用程序访问数据库 

数据库管理主要包括:

TEXT
Oracle 体系结构
实例与数据库
用户与权限
表空间与数据文件
Listener 与网络连接
启动与关闭
日志与归档
备份与恢复
性能与故障排查 

所以这门课不是单纯的“SQL 课”,而是:

从数据库原理,到 Oracle 19c 的实际运行,再到 SQL/PLSQL 开发与数据库管理的一门综合课程。


2. 学完以后应该达到什么水平

建议把最终能力分为四级。

Level 1:会使用

你能够:

  • 使用 SQL*Plus;
  • 使用 SQL Developer;
  • 成功连接 Oracle 19c;
  • 知道 Username、Password、Host、Port、Service Name 分别是什么;
  • 会创建表;
  • 会插入、修改、删除、查询数据。

这是最低要求。

Level 2:会开发

你能够:

  • 根据业务设计关系表;
  • 正确使用主键、外键、唯一、非空、检查约束;
  • 熟练编写多表查询;
  • 熟练使用子查询;
  • 熟练使用聚合函数;
  • 会使用视图、索引、序列;
  • 会编写 PL/SQL;
  • 会创建存储过程、函数和触发器;
  • 能够设计简单数据库应用后台。

Level 3:会管理

你能够解释并实际操作:

TEXT
Instance
SGA
PGA
Background Process
Control File
Data File
Redo Log
Archive Log 

同时能够:

  • 启动和关闭数据库;
  • 区分 NOMOUNT / MOUNT / OPEN;
  • 管理 CDB/PDB;
  • 创建用户;
  • 管理权限;
  • 创建和管理表空间;
  • 查询数据字典;
  • 配置和检查 Listener;
  • 判断常见 ORA 错误的原因;
  • 完成基础备份与恢复。

Level 4:真正理解

最终应当能回答:

  • 为什么 Oracle 要设计 SGA?
  • 为什么查询先访问 Buffer Cache?
  • 为什么 COMMIT 不等于数据块已经写进 Data File?
  • 为什么 Oracle 需要 Redo?
  • 为什么需要 Undo?
  • 为什么数据库启动要分 NOMOUNT → MOUNT → OPEN?
  • 为什么 Listener 正常并不代表 PDB 一定能访问?
  • 为什么建立索引后查询不一定更快?

如果这些问题能讲清楚,你就不只是“会操作”,而是真正理解了数据库系统。


3. 整门课的知识地图

建议把整门课记成下面这棵树:

TEXT
数据库管理与开发
│
├── 数据库基础理论
│   ├── 数据库 / DBMS
│   ├── 关系模型
│   ├── 主键 / 外键
│   ├── 完整性
│   ├── ER 模型
│   └── 规范化
│
├── Oracle 19c 体系结构
│   ├── Instance / Database
│   ├── SGA / PGA
│   ├── DBWn / LGWR / CKPT
│   ├── SMON / PMON / ARCn
│   ├── Data File
│   ├── Control File
│   └── Online Redo Log
│
├── SQL
│   ├── DDL
│   ├── DML
│   ├── DQL
│   ├── TCL
│   ├── DCL
│   ├── JOIN
│   ├── GROUP BY
│   ├── 子查询
│   └── 分析函数
│
├── Schema Object
│   ├── Table
│   ├── Constraint
│   ├── Index
│   ├── View
│   ├── Sequence
│   └── Synonym
│
├── 事务与恢复
│   ├── COMMIT
│   ├── ROLLBACK
│   ├── SAVEPOINT
│   ├── Undo
│   ├── Redo
│   └── Lock
│
├── 安全管理
│   ├── User
│   ├── Privilege
│   ├── Role
│   └── Schema
│
├── 存储管理
│   ├── Tablespace
│   ├── Data File
│   ├── Segment
│   ├── Extent
│   └── Block
│
├── 网络
│   ├── Listener
│   ├── Service
│   ├── Host / Port
│   ├── listener.ora
│   └── tnsnames.ora
│
├── PL/SQL
│   ├── Block
│   ├── Variable
│   ├── IF / LOOP
│   ├── Cursor
│   ├── Exception
│   ├── Procedure
│   ├── Function
│   └── Trigger
│
├── 备份恢复
│   ├── ARCHIVELOG
│   ├── RMAN
│   ├── Backup
│   ├── Restore
│   └── Recover
│
└── 性能
    ├── Index
    ├── Execution Plan
    ├── Optimizer
    ├── Statistics
    └── SQL Tuning 

以后每学到一个知识点,都应该知道它在这张图上的位置。


4. 第一阶段:关系数据库与 Oracle 基础

先搞清楚:

TEXT
Database
DBMS
RDBMS
Oracle Database
Schema
Table
Row
Column 

Oracle Database 是数据库管理系统产品,不是“某一张表”或“某一个数据文件”。

4.1 关系模型

需要理解:

  • 关系可以理解为二维表;
  • 元组可以理解为行;
  • 属性可以理解为列;
  • 域表示属性允许的值集合;
  • 候选键;
  • 主键;
  • 外键。

例如:

TEXT
STUDENT
-------------------------------
student_id | name | class_id 

其中 student_id 可以作为主键。

4.2 三类完整性

实体完整性

主键:

TEXT
不能重复
不能为 NULL 

参照完整性

外键值必须存在于被引用表,或者在约束允许时为 NULL。

用户定义完整性

例如:

TEXT
age >= 0
score BETWEEN 0 AND 100 

4.3 ER 模型

应该能够把业务描述转成:

TEXT
实体
属性
联系 

例如学生选课系统:

TEXT
学生
课程
选课 

最终转成:

TEXT
STUDENT
COURSE
SC 

至少独立完成一个:

  • 学生选课系统;
  • 图书管理系统;
  • 实验室设备管理系统;
  • 医院预约系统。

4.4 规范化

至少理解:

TEXT
1NF
2NF
3NF 

重点不是机械背定义,而是理解:

TEXT
数据冗余
插入异常
删除异常
更新异常 

以及为什么拆表能改善这些问题。


5. 第二阶段:Oracle 19c 体系结构

这是整门 Oracle 课程的核心。

5.1 两个必须记住的公式

TEXT
Oracle Database Server
=
Instance
+
Database 
TEXT
Instance
=
SGA
+
Background Processes 

5.2 SGA

至少掌握:

TEXT
SGA
├── Shared Pool
│   ├── Library Cache
│   └── Data Dictionary Cache
├── Database Buffer Cache
├── Redo Log Buffer
├── Large Pool
└── Java Pool 

重点理解:

TEXT
Shared Pool
→ SQL、执行计划、元数据等共享内容

Buffer Cache
→ 缓存数据块,减少磁盘访问

Redo Log Buffer
→ 暂存 Redo 

5.3 PGA

最重要的区别:

TEXT
SGA → 共享
PGA → 进程私有 

PGA 可能涉及:

  • 排序;
  • Hash Join;
  • 私有 SQL 区;
  • 会话运行状态。

5.4 后台进程

进程核心职责
DBWn把脏数据块写入 Data File
LGWR把 Redo 写入 Online Redo Log
CKPT协调检查点
SMON实例恢复等系统维护
PMON清理异常进程相关资源
ARCn归档 Redo

最重要的一组对比:

TEXT
DBWn
Buffer Cache → Data File

LGWR
Redo Log Buffer → Online Redo Log 

5.5 三类核心物理文件

TEXT
Data File
→ 数据是什么

Control File
→ 数据库由什么组成、处于什么状态

Online Redo Log
→ 数据发生了什么变化 

5.6 Oracle 启动

必须掌握:

TEXT
NOMOUNT
   ↓
MOUNT
   ↓
OPEN 

NOMOUNT

TEXT
读取参数文件
创建 SGA
启动后台进程
建立 Instance 

MOUNT

TEXT
打开 Control File
识别数据库结构 

OPEN

TEXT
打开 Data File
打开 Online Redo Log
正常提供服务 

建议能手画:

TEXT
Parameter File
      ↓
Instance
      ↓
Control File
      ↓
Database
      ↓
OPEN 

5.7 Oracle 19c CDB/PDB

至少理解:

TEXT
CDB
├── CDB$ROOT
├── PDB$SEED
└── PDB 

并会:

SQL
SHOW CON_NAME;
SHOW PDBS; 

切换 PDB:

SQL
ALTER SESSION SET CONTAINER = PDB; 

本阶段达标标准

不看课件,能够自己解释:

  • Oracle 从 STARTUP 到 OPEN 发生了什么;
  • 用户执行 SELECT 时数据怎么走;
  • UPDATE + COMMIT 时数据和 Redo 分别怎么走。

6. 第三阶段:SQL 查询能力

SQL 是开发能力的主干。

建议把 SQL 分成:

TEXT
DDL
DML
DQL
TCL
DCL 

6.1 DDL

重点:

SQL
CREATE
ALTER
DROP
TRUNCATE 

例如:

SQL
CREATE TABLE student (
    student_id NUMBER PRIMARY KEY,
    name       VARCHAR2(50),
    age        NUMBER
); 

必须理解:

TEXT
DROP
TRUNCATE
DELETE 

三者的差异。

6.2 DML

掌握:

SQL
INSERT
UPDATE
DELETE
MERGE 

示例:

SQL
INSERT INTO student(student_id, name, age)
VALUES (1, 'Tom', 20);

UPDATE student
SET age = 21
WHERE student_id = 1;

DELETE FROM student
WHERE student_id = 1; 

6.3 单表查询

必须熟练:

SQL
SELECT
FROM
WHERE
ORDER BY
DISTINCT 

条件:

TEXT
=
<>
>
<
>=
<=
BETWEEN
IN
LIKE
IS NULL
AND
OR
NOT 

6.4 NULL

错误:

SQL
WHERE comm = NULL 

正确:

SQL
WHERE comm IS NULL 

需要理解:

NULL 表示未知,不等同于 0。

6.5 常用函数

字符串:

TEXT
UPPER
LOWER
SUBSTR
LENGTH
TRIM 

数值:

TEXT
ROUND
TRUNC
MOD 

日期:

TEXT
SYSDATE
ADD_MONTHS
MONTHS_BETWEEN
LAST_DAY 

转换:

TEXT
TO_CHAR
TO_DATE
TO_NUMBER 

NULL:

TEXT
NVL
NVL2
COALESCE 

6.6 分组查询

熟练使用:

SQL
GROUP BY
HAVING 

例如:

SQL
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno; 

理解:

TEXT
WHERE → 分组前过滤
HAVING → 分组后过滤 

6.7 多表连接

重点掌握:

TEXT
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL OUTER JOIN
SELF JOIN
CROSS JOIN 

例如:

SQL
SELECT e.ename, d.dname
FROM emp e
JOIN dept d
ON e.deptno = d.deptno; 

学习目标不是背语法,而是能根据表关系判断连接条件。

6.8 子查询

至少会:

TEXT
单行子查询
多行子查询
相关子查询 

例如:

SQL
SELECT ename, sal
FROM emp
WHERE sal > (
    SELECT AVG(sal)
    FROM emp
); 

进一步掌握:

TEXT
IN
ANY
ALL
EXISTS 

6.9 集合运算

理解:

TEXT
UNION
UNION ALL
INTERSECT
MINUS 

6.10 分析函数

如果课程允许,强烈建议学习:

TEXT
ROW_NUMBER
RANK
DENSE_RANK
SUM() OVER()
AVG() OVER()
LAG
LEAD 

例如:

SQL
SELECT
    ename,
    sal,
    RANK() OVER (ORDER BY sal DESC) AS sal_rank
FROM emp; 

SQL 达标标准

给你 4~6 张相关表,能够独立解决:

  • 单表筛选;
  • 分组统计;
  • 多表连接;
  • 子查询;
  • Top-N;
  • 排名;
  • 去重;
  • 条件统计;
  • 日期处理。

7. 第四阶段:数据库对象与数据完整性

Table

会使用:

SQL
CREATE TABLE
ALTER TABLE
DROP TABLE 

Constraint

必须掌握:

TEXT
PRIMARY KEY
FOREIGN KEY
UNIQUE
NOT NULL
CHECK 

例如:

SQL
CREATE TABLE student (
    student_id NUMBER PRIMARY KEY,
    name VARCHAR2(30) NOT NULL,
    age NUMBER CHECK(age >= 0)
); 

理解约束的本质:

让错误数据进不了数据库。

View

理解:

TEXT
简化复杂查询
限制数据暴露
逻辑抽象 

Index

至少理解:

TEXT
B-tree Index
Unique Index
Composite Index 

最重要:

索引不是越多越好。

Sequence

例如:

SQL
CREATE SEQUENCE seq_student
START WITH 1
INCREMENT BY 1; 

使用:

SQL
seq_student.NEXTVAL 

Synonym

理解 Private Synonym 与 Public Synonym,知道它主要用于对象名简化和访问透明性。


8. 第五阶段:事务、Redo、Undo 与并发

8.1 事务

转账:

TEXT
A - 100
B + 100 

不能只成功一半。

8.2 COMMIT

SQL
COMMIT; 

关键理解:

COMMIT 的核心不是要求 DBWn 立即把所有脏块写入 Data File,而是保证相关 Redo 的持久化。

8.3 ROLLBACK

SQL
ROLLBACK; 

用于撤销未提交事务。

8.4 SAVEPOINT

SQL
SAVEPOINT s1;
ROLLBACK TO s1; 

8.5 Redo 与 Undo

TEXT
Redo
→ Recovery

Undo
→ Rollback + Read Consistency 

8.6 锁与并发

建议开两个 SQL*Plus 会话做实验。

会话 A:

SQL
UPDATE emp
SET sal = sal + 100
WHERE empno = 7369; 

不要提交。

会话 B 再修改同一行,观察阻塞。

这种实验比单纯背“锁”的定义更有效。


9. 第六阶段:用户、权限与安全

User 与 Schema

例如:

TEXT
SCOTT.EMP 

表示:

TEXT
SCOTT Schema 中的 EMP 表 

创建用户

SQL
CREATE USER student
IDENTIFIED BY password; 

系统权限

SQL
GRANT CREATE SESSION TO student;
GRANT CREATE TABLE TO student; 

对象权限

SQL
GRANT SELECT ON scott.emp TO student; 

Role

理解 Role 是:

权限集合。

SYS 与 SYSTEM

不要日常使用 SYS 创建普通业务表。实验中应建立普通用户完成开发。


10. 第七阶段:表空间与存储管理

逻辑存储结构:

TEXT
Tablespace
    ↓
Segment
    ↓
Extent
    ↓
Block 

物理结构:

TEXT
Data File 

核心理解:

TEXT
Tablespace → 逻辑概念
Data File  → 物理文件 

创建表示例:

SQL
CREATE TABLESPACE app_data
DATAFILE 'app_data01.dbf'
SIZE 100M
AUTOEXTEND ON; 

实际路径按本机环境调整。

用户配额:

SQL
ALTER USER student
QUOTA 100M ON users; 

必须理解:

用户有 CREATE TABLE 权限,并不意味着一定能成功建表;还需要目标表空间可用且有相应配额。


11. 第八阶段:Oracle 网络连接

把连接记成:

TEXT
Client
   ↓
Listener
   ↓
Service
   ↓
Server Process
   ↓
Instance / PDB 

必须知道:

TEXT
Host
Port
Service Name
Username
Password 

常见监听端口:

TEXT
1521 

Listener 常用命令:

BASH
lsnrctl status
lsnrctl start
lsnrctl stop 

SQL*Plus 网络连接示例:

BASH
sqlplus scott/tiger@localhost:1521/PDB 

四段排错思路:

TEXT
1. Client → Server:检查 IP / 网络
2. Server → Listener:检查 1521 / Listener
3. Listener → Service:检查 Service 注册
4. Service → Database:检查 Instance / PDB / 用户 

不要一出现连接问题就重装 Oracle。


12. 第九阶段:PL/SQL 程序设计

SQL 是声明式语言,PL/SQL 在 SQL 上增加了变量、分支、循环、异常、过程和函数。

基本块

SQL
DECLARE
    v_name VARCHAR2(20);
BEGIN
    v_name := 'Oracle';
    DBMS_OUTPUT.PUT_LINE(v_name);
END;
/ 

掌握:

TEXT
DECLARE
BEGIN
EXCEPTION
END 

变量

重点:

TEXT
普通变量
%TYPE
%ROWTYPE 

例如:

SQL
v_sal emp.sal%TYPE; 

分支与循环

TEXT
IF
ELSIF
ELSE

LOOP
WHILE LOOP
FOR LOOP 

Cursor

理解:

SQL 擅长处理集合,Cursor 用于逐行处理结果集。

掌握:

TEXT
Implicit Cursor
Explicit Cursor 

Exception

至少掌握:

TEXT
NO_DATA_FOUND
TOO_MANY_ROWS
OTHERS 

Procedure / Function / Trigger

要求最终能够:

  • 编写带 IN / OUT 参数的存储过程;
  • 编写返回值的函数;
  • 编写简单审计或自动处理触发器;
  • 理解触发器不能滥用。

PL/SQL 达标标准

能够独立实现:

输入部门号,统计部门人数、平均工资和最高工资。

能够写:

一个插入业务数据的存储过程。

能够写:

一个记录修改日志的简单触发器。


13. 第十阶段:备份、恢复与归档

本科课程通常不要求达到专业 DBA 的深度,但备份恢复的基本思想必须掌握。

13.1 为什么需要 Backup

一定要先明确:

Redo 不是 Backup,Redo 不能替代 Backup。

一个完整恢复体系通常涉及:

TEXT
Backup
+
Redo / Archived Redo
+
Recovery 

如果没有备份,仅靠日志不能解决所有介质损坏问题。

13.2 Online Redo Log 与 ARCHIVELOG

在线日志会循环使用:

TEXT
redo01
→ redo02
→ redo03
→ redo01 

如果数据库处于 ARCHIVELOG 模式,旧的在线重做日志在满足条件后可以被归档保存。

TEXT
Online Redo Log
      ↓
     ARCn
      ↓
Archived Redo Log 

这使数据库具备更强的恢复能力。

13.3 RMAN

RMAN 是 Oracle 官方核心备份恢复工具:

TEXT
Recovery Manager 

至少应知道:

TEXT
BACKUP
RESTORE
RECOVER 

其中:

TEXT
BACKUP
→ 制作备份

RESTORE
→ 把备份文件还原回来

RECOVER
→ 应用 Redo / Archive,把数据库推进到目标状态 

建议实验中至少完成:

  • 进入 RMAN;
  • 查看配置;
  • 做一次基础备份;
  • 查看备份列表;
  • 理解 Restore 与 Recover 的区别。

如果课程没有要求完整恢复操作,也至少要把原理讲明白。


14. 第十一阶段:性能优化与执行计划

这部分不要学成:

SQL 慢了 → 加索引。

真正的性能优化必须先看执行路径。

14.1 Optimizer

Oracle 会利用优化器选择执行计划。

TEXT
SQL
 ↓
解析
 ↓
Optimizer
 ↓
Execution Plan 

需要理解:

同一条 SQL 在不同数据量、统计信息、索引条件下,执行计划可能不同。

14.2 Execution Plan

建议会:

SQL
EXPLAIN PLAN FOR
SELECT * FROM emp WHERE empno = 7369; 

然后:

SQL
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY); 

至少能看懂:

TEXT
TABLE ACCESS FULL
INDEX UNIQUE SCAN
INDEX RANGE SCAN
NESTED LOOPS
HASH JOIN 

不要求一开始精通 Cost、Cardinality 等所有细节,但要知道:

执行计划告诉你 Oracle 准备怎么访问数据。

14.3 索引什么时候可能有帮助

通常适合:

  • 选择性较高的查询条件;
  • 连接字段;
  • 经常作为过滤条件的字段;
  • 某些排序、范围查询。

但以下情况不一定适合:

  • 表很小;
  • 查询要返回大部分数据;
  • 字段取值种类极少;
  • 表更新非常频繁。

14.4 优化问题的思考顺序

建议形成固定排错框架:

TEXT
1. SQL 写法是否合理?
2. 是否查询了过多无用列和无用行?
3. JOIN 条件是否正确?
4. 是否产生了不必要的笛卡尔积?
5. 执行计划是什么?
6. 是否存在合理索引?
7. 统计信息是否合理?
8. 再考虑更深层参数与系统资源。 

15. 推荐实验体系

建议至少完成下面这些实验。

实验核心内容完成标准
实验 1Oracle 19c 环境会进入 SQL*Plus、SQL Developer
实验 2CDB/PDB会 SHOW CON_NAME、SHOW PDBS
实验 3Oracle 体系结构能解释 Instance、SGA、Database
实验 4Listener会查看状态并完成一次连接
实验 5DDL/DML能独立建表并维护数据
实验 6SELECT完成筛选、排序、函数
实验 7JOIN / GROUP BY完成多表和统计查询
实验 8子查询能完成嵌套查询
实验 9Constraint主键、外键、唯一、检查
实验 10View / Index / Sequence理解各对象作用
实验 11事务COMMIT、ROLLBACK、SAVEPOINT
实验 12并发双会话观察锁与阻塞
实验 13用户权限User、Privilege、Role
实验 14Tablespace创建、配额、Data File
实验 15PL/SQL匿名块、变量、异常
实验 16Procedure / Function编写数据库程序单元
实验 17Trigger完成一个简单触发器
实验 18STARTUPNOMOUNT / MOUNT / OPEN
实验 19ARCHIVELOG / RMAN理解归档与基础备份
实验 20Execution Plan对比全表扫描与索引访问

16. 一套完整的课程项目怎么做

如果课程要求期末项目,不建议只做:

几张表 + 几个 CRUD 页面。

更好的项目应该同时体现“管理”和“开发”。

可以选择:

  • 学生科研项目管理系统;
  • 实验室设备管理系统;
  • 图书管理系统;
  • 医院预约系统;
  • 宿舍报修系统;
  • 课程选课系统。

建议完整流程:

TEXT
需求分析
↓
ER 图
↓
关系模式
↓
规范化
↓
Oracle 建表
↓
约束设计
↓
初始化数据
↓
复杂 SQL
↓
View / Index / Sequence
↓
PL/SQL
↓
Procedure / Function / Trigger
↓
用户与角色
↓
表空间
↓
备份
↓
测试
↓
实验报告 

项目最低配置建议

至少包含:

  • 5~10 张表;
  • 明确的主外键关系;
  • UNIQUE / NOT NULL / CHECK;
  • 2~3 个视图;
  • 2~3 个有实际意义的索引;
  • 1 个 Sequence;
  • 2 个 Procedure;
  • 1 个 Function;
  • 1 个 Trigger;
  • 10 条以上复杂 SQL;
  • 2 个以上普通用户;
  • 至少 1 个 Role;
  • 一份权限设计说明;
  • 一次数据导出或备份;
  • 一份完整实验报告。

项目评分时最容易拉开差距的地方

一般不是“页面好不好看”,而是:

TEXT
数据库结构是否合理
约束是否严谨
SQL 是否有含金量
权限设计是否清晰
PL/SQL 是否真正解决业务问题
实验过程是否可复现
分析是否解释了原理 

17. 16 周学习安排

下面是一套适合完整学期的路线。

第 1 周:数据库基础

学习:

TEXT
Database
DBMS
关系模型
主键
外键
ER 模型 

达标:

能解释数据库为什么不只是 Excel 表格。

第 2 周:Oracle 环境

学习:

TEXT
Oracle 19c
SQL*Plus
SQL Developer
CDB
PDB 

实践:

SQL
SHOW USER;
SHOW CON_NAME;
SHOW PDBS; 

第 3 周:Oracle 体系结构

重点:

TEXT
Instance
SGA
PGA
Background Process
Database 

要求:

手画一次完整体系结构。

第 4 周:SQL 基础

学习:

TEXT
SELECT
WHERE
ORDER BY
函数
NULL 

建议:

每天至少写 10 条 SQL。

第 5 周:多表与分组

学习:

TEXT
JOIN
GROUP BY
HAVING 

目标:

不再依赖模板,能根据表关系自己写 JOIN。

第 6 周:子查询与复杂 SQL

学习:

TEXT
Subquery
EXISTS
集合运算
分析函数 

第 7 周:DDL 与数据库对象

学习:

TEXT
CREATE TABLE
ALTER TABLE
Constraint
View
Sequence
Index 

第 8 周:事务

学习:

TEXT
COMMIT
ROLLBACK
SAVEPOINT
Redo
Undo
Lock 

一定要做双会话并发实验。

第 9 周:用户与权限

学习:

TEXT
USER
SCHEMA
SYSTEM PRIVILEGE
OBJECT PRIVILEGE
ROLE 

第 10 周:存储结构

学习:

TEXT
Tablespace
Data File
Segment
Extent
Block 

第 11 周:Oracle 网络

学习:

TEXT
Listener
Service
Port
tnsnames 

目标:

能独立排查一次连接问题。

第 12 周:PL/SQL 基础

学习:

TEXT
Block
Variable
IF
LOOP
Cursor
Exception 

第 13 周:数据库程序对象

学习:

TEXT
Procedure
Function
Trigger
Package 

第 14 周:启动、日志与归档

学习:

TEXT
NOMOUNT
MOUNT
OPEN
Redo
Checkpoint
ARCHIVELOG 

第 15 周:备份恢复与性能

学习:

TEXT
RMAN
Backup
Restore
Recover
Execution Plan
Index 

第 16 周:综合项目与复习

最终任务:

从零搭建一个小型业务数据库,并完成基本开发、管理、权限、测试与说明文档。


18. 每个知识点应该学到什么深度

建议把每个知识点的学习分成四级:

TEXT
知道
↓
理解
↓
会做
↓
会解释与排错 

例如 Listener:

只“知道”

知道它叫监听器。

“理解”

知道它负责接收客户端连接请求。

“会做”

会:

BASH
lsnrctl status 

“会排错”

连接失败时能够判断:

TEXT
网络?
端口?
Listener?
Service?
PDB?
用户名密码? 

只有达到最后一级,才算真正掌握。

再例如 COMMIT:

TEXT
知道
→ 会写 COMMIT

理解
→ 知道事务被提交

会做
→ 能观察提交与回滚效果

会解释
→ 能解释为什么 COMMIT 不要求所有 Dirty Buffer 立即写入 Data File 

19. 如何做笔记与实验报告

数据库课程最容易出现一种低质量实验报告:

TEXT
第一步点击……
第二步点击……
第三步截图…… 

这种报告看起来很长,但学习价值不高。

高质量实验报告应该包含以下结构。

19.1 实验目的

回答:

本实验要学习、验证或理解什么?

例如:

理解 Oracle 启动三个阶段,并观察不同状态下数据库对象的可访问程度。

19.2 实验原理

先讲原理,再做操作。

例如 STARTUP 实验应先解释:

TEXT
NOMOUNT
MOUNT
OPEN 

分别做了什么。

19.3 实验环境

建议统一记录:

TEXT
Oracle Database 19c
SQL*Plus
SQL Developer
操作系统
CDB Name
PDB Name
Service Name 

19.4 实验步骤

建议使用:

TEXT
命令
+
简短说明
+
关键结果截图 

不要每一步都截图。

截图应该优先保留:

  • 关键命令;
  • 关键结果;
  • 关键错误;
  • 排错过程;
  • 最终验证结果。

19.5 结果分析

这是实验报告最重要的部分。

例如:

在 NOMOUNT 状态下,Instance 已建立,但 Control File 尚未打开,因此 Oracle 尚未识别完整数据库结构,普通业务数据不可访问。

这种解释比单纯放截图更有价值。

19.6 问题与解决

建议每次实验都记录:

TEXT
错误现象
ORA 编号
初步判断
排查过程
根本原因
解决方案
最终验证 

长期积累后,这会形成你自己的 Oracle 故障库。


20. 常见错误与排错方法

ORA-00942:表或视图不存在

先检查:

SQL
SHOW USER; 

再:

SQL
SELECT owner, table_name
FROM all_tables
WHERE table_name = 'EMP'; 

常见原因:

  • 当前用户没有该表;
  • 表属于其他 Schema;
  • 没有对象权限;
  • 对象名称写错。

ORA-01017

通常优先检查:

TEXT
用户名
密码
认证方式
连接的 Service 

ORA-12154

优先考虑:

TEXT
连接标识符无法解析
TNS Alias 配置
tnsnames.ora 

ORA-12514

重点检查:

TEXT
Listener 是否知道对应 Service
Service 是否已经注册
PDB 是否正常 

ORA-12541

优先检查:

TEXT
Listener 是否启动
Host 是否正确
Port 是否正确 

有 CREATE TABLE 权限但仍建不了表

检查:

TEXT
CREATE TABLE 权限
+
Tablespace Quota 

例如:

SQL
ALTER USER student
QUOTA 100M ON users; 

CONN 提示不是内部或外部命令

如果你看到:

TEXT
C:\Users\... 

说明你在 Windows CMD,不是在 SQL*Plus。

先进入:

BASH
sqlplus ... 

看到:

TEXT
SQL> 

之后才能使用:

SQL
CONN ... 

21. 推荐学习资源

学习原则:

教材负责建立课程主线,Oracle 官方文档负责权威核对和深入扩展。

不要一开始试图把 Oracle 官方文档从第一页读到最后一页。

21.1 Oracle Database 19c 官方入口

https://docs.oracle.com/en/database/oracle/oracle-database/19/

适合:

  • 查官方文档;
  • 了解 19c 功能分类;
  • 跳转 SQL、管理、PL/SQL、备份恢复等手册。

21.2 Database Concepts

https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/

这是理解 Oracle 原理最重要的官方资料之一。

重点适合查:

TEXT
Architecture
Memory
Process
Storage
Transaction
SQL Processing
Data Dictionary 

体系结构有疑问时优先看这里。

21.3 SQL Language Reference

https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/

适合查:

TEXT
SELECT
CREATE TABLE
ALTER TABLE
MERGE
函数
条件
查询语法
DDL / DML 

正确使用方式:

写 SQL 时遇到具体语法或行为问题,再查官方定义。

21.4 PL/SQL Language Reference

https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/

适合系统学习:

TEXT
PL/SQL Block
变量
流程控制
Cursor
Exception
Procedure
Function
Trigger
Package 

21.5 Database Administrator's Guide

https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/

适合:

TEXT
数据库管理
实例管理
用户
存储
数据库维护
配置 

21.6 Net Services Administrator's Guide

https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/

遇到:

TEXT
Listener
Service Name
TNS
连接故障 

优先参考。

21.7 Backup and Recovery User's Guide

https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/

适合:

TEXT
RMAN
Backup
Restore
Recover
Flashback 

21.8 SQL Developer

SQL Developer 适合:

  • 建立连接;
  • 浏览 Schema;
  • 执行 SQL;
  • 执行 SQL Script;
  • 查看表、视图、索引;
  • 编辑和调试 PL/SQL;
  • 导入导出数据。

学习阶段建议:

TEXT
SQL*Plus
+
SQL Developer 

两个都用。

原因:

SQL Developer 提高效率,SQL*Plus 帮你真正理解命令行环境和 Oracle 操作逻辑。

21.9 在线 Oracle SQL 环境

Oracle 官方文档入口提供在线运行 SQL 的方式,可以用来:

  • 临时练 SQL;
  • 快速验证语法;
  • 没有本地环境时完成基础查询练习。

但以下实验仍建议使用真正 Oracle 19c:

TEXT
STARTUP
Listener
Tablespace
CDB/PDB 管理
RMAN
ARCHIVELOG 

21.10 数据库通用理论资源

如果想把 Oracle 学习和数据库原理结合起来,可参考:

  • 《Database System Concepts》
  • 《Database Management Systems》
  • CMU 15-445 Database Systems

这类资源主要用于理解:

TEXT
B+ Tree
Buffer Manager
Transaction
WAL
Concurrency Control
Recovery
Query Optimizer 

注意:

通用数据库原理和 Oracle 具体命令是两个层次,不要混为一谈。


22. 考试与实验复习方法

建议把所有知识分成三类。

第一类:必须画出来

例如:

TEXT
Oracle 体系结构
STARTUP 三阶段
连接四段链路
逻辑存储结构
Redo 数据流 

这种知识最适合手画。

第二类:必须敲出来

例如:

TEXT
CREATE TABLE
SELECT
JOIN
GROUP BY
GRANT
CREATE USER
PL/SQL 

SQL 和命令靠“看”很难真正掌握。

第三类:必须讲出来

例如:

  • COMMIT 为什么不等于数据块立即落盘?
  • Redo 和 Undo 有什么区别?
  • Instance 和 Database 有什么区别?
  • Listener 和 Server Process 分别做什么?
  • Tablespace 和 Data File 有什么区别?
  • 为什么用户有 CREATE TABLE 权限仍可能建表失败?

如果能脱离书本用自己的话讲清楚,说明真正掌握。

推荐复习方法

每章使用:

TEXT
10 分钟画知识框架
20 分钟复述原理
30 分钟敲命令
30 分钟做题
10 分钟整理错误 

不要把全部时间花在重新抄笔记。


23. 最终能力验收清单

完成课程后,可以逐项自测。

A. 数据库理论

  • 能解释 Database 与 DBMS
  • 理解关系模型
  • 会设计主键和外键
  • 理解完整性约束
  • 会画 ER 图
  • 理解 1NF、2NF、3NF

B. Oracle 体系结构

  • 能解释 Instance
  • 能解释 Database
  • 能画 SGA
  • 能区分 SGA / PGA
  • 能解释 DBWn
  • 能解释 LGWR
  • 能解释 CKPT
  • 能解释 SMON / PMON
  • 能解释 ARCn
  • 能解释 Control File
  • 能解释 Data File
  • 能解释 Online Redo Log

C. 启动与 CDB/PDB

  • 会 STARTUP
  • 会 SHUTDOWN IMMEDIATE
  • 理解 NOMOUNT
  • 理解 MOUNT
  • 理解 OPEN
  • 会 SHOW CON_NAME
  • 会 SHOW PDBS
  • 会切换 Container
  • 理解 CDB$ROOT
  • 理解 PDB$SEED
  • 理解业务 PDB

D. SQL

  • 会 DDL
  • 会 DML
  • 会 WHERE
  • 会 ORDER BY
  • 会 JOIN
  • 会 GROUP BY
  • 会 HAVING
  • 会 Subquery
  • 会集合操作
  • 会常用函数
  • 会日期处理
  • 会 NULL 处理
  • 会基础分析函数

E. 数据库对象

  • Table
  • Constraint
  • Index
  • View
  • Sequence
  • Synonym

F. 事务

  • COMMIT
  • ROLLBACK
  • SAVEPOINT
  • Redo
  • Undo
  • Lock
  • Read Consistency

G. 用户权限

  • CREATE USER
  • GRANT
  • REVOKE
  • System Privilege
  • Object Privilege
  • Role
  • Tablespace Quota

H. 存储

  • Tablespace
  • Data File
  • Segment
  • Extent
  • Block

I. 网络

  • Listener
  • Service
  • Port 1521
  • SQL*Plus 网络连接
  • lsnrctl status
  • 能基本判断 ORA-12154
  • 能基本判断 ORA-12514
  • 能基本判断 ORA-12541

J. PL/SQL

  • 匿名块
  • 变量
  • %TYPE
  • %ROWTYPE
  • IF
  • LOOP
  • Cursor
  • Exception
  • Procedure
  • Function
  • Trigger

K. 备份恢复

  • 理解 ARCHIVELOG
  • 理解 Archived Redo Log
  • 知道 RMAN
  • 理解 Backup
  • 理解 Restore
  • 理解 Recover

L. 性能

  • 理解 Index
  • 能看基础 Execution Plan
  • 知道 Full Table Scan
  • 知道 Index Scan
  • 知道 Optimizer
  • 不会看到慢 SQL 就机械加索引

24. 后续进阶方向

学完这门课后,可以向三个方向继续。

方向一:数据库开发 / 后端开发

继续学习:

TEXT
高级 SQL
PL/SQL
JDBC
Spring Boot + Oracle
连接池
事务管理
ORM
数据库设计 

适合:

Java 后端、企业应用开发。

方向二:DBA / 数据库运维

继续学习:

TEXT
RMAN
Data Guard
RAC
ASM
AWR
ASH
SQL Tuning
Performance Tuning
Oracle Security 

适合:

DBA、运维、基础设施。

方向三:数据库系统原理

继续学习:

TEXT
B+ Tree
Buffer Manager
Transaction
MVCC
WAL
Recovery
Query Optimizer
Concurrency Control
Distributed Database 

这一方向会让你从:

会使用 Oracle

进一步走向:

理解数据库系统为什么这样设计。


25. 最推荐的学习闭环

数据库课程最忌讳两种方式。

第一种:

只背 SQL,不理解 Oracle 背后发生了什么。

第二种:

只背 SGA、PGA、DBWn、LGWR 的定义,却从不实际操作。

更有效的方式是:

TEXT
学一个概念
    ↓
画一张图
    ↓
敲一次命令
    ↓
制造一个错误
    ↓
自己排查
    ↓
再用自己的话解释 

例如学习 Listener:

TEXT
理解 Listener
↓
画连接链路
↓
执行 lsnrctl status
↓
观察 Service
↓
尝试连接
↓
分析连接失败原因
↓
总结排错顺序 

学习事务:

TEXT
理解 COMMIT / ROLLBACK
↓
开两个 SQL*Plus 会话
↓
修改同一行
↓
观察锁
↓
COMMIT
↓
观察另一个会话变化
↓
再解释 Redo / Undo 

学习 STARTUP:

TEXT
理论理解三个阶段
↓
STARTUP NOMOUNT
↓
观察状态
↓
MOUNT
↓
观察状态
↓
OPEN
↓
比较各阶段能做什么 

这种学习方式比单纯背课件牢固得多。


26. 一份建议长期维护的个人知识库结构

如果你有个人博客或 Markdown 笔记库,可以按下面结构维护:

TEXT
Oracle19c/
│
├── 01_环境与安装
│   ├── Oracle19c安装.md
│   ├── SQLPlus使用.md
│   └── SQLDeveloper连接.md
│
├── 02_体系结构
│   ├── Instance与Database.md
│   ├── SGA与PGA.md
│   ├── 后台进程.md
│   └── STARTUP三阶段.md
│
├── 03_SQL
│   ├── SELECT.md
│   ├── JOIN.md
│   ├── GROUP_BY.md
│   ├── 子查询.md
│   └── 分析函数.md
│
├── 04_数据库对象
│   ├── Table.md
│   ├── Constraint.md
│   ├── View.md
│   ├── Index.md
│   └── Sequence.md
│
├── 05_事务
│   ├── COMMIT与ROLLBACK.md
│   ├── Redo.md
│   ├── Undo.md
│   └── Lock.md
│
├── 06_安全
│   ├── User.md
│   ├── Privilege.md
│   └── Role.md
│
├── 07_存储
│   ├── Tablespace.md
│   └── DataFile.md
│
├── 08_网络
│   ├── Listener.md
│   └── Oracle连接排错.md
│
├── 09_PLSQL
│   ├── 基础块.md
│   ├── Cursor.md
│   ├── Procedure.md
│   └── Trigger.md
│
├── 10_备份恢复
│   ├── ARCHIVELOG.md
│   └── RMAN.md
│
└── 11_故障记录
    ├── ORA-00942.md
    ├── ORA-12154.md
    ├── ORA-12514.md
    └── ORA-12541.md 

这样这门课结束以后,你留下的不是零散实验截图,而是一套可以长期复用的 Oracle 19c 知识体系。


27. 最终学习标准

如果学完这门课,你能独立完成下面这一整套动作,就说明已经达到比较扎实的水平:

TEXT
拿到一台 Oracle 19c 环境
↓
确认数据库版本与当前用户
↓
判断当前 CDB/PDB
↓
确认 Listener 与 Service
↓
连接普通用户
↓
创建表空间与用户
↓
分配权限与配额
↓
设计并创建业务表
↓
建立主外键与约束
↓
导入测试数据
↓
完成复杂 SQL 查询
↓
创建 View / Index / Sequence
↓
完成 Procedure / Function / Trigger
↓
理解并演示事务与锁
↓
解释 Redo / Undo
↓
解释 STARTUP 三阶段
↓
完成基础备份
↓
查看执行计划
↓
能够处理常见 ORA 错误
↓
写出一份结构完整、原理清晰的实验报告 

最后可以用一句话概括这门课真正的学习目标:

既能站在开发者角度正确地设计和访问数据,也能站在数据库管理员角度理解 Oracle 19c 是怎样运行、存储、保护、连接和恢复这些数据的。

达到这个标准,《数据库管理与开发》就不只是“学过一门课”,而是为后续的数据库开发、Java 后端、数据工程、数据库管理员以及更深入的数据库系统学习打下了真正可迁移的基础。

读者互动

0 次表情反馈 · 0 条评论

登录后可以发表评论、给评论点赞。去登录
还没有评论。