使用磁盘快照备份和恢复 SAP HANA

本指南介绍了如何使用 Google Cloud 的 Agent for SAP 的磁盘快照功能备份和恢复 SAP HANA 数据库。

如需了解此功能,请参阅使用磁盘快照为 SAP HANA 执行备份和恢复

准备工作

设置权限

如需使用 Google Cloud 的 Agent for SAP 的磁盘快照功能备份和恢复 SAP HANA 数据库,您必须设置以下权限:

  • 如需创建磁盘快照,请授予以下 IAM 权限:

    单磁盘

    如果您的 /hana/data 卷托管在一个 Persistent Disk 或 Hyperdisk 卷上,请向 Compute Engine 实例授予以下权限:

    compute.disks.create
    compute.disks.createSnapshot
    compute.disks.get
    compute.disks.setLabels
    compute.disks.use
    compute.globalOperations.get
    compute.instances.attachDisk
    compute.instances.detachDisk
    compute.instances.get
    compute.snapshots.create
    compute.snapshots.get
    compute.snapshots.setLabels
    compute.snapshots.useReadOnly
    compute.zoneOperations.get
    

    条状磁盘

    如果您的 /hana/data 卷托管在多个 Persistent Disk 或 Hyperdisk 卷上,请向 Compute Engine 实例授予以下权限:

    compute.disks.addResourcePolicies
    compute.disks.create
    compute.disks.get
    compute.disks.list
    compute.disks.removeResourcePolicies
    compute.disks.use
    compute.disks.useReadOnly
    compute.globalOperations.get
    compute.instances.attachDisk
    compute.instances.detachDisk
    compute.instances.get
    compute.instantSnapshotGroups.create
    compute.instantSnapshotGroups.delete
    compute.instantSnapshotGroups.get
    compute.instantSnapshotGroups.list
    compute.instantSnapshots.list
    compute.instantSnapshots.useReadOnly
    compute.resourcePolicies.create
    compute.resourcePolicies.use
    compute.resourcePolicies.useReadOnly
    compute.snapshots.create
    compute.snapshots.get
    compute.snapshots.list
    compute.snapshots.setLabels
    compute.snapshots.useReadOnly
    compute.zoneOperations.get
    
  • 如需创建基于磁盘快照的备份,代理使用的 SAP HANA 数据库用户必须具有 BACKUP OPERATORBACKUP ADMIN 权限。如需了解详情,请参阅 SAP 文档备份和恢复所需的授权

  • 如需备份和恢复 SAP HANA 数据库,运行代理命令的操作系统用户必须是 root 用户,或者具有 sudo 访问权限才能运行以下命令。您还可以通过在 /etc/sudoers.d 目录中创建群组来提供 sudo 访问权限,例如:

    %sapagent_snapshot_sudoers ALL=(ALL:ALL) NOPASSWD:/sbin/lvdisplay, /sbin/vgscan, /sbin/dmsetup, /sbin/lvscan, /usr/sbin/xfs_freeze, /usr/bin/google_cloud_sap_agent

创建磁盘一致性组

如果您的 /hana/data 卷托管在一个磁盘上,请跳过本部分。

如果您的 /hana/data 卷托管在多个磁盘上,则必须创建一个一致性组,并将托管 /hana/data 卷的磁盘添加到该一致性组。您必须在磁盘所在的区域中创建一致性组。

如需了解如何执行此操作,请参阅创建一致性组

记下一致性组名称。代理会在创建基于快照的备份时使用该参数。

