Skip to content

🌐 Add LLM Translations #1842

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 16, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
196 changes: 196 additions & 0 deletions docs/cn/guides/56-security/recovery-from-operational-errors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
---
title: 从操作错误中恢复
---
import IndexOverviewList from '@site/src/components/IndexOverviewList';

# 从操作错误中恢复

本指南提供了从 Databend 中常见操作错误恢复的分步说明。

## 简介

Databend 可以帮助您从以下常见操作错误中恢复:
- **意外删除数据库**
- **意外删除表**
- **不正确的数据修改(UPDATE/DELETE 操作)**
- **意外截断表**
- **数据加载错误**
- **Schema 演变回滚**(恢复表结构更改)
- **删除列或约束**

这些恢复能力由 Databend 的 FUSE 引擎及其类似 Git 的存储设计提供支持,该设计维护了不同时间点的数据快照。

## 恢复场景和解决方案

### 场景:意外删除数据库

如果您意外删除了数据库,可以使用 `UNDROP DATABASE` 命令恢复它:

1. 识别已删除的数据库:

```sql
SHOW DROP DATABASES LIKE '%sales_data%';
```

2. 恢复已删除的数据库:

```sql
UNDROP DATABASE sales_data;
```

3. 验证数据库是否已恢复:

```sql
SHOW DATABASES;
```

4. 恢复所有权(如果需要):

```sql
GRANT OWNERSHIP on sales_data.* to ROLE <role_name>;
```

**重要提示**:删除的数据库只能在保留期内恢复(默认为 24 小时)。

有关更多详细信息,请参见 [UNDROP DATABASE](/sql/sql-commands/ddl/database/undrop-database) 和 [SHOW DROP DATABASES](/sql/sql-commands/ddl/database/show-drop-databases)。

### 场景:意外删除表

如果您意外删除了表,可以使用 `UNDROP TABLE` 命令恢复它:

1. 识别已删除的表:

```sql
SHOW DROP TABLES LIKE '%order%';
```

2. 恢复已删除的表:

```sql
UNDROP TABLE sales_data.orders;
```

3. 验证表是否已恢复:

```sql
SHOW TABLES FROM sales_data;
```

4. 恢复所有权(如果需要):

```sql
GRANT OWNERSHIP on sales_data.orders to ROLE <role_name>;
```

**重要提示**:删除的表只能在保留期内恢复(默认为 24 小时)。

有关更多详细信息,请参见 [UNDROP TABLE](/sql/sql-commands/ddl/table/ddl-undrop-table) 和 [SHOW DROP TABLES](/sql/sql-commands/ddl/table/show-drop-tables)。

### 场景:不正确的数据更新或删除

如果您意外修改或删除了表中的数据,可以使用 `FLASHBACK TABLE` 命令将其恢复到之前的状态:

1. 识别不正确操作之前的快照 ID 或时间戳:

```sql
SELECT * FROM fuse_snapshot('sales_data', 'orders');
```

```text
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
```

2. 将表恢复到之前的状态:

```sql
-- 使用快照 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);
```

3. 验证数据是否已恢复:

```sql
SELECT * FROM sales_data.orders LIMIT 3;
```

**重要提示**:回溯操作仅适用于现有表,并且在保留期内。

有关更多详细信息,请参见 [FLASHBACK TABLE](/sql/sql-commands/ddl/table/flashback-table)。

### 场景:Schema 演变回滚
如果您对表的结构进行了不必要的更改,可以恢复到之前的 schema:

1. 创建一个表并添加一些数据:

```sql
CREATE OR REPLACE TABLE customers (id INT, name VARCHAR, email VARCHAR);
INSERT INTO customers VALUES (1, 'John', '[email protected]');
```

2. 进行 schema 更改:
```sql
ALTER TABLE customers ADD COLUMN phone VARCHAR;
DESC customers;
```

输出:
```text
┌─────────┬─────────┬──────┬─────────┬─────────┐
│ Field │ Type │ Null │ Default │ Extra │
├─────────┼─────────┼──────┼─────────┼─────────┤
│ id │ INT │ YES │ NULL │ │
│ name │ VARCHAR │ YES │ NULL │ │
│ email │ VARCHAR │ YES │ NULL │ │
│ phone │ VARCHAR │ YES │ NULL │ │
└─────────┴─────────┴──────┴─────────┴─────────┘
```

3. 查找 schema 更改之前的快照 ID:
```sql
SELECT * FROM fuse_snapshot('default', 'customers');
```

输出:
```text
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
```

4. 恢复到之前的 schema(使用较早的快照):
```sql
ALTER TABLE customers FLASHBACK TO (SNAPSHOT => '01963ce9cc29735b87886a08d3ca7e2f');
```

5. 验证 schema 是否已恢复:
```sql
DESC customers;
```
输出:
```text
┌─────────┬─────────┬──────┬─────────┬─────────┐
│ Field │ Type │ Null │ Default │ Extra │
├─────────┼─────────┼──────┼─────────┼─────────┤
│ id │ INT │ YES │ NULL │ │
│ name │ VARCHAR │ YES │ NULL │ │
│ email │ VARCHAR │ YES │ NULL │ │
└─────────┴─────────┴──────┴─────────┴─────────┘
```


## 重要注意事项和限制

- **时间限制**:恢复仅在保留期内有效(默认:24 小时)。
- **名称冲突**:如果存在具有相同名称的对象,则无法取消删除 - 首先[重命名数据库](/sql/sql-commands/ddl/database/ddl-alter-database)或[重命名表](/sql/sql-commands/ddl/table/ddl-rename-table)。
- **所有权**:所有权不会自动恢复 - 恢复后手动授予它。
- **临时表**:回溯不适用于临时表(不存储快照)。

**对于紧急情况**:遇到严重数据丢失?立即联系 Databend 支持以获得帮助。
[联系 Databend 支持](https://www.databend.cn/contact-us/)
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
title: UNDROP DATABASE
---

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

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

## 语法

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

```sql title='Examples:'
GRNAT OWNERSHIP on doc.* to ROLE writer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@ title: UNDROP TABLE
sidebar_position: 20
---

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

**参见:**
- [CREATE TABLE](./10-ddl-create-table.md)
- [DROP TABLE](./20-ddl-drop-table.md)
- [SHOW TABLES](show-tables.md)
- [SHOW DROP TABLES](show-drop-tables.md)

## 语法

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

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

```sql title='Examples:'
GRNAT OWNERSHIP on doc.t to ROLE writer;
Expand Down
Loading