

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

# 还原 Amazon EC2 实例上的 SAP HANA 数据库
<a name="saphana-restore"></a>

可以使用 Amazon Backup 控制台、API 或使用恢复 EC2 实例上的 SAP HANA 数据库 Amazon CLI。

**Topics**
+ [使用 Amazon Backup 控制台恢复 SAP HANA 数据库](#w2aac17c31c43b9)
+ [StartRestoreJob EC2 上适用于 SAP HANA 的 AP@@ [I](https://docs.amazonaws.cn/aws-backup/latest/devguide/API_StartRestoreJob.html)](#w2aac17c31c43c11)
+ [适用于 EC2 上 SAP HANA 的 CLI](#w2aac17c31c43c13)
+ [SAP HANA 高可用性（HA）还原](#saphanarestoreha)
+ [问题排查](#saphanarestoretroubleshooting)

## 使用 Amazon Backup 控制台恢复 SAP HANA 数据库
<a name="w2aac17c31c43b9"></a>

请注意，涉及同一数据库的备份作业和还原作业不能同时进行。在执行 SAP HANA 数据库还原作业时，尝试备份同一数据库可能会导致错误：“数据库在停止时无法备份”。

1. 使用先决条件中的凭证访问 Amazon Backup 控制台。

1. 在**目标还原位置**下拉菜单下，选择要使用您要用于还原的恢复点覆盖的数据库（请注意，托管还原目标数据库的实例也必须具有先决条件中的权限）。
**重要**  
SAP HANA 数据库还原具有破坏性。还原数据库将覆盖位于指定目标还原位置的数据库。

1. 只有在执行系统副本还原时才完成此步骤；否则，请跳至步骤 4。

   系统副本还原是一种还原作业，它还原到目标数据库与生成恢复点的源数据库不同。对于系统副本还原，请注意控制台上为您提供的 `aws ssm-sap put-resource-permission` 命令。必须在满足先决条件的计算机上复制、粘贴和执行此命令。运行此命令时，请使用设置注册应用程序所需权限的先决条件中的角色中的凭证。

   ```
   // Example command
   aws ssm-sap put-resource-permission \
   --region us-east-1 \
   --action-type RESTORE \
   --source-resource-arn arn:aws:ssm-sap-east-1:112233445566:HANA/Foo/DB/HDB \
   --resource-arn arn:aws:ssm-sap:us-east-1:112233445566:HANA/Bar/DB/HDB
   ```

1. 选择还原位置后，可以看到目标数据库的**资源 ID**、**应用程序名称**、**数据库类型**和 **EC2 实例**。

1. *或者*，可以展开**高级还原设置**以更改目录还原选项。可用选项因所选的还原设置而异。

1. 单击**还原备份**。

1. 由于将在还原期间覆盖目标位置（**破坏性还原**），因此您必须在接下来的弹出对话框中确认允许这样做。

   1. 要继续，您必须明白，现有数据库将被您要还原的数据库所覆盖。

   1. 明白这一点后，您必须确认现有数据将被覆盖。要确认这一点并继续，请在文本输入字段中键入 **overwrite**。

1. 单击**还原备份**。

如果该过程操作成功，控制台顶部将显示一条蓝色横幅。这表示还原作业正在进行中。您将被自动重定向到“作业”页面，您的还原作业将出现在还原作业列表中。这个最新作业的状态将为 `Pending`。您可以搜索并单击还原作业 ID，以查看每个还原作业的详细信息。您可以通过单击“刷新”按钮来刷新还原作业列表，以查看还原作业状态的更改。

## StartRestoreJob EC2 上适用于 SAP HANA 的 AP@@ [I](https://docs.amazonaws.cn/aws-backup/latest/devguide/API_StartRestoreJob.html)
<a name="w2aac17c31c43c11"></a>

此操作将恢复由一个 Amazon 资源名称 (ARN) 标识的已保存资源。

**请求语法**

```
PUT /restore-jobs HTTP/1.1
Content-type: application/json
{
   "[IdempotencyToken](https://docs.amazonaws.cn/aws-backup/latest/devguide/API_StartRestoreJob.html#Backup-StartRestoreJob-request-IdempotencyToken)": "string",
   "[Metadata](https://docs.amazonaws.cn/aws-backup/latest/devguide/API_StartRestoreJob.html#Backup-StartRestoreJob-request-Metadata)": { 
      "string" : "string" 
   },
   "[RecoveryPointArn](https://docs.amazonaws.cn/aws-backup/latest/devguide/API_StartRestoreJob.html#Backup-StartRestoreJob-request-RecoveryPointArn)": "string",
   "[ResourceType](https://docs.amazonaws.cn/aws-backup/latest/devguide/API_StartRestoreJob.html#Backup-StartRestoreJob-request-ResourceType)": "string"
}
```

**URI 请求参数**：该请求不使用任何 URI 参数。

**请求体**：请求接受采用 JSON 格式的以下数据：

**IdempotencyToken**客户选择的字符串，可用于区分原本相同的调用。`StartRestoreJob`使用相同的幂等性令牌重试成功的请求会生成一条成功消息，而不执行任何操作。

类型：字符串

必需：否

**元数据**

一组元数据键值对。包含还原恢复点所需的信息，例如资源名称。您可以通过调用 `GetRecoveryPointRestoreMetadata` 来获取在备份资源时有关该资源的配置元数据。但是，除了 `GetRecoveryPointRestoreMetadata` 提供的值之外，可能还需要其他值才能还原资源。例如，如果原始资源名称已存在，您可能需要提供一个新的资源名称。

您需要包含特定元数据才能还原 Amazon EC2 实例上的 SAP HANA。请参阅 SAP HANA 特定项目的[ StartRestoreJob 元数据](https://docs.amazonaws.cn/aws-backup/latest/devguide/API_StartRestoreJob.html#API_StartRestoreJob_RequestBody)。

要检索相关元数据，您可以使用调用 [https://docs.amazonaws.cn/aws-backup/latest/devguide/API_GetRecoveryPointRestoreMetadata.html](https://docs.amazonaws.cn/aws-backup/latest/devguide/API_GetRecoveryPointRestoreMetadata.html)。

标准 SAP HANA 数据库恢复点示例：

```
"RestoreMetadata": {
        "BackupSize": "1660948480", 
        "DatabaseName": "DATABASENAME",
        "DatabaseType": "SYSTEM",
        "HanaBackupEndTime": "1674838362",
        "HanaBackupId": "1234567890123",
        "HanaBackupPrefix": "1234567890123_SYSTEMDB_FULL",
        "HanaBackupStartTime": "1674838349",
        "HanaVersion": "2.00.040.00.1553674765",
        "IsCompressedBySap": "FALSE",
        "IsEncryptedBySap": "FALSE",
        "SourceDatabaseArn": "arn:aws:ssm-sap:region:accountID:HANA/applicationID/DB/DATABASENAME",
        "SystemDatabaseSid": "HDB",
        "aws:backup:request-id": "46bbtt4q-7unr-2897-m486-yn378k2mrw9c"
    }
```

连续 SAP HANA 数据库恢复点示例：

```
"RestoreMetadata": {
        "AvailableRestoreBases": "[1234567890123,9876543210987,1472583691472,7418529637418,1678942598761]",
        "BackupSize": "1711284224",
        "DatabaseName": "DATABASENAME",
        "DatabaseType": "TENANT",
        "EarliestRestorablePitrTimestamp": "1674764799789",
        "HanaBackupEndTime": "1668032687",
        "HanaBackupId": "1234567890123",
        "HanaBackupPrefix": "1234567890123_HDB_FULL",
        "HanaBackupStartTime": "1668032667",
        "HanaVersion": "2.00.040.00.1553674765",
        "IsCompressedBySap": "FALSE",
        "IsEncryptedBySap": "FALSE",
        "LatestRestorablePitrTimestamp": "1674850299789",
        "SourceDatabaseArn": "arn:aws:ssm-sap:region:accountID:HANA/applicationID/DB/SystemDatabaseSid",
        "SystemDatabaseSid": "HDB",
        "aws:backup:request-id": "46bbtt4q-7unr-2897-m486-yn378k2mrw9d"
    }
```

## 适用于 EC2 上 SAP HANA 的 CLI
<a name="w2aac17c31c43c13"></a>

`start-restore-job` 命令将恢复由一个 Amazon 资源名称 (ARN) 标识的已保存资源。CLI 将遵循上面的 API 准则。

**摘要：**

```
start-restore-job
--recovery-point-arn value
--metadata value
--aws:backup:request-id value          
[--idempotency-token value]
[--resource-type value]
[--cli-input-json value]
[--generate-cli-skeleton value]
[--debug]
[--endpoint-url value]
[--no-verify-ssl]
[--no-paginate]
[--output value]
[--query value]
[--profile value]
[--region value]
[--version value]
[--color value]
[--no-sign-request]
[--ca-bundle value]
[--cli-read-timeout value]
[--cli-connect-timeout value]
```

**Options**

`--recovery-point-arn`（字符串）是 Amazon 资源编号 (ARN) 形式的字符串，用于唯一地标识恢复点；例如 `arn:aws:backup:region:123456789012:recovery-point:46bbtt4q-7unr-2897-m486-yn378k2mrw9d`

`--metadata`（映射）：一组元数据键值对。包含还原恢复点所需的信息，例如资源名称。您可以通过调用 `GetRecoveryPointRestoreMetadata` 来获取在备份资源时有关该资源的配置元数据。但是，除了 `GetRecoveryPointRestoreMetadata` 提供的值之外，可能还需要其他值才能还原资源。您需要指定特定元数据才能还原 Amazon EC2 实例上的 SAP HANA：
+ `aws:backup:request-id`: 这是用于幂等性的任何 UUID 字符串。它不会以任何方式改变您的还原体验。
+ `aws:backup:TargetDatabaseArn`：指定要还原到的数据库。这是 Amazon EC2 上的 SAP HANA 数据库 ARN。
+ `CatalogRestoreOption`：指定从何处还原目录。选择 `NO_CATALOG`、`LATEST_CATALOG_FROM_AWS_BACKUP` 和 `CATALOG_FROM_LOCAL_PATH` 之一：
+ `LocalCatalogPath`：如果 CatalogRestoreOption 元数据值为`CATALOG_FROM_LOCAL_PATH`，则在您的 EC2 实例上指定本地目录的路径。它应该是您的 EC2 实例中的有效文件路径。
+ `RecoveryType`：当前支持 `FULL_DATA_BACKUP_RECOVERY`、`POINT_IN_TIME_RECOVERY` 和 `MOST_RECENT_TIME_RECOVERY` 恢复类型。

键 =（字符串）；值 =（字符串）。速记语法：

```
KeyName1=string,KeyName2=string
```

JSON 语法：

```
{"string": "string"
  ...}
```

`--idempotency-token` 是客户选择的字符串，可用于区分对 `StartRestoreJob` 的其他相同调用。使用相同的幂等性令牌重试成功的请求会生成一条成功消息，而不执行任何操作。

`--resource-type` 是一个字符串，它启动用于还原以下资源之一的恢复点的作业：`SAP HANA on Amazon EC2`（适用于 SAP HANA on Amazon EC2）。*或者*，可以使用命令 `aws ssm-sap tag-resource` 标记 SAP HANA 资源。

**输出**：`RestoreJobId` 是一个字符串，用于唯一地标识还原恢复点的作业。

## SAP HANA 高可用性（HA）还原
<a name="saphanarestoreha"></a>

还原 SAP HANA 的高可用性（HA）系统时，需要包括一些重要的注意事项和其他步骤。展开下面最符合您的使用案例的章节。

还原场景：

### 系统数据库还原到 SAP HANA HA 目标
<a name="systemdbtargetha"></a>

还原到目标（目的地）SAP HANA HA 系统之前，

1. 如果已安装集群，请将所有集群备注置于维护模式。

1. 在所有节点（包括主节点和辅助节点）上停止 SAP HANA 数据库。

1. *（推荐）*禁用所有备份计划，以确保它们不会干扰还原操作。

还原作业完成后，转到已还原的 SAP HANA HA 系统，然后：

1. 在主节点上启动 SAP HANA 数据库。

1. 手动启动任何已还原系统数据库但未还原租户的租户数据库。

1. 在主节点和辅助节点之间重新建立 SAP HANA 系统复制（HSR）。

1. 在辅助节点上启动 SAP HANA 数据库。

1. 如果安装了集群，请确保所有集群节点都处于在线状态。

1. 启用您在还原操作之前禁用的任何备份计划。

*（可选）*您可以通过调用 [https://docs.amazonaws.cn/ssmsap/latest/APIReference/API_StartApplicationRefresh.html](https://docs.amazonaws.cn/ssmsap/latest/APIReference/API_StartApplicationRefresh.html) 在 [Amazon Systems Manager for SAP](https://docs.amazonaws.cn/ssm-sap/latest/userguide/what-is-ssm-for-sap.html) 上保持应用程序同步，也可以等待计划的应用程序刷新以带来最新 SAP 元数据。

### 系统数据库还原到 SAP HANA 单节点目标
<a name="systemdbtargetsingle"></a>

开始还原作业之前，转到目标单节点 SAP HANA 系统，然后：

1. 在目标 SAP HANA 系统上停止 SAP HANA 数据库。

1. *（推荐）*禁用所有备份计划，以确保它们不会干扰还原操作。

还原作业完成后，转到目标单节点 SAP HANA 系统，然后：

1. 在目标 SAP HANA 系统上启动 SAP HANA。

1. 在目标节点上手动启动每个租户数据库。

1. 启用您在还原操作之前禁用的任何备份计划。

*（可选）*您可以通过调用 [https://docs.amazonaws.cn/ssmsap/latest/APIReference/API_StartApplicationRefresh.html](https://docs.amazonaws.cn/ssmsap/latest/APIReference/API_StartApplicationRefresh.html) 在 [Amazon Systems Manager for SAP](https://docs.amazonaws.cn/ssm-sap/latest/userguide/what-is-ssm-for-sap.html) 上保持应用程序同步，也可以等待计划的应用程序刷新以带来最新 SAP 元数据。

### 租户数据库（原位或系统副本）
<a name="tenantdb"></a>

开始还原作业之前，转到目标 SAP HANA 系统，然后：

1. *（可选，但推荐）*将所有已安装的集群置于维护模式，以免在还原操作期间发生意外接管。

1. 确保系统数据库正在目标 SAP HANA 系统上运行。

1. *（推荐）*禁用所有备份计划，以确保它们不会干扰还原操作。

还原作业完成后：
+ 启用您在还原操作之前禁用的任何备份计划。

## 问题排查
<a name="saphanarestoretroubleshooting"></a>

如果在尝试备份操作时出现以下任何错误，请参阅相关的解决方案。
+ **错误：**连续备份日志错误

  为了维护连续备份的恢复点，SAP HANA 会为所有更改创建日志。当日志不可用时，每个连续恢复点的状态都将变为 `STOPPED`。最后一个可用于还原的可行恢复点的状态为 `AVAILABLE`。如果在状态为 `STOPPED` 的恢复点和状态为 `AVAILABLE` 的恢复点之间的时间内出现日志数据丢失，则无法保证这些时间能够成功还原。如果您输入的日期和时间在此范围内， Amazon Backup 将尝试备份，但会使用最接近的可恢复时间。出现此错误时，将显示消息 `“Encountered an issue with log backups. Please check SAP HANA for details."`

  **解决方案：**在控制台中，将基于日志显示最近可还原时间。您可以输入比显示的时间更近的时间。但是，如果日志中没有该时间的数据，则 Amazon Backup 将使用最新的可恢复时间。
+ **错误**：`Internal error`

  **解决方案：**通过控制台创建支持案例，或联系 Amazon Web Services 支持 并提供还原任务编号等还原详情。
+ **错误：**`The provided role arn:aws:iam::ACCOUNT_ID:role/ServiceLinkedRole cannot be assumed by Amazon Backup`

  **解决方案：**确保调用还原时担任的角色具有创建服务相关角色所需的权限。
+ **错误：**`User: arn:aws:sts::ACCOUNT_ID:assumed-role/ServiceLinkedRole/AWSBackup-ServiceLinkedRole is not authorized to perform: ssm-sap:GetOperation on resource: arn:aws:ssm-sap:us-east-1:ACCOUNT_ID:...`

  **解决方案：**确保正确输入了调用先决条件中概述的还原权限时所担任的角色。
+ **错误：**`b* 449: recovery strategy could not be determined: [111014] The backup with backup id '1660627536506' cannot be used for recovery SQLSTATE: HY000\n`

  **解决方案：**确保正确安装了 Backint Agent。检查所有先决条件，尤其是在 [SAP 应用程序服务器上安装 Amazon BackInt 代理和适用 Amazon Systems Manager 于](https://docs.amazonaws.cn/sap/latest/sap-hana/aws-backint-agent-installing-configuring.html) SAP 的必备条件，然后再次尝试安装 BackInt 代理。
+ **错误：**`IllegalArgumentException: Restore job provided is not ready to return chunks, current restore job status is: CANCELLED`

  **解决方案：**服务工作流程已取消还原作业。重试还原作业。
+ **错误：**在 SAP HANA 高可用性系统上还原租户数据库时遇到问题：`b* -10709: Connection failed (RTE:[89006] System call 'connect' failed, rc=111:Connection refused ([::1]:40404 → localhost:30013))\n`

  **解决方案：**检查 SAP HANA，确保 SYSTEMDB 已启动并运行。
+ **错误**：`b'* 448: recovery could not be completed: [301102] exception 301153: Sending root key to secondary failed: connection refused. This may be caused by a stopped system replication secondary. Please keep the secondary online to receive the restored root key. Alternatively you could unregister the secondary site in case of an urgent recovery.\n SQLSTATE: HY000\n'`

  **解决方案：**在 SAP HANA 高可用性系统上，当一项活动的还原操作正在运行时，SAP HANA 可能未在辅助节点上运行。在辅助节点上启动 SAP HANA，然后再次重试还原作业。
+ **错误：**`RequestError: send request failed\ncaused by: read tcp 10.0.131.4:40482->35.84.99.47:443: read: connection timed out"`

  **解决方案：**实例上出现暂时性网络不稳定。请重试还原。如果此问题持续发生，请尝试将 `ForceRetry: "true"` 添加到 `/hana/shared/aws-backint-agent/aws-backint-agent-config.yaml.` 处的代理配置文件 

有关任何其他与 Amazon Backint 代理相关的问题，请参阅针对 SAP HANA 的 [Amazon Backint 代理进行故障排除](https://docs.amazonaws.cn/sap/latest/sap-hana/aws-backint-agent-troubleshooting.html)。