创建基于磁盘快照的备份

  • 如需为 SAP HANA 数据库的 /hana/data 卷创建基于磁盘快照的备份,请运行 Google Cloud 的 Agent for SAP 的 hanadiskbackup 命令:

    从 3.3 版开始,-source-disk-source-disk-zone 参数是可与 hanadiskbackup 命令搭配使用的可选参数。这是因为该代理可以自动检测托管您的 /hana/data 目录的磁盘。不过,如果您指定了这些参数,它们会覆盖代理的自动检测。

    • 如果您想使用 hdbuserstore 密钥进行 SAP HANA 身份验证,请运行以下命令:
      sudo /usr/bin/google_cloud_sap_agent hanadiskbackup \
            -project=DESTINATION_PROJECT_ID \
            -sid=SID \
            -hdbuserstore-key=HDB_USERSTORE_KEY
    • 如果您想使用用户名和 Secret Manager Secret 进行 SAP HANA 身份验证,请运行以下命令:
      sudo /usr/bin/google_cloud_sap_agent hanadiskbackup \
            -project=DESTINATION_PROJECT_ID \
            -host=HANA_HOST_ADDRESS \
            -port=HANA_PORT_NUMBER \
            -sid=SID \
            -hana-db-user=HANA_USERNAME \
            -password-secret=HANA_USER_PWD_SECRET_NAME
    • 如果您想使用用户名和密码进行 SAP HANA 身份验证,请运行以下命令:
      sudo /usr/bin/google_cloud_sap_agent hanadiskbackup \
            -project=DESTINATION_PROJECT_ID \
            -host=HANA_HOST_ADDRESS \
            -port=HANA_PORT_NUMBER \
            -sid=SID \
            -hana-db-user=HANA_USERNAME \
            -password=HANA_PASSWORD

    替换以下内容:

    • DESTINATION_PROJECT_ID:您要在其中创建磁盘快照的 Google Cloud 项目的 ID
    • HANA_HOST_ADDRESS:托管 SAP HANA 数据库的 Compute Engine 实例的主机名或 IP 地址

      在高可用性 (HA) 系统中,指定 SAP HANA 主节点中本地主机的主机名或 IP 地址。请勿使用集群中所用的虚拟 IP (VIP) 来标识主节点。在灾难恢复 (DR) 部署中,指定 SAP HANA 主实例中本地主机的主机名或 IP 地址。

    • HANA_PORT_NUMBER:接受备份和恢复请求的 SAP HANA 端口

    • SID:SAP HANA 系统的 SAP 系统标识符 (SID)

    • HANA_USERNAME:要用于创建备份的 SAP HANA 数据库用户名

    • HDB_USERSTORE_KEY:如果您已创建 hdbuserstore 密钥以对指定的 SAP HANA 用户进行身份验证,请指定该密钥

    • HANA_USER_PWD_SECRET_NAME:如果您使用 Secret Manager 存储 SAP HANA 数据库用户的密码,请指定相应的 Secret 名称

    • HANA_PASSWORD:如果您使用明文密码进行 SAP HANA 身份验证,请指定该密码

    下表介绍了 hanadiskbackup 命令支持的参数:

    参数 说明
    -port 指定接受备份和恢复请求的 SAP HANA 端口。
    -sid 指定 SAP HANA 系统的 SAP 系统标识符 (SID)。
    -hana-db-user

    指定要用于创建备份的 SAP HANA 数据库用户名。

    如果您指定 -hdbuserstore-key,则可以跳过指定 -hana-db-user 参数。

    -password

    指定用于创建备份的 SAP HANA 数据库用户的密码。

    如果您使用了 -password-secret-hdbuserstore-key 参数,请勿指定此参数。我们建议您使用以下参数之一,而不要使用 -password

    对于 SAP HANA 身份验证,代理使用以下优先顺序:如果指定,-hdbuserstore-key 参数优先于 -password 参数,而 -password 参数优先于 -password-secret 参数。我们建议您在运行 hanadiskbackup 命令时仅指定一个身份验证选项。

    -password-secret

    可选。如果您使用 Secret Manager 存储 SAP HANA 数据库用户的密码,请指定相应的 Secret 名称。

    在 Secret Manager 中,请确保 Secret 值(即密码)至少包含 8 个字符,并且至少包含 1 个大写字母、1 个小写字母和 1 个数字。

    对于 SAP HANA 身份验证,代理使用以下优先顺序:如果指定,-hdbuserstore-key 参数优先于 -password 参数,-password 参数优先于 -password-secret 参数。我们建议您在运行 hanadiskbackup 命令时仅指定一个身份验证选项。

    -hdbuserstore-key

    如需安全地连接到 SAP HANA 系统,请指定您为该系统创建的安全用户存储区 (hdbuserstore) 密钥。

    如需使用 hdbuserstore 密钥进行身份验证,请确保满足以下条件:

    • SAP 工具 hdbsqlhdbuserstore 安装在托管代理的计算实例上。
    • hdbuserstore 密钥对应于一个特定的 SAP HANA 实例。您无法使用包含多个 SAP HANA 实例主机名的密钥。
    • SIDadm 用户可以使用此密钥查询 SAP HANA 数据库。其中,SID 是指您为 sid 参数指定的值。您可以通过以 SIDadm 用户身份运行以下命令来验证这一点:
      hdbsql -U HDB_USERSTORE_KEY "SELECT * FROM DUMMY"

    此配置参数从代理版本 3.3 开始受支持。

    如果您指定 -hdbuserstore-key,则可以跳过指定 -host-port-hana-db-user 参数。

    对于 SAP HANA 身份验证,代理使用以下优先顺序:如果指定,-hdbuserstore-key 参数优先于 -password 参数,而 -password 参数优先于 -password-secret 参数。 我们建议您在运行 hanadiskbackup 命令时仅指定一个身份验证选项。

    -host 可选。指定托管 SAP HANA 系统的 Compute Engine 实例的 IP 地址。默认值为 localhost
    -project 可选。指定运行 SAP HANA 实例的 Google Cloud 项目的 ID。
    -abandon-prepared 可选。指定是否忽略任何现有的基于快照的备份。默认值为 false
    -snapshot-name

    可选。指定您要创建的磁盘快照的名称。此参数仅适用于 /hana/data 卷托管在一个磁盘上的情况。

    默认情况下,快照按以下格式命名:snapshot-SOURCE_DISK_NAME-YYYYMMDD-HHMMSS

    -snapshot-description 可选。指定磁盘快照的说明。此参数仅适用于 /hana/data 卷托管在一个磁盘上的情况。
    -snapshot-type

    可选。指定您要为托管 /hana/data 卷的磁盘创建的快照类型。只有当您的 /hana/data 卷托管在多个磁盘上时,此参数才适用。

    默认情况下,代理会创建标准快照。此参数支持的值:STANDARDARCHIVE。如需了解这些快照类型,请参阅 归档和标准磁盘快照简介

    此参数从代理版本 3.6 开始受支持。

    -group-snapshot-name

    可选。为托管 /hana/data 卷的磁盘的快照指定快照组名称。

    默认情况下,快照组名称采用以下格式设置:CONSISTENCY_GROUP_NAME-YYYYMMDD-HHMMSS。其中,CONSISTENCY_GROUP_NAME 是您在创建磁盘一致性组部分创建的磁盘一致性组的名称。

    此参数从代理版本 3.6 开始受支持。

    -labels 可选。指定要与您创建的磁盘快照关联的一个或多个标签值对。例如:-labels="label1=value1,label2=value2"
    -source-disk 指定托管 /hana/data 卷的 Persistent Disk 或 Hyperdisk 卷的名称。

    从 3.3 版开始,-source-disk-source-disk-zone 参数是可与 hanadiskbackup 命令搭配使用的可选参数。这是因为该代理可以自动检测托管您的 /hana/data 目录的磁盘。不过,如果您指定了这些参数,它们会覆盖代理的自动检测。

    -source-disk-zone 指定托管 /hana/data 卷的磁盘所在的可用区

    从 3.3 版开始,-source-disk-source-disk-zone 参数是可与 hanadiskbackup 命令搭配使用的可选参数。这是因为该代理可以自动检测托管您的 /hana/data 目录的磁盘。不过,如果您指定了这些参数,它们会覆盖代理的自动检测。

    -source-disk-key-file 可选。如果托管 /hana/data 卷的磁盘使用 RSA 封装的客户提供的加密密钥进行加密,请指定该密钥的 JSON 文件的绝对路径。

    此参数从代理版本 3.2 开始受支持。

    -storage-location 可选。指定您要用于存储磁盘快照的 Cloud Storage 多区域Cloud Storage 区域
    -freeze-file-system

    可选。指定代理是否要冻结 SAP HANA 数据库的文件系统。默认值为 false

    此参数从代理版本 3.2 开始受支持。

    -send-metrics-to-monitoring 可选。指定快照创建的执行状态是否发送到 Cloud Monitoring。默认值为 TRUE
    -loglevel 可选。指定快照创建操作的日志记录级别。默认日志记录级别为 info。可用的日志级别包括:debuginfowarnerror
    -confirm-data-snapshot-after-create

    可选。如果您希望在快照创建完成后立即确认快照创建情况,但不确认快照是否已上传到为 -storage-location 参数指定的 Cloud Storage 存储桶,请指定值 TRUE

    默认值为 FALSE,这会导致代理在完成 CREATEUPLOAD 操作后确认创建快照。

    此参数从代理版本 3.4 开始受支持。

