通过自定义脚本实现SAP HANA一致性备份
本章节以SuSE 11 SP4 for SAP操作系统下HANA 2.0单机版为例,介绍如何通过自定义脚本来冻结、解冻HANA数据库,以实现对HANA数据库的数据库备份。
场景介绍
某企业购买了云服务器,并在上面安装了HANA 2.0单机版数据库,用于存放业务数据,随着数据量的增加,之前的崩溃一致性保护已经满足不了RTO、RPO的要求,决定采用应用一致性备份,减小RTO与RPO。
数据准备
准备项 |
说明 |
示例 |
---|---|---|
HANA用户名 |
连接HANA SYSTEMDB 数据库时使用的用户名 |
system |
HANA密码 |
连接HANA SYSTEMDB 数据库时使用的密码 |
Example@123 |
HANA实例编号 |
连接HANA数据库时使用的实例编号 |
00 |
HANA SID |
连接HANA数据库时使用的SID |
WXJ |
详细步骤
- 加密HANA用户密码,供自定义脚本使用
- 登录HANA服务器,输入cd /home/rdadmin/Agent/bin/ ,进入Agent目录。
- 执行/home/rdadmin/Agent/bin/agentcli encpwd,回显如下:
Enter password:
输入HANA用户的密码,并按“Enter”,屏幕上就会打印出加密后的密码,将其复制到剪贴板中。
冻结解冻脚本中配置的明文密码长度不超过16位,否则配置后密码会被截断,应用一致性备份会失败。
执行cd /home/rdadmin/Agent/bin/thirdparty/ebk_user ,进入自定义脚本目录,执行vi hana_freeze.sh ,打开HANA示例冻结脚本。
- 将下图所示的HANA_USER HANA_PASSWORD INSTANCE_NUMBER DB_SID修改为实际值,其中HANA_PASSWORD 为步骤1的屏幕输出。
也可以使用sed命令来直接进行修改:
sed -i 's/^HANA_USER=.*/HANA_USER="XXX"/' hana_freeze.sh hana_unfreeze.sh ,其中XXX为数据库用户名。
sed -i 's/^HANA_PASSWORD=.*/HANA_PASSWORD="XXX"/' hana_freeze.sh hana_unfreeze.sh ,其中XXX为步骤1中打印出的密码。
sed -i 's/^INSTANCE_NUMBER=.*/INSTANCE_NUMBER="XXX"/' hana_freeze.sh hana_unfreeze.sh ,其中XXX为数据库实例编号。
sed -i 's/^DB_SID=.*/DB_SID="XXX"/' hana_freeze.sh hana_unfreeze.sh ,其中XXX为数据库SID。
此操作会同时修改冻结解冻脚本,所以无需再执行步骤3。
- 执行vi hana_unfreeze.sh ,打开HANA示例解冻脚本,修改此脚本中的用户名、密码、实例编号与SID
hana_freeze.sh与hana_unfreeze.sh脚本实现了基本的数据库冻结与解冻操作,如果你在冻结、解冻时有其它额外步骤需要执行,可以自行在其中进行修改。详细说明请参见 通过自定义脚本实现其它Linux应用的一致性备份
冻结SAP HANA数据库时,按照SAP官方建议,需要冻结Data卷的XFS文件系统,否则可能出现数据不一致的问题。在此示例脚本中,将会查询出HANA使用的Data卷挂载点,并用xfs_freeze 命令进行冻结。
如果HANA系统未按照SAP官方建议使用一个独立分区来存放Data卷数据,而是与系统卷共用一个分区,则请修改hana_freeze.sh脚本,注释掉xfs_freeze相关行,防止整个系统都被冻结,但此时可能出现备份数据不一致的问题。