阿里云上的SAP备份指南

更新时间:
复制为 MD 格式

1. 引言

1.1 文档目的与适用范围

本文档为在阿里云上部署SAP S/4HANA系统的企业提供完整的备份方案设计与实施指南。文档涵盖存储层、文件系统层以及数据库层三个维度的数据保护策略,帮助读者建立系统化的备份体系,确保业务数据安全与业务连续性。

本文档以SAP S/4HANA系统为例,适用于ABAP PlatformNetWeaver类系统的备份设计,数据库层面专注于SAP HANA数据库的备份与恢复,采用阿里云OSS Backint Agent作为核心备份通道。文档不涉及其他非HANA数据库的备份方案。

1.2 目标读者

本文档面向以下角色:

  • SAP Basis管理员:负责SAP系统的日常运维与数据库管理

  • 云架构师:负责在阿里云上设计和规划SAP系统的基础设施

  • 运维工程师:负责备份任务的执行、监控与故障排查

    读者应具备基本的SAP系统管理经验和阿里云产品使用知识。

1.3 术语与缩略语

术语

全称

说明

RTO

Recovery Time Objective

恢复时间目标,从故障发生到系统恢复正常运行的最大可接受时间

RPO

Recovery Point Objective

恢复点目标,从故障发生时可接受的最大数据丢失量(以时间衡量)

Backint

SAP Backint Interface

SAP定义的第三方备份工具集成接口标准

OSS

Object Storage Service

阿里云对象存储服务

ECS

Elastic Compute Service

阿里云弹性计算服务(云服务器)

HANA

High-performance ANalytic Appliance

SAP自主研发的内存数据库

MDC

Multi-tenant Database Container

HANA多租户数据库容器架构

SID

System Identifier

SAP系统唯一标识符

RAM

Resource Access Management

阿里云访问控制服务

KMS

Key Management Service

阿里云密钥管理服务

2. 备份策略设计原则

2.1 RTORPO目标的制定

RTORPO是备份策略设计的基础指标。RTO决定了系统需要具备多快的恢复能力,直接影响备份介质的选择和恢复流程的设计;RPO决定了可以容忍的最大数据丢失量,直接影响备份频率和日志备份间隔的设定。

对于SAP S/4HANA生产系统,建议根据业务关键程度设定不同级别的目标:

系统级别

典型RTO

典型RPO

备份策略要点

核心生产系统

< 4小时

< 15分钟

高频日志备份 + 每日全量 + 存储快照

非核心生产系统

< 8小时

< 1小时

每小时日志备份 + 每日全量

开发/测试系统

< 24小时

< 24小时

每日全量备份即可

2.2 备份类型说明

SAP HANA环境中,主要涉及以下几种备份类型:

  • 全量备份(Full Backup):对数据库的完整数据进行备份。全量备份是所有恢复操作的基础,建议至少每日执行一次。

  • 增量备份(Incremental Backup):仅备份自上次任意类型备份以来发生变更的数据块。增量备份体积小、速度快,适合在全量备份之间的时间窗口执行。

  • 差异备份(Differential Backup):仅备份自上次全量备份以来发生变更的数据块。恢复时只需要最近一次全量备份加上最近一次差异备份。

  • 日志备份(Log Backup):连续备份数据库的事务日志(Redo Log)。日志备份是实现时间点恢复(Point-in-Time Recovery)的关键,应以高频率自动执行。

2.3 备份频率与保留策略

备份频率和保留策略需要在数据安全性、存储成本和运维复杂度之间取得平衡。以下是针对SAP S/4HANA生产系统的建议:

  • 数据全量备份:每日一次,建议在业务低峰期执行(如凌晨2:00-5:00)

  • 数据增量/差异备份:每6-12小时执行一次,填补全量备份之间的数据保护空窗

  • 日志备份:每15分钟自动执行一次(核心生产系统),确保RPO在可控范围内

  • 存储快照:每日一次或根据变更频率调整,作为快速恢复的补充手段

    保留策略方面,建议遵循分层保留原则:日备份保留7-14天,周备份保留4-8周,月备份保留6-12个月。对于合规性要求较高的行业,可能需要保留更长时间的备份数据。

2.4 备份窗口与业务影响评估

SAP HANA的在线备份能力允许在数据库正常运行期间执行备份操作,对前端业务的影响较小。但备份过程仍会消耗一定的CPU、内存和I/O资源,因此需要合理规划备份窗口。

建议在业务低峰期执行全量备份,日志备份由于数据量较小可全天候执行。在首次部署备份方案时,应进行备份性能测试,记录不同备份类型的耗时和资源消耗情况,以便后续优化。

2.5 3-2-1备份原则在阿里云环境中的落地

3-2-1备份原则要求:至少保存3份数据副本,使用2种不同的存储介质,其中1份存放在异地。在阿里云环境中,该原则可以通过以下方式落地:

  • 3份副本:在线数据(ECS云盘上的HANA数据文件)+ 备份数据(OSS中的Backint备份)+ 云盘快照

  • 2种介质:阿里云块存储(ESSD云盘)+ 阿里云对象存储(OSS)

  • 1份异地:利用OSS的跨地域复制(Cross-Region Replication)功能,将备份数据同步至另一个地域的OSS Bucket