验证磁盘快照

您可以使用以下选项验证磁盘快照是否已创建:

  • 在 Google Cloud 控制台中,前往 Compute Engine 快照页面,然后使用磁盘名称过滤条目。如果您的 /hana/data 卷托管在一个磁盘上,您还可以使用快照名称进行过滤。如果您的 /hana/data 卷托管在多个磁盘上,您还可以使用快照组的名称进行过滤。

    转到“快照”

  • 或者,您也可以在代理的以下日志文件中查看磁盘快照详细信息:

    /var/log/google-cloud-sap-agent/hanadiskbackup.log

查看 SAP HANA 备份目录

除了创建基于磁盘快照的备份之外,hanadiskbackup 命令还会在 SAP HANA 备份目录中为其创建一个条目。以下是一个用于查看 SAP HANA 备份目录中基于快照的备份条目的 SQL 查询示例:

SELECT BACKUP_ID, STATE_NAME, COMMENT FROM M_BACKUP_CATALOG WHERE ENTRY_TYPE_NAME = 'data snapshot'

输出类似于以下示例:

BACKUP_ID,STATE_NAME,COMMENT
BACKUP_ID,"successful","SNAPSHOT_IDENTIFIER"

此输出包括以下值:

  • BACKUP_ID:在 SAP HANA 备份目录中分配给基于磁盘快照的备份的备份 ID
  • SNAPSHOT_IDENTIFIER
    • 对于一个磁盘上的 /hana/data 卷,此标识符的值取决于 -snapshot-name 参数与 hanadiskbackup 命令的使用方式。如果您未指定此参数,则系统会设置该参数的默认值,即 snapshot-SOURCE_DISK_NAME-YYYYMMDD-HHMMSS
    • 如果您的 /hana/ 卷托管在多个磁盘上,则此标识符的值取决于 -group-snapshot-name 参数与 hanadiskbackup 命令的使用方式。如果未指定此参数,则系统会设置参数的默认值,即 CONSISTENCY_GROUP_NAME-YYYYMMDD-HHMMMSS
  • SOURCE_DISK_NAME:此值取决于 -source-disk 参数与 hanadiskbackup 命令的搭配使用方式。
  • CONSISTENCY_GROUP_NAME:此值取决于 -group-snapshot-name 参数与 hanadiskbackup 命令的搭配使用方式
  • YYYYMMDD-HHMMMSS:快照的创建日期和时间。

使用基于磁盘快照的备份恢复数据库

如需使用 Google Cloud 的 Agent for SAP 的磁盘快照功能恢复 SAP HANA 数据库,请参阅适用于您的场景的说明:

为纵向扩容系统恢复数据库

