🗄️ 第七章 用于保护数据库的基础知识-故障恢复与安全措施
📄 一句话概括

技术威胁=软件与系统层面的故障:程序 Bug、内存损坏、进程崩溃、系统死机——对策是让错误被抓住、被记录、可重来。

📝 本节和前面几节的关系

7-1 的灾祸看得见,本节的故障藏在软件里:一切看起来好好的,数据却错了、程序却死了。它的两个出口正是本章后半的展开——错误要记下来(7-4 错误日志)→ 分析类型(7-5)→ 揪出慢的(7-6)。

一、技术威胁清单

威胁 后果 对策
软件 Bug 数据算错、意外崩溃 测试、版本管理、及时修补(6-9)
内存/磁盘损坏(软性) 数据悄悄变坏(静默损坏) 校验和、定期校验
进程崩溃 服务中断 自动重启、看门狗
操作系统死机 全部服务停摆 隔离部署、快速恢复预案
并发冲突 数据互相覆盖 事务与锁(4-14/4-17)

二、对策三板斧

  1. 防:测试覆盖、灰度发布——让 Bug 活不到生产环境
  2. 抓:日志与监控(6-5)——错误一发生就有记录,不靠用户投诉才发现
  3. 回:事务回滚(4-16)+备份还原(6-6/6-7)——错到哪一步都能退回

三、动手 Demo:制造一次「技术故障」并观察恢复

-- SQLite 在线运行器里模拟「进程崩溃后的恢复」
-- ① 正常写入并提交
CREATE TABLE t (id INTEGER PRIMARY KEY, v TEXT);
INSERT INTO t VALUES (1, '好数据');

-- ② 假设此刻进程崩溃(想象关掉页面再重开)
-- ③ 重开后:已提交的数据完好 —— 这就是事务(4-14)的持久性
SELECT * FROM t;   -- '好数据' 还在

-- ④ 未提交的半截写入呢?—— 重启后被自动回滚,库里不留垃圾

【准备块】在线 SQLite 运行器即可;核心体会=「崩溃不可怕,可怕的是崩溃后库里留下半成品」。

四、30 秒实验

手机 App 闪退后重开,进度还在吗?——游戏存档在(提交过)、未保存的输入丢了(没提交)。这就是「事务持久性」的日常版。

五、常见误区

自测三问 1. 技术威胁与物理威胁的分界?(物理=硬件与环境的实体损坏;技术=软件系统层面的故障) 2. 对策三板斧?(防——测试;抓——日志监控;回——回滚与还原) 3. 进程崩溃后,未提交的写入去哪了?(被事务机制自动回滚,库里不留半成品)

相关笔记