

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

# 对 SAP HANA 的 AWS Backint Agent 进行故障排除
<a name="aws-backint-agent-troubleshooting"></a>

以下文档可以帮助您解决适用于 SAP HANA 的 Backint Agen AWS t 安装或备份时可能遇到的问题。

**Topics**
+ [Agent 日志](#aws-backint-agent-troubleshooting-agent-logs)
+ [安装](#aws-backint-agent-troubleshooting-installation)
+ [备份和恢复](#aws-backint-agent-troubleshooting-backup-recovery)
+ [备份删除](#aws-backint-agent-troubleshooting-deletion)

## Agent 日志
<a name="aws-backint-agent-troubleshooting-agent-logs"></a>

要找到日志来帮助您排查错误和故障，请检查以下位置。

 **代理日志** 

```
{INSTALLATION DIRECTORY}/aws-backint-agent/aws-backint-agent.log
```

 **系统数据库 backup/recovery 日志** 

```
/usr/sap/<SID>/HDB<Instance No>/<hostname>/trace/backup.log
/usr/sap/<SID>/HDB<Instance No>/<hostname>/trace/backint.log
```

 **租户数据库 backup/recovery 日志** 

```
/usr/sap/<SID>/HDB<Instance No>/<hostname>/trace/DB_<TENANT>/backup.log
/usr/sap/<SID>/HDB<Instance No>/<hostname>/trace/DB_<TENANT>/backint.log
```

## 安装
<a name="aws-backint-agent-troubleshooting-installation"></a>

 **问题：安装 AWS Backint 代理时返回错误。**

返回的错误：

```
SyntaxError: Non-UTF-8 code starting with '\xf3' in file install-aws-backint-agent on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
```
+  **根本原因**：用户环境中只安装了 Python 版本 3。
+  **解决方案**：运行以下命令，以安装 Python 版本 2 并创建指向 `usr/bin/python` 的符号链接。

  ```
  yum install -y python2
  ```

  ```
  ln -s /usr/bin/python2.7 /usr/bin/python
  ```

 **问题：无法通过 SSM 文档查看列出的要安装的实例。**
+  **根本原因**：

  1. 实例上未安装 SSM 代理。

  1. 如果安装了 SSM 代理，则实例未运行或实例上的 SSM 代理未运行。

  1. 实例上安装的 SSM 代理的版本早于 2.3.274.0。
+  **解决方法**：按照[练习在实例上安装或更新 SSM 代理](https://docs.aws.amazon.com/systems-manager/latest/userguide/getting-started-agent.html)中列出的步骤操作。您可以使用以下命令验证 SSM 代理是否正在运行。

  ```
  sudo systemctl status amazon-ssm-agent
  ```

 **问题：使用 SSM 安装文档时返回了以下错误。**

 `failed to download manifest - failed to retrieve package document description: InvalidDocument: Document with name AWS BackintAgent with version x does not exist.` 
+  **根本原因**：输入了不支持的 AWS Backint 代理版本。
+  **解决方案**：查看 AWS Backint 代理的版本历史记录。有关更多信息，请参阅 [AWS Backint 代理的版本历史记录](aws-backint-agent-version-history.md)。

## 备份和恢复
<a name="aws-backint-agent-troubleshooting-backup-recovery"></a>

 **问题：`AccessDenied`出现在代理日志中。**
+  **根本原因**：

  1.  EC2 实例的 IAM 角色没有访问 S3 存储桶的正确权限。

  1. 代理配置文件没有将 `S3BucketOwnerAccountID` 包括在双引号内。这`S3BucketOwnerAccountID`是 12 位数的 AWS 账户 ID。

  1. S3 存储桶不归 `S3BucketOwnerAccountID` 提供的账户所有。

  1. 为 `S3BucketOwnerAccountID` 提供的 S3 存储桶在 2019 年 5 月之前创建。
+  **解决方案**：验证安装 AWS Backint 代理的[先决条件](aws-backint-agent-s3-prerequisites.md)。

 **问题：由于 S3 连接，Backup 或恢复失败** 
+  **根本原因**：附加到实例的 IAM 角色没有访问 S3 存储桶的适当权限。
+  **解决方案**：验证安装 AWS Backint 代理的[先决条件](aws-backint-agent-s3-prerequisites.md)。

 **问题：代理日志显示`Backint cannot execute hdbbackint`或`No such file or directory`。**
+  **根本原因**：

  1. 如果您是手动安装代理，则为代理可执行文件创建符号链接未成功。

  1. 如果您是使用 SSM 代理，则在创建符号链接时代理的第 2 步失败。您可以通过查看 RunCommand 实现详细信息来验证这一点。
+  **解决方法**：验证您是否正确遵循了本文档中的[安装步骤](aws-backint-agent-s3-installing-configuring.md)。

 **问题：从 SAP HANA 控制台启动备份时显示以下错误：**

 `Could not start backup for system <SID> DBC: [447]: backup could not be completed: [110091] Invalid path selection for data backup using backint: /usr/sap/<SID>/SYS/global/hdb/backint/COMPLETE_DATA_BACKUP must start with /usr/sap/<SID>/SYS/global/hdb/backint/DB_<TENANT>` 
+  **根本原因**：将 SAP HANA 系统添加到 SAP HANA Studio 时，您选择了单容器模式，而不是多容器模式。
+  **解决方法**：将 SAP HANA 系统添加到 SAP HANA Studio，选择多容器模式，然后尝试再次启动备份。有关更多详细信息，请参阅[使用 backint 进行数据备份的路径选择无效](https://me.sap.com/notes/2803753)（需要门户访问权限）。

 **问题：备份失败，`aws-backint-agent.log` 中显示了以下错误：**

 `Error creating uploadId: AuthorizationHeaderMalformed: The authorization header is malformed; the region '<region id>' is wrong; expecting '<region id>'` 
+  **根本原因**：您在 `aws-backint-agent-config.yaml` 配置文件中为 `AwsRegion` 参数指定了不正确的区域 ID。
+  **解决方案**：指定 Amazon S3 存储桶的 AWS 区域，然后重新启动备份。您可以从 Amazon S3 控制台找到创建 Amazon S3 存储桶的区域。

 **问题：任何 AWS Backint 代理操作都失败，并出现以下错误之一，这些错误显示在`aws-backint-agent.log`：**

 `Error creating upload id for bucket:<mys3bucket>` 

或者

 `NoCredentialProviders: no valid providers in chain.` 
+  **潜在的根本原因**：您的 Amazon EC2 实例未附加任何 IAM 角色。
+  **解决方案**： AWS Backint 代理需要为您的 EC2 实例附加一个 IAM 角色才能访问用于备份和还原操作的 AWS 资源。将 IAM 角色附加到您的 EC2 实例，然后再次尝试该操作。有关更多信息，请参阅安装 AWS Backint 代理的[先决条件](aws-backint-agent-s3-prerequisites.md)。
+  **潜在的根本原因**：对运行 Agent 的 HANA 实例使用代理导致了 Agent 失败。
+  **解决方案**：对运行 Agent 的 HANA 实例使用代理时，请勿对实例元数据调用使用代理，否则该调用将挂起。无法通过代理获取实例元数据信息，因此必须将其排除在外。更新位于 `{INSTALLATION DIRECTORY}/aws-backint-agent-launcher.sh` 的启动程序脚本以指定 `169.254.169.254` 作为 `no_proxy` 主机。

  ```
  # cat aws-backint-agent-launcher.sh
  #!/bin/bash
  export https_proxy=<PROXY_ADDRESS>:<PROXY_PORT>
  export HTTP_PROXY=<PROXY_ADDRESS>:<PROXY_PORT>
  export no_proxy=169.254.169.254
  export NO_PROXY=169.254.169.254
  /hana/shared/aws-backint-agent/aws-backint-agent "$@"
  ```

  有关在 SAP HANA 环境中使用代理地址的更多信息，请参阅在 [AWS Backint 代理中使用代理地址](aws-backint-agent-s3-installing-configuring.md#aws-backint-agent-sap-hana-proxy)。

 **问题：启动备份或还原时，在 SAP HANA Studio 或 SAP HANA Cockpit 中出现以下错误：**

 `backup could not be completed, Backint cannot execute /usr/sap/<SID>/SYS/global/hdb/opt/hdbbackint, Permission denied (13)` 
+  **根本原因**： AWS Backint 代理二进制文件或启动器脚本没有操作系统级别的执行权限。
+  **解决方案**：为安装目录`aws-backint-agent-launcher.sh`中的 AWS Backint 代理二进制文件`aws-backint-agent`和启动器脚本设置执行权限（例如，`/hana/shared/aws-backint-agent/`）。

 **问题：我的备份运行速度太慢，需要更长的时间才能完成。**
+  **根本原因**：备份和还原的性能取决于许多因素，例如使用的 EC2 实例类型、EBS 卷和 SAP HANA 通道的数量。如果数据库大小小于 128 GB，则 SAP HANA 默认为单个通道，或者您的 SAP HANA 参数 `parallel_data_backup_backint_channels` 设置为 1。
+  **解决方法**：数据库备份的速度取决于 SAP HANA 数据卷 (/hana/data) 有多少存储吞吐量可用。SAP HANA 数据卷可用的总存储吞吐量取决于您的 Amazon EBS 存储类型和用于条带化的卷数量。要获得最佳性能，请遵循[存储配置](https://docs.aws.amazon.com/sap/latest/sap-hana/hana-ops-storage-config.html)最佳实践。您可以将与 SAP HANA 数据文件系统关联的 Amazon EBS 卷切换为 `io1`、`io2` 或 `gp3` 卷类型。此外，如果数据库大小大于 128 GB，则可以通过调整并行备份通道数来提高备份性能。增大 `parallel_data_backup_backint_channels` 的值，然后尝试再次启动备份。我们建议您在尝试调整备份性能时考虑到资源争用与正常系统运行性能。

 **问题：我的备份和还原失败了，而且系统显示了以下错误之一：**

1.  `Backint exited with exit code 1 instead of 0. console output: Crashed during fetch and conversion read/write tcp 10.0.2.83:56192→52.216.88.123:443: use of closed network connection` 

1.  `Backint exited with exit code 1 instead of 0. console output: Crashed during fetch and conversion caused by: read tcp 10.0.2.83:54890→52.216.130.243:443: read: connection reset by peer` 
   +  **根本原因**：由于吞吐量高， AWS Backint 代理和 S3 之间的连接失败。
   +  **解决方案**：按照以下步骤排查此问题。

1. 将 AWS Backint 代理版本更新到 2.0.4.768 或更高版本。这些版本提高了对 S3 连接超时的恢复能力。
   + 代理更新后，请确保 SAP HANA 获取了最新版本的代理。运行以下命令以验证代理的版本。

     ```
     /usr/sap/<SID>/SYS/global/hdb/opt/hdbbackint -v
     ```

     有关更多信息，请参阅 \$1https---docs-aws-amazon-com-sap-latest-sap-hana-aws-backint-agent-s 3-installing-configuring-html-aws-backint-agent-latest-version\$1 [获取当前安装的 AWS Backint 代理版本]。

1. 如果问题仍然存在，请执行以下步骤 – 减小以下备份和还原参数。
   +  **备份** 
     +  `UploadConcurrency` 
     +  `UploadChannelSize` 
   +  **还原** 
     +  `MaximumConcurrentFilesForRestore` 
     +  `DownloadConcurrency` 

    *这些值减少了 AWS Backint 代理在备份和恢复期间用于实现高性能的并发性和并行性。有关上述[参数的默认值，请参阅修改 AWS Backint 代理配置](https://docs.aws.amazon.com/sap/latest/sap-hana/aws-backint-agent-s3-installing-configuring.html#aws-backint-agent-latest-version)参数。*

1. 查看网络设置和配置。

1. 执行跟踪路由，了解 Amazon S3 流量是否经过了防火墙数据包扫描器或任何其他可能显著增加网络延迟的软件。

 **问题：在 `aws-backint-agent-config.yaml` 中设置 `S3ShortenBackupDestinationEnabled = ‘true’` 参数时，在处理数据库恢复期间会显示“No data backups found”错误。**

![\[示意图，显示了在 S3S 中处理数据库恢复时显示的“No data backups found”错误。\]](http://docs.aws.amazon.com/zh_cn/sap/latest/sap-hana/images/s3-shorten-true-troubleshoot-backint.jpg)

+  **根本原因**： AWS Backint 代理仅在配置文件中提供的 Amazon S3 路径中搜索日志和数据备份。由于 `S3ShortenBackupDestinationEnabled` 参数更改了 Amazon S3 文件夹，因此找不到备份。
+  **解决方案**：您可以将 `S3ShortenBackupDestinationEnabled` 参数更改为 `false` 并运行还原，也可以将之前的备份和 SAP HANA 备份目录移动到新的 S3 位置。有关更多详细信息，请参阅[将 AWS Backint 代理配置为使用较短的 Amazon S3 路径](aws-backint-agent-s3-installing-configuring.md#configure-aws-backint-agent-to-use-shorter-amazon-s3-paths)。

 **问题：在处理数据库恢复时，系统显示了“No data backups found”错误，并且代理日志显示“The operation is not valid for the objects' access tier”。**

![\[示意图，显示了“No data backups found”错误和代理日志消息“The operation is not valid for the objects' access tier”。\]](http://docs.aws.amazon.com/zh_cn/sap/latest/sap-hana/images/s3-intelligent-tiering-troubleshoot-backint.png)

+  **根本原因**：在中设置了 **S3 StorageClass = “INTELLIGENT\$1TIERING” 参数后`aws-backint-agent-config.yaml`，对象已移至存档存储层**。 AWS Backint 代理不支持从存档层恢复。
+  **解决方案**：必须先[还原已存档的 S3 对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/restoring-objects.html)，然后才能将其移动到访问层。此过程可能需要数分钟到 12 小时，具体取决于所选的存档层和还原选项。S3 还原完成后，您可以启动 HANA 数据库的恢复。

 **问题：IAM 发起的备份请求无法访问您的 Amazon S3 存储桶。**

返回的错误：

```
Error Fetching Bucket: Access Denied
```
+  **根本原因**：内部任务的凭证在 `0/aws` 文件夹中配置，默认情况下会选择该凭证而非已配置的 IAM 角色来发起备份请求。
+  **解决方案**：当您在不提供任何凭据参数的情况下初始化新的服务客户端时，SDK 会使用默认的凭据提供程序链来查找 AWS 凭据。开发工具包将使用凭证提供程序链中的第一个返回。默认提供程序链将按照以下顺序查找凭证：

  1. 环境变量

  1. 共享的凭证文件

  1. 如果您的应用程序使用 Amazon ECS 任务定义或 RunTask API 操作，则使用 IAM 角色执行任务

  1. 如果您的应用程序在亚马逊 EC2 实例上运行，则亚马逊的 IAM 角色 EC2

  有关更多信息，请参阅[配置 AWS SDK for Go](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html)。

 **问题：使用 Backint 代理执行备份和恢复时，“/bin/sh：导入`哪个`的函数定义时出错”。 AWS **

如果 `which`" error may occur when performing backup and restore with AWS Backint agent. This error occurs when ` BASH_FUNC_which%%` 环境变量具有某些旧版 SAP 脚本不支持的多行值，导入函数定义时就会出现此错误。

 **受影响的环境** 
+ Red Hat Enterprise Linux 8.5 或更高版本
+ 包含“which”程序包 2.21-18 或更高版本的系统
  +  **根本原因**：`which-2.21-18.el8.x86_64 RPM` 程序包在 `/etc/profile.d/which2.{csh,sh}` 文件中设置了具有多行函数定义的 `BASH_FUNC_which%%` 变量。一些旧版 SAP 脚本无法正确解析这个变量。
  +  **解决方案**：使用以下命令检查 `BASH_FUNC_which%%` 是否正在运行。

    ```
    $ env | grep -A 2 BASH_FUNC_which
    ```

    根据您的业务需求，使用以下解决方案之一。

    1.  *临时*：运行 `unset -f which` 以取消设置该函数。必须对每个新会话重复此步骤。

    1.  *用户级*：将 `unset -f which` 添加到用户的 `0bashrc` 文件。验证这是不是适合您的可扩展解决方案。

    1.  *系统级*：将 `/etc/profile.d/which2.{sh,csh}` 文件移动到备份位置或使用以下步骤创建 `/etc/profile.d/zzz_which2.{sh,csh}`。

        `sh: echo "unset -f which"` > `/etc/profile.d/zzz_which2.sh csh: echo "unalias which"` > `/etc/profile.d/zzz_which2.csh`.

       系统级修复是一个持久性解决方案，它可以在程序包更新到“Which”程序包后继续存在。我们建议采用此解决方案。

## 备份删除
<a name="aws-backint-agent-troubleshooting-deletion"></a>

 **问题：您已从 SAP HANA 备份控制台（SAP HANA Studio 或 SAP HANA Cockpit）删除了 SAP HANA 备份，但已删除的备份文件仍然显示在 Amazon S3 文件夹中。**
+  **根本原因**：由于权限问题， AWS Backint 代理无法从 Amazon S3 存储桶中删除关联的备份文件。
+  **解决方案**：当您从 SAP HANA AWS 备份控制台删除备份时，Backint 代理需要`s3:DeleteObject`权限才能从目标 Amazon S3 存储桶中删除备份文件。确保附加到您的 EC2 实例的 IAM 配置文件具有`s3:DeleteObject`权限。对于已从 SAP HANA 删除的备份，您可以手动从 Amazon S3 存储桶删除关联文件。我们建议您在手动删除任何备份文件之前采取额外的预防措施。手动删除错误的备份文件可能会影响您将来还原 SAP HANA 系统的能力。