如需为 Google Cloud 上部署的 SAP HANA 纵向扩容系统恢复数据库,请完成以下步骤:

  1. 通过运行代理的 hanadiskrestore 命令来恢复托管 /hana/data 卷的磁盘:

    • 如果您的 /hana/data 卷托管在一个磁盘上,请运行以下命令:

      sudo /usr/bin/google_cloud_sap_agent hanadiskrestore \
      -project=SOURCE_PROJECT_ID \
      -sid=SID \
      -source-snapshot=SOURCE_SNAPSHOT_NAME \
      [-new-disk-type=NEW_DISK_TYPE \
      -new-disk-name=NEW_DISK_NAME]
    • 如果您的 /hana/data 卷托管在多个磁盘上,请运行以下命令:

      sudo /usr/bin/google_cloud_sap_agent hanadiskrestore \
      -project=SOURCE_PROJECT_ID \
      -sid=SID \
      -group-snapshot-name=SOURCE_SNAPSHOT_GROUP_NAME \
      [-new-disk-type=NEW_DISK_TYPE ]

    替换以下内容:

    • SOURCE_PROJECT_ID:磁盘快照所在的 Google Cloud 项目的 ID
    • SID:SAP HANA 系统的 SAP 系统标识符 (SID)
    • SOURCE_SNAPSHOT_NAME:如果您的 /hana/data 卷托管在一块磁盘上,请指定用于创建新磁盘的磁盘快照的名称
    • SOURCE_SNAPSHOT_GROUP_NAME:如果您的 /hana/data 卷托管在多个磁盘上,请指定用于创建新磁盘的快照组名称
    • NEW_DISK_TYPE:您要创建的磁盘类型。如需了解详情,请参阅磁盘恢复支持的参数中对 -new-disk-type 的说明。
    • NEW_DISK_NAME:您要为新磁盘设置的名称。如需了解详情,请参阅磁盘恢复支持的参数中对 -new-disk-name 的说明。

    如需了解可与 hanadiskrestore 命令搭配使用的参数,请参阅磁盘恢复支持的参数

  2. 使用所需选项恢复 SAP HANA 数据库:

    恢复到快照时间

    如需通过将 SAP HANA 数据库恢复到创建磁盘快照的时间来恢复该数据库,请按照以下步骤操作:

    1. 切换到 SIDadm 用户:
      su - SID_LCadm

      SID_LC 替换为您的 SAP HANA 系统的 SID。对于任何字母,请使用小写字母。

    2. 通过运行以下命令来恢复系统数据库:
      HDBSettings.sh recoverSys.py --command="RECOVER DATA USING SNAPSHOT CLEAR LOG;"
    3. 连接到系统数据库。例如,您可以运行以下命令:
      hdbsql -d SYSTEMDB -u system -p "SYSTEM_DB_PASSWORD" -i INSTANCE_NUMBER

      替换以下内容:

      • SYSTEM_DB_PASSWORD:您的系统数据库密码
      • INSTANCE_NUMBER:您的 SAP HANA 实例编号
    4. 通过对每个租户数据库运行以下命令来恢复租户数据库:
      RECOVER DATA FOR TENANT_SID USING SNAPSHOT CLEAR LOG

      TENANT_SID 替换为租户数据库的 SID。

    恢复到特定时间点

    如需通过将 SAP HANA 数据库恢复到特定时间点来恢复该数据库,请按照以下步骤操作:

    1. 使用 Google Cloud 的 Agent for SAP 的 Backint 功能验证您是否已在 Cloud Storage 中为 /hana/log 卷创建了备份。如需详细了解此功能,请参阅使用 Backint 为 SAP HANA 执行备份和恢复
    2. 切换到 SIDadm 用户:
      su - SID_LCadm

      SID_LC 替换为您的 SAP HANA 系统的 SID。对于任何字母,请使用小写字母。

    3. 通过运行以下命令来恢复系统数据库:
      HDBSettings.sh recoverSys.py --command "RECOVER DATABASE UNTIL TIMESTAMP 'YYYY-MM-DD HH:MM:SS' CLEAR LOG USING SNAPSHOT"
    4. 连接到系统数据库。例如,您可以运行以下命令:
      hdbsql -d SYSTEMDB -u system -p "SYSTEM_DB_PASSWORD" -i INSTANCE_NUMBER

      替换以下内容:

      • SYSTEM_DB_PASSWORD:您的系统数据库密码
      • INSTANCE_NUMBER:您的 SAP HANA 实例编号
    5. 通过对每个租户数据库运行以下命令来恢复租户数据库:
      RECOVER DATABASE FOR TENANT_SID UNTIL TIMESTAMP '2099-12-31 12:00:00' CLEAR LOG USING SNAPSHOT

      TENANT_SID 替换为租户数据库的 SID。

磁盘恢复支持的参数

下表介绍了代理的 hanadiskrestore 命令支持的参数:

参数 说明
-sid 指定 SAP HANA 系统的 SAP 系统标识符 (SID)。
-data-disk-name 可选。指定托管 /hana/data 卷的来源磁盘的名称。

从 3.4 版开始,-data-disk-name-data-disk-zone 参数是可与 hanadiskrestore 命令搭配使用的可选参数。这是因为该代理可以自动检测托管您的 /hana/data 卷的磁盘。不过,如果您指定了这些参数,它们会覆盖代理的自动检测。

-data-disk-zone 可选。指定在其中部署托管 /hana/data 卷的来源磁盘的可用区

从 3.4 版开始,-data-disk-name-data-disk-zone 参数是可与 hanadiskrestore 命令搭配使用的可选参数。这是因为该代理可以自动检测托管您的 /hana/data 卷的磁盘。不过,如果您指定了这些参数,它们会覆盖代理的自动检测。

-source-snapshot 如果您的 /hana/data 卷托管在一个磁盘上,请指定您要用于执行恢复的磁盘快照的名称。
-new-disk-name 指定要为新磁盘设置的名称。如果您的 /hana/data 卷托管在多个磁盘上,则此参数不适用。
-group-snapshot-name

如果您的 /hana/data 卷托管在多个磁盘上,请指定您要用于执行恢复的快照组名称。

此参数从代理版本 3.6 开始受支持。

