表转换过程 (★★★★★)
表转换过程 (★★★★★)
#abap #abap-dictionary #abap-tables
概览表
| Change Type (变更类型) | Adjustment (调整方式) | Data Impact (数据影响) |
|---|---|---|
| 字段顺序变化(非键) | 无需调整 | 无 |
| 添加字段 | ALTER TABLE | 无 |
| 缩短字段/键 | 转换 (Conversion) | 可能丢失 |
| 更改数据类型 | 转换 (Conversion) | 可能失败 |
数据库结构调整方式
| Method (方式) | Data Loss | Duration |
|---|---|---|
| DROP + CREATE | 丢失所有数据 | 快 |
| ALTER TABLE | 无 | 快 |
| Conversion (转换) | 可能丢失 | 慢 |
💡自动选择
如果表无数据 → DROP + CREATE
如果有数据 → 先尝试 ALTER TABLE,不行则转换
如果有数据 → 先尝试 ALTER TABLE,不行则转换
转换过程 (Conversion Process) — 7 个步骤
1 | Step 1: LOCK TABLE (锁定表) |
⛔转换期间表不可用
Step 2-6 期间,表不存在于数据库的原名下。
所有访问该表的程序无法运行。
转换必须在非生产时间执行!
所有访问该表的程序无法运行。
转换必须在非生产时间执行!
转换问题与风险
表空间溢出
1 | 数据同时存在于 QCMTAB + QCM8TAB → 存储需求翻倍 |
- 如果表空间不足,转换终止
- 解决:扩展表空间,然后在数据库工具中继续
键字段缩短
1 | 缩短前: KEY = 'ABC123' 和 'ABC123' (两条) |
- 只能加载回一条记录(随机选择)
- 必须在转换前清理数据
类型不兼容
- MOVE-CORRESPONDING 不支持的类型变更会导致终止
- 需手动恢复原状态
处理终止的转换
使用事务 SE14(数据库工具):
| Option (选项) | When to Use (使用场景) |
|---|---|
| Continue adjustment | 修正错误后继续转换 |
| Unlock table | 绝不在 Step 3/4 时使用(数据丢失) |
1 | SE14 → Enter Table Name → Edit → Analyze |
⚠️绝对禁止
如果数据只在临时表中(Step 3/4 失败),绝不能选 Unlock table!
否则原表为空,数据丢失。必须选 Continue adjustment。
否则原表为空,数据丢失。必须选 Continue adjustment。
ALTER TABLE 场景
不需要转换的修改(仅 ALTER TABLE):
- 添加新字段
- 修改字段顺序(非键字段)
- Append 结构添加字段
考试/测试模式
| Scenario/Keyword (场景/关键词) | Answer (答案) |
|---|---|
| “转换期间原表是否存在?” | 不存在(被重命名为 QCMTAB) |
| “转换失败在 Step 3/4,怎么办?” | Continue adjustment(不能 Unlock) |
| “缩短键字段会怎样?” | 无法区分的记录只保留一条 |
| “添加字段需要转换吗?” | 不需要(ALTER TABLE) |
| “数据回填用什么语句?” | MOVE-CORRESPONDING |
| “每多少 MB 提交一次?” | 16 MB |