3. 存储层备份

3.1 阿里云块存储(EBS)快照

3.1.1 云盘快照的工作原理

阿里云云盘快照采用增量快照机制。首次创建快照时,会完整复制云盘上的所有数据;后续每次快照仅记录自上一次快照以来发生变更的数据块。尽管采用增量存储,每个快照在逻辑上都是完整的,可以独立用于恢复操作。

快照数据存储在阿里云的分布式对象存储系统中,具备高可靠性(99.9999999%),与原始云盘的存储介质物理隔离,即使云盘损坏也不影响快照数据的安全性。

3.1.2 自动快照策略配置

通过阿里云控制台或API可以创建自动快照策略,定义快照的创建时间、重复周期和保留天数。建议为SAP S/4HANA系统的所有数据云盘(包括/hana/data、/hana/log、/usr/sap等挂载点对应的云盘)配置自动快照策略。

推荐配置:每日凌晨创建快照,保留7-14天。对于HANA数据盘,应在全量数据库备份之前或之后创建快照,以确保数据一致性。

3.1.3 基于HANA Storage Snapshot的一致性快照

直接对运行中的数据库所在云盘创建快照,可能导致快照数据处于不一致状态(即快照包含部分写入的数据页)。SAP HANA原生提供了Storage Snapshot功能,通过 BACKUP DATA CREATE SNAPSHOTBACKUP DATA CLOSE SNAPSHOT 两个SQL命令,在存储快照创建前后"通知"HANA数据库,使其主动完成Savepoint刷盘并冻结数据文件写入,从而保证快照的应用一致性。

完整流程分为三个步骤:

步骤一:准备HANA内部快照

以具备BACKUP OPERATORBACKUP ADMIN权限的用户连接HANA数据库,执行以下SQL命令。HANA会触发Savepoint,将内存中的脏页刷写到磁盘,并冻结数据文件的写入操作:

BACKUP DATA FOR FULL SYSTEM CREATE SNAPSHOT COMMENT '<快照描述信息>';

执行成功后,需要通过查询备份目录获取此次操作的 BACKUP_ID,后续步骤会用到:

SELECT BACKUP_ID FROM M_BACKUP_CATALOG
WHERE ENTRY_TYPE_NAME = 'data snapshot'
  AND STATE_NAME = 'prepared'
ORDER BY UTC_START_TIME DESC;

步骤二:创建阿里云ECS云盘快照

HANA准备就绪后(此时数据文件处于一致状态),调用阿里云API创建底层存储快照。建议对HANA数据卷(/hana/data)和日志卷(/hana/log)同时创建快照,确保多卷之间的时间点一致性。可以通过阿里云CLI执行:

aliyun ecs CreateSnapshot --DiskId <data-disk-id> --SnapshotName "hana-data-<timestamp>"
aliyun ecs CreateSnapshot --DiskId <log-disk-id> --SnapshotName "hana-log-<timestamp>"

步骤三:确认或放弃快照

根据存储快照是否创建成功,执行对应的SQL命令更新HANA备份目录:

  • 快照创建成功时,确认备份并记录外部标识:

BACKUP DATA FOR FULL SYSTEM CLOSE SNAPSHOT BACKUP_ID <backup_id> SUCCESSFUL '<快照标识>';
  • 快照创建失败时,放弃本次快照操作:

BACKUP DATA FOR FULL SYSTEM CLOSE SNAPSHOT BACKUP_ID <backup_id> UNSUCCESSFUL;

上述三步流程可以编写自动化脚本,结合cron定时执行。HANA数据文件的冻结时间仅覆盖步骤二(存储快照API调用),通常在秒级完成,对业务影响极小。

3.1.4 跨地域快照复制

对于有容灾需求的场景,可以将快照复制到另一个阿里云地域。通过阿里云控制台或API调用 CopySnapshot 接口,可以将快照从源地域异步复制到目标地域。复制完成后,可以在目标地域基于快照创建云盘并挂载到新的ECS实例,实现跨地域的系统恢复。

3.1.5 快照的恢复流程

当需要通过快照恢复数据时,可以选择以下两种方式:

  • 回滚云盘:将云盘回滚到指定快照时间点的状态。此操作需要先停止ECS实例,回滚后实例上的数据将恢复到快照创建时的状态。适用于整盘恢复的场景。

  • 基于快照创建云盘:以快照为数据源创建新的云盘,挂载到目标ECS实例上。此方式不影响原有系统的运行,适用于数据验证、测试恢复或部分数据提取的场景。

完成存储层的卷恢复或云盘挂载后,需要启动HANA并执行数据库级别的恢复操作。由于备份时使用了HANA Storage Snapshot机制,恢复时需指定 USING SNAPSHOT 关键字:

  • 恢复到快照时间点(不回放日志):

RECOVER DATA USING SNAPSHOT CLEAR LOG;
  • 配合日志备份做时间点恢复(将数据库恢复到快照之后的某个时间点):