-project 可选。指定来源磁盘快照所在的 Google Cloud 项目的 ID。默认情况下,快照在运行 SAP HANA 系统的 Google Cloud 项目中创建。
-csek-key-file 可选。如果您使用 hanadiskbackup 命令和 -source-disk-key-file 参数来加密源磁盘快照,请指定与源磁盘快照对应,RSA 封装的客户提供的加密密钥的 JSON 文件的绝对路径。下面是一个密钥文件的示例:
[
  {
    "uri": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME",
    "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==",
    "key-type": "rsa-encrypted"
  }
]

此参数从代理版本 3.2 开始受支持。

-new-disk-type

可选。指定要创建的 Persistent Disk 或 Hyperdisk 的类型。默认情况下,新磁盘的类型与来源磁盘的类型相同。

请确保指定经 SAP 认证可用于 SAP HANA 的基于 SSD 的磁盘类型。如需了解详情,请参阅支持的磁盘类型

-hana-sidadm 可选。指定 SIDadm - SAP HANA 系统的操作系统用户。
-force-stop-hana 可选。如果要在启动恢复操作之前强制停止 SAP HANA,请指定此参数并将其值设置为 true。默认值为 false
-provisioned-iops 可选。如果您要创建 Hyperdisk 卷,请指定其必须处理的 IOPS(每秒输入/输出操作数)。
-provisioned-throughput 可选。如果您要创建 Hyperdisk 卷,请指定其必须支持的吞吐量。
-labels-on-detached-disk

可选。如果您要创建新磁盘来托管已恢复的 /hana/data 目录,请使用此参数指定要与已分离磁盘关联的标签值对。使用英文逗号分隔标签。例如:-labels-on-detached-disk="label1=value1,label2=value2"

此参数从代理版本 3.4 开始受支持。

-send-metrics-to-monitoring

可选。指定快照恢复的持续时间是否发送到 Cloud Monitoring。默认值为 TRUE

此参数从代理版本 3.4 开始受支持。

-disk-size-gb

可选。指定新磁盘的大小(以 GB 为单位)。默认情况下,新磁盘的大小与现有磁盘的大小相同。

新磁盘的大小不得小于现有磁盘的大小。

-loglevel 可选。为 hanadiskrestore 命令执行的所有操作指定日志记录级别。默认日志记录级别为 info。可用的日志级别包括:debuginfowarnerror

为纵向扩容高可用性系统恢复数据库

