使用磁盘快照备份和恢复 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 建议用于基于磁盘快照的备份和恢复操作的其他最佳实践,请参阅最佳实践。 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 联系。如需了解详情,请参阅 Google Cloud的 Agent for SAP for SAP HANA 诊断信息