RECOVER DATABASE UNTIL TIMESTAMP '<yyyy-MM-dd HH:mm:ss>' CLEAR LOG USING SNAPSHOT;

如果是MDC多租户环境,需要分别恢复System DBTenant DB。System DB使用 recoverSys.py 脚本恢复,Tenant DB通过SQL命令恢复:

RECOVER DATABASE FOR <Tenant-SID> UNTIL TIMESTAMP '<yyyy-MM-dd HH:mm:ss>' CLEAR LOG USING SNAPSHOT;

3.2 快照与其他备份方式的协同

云盘快照应定位为SAP系统整体备份方案的补充手段,而非替代数据库级别的备份。快照的核心价值在于快速恢复整个卷的能力,适合应对磁盘损坏、操作系统崩溃等基础设施层面的故障。

快照备份的优势包括:创建速度快(通常在秒到分钟级别完成)、恢复操作简单直观、不依赖数据库层面的备份工具。其局限性在于:无法实现数据库级别的时间点恢复、快照粒度为整个云盘、无法单独恢复个别表或数据库对象。

因此,建议将云盘快照与HANA数据库的Backint备份结合使用:Backint备份提供细粒度的数据库级恢复能力(包括时间点恢复),云盘快照提供快速的基础设施级恢复能力。两者互为补充,共同构成多层次的数据保护体系。

4. 文件系统层备份

4.1 需要备份的关键目录

SAP S/4HANA系统涉及的关键目录及其备份优先级如下:

目录路径

内容说明

备份优先级

/usr/sap/

SAP实例目录,包含应用服务器的可执行文件、配置和日志

/sapmnt/

SAP共享目录,包含全局Profile文件和内核文件

/usr/sap/trans

SAP传输目录,包含传输请求(Transport Request)文件

/usr/sap//SYS

SAP全局配置目录,包含系统级别的配置文件

/hana/shared/

HANA共享目录,包含HANA安装文件和配置

/etc/fstab

文件系统挂载配置

/etc/sysconfig/network*

网络配置文件

/etc/hosts

主机名解析配置

注意:HANA的数据文件(/hana/data)和日志文件(/hana/log)不需要通过文件系统级别的备份来保护,它们应通过HANA数据库自身的备份机制(详见第5章)进行保护。

4.2 基于阿里云OSS的文件备份方案

4.2.1 ossutil工具介绍

ossutil是阿里云提供的OSS命令行工具,支持文件的上传、下载、同步、复制等操作。它是实现文件系统级别备份到OSS的推荐工具。ossutil支持增量同步、断点续传和并发上传,适合大批量文件的备份场景。

安装方式(以Linux x86_64为例):

curl -o ossutil64 https://gosspublic.alicdn.com/ossutil/install.sh
chmod 755 ossutil64
./ossutil64 config   # 根据提示配置AccessKey和Endpoint

4.2.2 定时备份脚本设计

以下是一个基于cronossutil实现定时备份的示例方案。该脚本将SAP关键目录同步到OSS Bucket中,并按日期组织备份数据:

#!/bin/bash
# sap_file_backup.sh - SAP文件系统备份脚本
DATE=$(date +%Y%m%d)
SID="S4H"
BUCKET="oss://sap-backup-bucket"
PREFIX="${BUCKET}/file-backup/${SID}/${DATE}"

# 同步SAP关键目录到OSS
ossutil64 sync /usr/sap/${SID}/ ${PREFIX}/usr_sap_${SID}/ --update
ossutil64 sync /sapmnt/${SID}/ ${PREFIX}/sapmnt_${SID}/ --update
ossutil64 sync /usr/sap/trans/ ${PREFIX}/usr_sap_trans/ --update

# 备份系统配置文件
tar czf /tmp/etc_backup_${DATE}.tar.gz /etc/fstab /etc/hosts /etc/sysconfig/
ossutil64 cp /tmp/etc_backup_${DATE}.tar.gz ${PREFIX}/
rm -f /tmp/etc_backup_${DATE}.tar.gz

将该脚本配置到cron定时任务中:

0 3 * * * /opt/scripts/sap_file_backup.sh >> /var/log/sap_file_backup.log 2>&1

4.2.3 文件级增量备份策略

ossutilsync命令默认支持增量同步:通过 --update 参数,仅同步源端比目标端更新的文件。这意味着每次执行同步时,只有自上次备份以来发生变更的文件才会被上传到OSS,大幅减少备份时间和带宽消耗。

对于需要保留历史版本的场景,可以启用OSS Bucket的版本控制(Versioning)功能,每次文件更新都会自动保留旧版本,可以按需恢复到任意历史版本。

4.3 备份验证与恢复演练

文件备份完成后,建议执行以下验证步骤:

  1. 使用ossutills命令检查备份文件是否完整上传到OSS

  2. 随机抽取若干文件从OSS下载到临时目录,与源文件进行MD5校验比对

  3. 定期(如每季度)执行完整的文件恢复演练,将OSS中的备份数据恢复到测试环境中,验证数据完整性和可用性

    恢复流程为反向操作:使用 ossutil sync 将OSS中的备份数据同步到目标服务器的相应目录,恢复文件权限和属主后启动SAP服务。