如需为 Google Cloud 上的高可用性 (HA) 集群中部署的 SAP HANA 纵向扩容系统恢复数据库,请完成以下步骤:

  1. 验证您是否拥有在 SAP HANA 主节点中托管 /hana/data 卷的磁盘的快照。

  2. 以根用户身份,将高可用性集群置于维护模式。如果您使用的是 Pacemaker,请运行以下命令:

    RHEL

    pcs property set maintenance-mode=true

    SLES

    crm configure property maintenance-mode=true
  3. 通过在高可用性集群的主节点和备用节点上运行以下命令来停止 SAP HANA 数据库实例:

    HDB stop
  4. 切换到 SAP HANA 高可用性系统的主节点。

  5. 通过运行代理的 hanadiskrestore 命令来恢复托管 /hana/data 卷的磁盘:

    • 如果您的 /hana/data 卷托管在一个磁盘上,请运行以下命令:

      sudo /usr/bin/google_cloud_sap_agent hanadiskrestore \
      -project=SOURCE_PROJECT_ID \
      -sid=SID \
      -source-snapshot=SOURCE_SNAPSHOT_NAME \
      [-new-disk-type=NEW_DISK_TYPE \
      -new-disk-name=NEW_DISK_NAME]
    • 如果您的 /hana/data 卷托管在多个磁盘上,请运行以下命令:

      sudo /usr/bin/google_cloud_sap_agent hanadiskrestore \
      -project=SOURCE_PROJECT_ID \
      -sid=SID \
      -group-snapshot-name=SOURCE_SNAPSHOT_GROUP_NAME \
      [-new-disk-type=NEW_DISK_TYPE ]

    替换以下内容:

    • SOURCE_PROJECT_ID:磁盘快照所在的 Google Cloud 项目的 ID
    • SID:SAP HANA 系统的 SAP 系统标识符 (SID)
    • SOURCE_SNAPSHOT_NAME:如果您的 /hana/data 卷托管在一块磁盘上,请指定用于创建新磁盘的磁盘快照的名称
    • SOURCE_SNAPSHOT_GROUP_NAME:如果您的 /hana/data 卷托管在多个磁盘上,请指定用于创建新磁盘的快照组名称
    • NEW_DISK_TYPE:您要创建的磁盘类型。如需了解详情,请参阅磁盘恢复支持的参数中对 -new-disk-type 的说明。
    • NEW_DISK_NAME:您要为新磁盘设置的名称。如需了解详情,请参阅磁盘恢复支持的参数中对 -new-disk-name 的说明。

    如需了解可与 hanadiskrestore 命令搭配使用的参数,请参阅磁盘恢复支持的参数

  6. 取消注册 SAP HANA 高可用性系统的辅助节点:

    hdbnsutil -sr_unregister
  7. 在 SAP HANA 高可用性系统的主节点上,停用 SAP HANA 系统复制:

    hdbnsutil -sr_disable
  8. 在主节点上,使用所需选项恢复 SAP HANA 数据库:

    恢复到快照时间

    如需通过将 SAP HANA 数据库恢复到创建磁盘快照的时间来恢复该数据库,请按照以下步骤操作:

    1. 切换到 SIDadm 用户:
      su - SID_LCadm

      SID_LC 替换为您的 SAP HANA 系统的 SID。对于任何字母,请使用小写字母。

    2. 通过运行以下命令来恢复系统数据库:
      HDBSettings.sh recoverSys.py --command="RECOVER DATA USING SNAPSHOT CLEAR LOG;"
    3. 连接到系统数据库。例如,您可以运行以下命令:
      hdbsql -d SYSTEMDB -u system -p "SYSTEM_DB_PASSWORD" -i INSTANCE_NUMBER

      替换以下内容:

      • SYSTEM_DB_PASSWORD:您的系统数据库密码
      • INSTANCE_NUMBER:您的 SAP HANA 实例编号
    4. 通过对每个租户数据库运行以下命令来恢复租户数据库:
      RECOVER DATA FOR TENANT_SID USING SNAPSHOT CLEAR LOG

      TENANT_SID 替换为租户数据库的 SID。

    恢复到特定时间点

    如需通过将 SAP HANA 数据库恢复到特定时间点来恢复该数据库,请按照以下步骤操作:

    1. 使用 Google Cloud 的 Agent for SAP 的 Backint 功能验证您是否已在 Cloud Storage 中为 /hana/log 卷创建了备份。如需详细了解此功能,请参阅使用 Backint 为 SAP HANA 执行备份和恢复
    2. 切换到 SIDadm 用户:
      su - SID_LCadm

      SID_LC 替换为您的 SAP HANA 系统的 SID。对于任何字母,请使用小写字母。

    3. 通过运行以下命令来恢复系统数据库:
      HDBSettings.sh recoverSys.py --command "RECOVER DATABASE UNTIL TIMESTAMP 'YYYY-MM-DD HH:MM:SS' CLEAR LOG USING SNAPSHOT"
    4. 连接到系统数据库。例如,您可以运行以下命令:
      hdbsql -d SYSTEMDB -u system -p "SYSTEM_DB_PASSWORD" -i INSTANCE_NUMBER

      替换以下内容:

      • SYSTEM_DB_PASSWORD:您的系统数据库密码
      • INSTANCE_NUMBER:您的 SAP HANA 实例编号
    5. 通过对每个租户数据库运行以下命令来恢复租户数据库:
      RECOVER DATABASE FOR TENANT_SID UNTIL TIMESTAMP '2099-12-31 12:00:00' CLEAR LOG USING SNAPSHOT

      TENANT_SID 替换为租户数据库的 SID。

  9. 在主节点上,启用 SAP HANA 系统复制:

    hdbnsutil -sr_enable --name=PRIMARY_SITE_NAME
  10. 向主节点重新注册备用节点:

    hdbnsutil -sr_register
       --name=SECONDARY_SITE_NAME
       --remoteHost=PRIMARY_HOST_NAME
       --remoteInstance=INSTANCE_NUMBER
       --replicationMode=sync
       --operationMode=logreplay
  11. 验证备用节点中的数据库是否与主节点中的数据库完全同步。

  12. 以根用户身份退出高可用性集群维护模式。如果您使用的是 Pacemaker,请运行以下命令:

    RHEL

    pcs property set maintenance-mode=false

    SLES

    crm configure property maintenance-mode=false

为纵向扩容灾难恢复部署恢复数据库

