
# SAP HANA基于存储快照的备份
本方式建议用于非生产系统。本方式通过使用云硬盘备份服务或云服务器备份服务，对SAP HANA的一个或多个卷执行快照，再将卷快照创建成备份，自动上传到华为云OBS，具体方案如[图1]所示。
图1SAP HANA基于存储快照的备份方案   
![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0177975115.png)
本方式的最大优点在于能够快速地备份、恢复数据，对系统的影响非常小。但本方式最关键的是如何保证SAP HANA在线情况下的应用一致性。相对于文件备份，基于存储快照的备份没有对应的工具来检查备份数据是否存在一致性问题。因此，这种备份方式建议您谨慎使用，仅用于对数据的一致性要求不高的场景或者允许系统停机备份的场景。在使用存储快照完成数据的备份后，建议您定期做数据恢复的演练，将备份数据恢复到一个新系统来检查备份数据是否完整、有效。
关于SAP HANA数据库和存储快照的内容，请参见[SAP Note 2039883](https://launchpad.support.sap.com/#/notes/2039883)。
**SAP HANA定义的存储快照流程：**
1. 准备SAP HANA存储快照
2. 对SAP HANA的云硬盘打快照
3. 确认SAP HANA存储快照
华为云的云服务器备份服务，提供了支持创建SAP HANA存储快照流程的数据库服务器备份。
**备份流程如下：**
1. 准备SAP HANA存储快照
2. 冻结SAP HANA data卷的文件系统（如使用xfs_freeze）
3. 根据用户的选择，对相应的云硬盘（如SAP HANA data卷所在的云硬盘）打快照
4. 解冻data卷（如使用xfs_unfreeze）
5. 确认SAP HANA存储快照
6. 将快照创建成备份（并自动上传到OBS）
**恢复流程如下：**
1. 停止云服务器
2. 解除云服务器和云硬盘的挂载关系
3. 从备份中恢复云硬盘
4. 重新挂载云服务器的云硬盘
5. 启动云服务器
6. 用户使用SAP HANA Studio、SAP HANA SQL命令或SAP HANA Cockpit等工具进行恢复数据库
以下我们结合华为云的云服务器备份服务，示例如何进行基于SAP HANA存储快照的备份与恢复。
本示例模拟Data卷的数据全部丢失后，使用Data卷的快照、Log卷数据以及Log卷备份将HANA恢复到最近的状态。
本示例中相关信息如[表1]所示。
 表1示例信息 
| 示例项             | 示例值                                       |
|:---|:---|
| SAP HANA云服务器主机名 | hwchana                                   |
| SAP HANA版本      | SAP HANA Platform Edition 2.0 SPS03 Rev30 |
| SID             | HWC                                       |
| 实例号             | 02                                        |
| Data卷路径         | /hana/data                                |
| Log卷路径          | /hana/log                                 |
| Log备份路径         | /hana/backup/log                          |
   
**备份示例流程：**
1. 根据SAP官方文档安装SAP HANA及HANA Studio。打开HANA Studio，配置Log备份路径。 ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178303130.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178303132.png)
   
2. 切换到\<sid\>adm用户，为SYSTEMDB的系统用户（即SYSTEM用户）创建一个用户存储秘钥，用于后续方便hdbsql命令的操作，如： **hdbuserstore set SYSTEMDB hwchana:30213 SYSTEM \<yourpassword\>**
   
3. 安装云服务器备份服务的数据库服务器备份特性所需要的Agent，并根据Agent的最佳实践配置Agent，具体请参考[通过自定义脚本实现SAP HANA一致性备份](https://support.huaweicloud.com/bestpractice-csbs/zh-cn_topic_0130605565.html)。
4. 使用HANA Studio分别给System DB和Tenant DB创建一张表，并各插入一条示例数据。
   - System DB 执行以下命令，创建一张表，并各插入一条示例数据。
     **create table test_table_system (id int, name char(50));**
     **insert into test_table_system values (01, 'before snapshot');**
     ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178303807.png)
     
   
   - Tenant DB 执行以下命令，创建一张表，并各插入一条示例数据。
     **create table test_table_tenant (id int, name char(50));**
     **insert into test_table_tenant values (01, 'before snapshot');**
     ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178303791.png)
     
    
5. 使用云服务器备份服务备份HANA云服务器，备份设置时，勾选"立即备份"，同时需勾选"数据库服务器备份"。在本示例中我们只备份Data卷。 ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178305890.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178304898.png)
   
6. 从云服务器备份服务的控制台及SAP HANA Studio确认备份已经成功。 ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178307897.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178307884.png)
   
7. 在备份后，再往System DB和Tenant DB各插入一条数据。
   - System DB
     ```
     insert into test_table_system values (02, 'after snapshot');
     ```
     ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178307925.png)
     
   
   - Tenant DB
     ```
     insert into test_table_tenant values (02, 'after snapshot');
     ```
     ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178308157.png)
     
    
8. 执行以下命令，删除Data卷数据完全丢失。 **rm /hana/data/\* -rf**
   
![](https://support.huaweicloud.com/backup-sap/public_sys-resources/caution_3.0-zh-cn.png)
本操作为危险操作，为示例中模拟故障使用，请勿在您的SAP系统中执行此操作。
**恢复示例流程：**
1. 在云服务器备份服务的控制台上，单击"恢复数据"，此操作将会停止SAP HANA云服务器，并将Data卷恢复到备份时的时间点。 ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178310380.png)![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178310401.png)
   
2. 恢复后重新连接SAP HANA云服务器，查看Data卷的数据，可以看到Data卷目录下存在以"snapshot"开头的文件，表示Data卷已经恢复到备份时刻的状态。 ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178311107.png)
   
3. 使用RECOVER DATABASE命令恢复System DB，恢复时间点选取一个将来的时间，表示恢复到最近的状态。 **HDBSettings.sh recoverSys.py --command="RECOVER DATABASE UNTIL TIMESTAMP '2020-01-01 00:00:00' USING SNAPSHOT;"**
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178311595.png)
   恢复后，System DB会自动启动。此时，您可使用hdbsql命令或SAP HANA Studio进行操作。
   
4. 停止Tenant DB数据库，并使用RECOVER DATABASE命令恢复Tenant DB，恢复时间点选取一个将来的时间，表示恢复到最近的状态。 **hdbsql -jU SYSTEMDB 'alter system stop database HWC'**
   **hdbsql -jU SYSTEMDB "RECOVER DATABASE FOR HWC UNTIL TIMESTAMP '2020-01-01 00:00:00' USING SNAPSHOT;"**
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178312401.png)
   ![](https://support.huaweicloud.com/backup-sap/public_sys-resources/note_3.0-zh-cn.png)
   - 为防止在恢复Tenant DB快照前，用户使用了HDB start启动SAP HANA，从而导致快照失效，建议您将Tenant DB设置为不自动启动，示例命令如下：
   
   
   ```
   hdbsql -jU SYSTEMDB 'ALTER DATABASE HWC NO RESTART'
   ```
   本步骤的操作也可以在HANA Studio上操作，选择恢复到最近的状态，示例如下：
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178394187.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178314234.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178314952.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178314981.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178314993.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178315669.png)
   
5. 连接SAP HANA Studio，分别查询恢复后的System DB和Tenant DB的数据。 可看到数据已经恢复到故障发生前的最新状态，说明已经完成数据的恢复。
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178312490.png)
   ![](https://support.huaweicloud.com/backup-sap/zh-cn_image_0178312493.png)
   
 