5. 数据库层备份(SAP HANA)

5.1 SAP HANA备份基础

5.1.1 HANA备份类型

SAP HANA提供三种主要的备份类型:

  • 数据备份(Data Backup):HANA数据库的持久化数据(数据卷中的数据页和Undo日志)备份到指定目标。数据备份是恢复操作的起点,分为全量备份、增量备份和差异备份三种子类型。

  • 日志备份(Log Backup):将数据库的Redo Log段(Log Segment)备份到指定目标。日志备份在数据备份的基础上,通过回放事务日志实现时间点恢复。HANA在 log_mode 设置为 normal 时自动执行日志备份。

  • 快照备份(Storage Snapshot):利用底层存储的快照能力创建数据库备份。快照备份速度极快,但依赖于存储层的快照功能,且无法单独实现时间点恢复。

5.1.2 备份目标:Backint vs. 文件系统

HANA支持两种备份目标:

对比维度

Backint接口

文件系统

备份目标

通过Backint代理写入第三方存储(如OSS)

写入本地或NFS挂载的文件系统目录

扩展性

近乎无限(受OSS存储容量限制)

受磁盘空间限制

管理复杂度

需要安装和配置Backint代理

开箱即用,无需额外工具

容灾能力

天然异地存储(OSS跨地域复制)

需要额外配置远程复制

适用场景

生产系统(推荐)

开发/测试系统或作为本地缓存

对于阿里云上的SAP S/4HANA生产系统,推荐使用Backint接口配合OSS作为主要备份目标,以获得更好的扩展性和容灾能力。

5.1.3 多租户数据库容器(MDC)的备份考量

SAP HANA 2.0采用多租户数据库容器(MDC)架构,一个HANA实例可以承载多个租户数据库(Tenant Database)。在MDC架构下,备份操作需要注意以下几点:

  • System DB和每个Tenant DB需要独立配置备份策略和执行备份操作

  • System DB的备份包含系统元数据,是恢复整个HANA实例的前提

  • Tenant DB的备份可以独立恢复到其他HANA实例,支持跨系统的数据库迁移

  • 建议在OSS Backint Agent的配置中使用 storage-prefix 参数区分不同数据库的备份路径

5.2 OSS Backint Agent for SAP HANA

详情请参考阿里云OSS官方文档:OSS Backint Agent for SAP HANA

5.2.1 方案架构与工作原理

OSS Backint Agent是阿里云提供的、符合SAP Backint接口标准的备份代理工具。它使SAP HANA能够通过SAP标准的Backint接口,将备份数据直接传输到阿里云对象存储OSS中。

Backint接口标准:SAP Backint for Oracle/SAP HANASAP定义的备份集成接口规范。HANA数据库在执行备份时,通过调用Backint代理程序来完成数据的传输操作。Backint代理负责接收HANA发送的数据流,并将其写入到目标存储系统。

管道传输模式:OSS Backint Agent采用管道(Pipe)模式工作。HANA将备份数据以流的形式通过管道传递给Backint Agent,Agent再以分片并发上传的方式将数据写入OSS。这种模式避免了在本地磁盘上生成临时备份文件,节省了本地存储空间。

数据流路径:HANA Database → Pipe → OSS Backint Agent → Multipart Upload → Alibaba Cloud OSS Bucket。整个过程中备份数据不落地本地磁盘,直接从内存流式传输到OSS。

5.2.2 安装与部署

前提条件:

  • 已部署SAP HANA数据库的阿里云ECS实例

  • 已确定SAP HANASID(System Identifier)

  • 已创建用于存储备份数据的OSS Bucket(建议与ECS实例在同一地域,使用内网Endpoint传输以节省流量费用)

  • ECS实例具备访问OSS的网络连通性

安装步骤:

以用户(如s4hadm)登录HANA所在的ECS实例,执行以下命令:

  1. 创建Backint配置目录:

mkdir -p /usr/sap/<SID>/SYS/global/hdb/opt/hdbconfig/
  1. 下载安装脚本:

curl -o install.sh https://gosspublic.alicdn.com/hdbbackint/install.sh
  1. 执行安装:

chmod +x install.sh && ./install.sh <SID>
  1. 验证安装:

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

如果安装成功,上述命令将输出OSS Backint Agent的版本信息。

5.2.3 认证方式配置

OSS Backint Agent支持多种认证方式连接阿里云OSS,以下按推荐程度排序:

方式一:ECS RAM角色(推荐)

HANA部署在阿里云ECS实例上时,推荐使用ECS RAM角色认证。该方式无需在配置文件中保存任何密钥信息,Agent通过ECS实例的元数据服务自动获取临时安全凭证。

# oss-backint-agent.ini
[credentials]
mode = EcsRamRole

前提:需要在阿里云控制台为ECS实例绑定一个RAM角色,并确保该角色具有对目标OSS Bucket的读写权限。

方式二:AccessKey