如需为使用灾难恢复解决方案在 Google Cloud 上部署的 SAP HANA 纵向扩容系统恢复数据库,请完成以下步骤:

  1. 通过在灾难恢复部署的主实例和备用实例上运行以下命令来停止 SAP HANA 数据库:

    HDB stop
  2. 切换到 SAP HANA 灾难恢复部署的主实例。

  3. 通过运行代理的 hanadiskrestore 命令来恢复托管 /hana/data 卷的磁盘:

    • 如果您的 /hana/data 卷托管在一个磁盘上,请运行以下命令:

      sudo /usr/bin/google_cloud_sap_agent hanadiskrestore \
      -project=SOURCE_PROJECT_ID \
      -sid=SID \
      -source-snapshot=SOURCE_SNAPSHOT_NAME \
      [-new-disk-type=NEW_DISK_TYPE \
      -new-disk-name=NEW_DISK_NAME]
    • 如果您的 /hana/data 卷托管在多个磁盘上,请运行以下命令:

      sudo /usr/bin/google_cloud_sap_agent hanadiskrestore \
      -project=SOURCE_PROJECT_ID \
      -sid=SID \
      -group-snapshot-name=SOURCE_SNAPSHOT_GROUP_NAME \
      [-new-disk-type=NEW_DISK_TYPE ]

    替换以下内容:

    • SOURCE_PROJECT_ID:磁盘快照所在的 Google Cloud 项目的 ID
    • SID:SAP HANA 系统的 SAP 系统标识符 (SID)
    • SOURCE_SNAPSHOT_NAME:如果您的 /hana/data 卷托管在一块磁盘上,请指定用于创建新磁盘的磁盘快照的名称
    • SOURCE_SNAPSHOT_GROUP_NAME:如果您的 /hana/data 卷托管在多个磁盘上,请指定用于创建新磁盘的快照组名称
    • NEW_DISK_TYPE:您要创建的磁盘类型。如需了解详情,请参阅磁盘恢复支持的参数中对 -new-disk-type 的说明。
    • NEW_DISK_NAME:您要为新磁盘设置的名称。如需了解详情,请参阅磁盘恢复支持的参数中对 -new-disk-name 的说明。

    如需了解可与 hanadiskrestore 命令搭配使用的参数,请参阅磁盘恢复支持的参数

  4. 在主实例上,停用 SAP HANA 系统复制:

    hdbnsutil -sr_disable
  5. 在主实例上,使用所需选项恢复 SAP HANA 数据库:

    恢复到快照时间

    如需通过将 SAP HANA 数据库恢复到创建磁盘快照的时间来恢复该数据库,请按照以下步骤操作:

    1. 切换到 SIDadm 用户:
      su - SID_LCadm

      SID_LC 替换为您的 SAP HANA 系统的 SID。对于任何字母,请使用小写字母。

    2. 通过运行以下命令来恢复系统数据库:
      HDBSettings.sh recoverSys.py --command="RECOVER DATA USING SNAPSHOT CLEAR LOG;"
    3. 连接到系统数据库。例如,您可以运行以下命令:
      hdbsql -d SYSTEMDB -u system -p "SYSTEM_DB_PASSWORD" -i INSTANCE_NUMBER

      替换以下内容:

      • SYSTEM_DB_PASSWORD:您的系统数据库密码
      • INSTANCE_NUMBER:您的 SAP HANA 实例编号
    4. 通过对每个租户数据库运行以下命令来恢复租户数据库:
      RECOVER DATA FOR TENANT_SID USING SNAPSHOT CLEAR LOG

      TENANT_SID 替换为租户数据库的 SID。

    恢复到特定时间点

    如需通过将 SAP HANA 数据库恢复到特定时间点来恢复该数据库,请按照以下步骤操作:

    1. 使用 Google Cloud 的 Agent for SAP 的 Backint 功能验证您是否已在 Cloud Storage 中为 /hana/log 卷创建了备份。如需详细了解此功能,请参阅使用 Backint 为 SAP HANA 执行备份和恢复
    2. 切换到 SIDadm 用户:
      su - SID_LCadm

      SID_LC 替换为您的 SAP HANA 系统的 SID。对于任何字母,请使用小写字母。

    3. 通过运行以下命令来恢复系统数据库:
      HDBSettings.sh recoverSys.py --command "RECOVER DATABASE UNTIL TIMESTAMP 'YYYY-MM-DD HH:MM:SS' CLEAR LOG USING SNAPSHOT"
    4. 连接到系统数据库。例如,您可以运行以下命令:
      hdbsql -d SYSTEMDB -u system -p "SYSTEM_DB_PASSWORD" -i INSTANCE_NUMBER

      替换以下内容:

      • SYSTEM_DB_PASSWORD:您的系统数据库密码
      • INSTANCE_NUMBER:您的 SAP HANA 实例编号
    5. 通过对每个租户数据库运行以下命令来恢复租户数据库:
      RECOVER DATABASE FOR TENANT_SID UNTIL TIMESTAMP '2099-12-31 12:00:00' CLEAR LOG USING SNAPSHOT

      TENANT_SID 替换为租户数据库的 SID。

  6. 在主实例上,启用 SAP HANA 系统复制:

    hdbnsutil -sr_enable --name=PRIMARY_SITE_NAME
  7. 向主实例注册备用实例:

    hdbnsutil -sr_register
       --name=SECONDARY_SITE_NAME
       --remoteHost=PRIMARY_HOST_NAME
       --remoteInstance=INSTANCE_NUMBER
       --replicationMode=sync
       --operationMode=logreplay
  8. 验证备用实例中的数据库是否与主实例中的数据库完全同步。

执行系统复制或系统刷新

如需使用某个 SAP HANA 系统的基于磁盘快照的备份来恢复另一个 SAP HANA 系统,请完成以下步骤:

  1. 在源系统中,通过运行代理的 hanadiskbackup 命令来创建基于快照的备份。如需了解相关说明,请参阅创建基于磁盘快照的备份
  2. 如果源系统和目标系统的 SID 不同,则重命名源系统中的 /hana/data/SID 目录,使其与目标系统匹配:

    mv /hana/data/SOURCE_SID /hana/data/TARGET_SID

    替换以下内容:

    • SOURCE_SID:源 SAP HANA 系统的 SID
    • TARGET_SID:目标 SAP HANA 系统的 SID
  3. 在目标系统中,通过运行代理的 hanadiskrestore 命令来恢复托管 /hana/data 卷的磁盘。

  4. 在目标系统中,恢复系统数据库:

    HDBSettings.sh recoverSys.py --command "RECOVER DATABASE UNTIL TIMESTAMP '2099-12-31 12:00:00' CLEAR LOG USING SOURCE 'SYSTEMDB@SOURCE_SID' USING CATALOG BACKINT USING SNAPSHOT"
  5. 如果您希望租户数据库具有源系统的 SID,则可以按照 SAP HANA 文档重命名租户数据库中的说明重命名该数据库。

  6. 在目标系统中,连接到系统数据库。例如,您可以运行以下命令:

    hdbsql -d SYSTEMDB -u system -p "SYSTEM_DB_PASSWORD" -i INSTANCE_NUMBER

    替换以下内容:

    • SYSTEM_DB_PASSWORD:您的系统数据库密码
    • INSTANCE_NUMBER:您的 SAP HANA 实例编号
  7. 在目标系统中,通过对每个租户数据库运行以下命令来恢复租户数据库:

    RECOVER DATABASE FOR TARGET_SID UNTIL TIMESTAMP '2023-12-08 23:59:00' CLEAR LOG USING SOURCE 'TARGET_SID@SOURCE_SID' USING CATALOG BACKINT USING SNAPSHOT

