数据误操作恢复指南
本指南提供了从 Databend 中常见操作错误恢复的分步说明。
简介
Databend 可以帮您恢复这些常见操作错误:
- 误删数据库或表
- 数据错误修改或删除
- 表结构误操作
- 数据误加载
这些恢复能力由 Databend 的 FUSE 引擎及其类似 Git 的存储设计提供支持,该设计维护了不同时间点的数据快照。
恢复场景和解决方案
场景:意外删除数据库
如果您意外删除了数据库,可以使用 UNDROP DATABASE
命令恢复它:
-
识别已删除的数据库:
SHOW DROP DATABASES LIKE '%sales_data%';
-
恢复已删除的数据库:
UNDROP DATABASE sales_data;
-
验证数据库是否已恢复:
SHOW DATABASES;
-
恢复所有权(如果需要):
GRANT OWNERSHIP on sales_data.* to ROLE <role_name>;
重要提示:删除的数据库只能在保留期内恢复(默认为 24 小时)。
有关更多详细信息,请参见 UNDROP DATABASE 和 SHOW DROP DATABASES。
场景:意外删除表
如果您意外删除了表,可以使用 UNDROP TABLE
命令恢复它:
-
识别已删除的表:
SHOW DROP TABLES LIKE '%order%';
-
恢复已删除的表:
UNDROP TABLE sales_data.orders;
-
验证表是否已恢复:
SHOW TABLES FROM sales_data;
-
恢复所有权(如果需要):
GRANT OWNERSHIP on sales_data.orders to ROLE <role_name>;
重要提示:删除的表只能在保留期内恢复(默认为 24 小时)。
有关更多详细信息,请参见 UNDROP TABLE 和 SHOW DROP TABLES。
场景:不正确的数据更新或删除
如果您意外修改或删除了表中的数据,可以使用 FLASHBACK TABLE
命令将其恢复到之前的状态:
- 识别不正确操作之前的快照 ID 或时间戳:
SELECT * FROM fuse_snapshot('sales_data', 'orders');
snapshot_id: c5c538d6b8bc42f483eefbddd000af7d
snapshot_location: 29356/44446/_ss/c5c538d6b8bc42f483eefbddd000af7d_v2.json
format_version: 2
previous_snapshot_id: NULL
[... ...]
timestamp: 2023-04-19 04:20:25.062854
- 将表恢复到之前的状态:
-- 使用快照 ID
ALTER TABLE sales_data.orders FLASHBACK TO (SNAPSHOT => 'c5c538d6b8bc42f483eefbddd000af7d');
-- 或使用时间戳
ALTER TABLE sales_data.orders FLASHBACK TO (TIMESTAMP => '2023-04-19 04:20:25.062854'::TIMESTAMP);
- 验证数据是否已恢复:
SELECT * FROM sales_data.orders LIMIT 3;
重要提示:回溯操作仅适用于现有表,并且在保留期内。
有关更多详细信息,请参见 FLASHBACK TABLE。
场景:Schema 演变回滚
如果您对表的结构进行了不必要的更改,可以恢复到之前的 schema:
- 创建一个表并添加一些数据:
CREATE OR REPLACE TABLE customers (id INT, name VARCHAR, email VARCHAR);
INSERT INTO customers VALUES (1, 'John', 'john@example.com');
- 进行 schema 更改:
ALTER TABLE customers ADD COLUMN phone VARCHAR;
DESC customers;
输出:
┌─────────┬─────────┬──────┬─────────┬─────────┐
│ Field │ Type │ Null │ Default │ Extra │
├─────────┼─────────┼──────┼─────────┼─────────┤
│ id │ INT │ YES │ NULL │ │
│ name │ VARCHAR │ YES │ NULL │ │
│ email │ VARCHAR │ YES │ NULL │ │
│ phone │ VARCHAR │ YES │ NULL │ │
└─────────┴─────────┴──────┴─────────┴─────────┘
- 查找 schema 更改之前的快照 ID:
SELECT * FROM fuse_snapshot('default', 'customers');
输出:
snapshot_id: 01963cefafbb785ea393501d2e84a425 timestamp: 2025-04-16 04:51:03.227000 previous_snapshot_id: 01963ce9cc29735b87886a08d3ca7e2f
snapshot_id: 01963ce9cc29735b87886a08d3ca7e2f timestamp: 2025-04-16 04:44:37.289000 previous_snapshot_id: NULL
- 恢复到之前的 schema(使用较早的快照):
ALTER TABLE customers FLASHBACK TO (SNAPSHOT => '01963ce9cc29735b87886a08d3ca7e2f');
- 验证 schema 是否已恢复:
DESC customers;
输出:
┌─────────┬─────────┬──────┬─────────┬─────────┐
│ Field │ Type │ Null │ Default │ Extra │
├─────────┼─────────┼──────┼─────────┼─────────┤
│ id │ INT │ YES │ NULL │ │
│ name │ VARCHAR │ YES │ NULL │ │
│ email │ VARCHAR │ YES │ NULL │ │
└─────────┴─────────┴──────┴─────────┴─────────┘
重要注意事项和限制
- 时间限制:恢复仅在保留期内有效(默认:24 小时)。
- 名称冲突:如果存在具有相同名称的对象,则无法取消删除 - 首先重命名数据库或重命名表。
- 所有权:所有权不会自动恢复 - 恢复后手动授予它。
- 临时表:回溯不适用于临时表(不存储快照)。
对于紧急情况:遇到严重数据丢失?立即联系 Databend 支持以获得帮助。 联系 Databend 支持