直接在配置文件中指定阿里云RAM用户的AccessKey IDAccessKey Secret。该方式配置简单,但安全性较低,不建议在生产环境中使用。

# oss-backint-agent.ini
[credentials]
access-key-id = <your-access-key-id>
access-key-secret = <your-access-key-secret>

方式三:RAM角色ARN(跨账号场景)

OSS Bucket属于另一个阿里云账号时,可以使用RAM角色ARN方式,通过STS(Security Token Service)获取临时凭证实现跨账号访问。

# oss-backint-agent.ini
[credentials]
mode = RamRoleArn
access-key-id = <your-access-key-id>
access-key-secret = <your-access-key-secret>
role-arn = acs:ram::<account-id>:role/<role-name>
role-session-name = backint-session

方式四:外部进程自定义认证

通过配置一个外部可执行程序来获取认证凭证。Agent会调用该程序并解析其JSON格式的输出以获取临时凭证。适用于需要集成企业内部密钥管理系统的场景。

# oss-backint-agent.ini
[credentials]
mode = Process
process-command = /usr/local/bin/get_credentials.sh

5.2.4 核心配置参数详解

OSS Backint Agent的配置文件为 oss-backint-agent.ini,以下是各类参数的详细说明:

基础参数

参数

必填

默认值

说明

bucket-name

用于存储备份数据的OSS Bucket名称

region

OSS Bucket所在的地域ID(如 cn-hangzhou)

hana-sid

SAP HANA的系统标识符(SID)

endpoint

自动推断

OSS的访问域名,建议使用内网Endpoint

storage-prefix

SAP-HANA-Backint

备份对象在OSS中的路径前缀

性能调优参数

参数

默认值

说明

job

5

并发备份通道数,每个通道独立传输数据

pipe-parallel

3

每个通道内的并发上传线程数

pipe-part-size

6 MiB

分片上传的分片大小,影响大文件传输效率

内存消耗估算公式:峰值内存 ≈ job × pipe-parallel × pipe-part-size。例如默认配置下:5 × 3 × 6 MiB = 90 MiB。对于大型数据库,可以适当增大 pipe-part-size 以提升传输效率,但需注意内存消耗的相应增长。

存储策略参数

参数

默认值

说明

object-storage-class

Standard

备份对象的存储类型:Standard(标准)、IA(低频)、Archive(归档)

object-acl

备份对象的访问控制列表

object-tagging

为备份对象添加标签,便于成本分摊和生命周期管理

加密配置参数

参数

默认值

说明

server-side-encryption

服务端加密方式:AES256、KMS、SM4

server-side-encryption-key-id

使用KMS加密时指定的密钥ID

网络与日志参数

参数

默认值

说明

read-timeout

数据读取超时时间

connect-timeout

连接建立超时时间

proxy

HTTP/HTTPS代理地址

skip-verify-cert

false

是否跳过SSL证书验证(不建议在生产环境启用)

log-level

info

日志级别:debug、info、warn、error

log-file

日志文件路径,便于故障排查

5.2.5 启用Backint备份

完成OSS Backint Agent的安装和配置后,需要在HANA数据库中启用Backint作为备份目标。

步骤一:配置HANA使用Backint进行数据备份

SYSTEM用户连接HANA数据库,执行以下SQL命令:

ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
SET ('backup', 'catalog_backup_using_backint') = 'true'
WITH RECONFIGURE;

ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
SET ('backup', 'data_backup_parameter_file') =
'/usr/sap/<SID>/SYS/global/hdb/opt/hdbconfig/oss-backint-agent.ini'
WITH RECONFIGURE;

ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
SET ('backup', 'log_backup_using_backint') = 'true'
WITH RECONFIGURE;

ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
SET ('backup', 'log_backup_parameter_file') =
'/usr/sap/<SID>/SYS/global/hdb/opt/hdbconfig/oss-backint-agent.ini'
WITH RECONFIGURE;

步骤二:设置日志模式

为支持时间点恢复,需要将HANA的日志模式设置为 normal(默认值为 overwrite):

ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
SET ('persistence', 'log_mode') = 'normal'
WITH RECONFIGURE;

步骤三:验证配置

执行测试备份以验证Backint通道是否正常工作:

BACKUP DATA USING BACKINT ('oss-backint-agent-test');

如果备份成功完成且没有报错,说明OSS Backint Agent已正确配置。可以登录阿里云OSS控制台,在目标Bucket中确认备份文件已生成。

5.2.6 数据备份操作

全量数据备份

通过SAP HANA Studio、HANA CockpitSQL命令执行全量数据备份:

BACKUP DATA USING BACKINT ('COMPLETE_DATA_BACKUP');

备注:括号中的字符串为备份前缀(Backup Prefix),用于标识备份用途,可自定义。

增量与差异数据备份

增量备份和差异备份可以显著减少备份时间和存储空间:

-- 增量备份(自上次任意类型备份以来的变更)
BACKUP DATA INCREMENTAL USING BACKINT ('INCR_BACKUP');

-- 差异备份(自上次全量备份以来的变更)
BACKUP DATA DIFFERENTIAL USING BACKINT ('DIFF_BACKUP');