验证快照一致性

本部分介绍如何使用 SAP 的 hdbpersdiag 工具验证磁盘快照中数据的一致性。如需了解 Google Cloud 建议用于基于磁盘快照的备份和恢复操作的其他最佳实践,请参阅最佳实践

如需验证快照的一致性,请完成以下步骤:

  1. 通过使用代理的 hanadiskbackup 命令创建的快照创建磁盘。使用 gcloud compute disks create 命令

    gcloud compute disks create DISK_NAME \
       --size=SIZE \
       --source-snapshot=SNAPSHOT_NAME \
       --type=DISK_TYPE \
       --zone=ZONE
    

    替换以下内容:

    • DISK_NAME:临时磁盘的名称
    • SIZE:临时磁盘的大小
    • SNAPSHOT_NAME:来源快照的名称
    • DISK_TYPE:临时磁盘的磁盘类型
    • ZONE:要在其中部署临时磁盘的 Compute Engine 可用区
  2. 将磁盘挂接到 SAP HANA 主机以外的 Compute Engine 实例。使用 gcloud compute instances attach-disk 命令

    gcloud compute instances attach-disk COMPUTE_INSTANCE_NAME \
       --disk=DISK_NAME \
       --zone=ZONE
    

    替换以下内容:

    • COMPUTE_INSTANCE_NAME:您要在其中部署您创建的磁盘的计算实例的名称
    • DISK_NAME:您创建的磁盘的名称
    • ZONE:在其中部署计算实例的 Compute Engine 可用区
  3. 使用您偏好的 SSH 方法连接到您的计算实例。

  4. 将新磁盘装载为临时文件系统:

    1. 在操作系统级别,找到没有任何活跃逻辑卷的卷组:

      vgdisplay
      

      输出类似于以下示例:

      --- Volume group ---
      VG Name               vg_hana_data
      System ID
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  2
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                1
      Open LV               0
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               250.00 GiB
      PE Size               4.00 MiB
      Total PE              63999
      Alloc PE / Size       63999 / 250.00 GiB
      Free  PE / Size       0 / 0
      VG UUID               Fa52zl-AROR-LH2k-aG4z-LbrB-cvTz-TZhEfR
    2. 使用 VG UUID 重命名卷组。在前面的示例中,它是 Fa52zl-AROR-LH2k-aG4z-LbrB-cvTz-TZhEfR

      vgrename Fa52zl-AROR-LH2k-aG4z-LbrB-cvTz-TZhEfR vg_hana_data_temp
      
    3. 激活卷组和逻辑卷:

      vgchange -a y vg_hana_data_temp
      lvchange -a y /dev/vg_hana_data_temp/data
      
    4. 在临时文件系统中装载逻辑卷,例如 /hana/data_temp

      mkdir /hana/data_temp
      mount /dev/vg_hana_data_temp/data /hana/data_temp
      
    5. 验证所有磁盘是否都已正确装载:

      lsblk
      

      输出类似于以下示例:

      NAME                     MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
      sda                        8:0    0   30G  0 disk
      ├─sda1                     8:1    0    2M  0 part
      ├─sda2                     8:2    0   20M  0 part /boot/efi
      └─sda3                     8:3    0   30G  0 part /
      sdb                        8:16   0  350G  0 disk
      └─vg_hana_data_temp-data 254:5    0  250G  0 lvm  /hana/data_temp
      sdc                        8:32   0  104G  0 disk
      └─vg_hana_log-log        254:2    0  104G  0 lvm  /hana/log
      sdd                        8:48   0  208G  0 disk
      └─vg_hana_shared-shared  254:0    0  208G  0 lvm  /hana/shared
      sde                        8:64   0   32G  0 disk
      └─vg_hana_usrsap-usrsap  254:3    0   32G  0 lvm  /usr/sap
      sdf                        8:80   0  416G  0 disk
      └─vg_hanabackup-backup   254:4    0  416G  0 lvm  /hanabackup
      sdh                        8:112  0  250G  0 disk
      └─vg_hana_data-data      254:1    0  250G  0 lvm  /hana/data
  5. SIDadm 用户身份,对临时文件系统中包含的数据卷运行 hdbpersdiag 工具:

    for directory in $(find /hana/data_temp/SID/mnt00001/hdb* -type d); do hdbpersdiag -c -e 'check all' $directory; done
    
  6. 验证 hdbpersdiag 工具的输出。

  7. 如果您打算将来执行此一致性检查,则可以让新卷组保持原样。如果不是,请将其删除。

  8. 将磁盘从计算实例中分离。使用 gcloud compute instances detach-disk 命令

    COMPUTE_INSTANCE_NAME \
       --disk=DISK_NAME \
       --zone=ZONE
    
  9. 删除磁盘。使用 gcloud compute disks delete 命令

    gcloud compute disks delete DISK_NAME \
       --zone=ZONE
    

问题排查

虽然 Google Cloud 的 Agent for SAP 旨在解决适用于 SAP HANA 的基于磁盘快照的备份和恢复操作期间可能出现的大多数问题,但也有少数情况需要手动干预。

如需排查 Google Cloud 的 Agent for SAP 的磁盘快照功能的任何相关问题,请参阅基于磁盘快照的备份或恢复操作问题

获取支持

如果您在解决 Google Cloud 的 Agent for SAP 的问题时需要帮助,请收集所需的诊断信息并与 Cloud Customer Care 联系。如需了解详情,请参阅适用于 SAP HANA 的 Google Cloud 的 Agent for SAP 诊断信息