数据库管理与开发(Oracle 19c)完整学习指南
用于自己学习数据库管理与开发的指南
适用对象:正在学习《数据库管理与开发》《Oracle 数据库应用》《Oracle 19c 数据库管理》等课程的本科生,以及希望系统掌握 Oracle 19c 的初学者。
建议环境:Oracle Database 19c + SQL*Plus + Oracle SQL Developer。
核心目标:不仅会写 SQL,还要理解数据库的体系结构、存储、用户权限、事务、网络连接、PL/SQL、备份恢复和基础性能优化,最终能够独立完成一套 Oracle 数据库的设计、部署、开发、管理、排错与实验报告。
1. 这门课到底在学什么
很多同学会把“数据库管理与开发”理解成“会写 SELECT、INSERT、UPDATE、DELETE 就行”。这远远不够。
一门完整的数据库管理与开发课程,实际上有两条主线:
数据库开发
+
数据库管理 数据库开发主要包括:
数据建模
SQL
数据库对象
PL/SQL
事务
应用程序访问数据库 数据库管理主要包括:
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:会管理
你能够解释并实际操作:
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. 整门课的知识地图
建议把整门课记成下面这棵树:
数据库管理与开发
│
├── 数据库基础理论
│ ├── 数据库 / 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 基础
先搞清楚:
Database
DBMS
RDBMS
Oracle Database
Schema
Table
Row
Column Oracle Database 是数据库管理系统产品,不是“某一张表”或“某一个数据文件”。
4.1 关系模型
需要理解:
- 关系可以理解为二维表;
- 元组可以理解为行;
- 属性可以理解为列;
- 域表示属性允许的值集合;
- 候选键;
- 主键;
- 外键。
例如:
STUDENT
-------------------------------
student_id | name | class_id 其中 student_id 可以作为主键。
4.2 三类完整性
实体完整性
主键:
不能重复
不能为 NULL 参照完整性
外键值必须存在于被引用表,或者在约束允许时为 NULL。
用户定义完整性
例如:
age >= 0
score BETWEEN 0 AND 100 4.3 ER 模型
应该能够把业务描述转成:
实体
属性
联系 例如学生选课系统:
学生
课程
选课 最终转成:
STUDENT
COURSE
SC 至少独立完成一个:
- 学生选课系统;
- 图书管理系统;
- 实验室设备管理系统;
- 医院预约系统。
4.4 规范化
至少理解:
1NF
2NF
3NF 重点不是机械背定义,而是理解:
数据冗余
插入异常
删除异常
更新异常 以及为什么拆表能改善这些问题。
5. 第二阶段:Oracle 19c 体系结构
这是整门 Oracle 课程的核心。
5.1 两个必须记住的公式
Oracle Database Server
=
Instance
+
Database Instance
=
SGA
+
Background Processes 5.2 SGA
至少掌握:
SGA
├── Shared Pool
│ ├── Library Cache
│ └── Data Dictionary Cache
├── Database Buffer Cache
├── Redo Log Buffer
├── Large Pool
└── Java Pool 重点理解:
Shared Pool
→ SQL、执行计划、元数据等共享内容
Buffer Cache
→ 缓存数据块,减少磁盘访问
Redo Log Buffer
→ 暂存 Redo 5.3 PGA
最重要的区别:
SGA → 共享
PGA → 进程私有 PGA 可能涉及:
- 排序;
- Hash Join;
- 私有 SQL 区;
- 会话运行状态。
5.4 后台进程
| 进程 | 核心职责 |
|---|---|
| DBWn | 把脏数据块写入 Data File |
| LGWR | 把 Redo 写入 Online Redo Log |
| CKPT | 协调检查点 |
| SMON | 实例恢复等系统维护 |
| PMON | 清理异常进程相关资源 |
| ARCn | 归档 Redo |
最重要的一组对比:
DBWn
Buffer Cache → Data File
LGWR
Redo Log Buffer → Online Redo Log 5.5 三类核心物理文件
Data File
→ 数据是什么
Control File
→ 数据库由什么组成、处于什么状态
Online Redo Log
→ 数据发生了什么变化 5.6 Oracle 启动
必须掌握:
NOMOUNT
↓
MOUNT
↓
OPEN NOMOUNT
读取参数文件
创建 SGA
启动后台进程
建立 Instance MOUNT
打开 Control File
识别数据库结构 OPEN
打开 Data File
打开 Online Redo Log
正常提供服务 建议能手画:
Parameter File
↓
Instance
↓
Control File
↓
Database
↓
OPEN 5.7 Oracle 19c CDB/PDB
至少理解:
CDB
├── CDB$ROOT
├── PDB$SEED
└── PDB 并会:
SHOW CON_NAME;
SHOW PDBS; 切换 PDB:
ALTER SESSION SET CONTAINER = PDB; 本阶段达标标准
不看课件,能够自己解释:
- Oracle 从
STARTUP到OPEN发生了什么; - 用户执行 SELECT 时数据怎么走;
- UPDATE + COMMIT 时数据和 Redo 分别怎么走。
6. 第三阶段:SQL 查询能力
SQL 是开发能力的主干。
建议把 SQL 分成:
DDL
DML
DQL
TCL
DCL 6.1 DDL
重点:
CREATE
ALTER
DROP
TRUNCATE 例如:
CREATE TABLE student (
student_id NUMBER PRIMARY KEY,
name VARCHAR2(50),
age NUMBER
); 必须理解:
DROP
TRUNCATE
DELETE 三者的差异。
6.2 DML
掌握:
INSERT
UPDATE
DELETE
MERGE 示例:
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 单表查询
必须熟练:
SELECT
FROM
WHERE
ORDER BY
DISTINCT 条件:
=
<>
>
<
>=
<=
BETWEEN
IN
LIKE
IS NULL
AND
OR
NOT 6.4 NULL
错误:
WHERE comm = NULL 正确:
WHERE comm IS NULL 需要理解:
NULL 表示未知,不等同于 0。
6.5 常用函数
字符串:
UPPER
LOWER
SUBSTR
LENGTH
TRIM 数值:
ROUND
TRUNC
MOD 日期:
SYSDATE
ADD_MONTHS
MONTHS_BETWEEN
LAST_DAY 转换:
TO_CHAR
TO_DATE
TO_NUMBER NULL:
NVL
NVL2
COALESCE 6.6 分组查询
熟练使用:
GROUP BY
HAVING 例如:
SELECT deptno, AVG(sal)
FROM emp
GROUP BY deptno; 理解:
WHERE → 分组前过滤
HAVING → 分组后过滤 6.7 多表连接
重点掌握:
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL OUTER JOIN
SELF JOIN
CROSS JOIN 例如:
SELECT e.ename, d.dname
FROM emp e
JOIN dept d
ON e.deptno = d.deptno; 学习目标不是背语法,而是能根据表关系判断连接条件。
6.8 子查询
至少会:
单行子查询
多行子查询
相关子查询 例如:
SELECT ename, sal
FROM emp
WHERE sal > (
SELECT AVG(sal)
FROM emp
); 进一步掌握:
IN
ANY
ALL
EXISTS 6.9 集合运算
理解:
UNION
UNION ALL
INTERSECT
MINUS 6.10 分析函数
如果课程允许,强烈建议学习:
ROW_NUMBER
RANK
DENSE_RANK
SUM() OVER()
AVG() OVER()
LAG
LEAD 例如:
SELECT
ename,
sal,
RANK() OVER (ORDER BY sal DESC) AS sal_rank
FROM emp; SQL 达标标准
给你 4~6 张相关表,能够独立解决:
- 单表筛选;
- 分组统计;
- 多表连接;
- 子查询;
- Top-N;
- 排名;
- 去重;
- 条件统计;
- 日期处理。
7. 第四阶段:数据库对象与数据完整性
Table
会使用:
CREATE TABLE
ALTER TABLE
DROP TABLE Constraint
必须掌握:
PRIMARY KEY
FOREIGN KEY
UNIQUE
NOT NULL
CHECK 例如:
CREATE TABLE student (
student_id NUMBER PRIMARY KEY,
name VARCHAR2(30) NOT NULL,
age NUMBER CHECK(age >= 0)
); 理解约束的本质:
让错误数据进不了数据库。
View
理解:
简化复杂查询
限制数据暴露
逻辑抽象 Index
至少理解:
B-tree Index
Unique Index
Composite Index 最重要:
索引不是越多越好。
Sequence
例如:
CREATE SEQUENCE seq_student
START WITH 1
INCREMENT BY 1; 使用:
seq_student.NEXTVAL Synonym
理解 Private Synonym 与 Public Synonym,知道它主要用于对象名简化和访问透明性。
8. 第五阶段:事务、Redo、Undo 与并发
8.1 事务
转账:
A - 100
B + 100 不能只成功一半。
8.2 COMMIT
COMMIT; 关键理解:
COMMIT 的核心不是要求 DBWn 立即把所有脏块写入 Data File,而是保证相关 Redo 的持久化。
8.3 ROLLBACK
ROLLBACK; 用于撤销未提交事务。
8.4 SAVEPOINT
SAVEPOINT s1;
ROLLBACK TO s1; 8.5 Redo 与 Undo
Redo
→ Recovery
Undo
→ Rollback + Read Consistency 8.6 锁与并发
建议开两个 SQL*Plus 会话做实验。
会话 A:
UPDATE emp
SET sal = sal + 100
WHERE empno = 7369; 不要提交。
会话 B 再修改同一行,观察阻塞。
这种实验比单纯背“锁”的定义更有效。
9. 第六阶段:用户、权限与安全
User 与 Schema
例如:
SCOTT.EMP 表示:
SCOTT Schema 中的 EMP 表 创建用户
CREATE USER student
IDENTIFIED BY password; 系统权限
GRANT CREATE SESSION TO student;
GRANT CREATE TABLE TO student; 对象权限
GRANT SELECT ON scott.emp TO student; Role
理解 Role 是:
权限集合。
SYS 与 SYSTEM
不要日常使用 SYS 创建普通业务表。实验中应建立普通用户完成开发。
10. 第七阶段:表空间与存储管理
逻辑存储结构:
Tablespace
↓
Segment
↓
Extent
↓
Block 物理结构:
Data File 核心理解:
Tablespace → 逻辑概念
Data File → 物理文件 创建表示例:
CREATE TABLESPACE app_data
DATAFILE 'app_data01.dbf'
SIZE 100M
AUTOEXTEND ON; 实际路径按本机环境调整。
用户配额:
ALTER USER student
QUOTA 100M ON users; 必须理解:
用户有
CREATE TABLE权限,并不意味着一定能成功建表;还需要目标表空间可用且有相应配额。
11. 第八阶段:Oracle 网络连接
把连接记成:
Client
↓
Listener
↓
Service
↓
Server Process
↓
Instance / PDB 必须知道:
Host
Port
Service Name
Username
Password 常见监听端口:
1521 Listener 常用命令:
lsnrctl status
lsnrctl start
lsnrctl stop SQL*Plus 网络连接示例:
sqlplus scott/tiger@localhost:1521/PDB 四段排错思路:
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 上增加了变量、分支、循环、异常、过程和函数。
基本块
DECLARE
v_name VARCHAR2(20);
BEGIN
v_name := 'Oracle';
DBMS_OUTPUT.PUT_LINE(v_name);
END;
/ 掌握:
DECLARE
BEGIN
EXCEPTION
END 变量
重点:
普通变量
%TYPE
%ROWTYPE 例如:
v_sal emp.sal%TYPE; 分支与循环
IF
ELSIF
ELSE
LOOP
WHILE LOOP
FOR LOOP Cursor
理解:
SQL 擅长处理集合,Cursor 用于逐行处理结果集。
掌握:
Implicit Cursor
Explicit Cursor Exception
至少掌握:
NO_DATA_FOUND
TOO_MANY_ROWS
OTHERS Procedure / Function / Trigger
要求最终能够:
- 编写带
IN / OUT参数的存储过程; - 编写返回值的函数;
- 编写简单审计或自动处理触发器;
- 理解触发器不能滥用。
PL/SQL 达标标准
能够独立实现:
输入部门号,统计部门人数、平均工资和最高工资。
能够写:
一个插入业务数据的存储过程。
能够写:
一个记录修改日志的简单触发器。
13. 第十阶段:备份、恢复与归档
本科课程通常不要求达到专业 DBA 的深度,但备份恢复的基本思想必须掌握。
13.1 为什么需要 Backup
一定要先明确:
Redo 不是 Backup,Redo 不能替代 Backup。
一个完整恢复体系通常涉及:
Backup
+
Redo / Archived Redo
+
Recovery 如果没有备份,仅靠日志不能解决所有介质损坏问题。
13.2 Online Redo Log 与 ARCHIVELOG
在线日志会循环使用:
redo01
→ redo02
→ redo03
→ redo01 如果数据库处于 ARCHIVELOG 模式,旧的在线重做日志在满足条件后可以被归档保存。
Online Redo Log
↓
ARCn
↓
Archived Redo Log 这使数据库具备更强的恢复能力。
13.3 RMAN
RMAN 是 Oracle 官方核心备份恢复工具:
Recovery Manager 至少应知道:
BACKUP
RESTORE
RECOVER 其中:
BACKUP
→ 制作备份
RESTORE
→ 把备份文件还原回来
RECOVER
→ 应用 Redo / Archive,把数据库推进到目标状态 建议实验中至少完成:
- 进入 RMAN;
- 查看配置;
- 做一次基础备份;
- 查看备份列表;
- 理解 Restore 与 Recover 的区别。
如果课程没有要求完整恢复操作,也至少要把原理讲明白。
14. 第十一阶段:性能优化与执行计划
这部分不要学成:
SQL 慢了 → 加索引。
真正的性能优化必须先看执行路径。
14.1 Optimizer
Oracle 会利用优化器选择执行计划。
SQL
↓
解析
↓
Optimizer
↓
Execution Plan 需要理解:
同一条 SQL 在不同数据量、统计信息、索引条件下,执行计划可能不同。
14.2 Execution Plan
建议会:
EXPLAIN PLAN FOR
SELECT * FROM emp WHERE empno = 7369; 然后:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY); 至少能看懂:
TABLE ACCESS FULL
INDEX UNIQUE SCAN
INDEX RANGE SCAN
NESTED LOOPS
HASH JOIN 不要求一开始精通 Cost、Cardinality 等所有细节,但要知道:
执行计划告诉你 Oracle 准备怎么访问数据。
14.3 索引什么时候可能有帮助
通常适合:
- 选择性较高的查询条件;
- 连接字段;
- 经常作为过滤条件的字段;
- 某些排序、范围查询。
但以下情况不一定适合:
- 表很小;
- 查询要返回大部分数据;
- 字段取值种类极少;
- 表更新非常频繁。
14.4 优化问题的思考顺序
建议形成固定排错框架:
1. SQL 写法是否合理?
2. 是否查询了过多无用列和无用行?
3. JOIN 条件是否正确?
4. 是否产生了不必要的笛卡尔积?
5. 执行计划是什么?
6. 是否存在合理索引?
7. 统计信息是否合理?
8. 再考虑更深层参数与系统资源。 15. 推荐实验体系
建议至少完成下面这些实验。
| 实验 | 核心内容 | 完成标准 |
|---|---|---|
| 实验 1 | Oracle 19c 环境 | 会进入 SQL*Plus、SQL Developer |
| 实验 2 | CDB/PDB | 会 SHOW CON_NAME、SHOW PDBS |
| 实验 3 | Oracle 体系结构 | 能解释 Instance、SGA、Database |
| 实验 4 | Listener | 会查看状态并完成一次连接 |
| 实验 5 | DDL/DML | 能独立建表并维护数据 |
| 实验 6 | SELECT | 完成筛选、排序、函数 |
| 实验 7 | JOIN / GROUP BY | 完成多表和统计查询 |
| 实验 8 | 子查询 | 能完成嵌套查询 |
| 实验 9 | Constraint | 主键、外键、唯一、检查 |
| 实验 10 | View / Index / Sequence | 理解各对象作用 |
| 实验 11 | 事务 | COMMIT、ROLLBACK、SAVEPOINT |
| 实验 12 | 并发 | 双会话观察锁与阻塞 |
| 实验 13 | 用户权限 | User、Privilege、Role |
| 实验 14 | Tablespace | 创建、配额、Data File |
| 实验 15 | PL/SQL | 匿名块、变量、异常 |
| 实验 16 | Procedure / Function | 编写数据库程序单元 |
| 实验 17 | Trigger | 完成一个简单触发器 |
| 实验 18 | STARTUP | NOMOUNT / MOUNT / OPEN |
| 实验 19 | ARCHIVELOG / RMAN | 理解归档与基础备份 |
| 实验 20 | Execution Plan | 对比全表扫描与索引访问 |
16. 一套完整的课程项目怎么做
如果课程要求期末项目,不建议只做:
几张表 + 几个 CRUD 页面。
更好的项目应该同时体现“管理”和“开发”。
可以选择:
- 学生科研项目管理系统;
- 实验室设备管理系统;
- 图书管理系统;
- 医院预约系统;
- 宿舍报修系统;
- 课程选课系统。
建议完整流程:
需求分析
↓
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;
- 一份权限设计说明;
- 一次数据导出或备份;
- 一份完整实验报告。
项目评分时最容易拉开差距的地方
一般不是“页面好不好看”,而是:
数据库结构是否合理
约束是否严谨
SQL 是否有含金量
权限设计是否清晰
PL/SQL 是否真正解决业务问题
实验过程是否可复现
分析是否解释了原理 17. 16 周学习安排
下面是一套适合完整学期的路线。
第 1 周:数据库基础
学习:
Database
DBMS
关系模型
主键
外键
ER 模型 达标:
能解释数据库为什么不只是 Excel 表格。
第 2 周:Oracle 环境
学习:
Oracle 19c
SQL*Plus
SQL Developer
CDB
PDB 实践:
SHOW USER;
SHOW CON_NAME;
SHOW PDBS; 第 3 周:Oracle 体系结构
重点:
Instance
SGA
PGA
Background Process
Database 要求:
手画一次完整体系结构。
第 4 周:SQL 基础
学习:
SELECT
WHERE
ORDER BY
函数
NULL 建议:
每天至少写 10 条 SQL。
第 5 周:多表与分组
学习:
JOIN
GROUP BY
HAVING 目标:
不再依赖模板,能根据表关系自己写 JOIN。
第 6 周:子查询与复杂 SQL
学习:
Subquery
EXISTS
集合运算
分析函数 第 7 周:DDL 与数据库对象
学习:
CREATE TABLE
ALTER TABLE
Constraint
View
Sequence
Index 第 8 周:事务
学习:
COMMIT
ROLLBACK
SAVEPOINT
Redo
Undo
Lock 一定要做双会话并发实验。
第 9 周:用户与权限
学习:
USER
SCHEMA
SYSTEM PRIVILEGE
OBJECT PRIVILEGE
ROLE 第 10 周:存储结构
学习:
Tablespace
Data File
Segment
Extent
Block 第 11 周:Oracle 网络
学习:
Listener
Service
Port
tnsnames 目标:
能独立排查一次连接问题。
第 12 周:PL/SQL 基础
学习:
Block
Variable
IF
LOOP
Cursor
Exception 第 13 周:数据库程序对象
学习:
Procedure
Function
Trigger
Package 第 14 周:启动、日志与归档
学习:
NOMOUNT
MOUNT
OPEN
Redo
Checkpoint
ARCHIVELOG 第 15 周:备份恢复与性能
学习:
RMAN
Backup
Restore
Recover
Execution Plan
Index 第 16 周:综合项目与复习
最终任务:
从零搭建一个小型业务数据库,并完成基本开发、管理、权限、测试与说明文档。
18. 每个知识点应该学到什么深度
建议把每个知识点的学习分成四级:
知道
↓
理解
↓
会做
↓
会解释与排错 例如 Listener:
只“知道”
知道它叫监听器。
“理解”
知道它负责接收客户端连接请求。
“会做”
会:
lsnrctl status “会排错”
连接失败时能够判断:
网络?
端口?
Listener?
Service?
PDB?
用户名密码? 只有达到最后一级,才算真正掌握。
再例如 COMMIT:
知道
→ 会写 COMMIT
理解
→ 知道事务被提交
会做
→ 能观察提交与回滚效果
会解释
→ 能解释为什么 COMMIT 不要求所有 Dirty Buffer 立即写入 Data File 19. 如何做笔记与实验报告
数据库课程最容易出现一种低质量实验报告:
第一步点击……
第二步点击……
第三步截图…… 这种报告看起来很长,但学习价值不高。
高质量实验报告应该包含以下结构。
19.1 实验目的
回答:
本实验要学习、验证或理解什么?
例如:
理解 Oracle 启动三个阶段,并观察不同状态下数据库对象的可访问程度。
19.2 实验原理
先讲原理,再做操作。
例如 STARTUP 实验应先解释:
NOMOUNT
MOUNT
OPEN 分别做了什么。
19.3 实验环境
建议统一记录:
Oracle Database 19c
SQL*Plus
SQL Developer
操作系统
CDB Name
PDB Name
Service Name 19.4 实验步骤
建议使用:
命令
+
简短说明
+
关键结果截图 不要每一步都截图。
截图应该优先保留:
- 关键命令;
- 关键结果;
- 关键错误;
- 排错过程;
- 最终验证结果。
19.5 结果分析
这是实验报告最重要的部分。
例如:
在 NOMOUNT 状态下,Instance 已建立,但 Control File 尚未打开,因此 Oracle 尚未识别完整数据库结构,普通业务数据不可访问。
这种解释比单纯放截图更有价值。
19.6 问题与解决
建议每次实验都记录:
错误现象
ORA 编号
初步判断
排查过程
根本原因
解决方案
最终验证 长期积累后,这会形成你自己的 Oracle 故障库。
20. 常见错误与排错方法
ORA-00942:表或视图不存在
先检查:
SHOW USER; 再:
SELECT owner, table_name
FROM all_tables
WHERE table_name = 'EMP'; 常见原因:
- 当前用户没有该表;
- 表属于其他 Schema;
- 没有对象权限;
- 对象名称写错。
ORA-01017
通常优先检查:
用户名
密码
认证方式
连接的 Service ORA-12154
优先考虑:
连接标识符无法解析
TNS Alias 配置
tnsnames.ora ORA-12514
重点检查:
Listener 是否知道对应 Service
Service 是否已经注册
PDB 是否正常 ORA-12541
优先检查:
Listener 是否启动
Host 是否正确
Port 是否正确 有 CREATE TABLE 权限但仍建不了表
检查:
CREATE TABLE 权限
+
Tablespace Quota 例如:
ALTER USER student
QUOTA 100M ON users; CONN 提示不是内部或外部命令
如果你看到:
C:\Users\... 说明你在 Windows CMD,不是在 SQL*Plus。
先进入:
sqlplus ... 看到:
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 原理最重要的官方资料之一。
重点适合查:
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/
适合查:
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/
适合系统学习:
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/
适合:
数据库管理
实例管理
用户
存储
数据库维护
配置 21.6 Net Services Administrator's Guide
https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/
遇到:
Listener
Service Name
TNS
连接故障 优先参考。
21.7 Backup and Recovery User's Guide
https://docs.oracle.com/en/database/oracle/oracle-database/19/bradv/
适合:
RMAN
Backup
Restore
Recover
Flashback 21.8 SQL Developer
SQL Developer 适合:
- 建立连接;
- 浏览 Schema;
- 执行 SQL;
- 执行 SQL Script;
- 查看表、视图、索引;
- 编辑和调试 PL/SQL;
- 导入导出数据。
学习阶段建议:
SQL*Plus
+
SQL Developer 两个都用。
原因:
SQL Developer 提高效率,SQL*Plus 帮你真正理解命令行环境和 Oracle 操作逻辑。
21.9 在线 Oracle SQL 环境
Oracle 官方文档入口提供在线运行 SQL 的方式,可以用来:
- 临时练 SQL;
- 快速验证语法;
- 没有本地环境时完成基础查询练习。
但以下实验仍建议使用真正 Oracle 19c:
STARTUP
Listener
Tablespace
CDB/PDB 管理
RMAN
ARCHIVELOG 21.10 数据库通用理论资源
如果想把 Oracle 学习和数据库原理结合起来,可参考:
- 《Database System Concepts》
- 《Database Management Systems》
- CMU 15-445 Database Systems
这类资源主要用于理解:
B+ Tree
Buffer Manager
Transaction
WAL
Concurrency Control
Recovery
Query Optimizer 注意:
通用数据库原理和 Oracle 具体命令是两个层次,不要混为一谈。
22. 考试与实验复习方法
建议把所有知识分成三类。
第一类:必须画出来
例如:
Oracle 体系结构
STARTUP 三阶段
连接四段链路
逻辑存储结构
Redo 数据流 这种知识最适合手画。
第二类:必须敲出来
例如:
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 权限仍可能建表失败?
如果能脱离书本用自己的话讲清楚,说明真正掌握。
推荐复习方法
每章使用:
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. 后续进阶方向
学完这门课后,可以向三个方向继续。
方向一:数据库开发 / 后端开发
继续学习:
高级 SQL
PL/SQL
JDBC
Spring Boot + Oracle
连接池
事务管理
ORM
数据库设计 适合:
Java 后端、企业应用开发。
方向二:DBA / 数据库运维
继续学习:
RMAN
Data Guard
RAC
ASM
AWR
ASH
SQL Tuning
Performance Tuning
Oracle Security 适合:
DBA、运维、基础设施。
方向三:数据库系统原理
继续学习:
B+ Tree
Buffer Manager
Transaction
MVCC
WAL
Recovery
Query Optimizer
Concurrency Control
Distributed Database 这一方向会让你从:
会使用 Oracle
进一步走向:
理解数据库系统为什么这样设计。
25. 最推荐的学习闭环
数据库课程最忌讳两种方式。
第一种:
只背 SQL,不理解 Oracle 背后发生了什么。
第二种:
只背 SGA、PGA、DBWn、LGWR 的定义,却从不实际操作。
更有效的方式是:
学一个概念
↓
画一张图
↓
敲一次命令
↓
制造一个错误
↓
自己排查
↓
再用自己的话解释 例如学习 Listener:
理解 Listener
↓
画连接链路
↓
执行 lsnrctl status
↓
观察 Service
↓
尝试连接
↓
分析连接失败原因
↓
总结排错顺序 学习事务:
理解 COMMIT / ROLLBACK
↓
开两个 SQL*Plus 会话
↓
修改同一行
↓
观察锁
↓
COMMIT
↓
观察另一个会话变化
↓
再解释 Redo / Undo 学习 STARTUP:
理论理解三个阶段
↓
STARTUP NOMOUNT
↓
观察状态
↓
MOUNT
↓
观察状态
↓
OPEN
↓
比较各阶段能做什么 这种学习方式比单纯背课件牢固得多。
26. 一份建议长期维护的个人知识库结构
如果你有个人博客或 Markdown 笔记库,可以按下面结构维护:
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. 最终学习标准
如果学完这门课,你能独立完成下面这一整套动作,就说明已经达到比较扎实的水平:
拿到一台 Oracle 19c 环境
↓
确认数据库版本与当前用户
↓
判断当前 CDB/PDB
↓
确认 Listener 与 Service
↓
连接普通用户
↓
创建表空间与用户
↓
分配权限与配额
↓
设计并创建业务表
↓
建立主外键与约束
↓
导入测试数据
↓
完成复杂 SQL 查询
↓
创建 View / Index / Sequence
↓
完成 Procedure / Function / Trigger
↓
理解并演示事务与锁
↓
解释 Redo / Undo
↓
解释 STARTUP 三阶段
↓
完成基础备份
↓
查看执行计划
↓
能够处理常见 ORA 错误
↓
写出一份结构完整、原理清晰的实验报告 最后可以用一句话概括这门课真正的学习目标:
既能站在开发者角度正确地设计和访问数据,也能站在数据库管理员角度理解 Oracle 19c 是怎样运行、存储、保护、连接和恢复这些数据的。
达到这个标准,《数据库管理与开发》就不只是“学过一门课”,而是为后续的数据库开发、Java 后端、数据工程、数据库管理员以及更深入的数据库系统学习打下了真正可迁移的基础。
0 次表情反馈 · 0 条评论