备份调度

建议通过以下方式设置自动备份调度:

  • SAP DBA Cockpit / DB13:SAP提供的标准数据库管理工具,可以在SAP GUI中配置备份计划。适用于SAP Basis管理员。

  • 操作系统crontab:通过cron定时执行hdbsql命令实现备份调度。灵活性高,适合运维自动化场景。

    crontab示例(每日凌晨2点执行全量备份):

0 2 * * * /usr/sap/<SID>/HDB<inst>/exe/hdbsql -U BACKUP_KEY "BACKUP DATA USING BACKINT ('DAILY_FULL')"

5.2.7 日志备份配置

日志备份是实现时间点恢复的关键组件。在HANA的日志模式设置为 normal 且启用了Backint日志备份后,HANA会在日志段(Log Segment)写满时自动触发日志备份。

自动日志备份:当 log_mode = normal 且 log_backup_using_backint = true 时,HANA会自动将写满的日志段通过Backint Agent传输到OSS。

日志备份间隔:可以通过以下参数控制日志备份的最大间隔时间,确保即使在低负载期间(日志段未写满时)也能定期执行日志备份:

ALTER SYSTEM ALTER CONFIGURATION ('global.ini', 'SYSTEM')
SET ('persistence', 'log_backup_timeout_s') = '900'
WITH RECONFIGURE;

上述配置将日志备份的最大间隔设置为900秒(15分钟),即使日志段未写满,也会在15分钟后自动触发备份。根据RPO需求调整此值。

5.2.8 备份监控与管理

HANA Studio / SAP HANA Cockpit监控

SAP HANA StudioHANA Cockpit提供了图形化的备份监控界面,可以查看备份历史记录、备份状态、备份耗时和备份大小等信息。建议运维团队定期检查备份状态,及时发现并处理备份失败的情况。

备份目录(Backup Catalog)管理

HANA维护一个备份目录(Backup Catalog),记录所有历史备份的元数据信息。随着时间推移,备份目录会持续增长,建议定期清理过期的备份目录条目:

-- 查看备份目录
SELECT * FROM M_BACKUP_CATALOG ORDER BY UTC_START_TIME DESC;

-- 删除指定日期之前的备份目录条目(同时删除OSS中的备份文件)
BACKUP CATALOG DELETE ALL BEFORE TIMESTAMP '2026-01-01 00:00:00'
USING BACKINT COMPLETE;

OSS侧备份文件的生命周期管理

通过阿里云OSS的生命周期规则(Lifecycle Rule),可以自动将老旧的备份数据转换为更低成本的存储类型,或在超过保留期限后自动删除:

  • 近期备份(0-30天):保持标准存储(Standard),保证快速恢复能力

  • 中期备份(30-90天):自动转换为低频访问存储(IA),降低约50%存储成本

  • 长期备份(90天以上):自动转换为归档存储(Archive),存储成本降低至标准存储的约25%

5.3 数据库恢复

5.3.1 全量恢复

全量恢复将数据库恢复到最近一次数据备份的状态。在HANA StudioCockpit中选择目标备份进行恢复,或使用命令行方式:

-- 停止HANA数据库
HDB stop

-- 使用hdbnsutil执行恢复
hdbnsutil -recoverSys --command="RECOVER DATA USING BACKINT"

全量恢复适用于数据库完全损坏、需要回滚到已知良好状态等场景。

5.3.2 时间点恢复(Point-in-Time Recovery)

时间点恢复允许将数据库恢复到过去任意时间点的状态,前提是:拥有该时间点之前的一个完整数据备份,以及从该备份到目标时间点之间的所有日志备份。

RECOVER DATABASE UNTIL TIMESTAMP '2026-03-20 14:30:00'
USING BACKINT;

时间点恢复是应对数据误操作(如误删表、错误的批量更新)最有效的恢复手段。

5.3.3 归档存储类型对象的解冻注意事项

如果备份数据已通过生命周期规则转换为归档存储类型(Archive),在执行恢复操作前,必须先将相关备份对象解冻(Restore/Unfreeze)。归档存储的解冻通常需要1-5分钟(快速解冻模式)或数小时(标准解冻模式),这将直接影响恢复的RTO。

建议在OSS生命周期策略中,为可能需要紧急恢复的近期备份保留标准存储类型,仅对确定不需要快速恢复的长期备份使用归档存储。

5.3.4 恢复演练建议

备份方案的有效性必须通过定期恢复演练来验证。建议:

  1. 每季度至少执行一次完整的数据库恢复演练,覆盖全量恢复和时间点恢复两种场景

  2. 恢复演练应在独立的测试环境中进行,避免影响生产系统

  3. 记录每次恢复演练的耗时、遇到的问题和改进措施,持续优化恢复流程

  4. 将恢复演练纳入运维团队的标准操作流程(SOP),确保相关人员熟悉恢复步骤

6. 备份方案整体架构

6.1 各层备份方式的协同关系

