Merge pull request 'Document the storage-migrate tool and the switch/drill runbook (U4)' (#65) from feature/collab-storage-u4-migrator into main
This commit was merged in pull request #65.
This commit is contained in:
@@ -154,3 +154,45 @@ EXT-8 的 `ProjectAuthz` 公开契约(新增 action 参数的变体接口 +
|
||||
下游适配器按动作逐一声明能力;未声明动作保持默认拒绝,与宿主侧矩阵同语义。
|
||||
旧 bool 契约在该版本内继续可用(映射为仅 read);Core/Host 与下游适配器
|
||||
(RDM 的 ProjectAuthz 实现)一起验收,不另建成员权威。
|
||||
|
||||
## 10. SQLite → PostgreSQL 切换与恢复演练(U4 已实施)
|
||||
|
||||
工具:`make build` 产出 `bin/storage-migrate`(受管迁移入口;只处理 Backend 库,
|
||||
不执行 SQLite dump 作为 PG SQL)。三个子命令:
|
||||
|
||||
```bash
|
||||
# 1) 只读盘点:schema 版本、完整性、逐表计数、工件清单与哈希(§6.1)
|
||||
storage-migrate inventory --source runtime/dev/data/agent-system.db \
|
||||
--artifacts runtime/dev/data/artifacts --out inv.json
|
||||
|
||||
# 2) 一致性快照:VACUUM INTO(在线安全含 WAL)+ 可打开校验 + 逐表计数对账(§6.2)
|
||||
storage-migrate backup --source runtime/dev/data/agent-system.db --out snap.db
|
||||
|
||||
# 3) 受管迁移:目标建 schema/扩展后按行复制;身份登记 + 逐表校验和 + 终验(§6.3)
|
||||
storage-migrate migrate --source snap.db --target "$DSN" \
|
||||
--migration-id <名> --artifacts runtime/dev/data/artifacts --out report.json
|
||||
```
|
||||
|
||||
迁移身份与续传:`migration_id + source_snapshot_id(快照 SHA-256)+
|
||||
source_schema_version` 登记在目标 `migration_control`;**仅同一冻结快照可续传**
|
||||
(换快照/换身份均拒绝);目标业务表已有数据而身份为空即拒绝(不覆盖)。
|
||||
|
||||
校验与报告:逐表源/目标计数与主键序哈希链校验和(布尔列按目标 schema 对称
|
||||
归一);复制后推进 SERIAL 序列;未知 owner(users 之外,''/'local' 单租户默认
|
||||
除外)阻塞迁移;报告只含计数/校验和/清单哈希——无 DSN、密钥与行正文(KTD14)。
|
||||
类型映射以目标 schema 为准(SQLite 0/1→BOOLEAN、BLOB→BYTEA、生成列不迁、
|
||||
FTS5 影子表不迁——PG 侧生成列与索引自动重建);`admission_leases` 为运行态
|
||||
不随迁。
|
||||
|
||||
### 切换顺序(正式窗口须另行授权;当前仅隔离演练已验证)
|
||||
|
||||
1. 固定源制品与路径,`inventory` 盘点;指定迁移 owner、窗口、回退判据。
|
||||
2. `backup` 冻结快照(活跃 WAL 库不得只拷 `.db` 文件)。
|
||||
3. 预演:独立测试目标 PG 上 `migrate`,核对报告全绿;预演库不作为正式目标。
|
||||
4. 正式窗口:停新写 → 等待/收口在途 run(未知副作用记 recovery hold)→
|
||||
停旧写者 → 终快照 → 空正式目标 `migrate` → 报告全绿。
|
||||
5. 单入口切 team 档冒烟(登录/项目/会话/审批/检索/下载);fail-closed 不回 SQLite。
|
||||
6. **PG 接受新写入前**可撤回;**之后**禁直切回旧 SQLite(向前修复或专项回迁)。
|
||||
|
||||
备份基线(正式目标启用后):pg_dump 逻辑备份 + pg_basebackup 物理基础备份与
|
||||
WAL 归档/PITR;pg_dump 不能作 WAL 回放基础。每次演练恢复到新目标并核对。
|
||||
|
||||
Reference in New Issue
Block a user