

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用快速重置 API 清空 Amazon Neptune 数据库集群
<a name="manage-console-fast-reset"></a>

Neptune 快速重置 REST API 允许您快速轻松地重置 Neptune 图形，同时删除其所有数据。

您可以使用 [%db\$1reset](#manage-console-fast-reset-db-reset-magic) 行魔术命令在 Neptune 笔记本中执行此操作。
+ 在大多数情况下，快速重置操作会在几分钟内完成。持续时间可能会有所不同，具体取决于启动操作时集群上的负载。
+ 快速重置操作不会导致额外的 I/O。
+ 快速重置后，存储卷大小不会缩小。取而代之的是，当插入新数据时，存储空间会被重复使用。这意味着在快速重置操作之前和之后拍摄的快照的卷大小将相同。使用在快速重置操作之前和之后创建的快照的已还原集群的卷大小也将相同。
+ 作为重置操作的一部分，数据库集群中的所有实例都将重启。
**注意**  
在极少数情况下，这些服务器重启也可能导致集群的失效转移。

**重要**  
使用快速重置可能会破坏您的 Neptune 数据库集群与其它服务的集成。例如：  
快速重置会从您的数据库中删除所有流数据并完全重置流。这意味着，如果没有新的配置，流使用者可能无法再工作。
快速重置会移除 Neptune ML 正在使用的 SageMaker AI 资源的所有元数据，包括作业和端点。它们继续存在于 SageMaker AI 中，你可以继续使用现有的 A SageMaker I 端点进行 Neptune ML 推理查询，但是 Neptune ML 管理 APIs 不再使用它们。
诸如与的集成之类的 full-text-search集成也会 ElasticSearch 被快速重置所清除，并且必须手动重新建立这些集成，然后才能再次使用。

**使用 API 从 Neptune 数据库集群中删除所有数据**

1. 首先，生成一个令牌，然后可以使用该令牌来执行数据库重置。此步骤旨在帮助防止任何人意外重置数据库。

   为此，您可以向数据库集群的写入器实例上的 `/system` 端点发送 `HTTP POST` 请求以指定 `initiateDatabaseReset` 操作。

   使用 JSON 内容类型的 `curl` 命令将是：

   ```
   curl -X POST \
     -H 'Content-Type: application/json' \
         https://your_writer_instance_endpoint:8182/system \
     -d '{ "action" : "initiateDatabaseReset" }'
   ```

   或者，使用 `x-www-form-urlencoded` 内容类型：

   ```
   curl -X POST \
     -H 'Content-Type: application/x-www-form-urlencoded' \
         https://your_writer_instance_endpoint:8182/system \
     -d 'action=initiateDatabaseReset '
   ```

   `initiateDatabaseReset` 请求在其 JSON 响应中返回重置令牌，如下所示：

   ```
   {
     "status" : "200 OK",
     "payload" : {
       "token" : "new_token_guid"
     }
   }
   ```

   令牌在发出后一小时（60 分钟）内保持有效。

   如果您将请求发送到读取器实例或状态端点，Neptune 将引发 `ReadOnlyViolationException`。

   如果您发送多个 `initiateDatabaseReset` 请求，则只有最新生成的令牌将对第二步有效，即您实际执行重置操作。

   如果服务器在您的 `initiateDatabaseReset` 请求后立即重启，则生成的令牌将失效，您需要发送新请求才能获取新令牌。

1. 接下来，您将使用从 `initiateDatabaseReset` 中获得的令牌，将 `performDatabaseReset` 请求发送到数据库集群的写入器实例上的 `/system` 端点。这将从数据库集群中删除所有数据。

   使用 JSON 内容类型的 `curl` 命令是：

   ```
   curl -X POST \
     -H 'Content-Type: application/json' \
         https://your_writer_instance_endpoint:8182/system \
     -d '{
           "action" : "performDatabaseReset",
           "token" : "token_guid"
         }'
   ```

   或者，使用 `x-www-form-urlencoded` 内容类型：

   ```
   curl -X POST \
     -H 'Content-Type: application/x-www-form-urlencoded' \
         https://your_writer_instance_endpoint:8182/system \
     -d 'action=performDatabaseReset&token=token_guid'
   ```

   该请求会返回 JSON 响应。如果请求被接受，则响应为：

   ```
   {
     "status" : "200 OK"
   }
   ```

   如果您发送的令牌与发出的令牌不匹配，则响应如下所示：

   ```
   {
     "code" : "InvalidParameterException",
     "requestId":"token_guid",
     "detailedMessage" : "System command parameter 'token' : 'token_guid' does not match database reset token"
   }
   ```

   如果请求被接受并且重置开始，则服务器将重启并删除数据。在数据库集群重置期间，您无法向其发送任何其它请求。

## 使用带有 IAM-Auth 的快速重置 API
<a name="manage-console-fast-reset-iam-auth"></a>

如果您在数据库集群上启用了 IAM-Auth，则可以使用 [awscurl](https://github.com/okigan/awscurl) 发送使用 IAM-Auth 进行身份验证的快速重置命令：

**使用 awscurl 通过 IAM-Auth 发送快速重置请求**

1. 正确设置 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 环境变量（如果您使用的是临时凭证，也要正确设置 `AWS_SECURITY_TOKEN`）。

1. `initiateDatabaseReset` 请求类似于以下内容：

   ```
   awscurl -X POST --service neptune-db "$SYSTEM_ENDPOINT" \
     -H 'Content-Type: application/json' --region us-west-2 \
     -d '{ "action" : "initiateDatabaseReset" }'
   ```

1. `performDatabaseReset` 请求类似于以下内容：

   ```
   awscurl -X POST --service neptune-db "$SYSTEM_ENDPOINT" \
     -H 'Content-Type: application/json' --region us-west-2 \
     -d '{ "action" : "performDatabaseReset" }'
   ```

## 使用 Neptune Workbench `%db_reset` 行魔术命令重置数据库集群
<a name="manage-console-fast-reset-db-reset-magic"></a>

Neptune Workbench 支持 `%db_reset` 行魔术命令，可让您在 Neptune 笔记本中快速重置数据库。

如果您在没有任何参数的情况下调用魔术命令，则会看到一个屏幕，询问您是否要删除集群中的所有数据，并显示一个复选框，要求您确认在删除集群数据后，这些数据将不再可用。此时，您可以选择继续删除数据，也可以取消操作。

更危险的选项是使用 `--yes` 或 `-y` 选项调用 `%db_reset`，这会导致在没有进一步提示的情况下执行删除。

您也可以分两步执行重置，就像使用 REST API 一样：

```
%db_reset --generate-token
```

响应如下：

```
{
  "status" : "200 OK",
  "payload" : {
    "token" : "new_token_guid"
  }
}
```

然后执行以下操作：

```
%db_reset --token new_token_guid
```

响应如下：

```
{
  "status" : "200 OK"
}
```

## 快速重置操作的常见错误代码
<a name="manage-console-fast-reset-common-error-codes"></a>


| Neptune 错误代码 | HTTP 状态 | Message | 示例 | 
| --- | --- | --- | --- | 
| `InvalidParameterException` | 400 | 系统命令参数 “*action*” 的值不支持 “” *XXX* | 参数无效 | 
| `InvalidParameterException` | 400 | 为以下各项提供的值太多：*action* | 带有多个操作的快速重置请求，标题为 “内容类型:Application/” x-www-form-urlencoded | 
| `InvalidParameterException` | 400 | 重复字段“action” | 发送了一个包含多个操作的快速重置请求，其标头为“Content-Type: application/json” | 
| `MethodNotAllowedException` | 400 | 错误的路线：/*bad\$1endpoint* | 请求发送到错误的端点 | 
| `MissingParameterException` | 400 | 缺少必需参数：[action] | 快速重置请求不包含所需的“action”参数 | 
| `ReadOnlyViolationException` | 400 | 不允许对只读副本实例进行写入操作 | 快速重置请求已发送到读取器或状态端点 | 
| `AccessDeniedException` | 403 | 身份验证令牌缺失 | 向启用了 IAM-Auth 的数据库端点发送了没有正确签名的快速重置请求 | 
| `ServerShutdownException` | 500 | 数据库重置正在进行中。请在集群可用后重试查询。 | 当快速重置开始时，现有和传入的 Gremlin/Sparql 查询会失败。 | 