综合前述各章节的内容,阿里云上SAP S/4HANA系统的完整备份方案由存储层、文件系统层和数据库层三个维度共同构成,各层之间互为补充,形成纵深防御的数据保护体系。

备份层面

备份方式

保护对象

恢复粒度

典型RTO

存储层

ECS云盘快照

整个磁盘卷

卷级别

分钟级

文件系统层

ossutil同步至OSS

SAP应用文件与配置

文件级别

小时级

数据库层

HANA BackintOSS

HANA数据库数据与日志

数据库/时间点

小时级

在实际故障恢复中,应根据故障类型选择对应的恢复路径。对于磁盘故障,优先使用云盘快照进行卷级恢复;对于数据库数据丢失或损坏,使用HANA Backint备份进行数据库级恢复;对于应用层配置丢失,使用文件系统备份恢复相关目录。

6.2 备份架构参考

典型的备份架构包含以下关键组件和数据流:

  • SAP S/4HANA应用服务器(ECS实例):运行SAP应用层服务,其关键目录通过ossutil定时同步到OSS

  • SAP HANA数据库服务器(ECS实例):运行HANA数据库,通过OSS Backint Agent将数据备份和日志备份直接传输到OSS

  • 阿里云OSS Bucket(主地域):集中存储所有备份数据,配置生命周期策略实现分层存储

  • 阿里云OSS Bucket(灾备地域):通过跨地域复制接收备份数据副本,提供异地容灾能力

  • ECS云盘快照:为所有关键云盘配置自动快照策略,提供快速的卷级恢复能力

6.3 备份数据的分层存储策略

利用阿里云OSS的多种存储类型,可以根据备份数据的访问频率实施分层存储策略,在保障恢复能力的同时优化存储成本:

存储层级

OSS存储类型

适用数据

恢复时效

相对成本

热数据层

标准存储(Standard)

7天的备份

即时可用

100%

温数据层

低频访问(IA)

7-90天的备份

即时可用

~50%

冷数据层

归档存储(Archive)

90天以上的备份

需解冻(分钟-小时级)

~25%

通过OSS生命周期规则自动化实现存储类型的流转,无需人工干预。建议在配置生命周期规则时,结合业务的RTORPO需求确定各层级的时间阈值。

7. 安全与合规

7.1 备份数据传输加密

OSS Backint Agent与阿里云OSS之间的数据传输默认使用HTTPS协议(SSL/TLS加密),确保备份数据在网络传输过程中不被窃听或篡改。建议保持 skip-verify-cert = false 的默认设置,不要跳过SSL证书验证。

对于文件系统备份,ossutil同样默认使用HTTPS协议与OSS通信。在网络配置层面,建议通过阿里云VPC内网Endpoint访问OSS,备份流量不经过公网,进一步提升安全性并降低延迟。

7.2 备份数据静态加密

阿里云OSS支持多种服务端加密(Server-Side Encryption)方式,对存储在OSS中的备份数据进行静态加密:

  • SSE-AES256:使用AES-256算法进行加密,密钥由OSS管理。配置最简单,适用于一般安全需求。

  • SSE-KMS:使用阿里云密钥管理服务(KMS)管理加密密钥。支持自定义密钥(CMK),提供更细粒度的密钥管理能力,支持密钥轮转和审计。推荐对安全合规要求较高的企业使用。

  • SSE-SM4:使用国密SM4算法进行加密。适用于有国密算法合规要求的行业和企业。

    OSS Backint Agent的配置文件中,通过 server-side-encryption 参数指定加密方式,使用KMS时还需通过 server-side-encryption-key-id 参数指定密钥ID。

7.3 访问控制与权限最小化

遵循最小权限原则(Principle of Least Privilege),为备份相关的RAM角色或用户配置必要的最小权限集。以下是针对OSS Backint备份场景的RAM策略示例:

{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:PutObject",
"oss:GetObject",
"oss:DeleteObject",
"oss:ListObjects",
"oss:AbortMultipartUpload",
"oss:ListMultipartUploads"
],
"Resource": [
"acs:oss:*:*:sap-backup-bucket",
"acs:oss:*:*:sap-backup-bucket/*"
]
}
]
}

建议为不同的备份用途(如数据备份、日志备份、文件备份)创建独立的RAM角色,分别授权到对应的OSS路径前缀,避免权限交叉。

7.4 备份审计与日志记录

建议启用以下审计和日志记录机制,满足合规审计需求:

  • OSS访问日志:开启OSS Bucket的访问日志记录功能,记录所有对备份数据的访问操作(读、写、删除)。日志存储在单独的日志Bucket中,可用于事后审计。

  • ActionTrail操作审计:通过阿里云操作审计服务记录RAM用户和角色对OSS资源的API调用记录,包括谁在什么时间执行了什么操作。

  • Backint Agent日志:通过配置文件中的 log-level 和 log-file 参数,记录Backint Agent的运行日志,便于备份任务的故障排查和执行审计。

8. 运维最佳实践

8.1 备份任务监控与告警配置

