Skip to content

Commit 688315f

Browse files
🌐 Add LLM Translations (#1842)
* 💬Generate LLM translations * Update recovery-from-operational-errors.md --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Bohu <[email protected]>
1 parent 9cb7737 commit 688315f

File tree

3 files changed

+204
-5
lines changed

3 files changed

+204
-5
lines changed
Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
---
2+
title: 从操作错误中恢复
3+
---
4+
import IndexOverviewList from '@site/src/components/IndexOverviewList';
5+
6+
# 从操作错误中恢复
7+
8+
本指南提供了从 Databend 中常见操作错误恢复的分步说明。
9+
10+
## 简介
11+
12+
Databend 可以帮助您从以下常见操作错误中恢复:
13+
- **意外删除数据库**
14+
- **意外删除表**
15+
- **不正确的数据修改(UPDATE/DELETE 操作)**
16+
- **意外截断表**
17+
- **数据加载错误**
18+
- **Schema 演变回滚**(恢复表结构更改)
19+
- **删除列或约束**
20+
21+
这些恢复能力由 Databend 的 FUSE 引擎及其类似 Git 的存储设计提供支持,该设计维护了不同时间点的数据快照。
22+
23+
## 恢复场景和解决方案
24+
25+
### 场景:意外删除数据库
26+
27+
如果您意外删除了数据库,可以使用 `UNDROP DATABASE` 命令恢复它:
28+
29+
1. 识别已删除的数据库:
30+
31+
```sql
32+
SHOW DROP DATABASES LIKE '%sales_data%';
33+
```
34+
35+
2. 恢复已删除的数据库:
36+
37+
```sql
38+
UNDROP DATABASE sales_data;
39+
```
40+
41+
3. 验证数据库是否已恢复:
42+
43+
```sql
44+
SHOW DATABASES;
45+
```
46+
47+
4. 恢复所有权(如果需要):
48+
49+
```sql
50+
GRANT OWNERSHIP on sales_data.* to ROLE <role_name>;
51+
```
52+
53+
**重要提示**:删除的数据库只能在保留期内恢复(默认为 24 小时)。
54+
55+
有关更多详细信息,请参见 [UNDROP DATABASE](/sql/sql-commands/ddl/database/undrop-database) 和 [SHOW DROP DATABASES](/sql/sql-commands/ddl/database/show-drop-databases)。
56+
57+
### 场景:意外删除表
58+
59+
如果您意外删除了表,可以使用 `UNDROP TABLE` 命令恢复它:
60+
61+
1. 识别已删除的表:
62+
63+
```sql
64+
SHOW DROP TABLES LIKE '%order%';
65+
```
66+
67+
2. 恢复已删除的表:
68+
69+
```sql
70+
UNDROP TABLE sales_data.orders;
71+
```
72+
73+
3. 验证表是否已恢复:
74+
75+
```sql
76+
SHOW TABLES FROM sales_data;
77+
```
78+
79+
4. 恢复所有权(如果需要):
80+
81+
```sql
82+
GRANT OWNERSHIP on sales_data.orders to ROLE <role_name>;
83+
```
84+
85+
**重要提示**:删除的表只能在保留期内恢复(默认为 24 小时)。
86+
87+
有关更多详细信息,请参见 [UNDROP TABLE](/sql/sql-commands/ddl/table/ddl-undrop-table) 和 [SHOW DROP TABLES](/sql/sql-commands/ddl/table/show-drop-tables)。
88+
89+
### 场景:不正确的数据更新或删除
90+
91+
如果您意外修改或删除了表中的数据,可以使用 `FLASHBACK TABLE` 命令将其恢复到之前的状态:
92+
93+
1. 识别不正确操作之前的快照 ID 或时间戳:
94+
95+
```sql
96+
SELECT * FROM fuse_snapshot('sales_data', 'orders');
97+
```
98+
99+
```text
100+
snapshot_id: c5c538d6b8bc42f483eefbddd000af7d
101+
snapshot_location: 29356/44446/_ss/c5c538d6b8bc42f483eefbddd000af7d_v2.json
102+
format_version: 2
103+
previous_snapshot_id: NULL
104+
[... ...]
105+
timestamp: 2023-04-19 04:20:25.062854
106+
```
107+
108+
2. 将表恢复到之前的状态:
109+
110+
```sql
111+
-- 使用快照 ID
112+
ALTER TABLE sales_data.orders FLASHBACK TO (SNAPSHOT => 'c5c538d6b8bc42f483eefbddd000af7d');
113+
114+
-- 或使用时间戳
115+
ALTER TABLE sales_data.orders FLASHBACK TO (TIMESTAMP => '2023-04-19 04:20:25.062854'::TIMESTAMP);
116+
```
117+
118+
3. 验证数据是否已恢复:
119+
120+
```sql
121+
SELECT * FROM sales_data.orders LIMIT 3;
122+
```
123+
124+
**重要提示**:回溯操作仅适用于现有表,并且在保留期内。
125+
126+
有关更多详细信息,请参见 [FLASHBACK TABLE](/sql/sql-commands/ddl/table/flashback-table)。
127+
128+
### 场景:Schema 演变回滚
129+
如果您对表的结构进行了不必要的更改,可以恢复到之前的 schema:
130+
131+
1. 创建一个表并添加一些数据:
132+
133+
```sql
134+
CREATE OR REPLACE TABLE customers (id INT, name VARCHAR, email VARCHAR);
135+
INSERT INTO customers VALUES (1, 'John', '[email protected]');
136+
```
137+
138+
2. 进行 schema 更改:
139+
```sql
140+
ALTER TABLE customers ADD COLUMN phone VARCHAR;
141+
DESC customers;
142+
```
143+
144+
输出:
145+
```text
146+
┌─────────┬─────────┬──────┬─────────┬─────────┐
147+
│ Field │ Type │ Null │ Default │ Extra │
148+
├─────────┼─────────┼──────┼─────────┼─────────┤
149+
│ id │ INT │ YES │ NULL │ │
150+
│ name │ VARCHAR │ YES │ NULL │ │
151+
│ email │ VARCHAR │ YES │ NULL │ │
152+
│ phone │ VARCHAR │ YES │ NULL │ │
153+
└─────────┴─────────┴──────┴─────────┴─────────┘
154+
```
155+
156+
3. 查找 schema 更改之前的快照 ID:
157+
```sql
158+
SELECT * FROM fuse_snapshot('default', 'customers');
159+
```
160+
161+
输出:
162+
```text
163+
snapshot_id: 01963cefafbb785ea393501d2e84a425 timestamp: 2025-04-16 04:51:03.227000 previous_snapshot_id: 01963ce9cc29735b87886a08d3ca7e2f
164+
snapshot_id: 01963ce9cc29735b87886a08d3ca7e2f timestamp: 2025-04-16 04:44:37.289000 previous_snapshot_id: NULL
165+
```
166+
167+
4. 恢复到之前的 schema(使用较早的快照):
168+
```sql
169+
ALTER TABLE customers FLASHBACK TO (SNAPSHOT => '01963ce9cc29735b87886a08d3ca7e2f');
170+
```
171+
172+
5. 验证 schema 是否已恢复:
173+
```sql
174+
DESC customers;
175+
```
176+
输出:
177+
```text
178+
┌─────────┬─────────┬──────┬─────────┬─────────┐
179+
│ Field │ Type │ Null │ Default │ Extra │
180+
├─────────┼─────────┼──────┼─────────┼─────────┤
181+
│ id │ INT │ YES │ NULL │ │
182+
│ name │ VARCHAR │ YES │ NULL │ │
183+
│ email │ VARCHAR │ YES │ NULL │ │
184+
└─────────┴─────────┴──────┴─────────┴─────────┘
185+
```
186+
187+
188+
## 重要注意事项和限制
189+
190+
- **时间限制**:恢复仅在保留期内有效(默认:24 小时)。
191+
- **名称冲突**:如果存在具有相同名称的对象,则无法取消删除 - 首先[重命名数据库](/sql/sql-commands/ddl/database/ddl-alter-database)或[重命名表](/sql/sql-commands/ddl/table/ddl-rename-table)。
192+
- **所有权**:所有权不会自动恢复 - 恢复后手动授予它。
193+
- **临时表**:回溯不适用于临时表(不存储快照)。
194+
195+
**对于紧急情况**:遇到严重数据丢失?立即联系 Databend 支持以获得帮助。
196+
[联系 Databend 支持](https://www.databend.cn/contact-us/)

docs/cn/sql-reference/10-sql-commands/00-ddl/00-database/undrop-database.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
title: UNDROP DATABASE
33
---
44

5-
恢复已删除数据库的最新版本。这利用了 Databend 的时间回溯功能;删除的对象只能在保留期内恢复(默认为 24 小时)。
5+
恢复已删除数据库的最新版本。 这利用了 Databend 的时间回溯功能; 删除的对象只能在保留期内恢复(默认为 24 小时)。
66

7-
另请参阅:[DROP DATABASE](ddl-drop-database.md)
7+
**参见:**
8+
[DROP DATABASE](ddl-drop-database.md)
9+
[SHOW DROP DATABASES](show-drop-databases.md)
810

911
## 语法
1012

@@ -27,7 +29,7 @@ UNDROP DATABASE <database_name>
2729
root@localhost:8000/default> UNDROP DATABASE doc;
2830
error: APIError: QueryFailed: [2301]Database 'doc' already exists
2931
```
30-
- 恢复数据库不会自动将所有权恢复到原始角色。恢复后,必须手动将所有权授予先前的角色或其他角色。在此之前,只有 `account-admin` 角色才能访问该数据库。
32+
- 恢复数据库不会自动将所有权恢复到原始角色。 恢复后,必须手动将所有权授予先前的角色或其他角色。 在此之前,只有 `account-admin` 角色才能访问该数据库。
3133

3234
```sql title='Examples:'
3335
GRNAT OWNERSHIP on doc.* to ROLE writer;

docs/cn/sql-reference/10-sql-commands/00-ddl/01-table/21-ddl-undrop-table.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ title: UNDROP TABLE
33
sidebar_position: 20
44
---
55

6-
恢复最近删除的表版本。这利用了 Databend 的时间回溯功能;删除的对象只能在保留期内恢复(默认为 24 小时)。
6+
恢复最近删除的表。这利用了 Databend 的时间回溯功能;删除的对象只能在保留期内恢复(默认为 24 小时)。
77

88
**参见:**
99
- [CREATE TABLE](./10-ddl-create-table.md)
1010
- [DROP TABLE](./20-ddl-drop-table.md)
1111
- [SHOW TABLES](show-tables.md)
12+
- [SHOW DROP TABLES](show-drop-tables.md)
1213

1314
## 语法
1415

@@ -32,7 +33,7 @@ UNDROP TABLE [ <database_name>. ]<table_name>
3233
error: APIError: QueryFailed: [2308]Undrop Table 't' already exists
3334
```
3435

35-
- 恢复表不会自动将所有权恢复到原始角色。恢复后,必须手动将所有权授予之前的角色或其他角色。在此之前,该表仅对 `account-admin` 角色可见。
36+
- 恢复表不会自动将所有权恢复到原始角色。恢复后,必须手动将所有权授予先前的角色或其他角色。在此之前,该表仅对 `account-admin` 角色可见。
3637

3738
```sql title='Examples:'
3839
GRNAT OWNERSHIP on doc.t to ROLE writer;

0 commit comments

Comments
 (0)