Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 
Former Member
7,134

SAP HANA数据库的备份

为了保证最佳的性能,SAP HANA把数据存储在内存中,然而,SAP HANA也使用持久化的存储系统来进行故障的恢复。上一篇文章讲过,数据库进行正常操作时,数据和undo日志在保存点(Savepoint)过程中会自动地持久化到硬盘中,数据的变化被记录在redo日志中。Savepoint和写日志操作可以防止突然的断电对数据库的影响,但是当持久性存储设备(如硬盘)发生故障后,它们就无能为力了。为了防止硬件故障导致的数据丢失,数据库备份是必须的。备份操作过程对SAP HANA的性能影响是可以忽略不计的,用户可以继续正常工作。

数据库从备份中恢复和重启系统是相似的,都是从硬盘中读取数据和日志。但是它们的差别是,数据库从备份中恢复需要的是外部备份文件。由于SAP HANA中数据和日志(redo)存储在不同的分区中,因此数据库的备份也分为日志备份和数据备份两个部分,这两个部分的过程是相互独立的。SAP HANA的备份需要注意一下几点:

  1. SAP HANA的备份所需要的授权见下表。

授权名称

注释

BACKUP ADMIN

执行备份的授权

CATALOG READ

备份时搜集信息的授权

  1. SAP HANA进行第一次数据备份以前,日志备份是不会进行的(log mode处于overwrite模式)。
  2. 备份和恢复都是应用于整个数据库的,不可以备份和恢复数据库中的某一个对象。
  3. SAP HANA可以通过第三方备份工具进行备份。
  4. 最好使用共享存储设备进行备份,因为它不仅可以让所有节点访问到备份数据,而且系统更容易管理共享设备。

日志的备份

SAP HANA中,默认情况下,系统自动备份日志,前提必须是做过一次数据备份。在自动备份的模式下,三种情况会触发一个log segment备份:

  1. Log segment满了。
  2. 超过log备份timeout设置时间,log segment关闭。
  3. 数据库启动。

系统用户可设置备份模式,设置 HANA studioConfiguration->golobal.ini->persistence->log_modeenable_auto_log_backup,如下图所示:

Log mode有两种模式可选:

  1. Normal(默认),在该模式下,如果enable_auto_log_backup=yes,log segment会被自动的备份,这种方式的好处是:备份后的log segment文件可以被重新利用,从而避免了log volume慢导致数据库崩溃。下一篇将讲述硬盘满后的恢复工作。
  2. Overwrite,在该模式下,log segment不会被进行备份,进行了savepoint之后,free状态的log segment会被直接覆盖。由于没有日志的备份,这种模式不推荐在生产系统中使用。如果使用Overwrite模式,数据将只能通过数据备份进行恢复了,不能达到恢复到point-in-time的效果,只能恢复到某个savepoint

我们也可以设定log备份的时间间隔,Configuration->golobal.ini->persistence->log_backup_timeout_s。系统默认时间间隔为900s,如果发生介质故障需要从备份恢复且日志日志区不能被用来进行恢复,这段时间内的系统数据改变将会丢失。如果此处设为0,那么系统只有在log segment满或者系统重启时才会备份log

数据的备份

SAP HANA数据区的备份包含了数据库的所有内容:事务数据已经管理数据(例如:用户,角色,模型和视图)。只有真正的数据会被备份,数据库中未使用的空间不会被备份。数据区进行备份时,会备份每一个SAP HANA服务的数据。如果SAP HANA运行在多个主机上,那么数据备份会包含所有主机上的以服务为单位的备份。

默认情况下,SAP HANA的数据备份目录为$DIR_INSTANCE/backup/data。注意这个目录以及日志备份目录$DIR_INSTANCE/backup/logSAP HANA的日志区和数据区要放在不同的硬盘上,这样即使SAP HANA系统发生介质故障,也不会影响日志硬盘。

数据备份可通过三种工具进行备份:SAP HANA studio, SQL命令,批处理模式。

使用 SAP HANA Studio进行备份

  1. 右击系统,选择Back Up…,弹出窗口如下图所示,选择Backup类型,如果安装了第三方备份工具,则可选择其他类型,本文不介绍。
  2. 设定备份的目标目录以及该备份的前缀名。此时应确保指定的备份目标目录有足够的空间进行备份。
  3. 点击Next,显示备份设置的总结。
  4. 点击Finish,备份开始。视图会显示所有服务的备份进程。

使用SQL命令进行备份

管理用户可以在SAP HANA Studio中的SQL 控制台或者hdbsql中使用SQL命令进行备份。推荐在批处理情况下,才使用SQL命令进行备份。SQL 命令为:

BACKUP DATA USING FILE ('<path><prefix>')

其中<path><prefix>为绝对路径。例如:

BACKUP DATA USING FILE ('/backup/data/MONDAY/COMPLETE_DATA_BACKUP')

该语句会在/backup/data/MONDAY中创建

COMPLETE_DATA_BACKUP_databackup_0_1 (name server topology)

COMPLETE_DATA_BACKUP_databackup_1_1 (name server)

COMPLETE_DATA_BACKUP_databackup_2_1 (for example, index server)

...

批处理模式进行备份

用户可以在操作系统级别使用SAP HANA的命令行工具HDBSQL进行备份。HDBSQL可以让用户通过crontab来让数据库在固定时间固定间隔进行备份。

  1. 安装SAP HANA Client,该客户端软件可以让用户使用hdbuserstore,从而避免直接在命令行中输入密码:

hdbinst –a client (default location: /usr/sap/hdbclient)

  1. 创建一个用户钥匙:

/usr/sap/hdbclient/hdbuserstore set <KEY> <host>:3<instance id>15 <user> <password>

例如:

/usr/sap/hdbclient/hdbuserstore set BACKUP vebwtests1:30015 user password

  1. crontab中,执行:

/usr/sap/hdbclient/hdbsql –U<KEY> "BACKUP DATA USING FILE ('<path><prefix>')"

例如:

/usr/sap/hdbclient/hdbsql -U BACKUP "BACKUP DATA USING FILE ('MONDAY')"

本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 70.00。想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!