备份任务的可靠执行是数据保护的基础。建议建立多层次的监控体系:

  • HANA层面:通过SAP HANA CockpitHANA Studio定期检查备份状态,关注备份失败告警。可以配置HANA的告警机制,在备份失败时自动发送邮件通知。

  • 操作系统层面:对于通过crontab调度的备份脚本,将脚本输出重定向到日志文件,通过日志监控工具(如logrotate + 脚本巡检)检测异常。

  • 云平台层面:利用阿里云云监控(CloudMonitor)服务,配置自定义监控指标和告警规则。可以监控OSS Bucket的请求成功率、存储容量增长趋势等指标。

8.2 定期恢复演练的流程建议

恢复演练是验证备份有效性的唯一手段,建议制定并遵循以下演练流程:

  1. 制定演练计划:明确演练目标(全量恢复 / 时间点恢复)、演练环境、参与人员和预期时间窗口

  2. 准备演练环境:在独立的ECS实例上部署与生产系统相同版本的HANA数据库,配置对应的OSS Backint Agent

  3. 执行恢复操作:按照恢复SOP执行数据库恢复,记录每个步骤的耗时

  4. 验证数据一致性:恢复完成后,检查数据库的关键表数据、行数统计和业务校验规则是否符合预期

  5. 编写演练报告:记录演练过程中发现的问题、实际RTO、改进建议,更新恢复SOP

8.3 备份性能调优指南

OSS Backint Agent的备份性能受多个参数的共同影响。以下是性能调优的关键思路:

内存消耗估算:Agent运行时的峰值内存消耗约为 job × pipe-parallel × pipe-part-size。默认配置(5 × 3 × 6 MiB)约消耗90 MiB内存。在HANA服务器内存资源充足时,可以适当增大这些参数以提升备份速度。

大数据库优化:对于数据量超过1 TBHANA数据库,建议增大 pipe-part-size(如调整为64 MiB128 MiB),并适当增加 job 数量,以充分利用网络带宽和并发传输能力。单个管道的默认最大传输量约为60 GB,超过此限制需要增大 pipe-part-size。

网络带宽:确保ECS实例到OSS之间的网络带宽充足。使用VPC内网Endpoint访问OSS可以获得稳定的高带宽、低延迟连接。如果备份速度受限于网络,可以考虑升级ECS实例的网络规格。

8.4 常见问题排查

问题现象

可能原因

解决方案

备份失败:连接OSS超时

网络不通或Endpoint配置错误

检查VPC安全组规则,确认OSS Endpoint正确,优先使用内网Endpoint

备份失败:权限拒绝

RAM角色或AccessKey权限不足

检查RAM策略是否包含所需的OSS操作权限,确认Bucket名称和路径正确

备份速度慢

参数配置不当或网络带宽不足

增大job、pipe-parallelpipe-part-size参数,检查网络带宽利用率

恢复失败:对象不可访问

备份数据已转为归档存储类型

先通过OSS控制台或API解冻(Restore)相关对象,再执行恢复

9. 附录

9.1 完整配置文件示例

以下是一个完整的 oss-backint-agent.ini 配置文件示例,采用ECS RAM角色认证方式:

# ===================================================
# OSS Backint Agent Configuration
# SAP HANA Backup to Alibaba Cloud OSS
# ===================================================

[credentials]
mode = EcsRamRole

[oss]
bucket-name = sap-hana-backup-prod
region = cn-hangzhou
endpoint = https://oss-cn-hangzhou-internal.aliyuncs.com
hana-sid = S4H
storage-prefix = SAP-HANA-Backint

[storage]
object-storage-class = Standard
# object-tagging = env=prod&app=sap

[encryption]
server-side-encryption = KMS
server-side-encryption-key-id = <your-kms-key-id>

[performance]
job = 5
pipe-parallel = 3
pipe-part-size = 6

[network]
# proxy = http://proxy.example.com:8080
# connect-timeout = 30
# read-timeout = 60
skip-verify-cert = false

[logging]
log-level = info
log-file = /var/log/sap/oss-backint-agent.log

9.2 常用SQL命令速查表

操作

SQL命令

执行全量数据备份

BACKUP DATA USING BACKINT ('');

执行增量数据备份

BACKUP DATA INCREMENTAL USING BACKINT ('');

执行差异数据备份

BACKUP DATA DIFFERENTIAL USING BACKINT ('');

查看备份目录

SELECT * FROM M_BACKUP_CATALOG ORDER BY UTC_START_TIME DESC;

查看备份进度

SELECT * FROM M_BACKUP_PROGRESS;

清理备份目录

BACKUP CATALOG DELETE ALL BEFORE TIMESTAMP '' USING BACKINT COMPLETE;

时间点恢复

RECOVER DATABASE UNTIL TIMESTAMP '' USING BACKINT;

设置日志备份间隔

ALTER SYSTEM ALTER CONFIGURATION ('global.ini','SYSTEM') SET ('persistence','log_backup_timeout_s')='900' WITH RECONFIGURE;

启用Backint数据备份

ALTER SYSTEM ALTER CONFIGURATION ('global.ini','SYSTEM') SET ('backup','catalog_backup_using_backint')='true' WITH RECONFIGURE;