hana数据库命令行备份和恢复
hana大致原理图
而不像传统数据库,数据放在硬盘里,走过复杂的读操作,走过系统总线,在内存里被短暂的处理,然后再走过同样的路回去,躺在硬盘里
1. hana数据库分为两大类即为租户库(多个)和系统库(一个)
1>hana数据库对内存要求很高,速成版(也就是免费版的,下载下来是个ova的虚拟机,最低内存要求8G,而正式版内存最低要求是24G)
2>本来打算从头安装的,无赖配置不够
2. 常用命令
1>hdbsql -n localhost -i 90 -d SystemDB -u SYSTEM -p Suj000123 -x
-n 表示连接的主机
-i 实例编号
-d 指定是系统库还是租户库(默认是租户库)
-u 指定数据库的用户名
-p 指定数据库的密码
-x 后面可以执行相应的sql命令
2>alter system start Database HXE
其中HXE为租户库的名字,该命令需要在系统库中执行才能生效
3>CREATE SCHEMA HDBSQL_TEST;
4>CREATE TABLE HDBSQL_TEST.CUSTOMER(ID INTEGER NOT NULL PRIMARY KEY,NAME NVARCHAR(50),ZIP NVARCHAR(20),ADDRESS NVARCHAR(100),TELEPHONE NVARCHAR(20));
5>INSERT INTO "HDBSQL_TEST"."CUSTOMER" values (1043,'George W. Bush','23193','华盛顿特区宾夕法尼亚大道1600号','202-456-1112');
6>SELECT * FROM HDBSQL_TEST.CUSTOMER
7>删除SCHEMA
i>有表的时候:DROP SCHEMA HDBSQL_TEST CASCADE;
ii>无表的时候:DROP SCHEMA HDBSQL_TEST;
创建数据库
Create a tenant database with automatic host placement and automatic port assignment.
CREATE DATABASE DB0 SYSTEM USER PASSWORD Manager1;
Create a tenant database on a specific host accessible via a specific SQL port (30148). The SQL port number is the internal communication port number plus 1.
CREATE DATABASE DB1 AT LOCATION 'HOST_A:30147' SYSTEM USER PASSWORD Manager1;
Create a tenant database on a specific host, adding an additional slave index server on a specific second host and an auxiliary script server on an automatically selected host.
CREATE DATABASE DB2 AT LOCATION 'HOST_A' ADD 'indexserver' AT 'HOST_B' ADD 'scriptserver' SYSTEM USER PASSWORD Manager1;
删库
DROP DATABASE my_database;
获取所有数据库的信息select * from "SYS"."M_DATABASES"
获取数据库Instance ID和Instance Number
select * from "SYS"."M_SYSTEM_OVERVIEW"
获取hana tenant jdbc port
select * from "SYS_DATABASES"."M_SERVICES"
3. 备份
用户必须先切换到sidadm用户,由于目前用的是免费版的虚拟机,进入后默认就是hxeadm用户
租户库和系统库备份command line一样的
backup DATA using file ('/usr/sap/HXE/HDB90/backup/data','FULL.SystemDB')
说明:
1.backup type:DATA(全量)、DATA INCREMENTAL、DATA DIFFERENTIAL
2.file后面的参数可以是一个也可以是两个
1>参数为两个时,第一个时目录的绝对路径,第二个是文件名前缀
2>参数为一个时
i>当该参数时一个文件名的时候,那么默认将备份好的文件存放在/usr/sap/HXE/HDB90/backup/data/SYSTEMDB(或者DB_SID,在此处SID也就是我们的HXE)
ii>当该参数是一个绝对路径时,那么默认将最后一个/后面的那个字符串作为备份文件名的前缀
3.最终备份命令为(以备份租户库为例):
hdbsql -n localhost -i 90 -d HXE-u SYSTEM -p Suj000123 -x "backup data using file ('/usr/sap/HXE/HDB90/backup/data/tenant/test1')"
4. 恢复
恢复的时候系统库和租户库的方式不一样
4.1恢复的时候最重要的一点是要停止目标数据库,例如要恢复SystemDB那么就要先停止SystemDB
4.2所以系统数据库恢复的时候,就不能用-x的形式来执行恢复命令了,因此系统库和租户库的恢复是有区别的
4.3具体恢复如下
a>对于系统库的恢复,我们会用到hana给的两个系统自带的python脚本和一个shell脚本来进行辅助执行还原命令
i>这两个文件分别是:HDBSettings.sh(默认放在/usr/sap/HXE/HDB90下),recoverSys.py(默认放在/usr/sap/HXE/HDB90/exe/python_support下)
ii>那么最后的还原命令为:
HDBSettings.sh recoverSys.py --command="RECOVER DATA ALL USING FILE ('/usr/sap/HDB/HDB01/backup/data/backup_HDB_COUNT_1') CLEAR LOG"
b>对于租户库的还原,官方文档已经明确说明了不能用recoverSys.py来进行还原,租户库的还原必须要系统库来辅助完成
i>必须先停止租户库
hdbsql -n localhost -i 90 -d SystemDB -u SYSTEM -p Suj000123 -x "alter system start Database HXE"
ii>执行还原命令
还原命令为RECOVER DATA FOR TENANTDBNAME USING SOURCE 'SRTENANT@W02' USING BACKINT ('4344648_COMPLETE_DATA_BACKUP') CLEAR LOG
说明:
SRTENANT is the source tenant database name.
TENANTDBNAME is the destination tenant database name.
W02 is the source instance name
最终还原命令为(该命令为本机恢复,全量恢复)
hdbsql -n localhost -i 90 -d SystemDB -u SYSTEM -p Suj000123 -x "RECOVER DATA FOR HXE USING FILE('/usr/sap/HXE/HDB90/backup/data/tenant/test1') CLEAR LOG";
补充:
- SAP HANA数据库支持事务一致性,从而确保事务完全应用于系统或已处置。在事务期间,可以通过ROLLBACK命令显式还原对数据库的数据操作语言(DML)修改。发出ROLLBACK后,将还原当前事务期间所做的更改,并将当前数据库会话设置为空闲状态。 ROLLBACK仅适用于自动提交禁用的会话。
如果您尝试在启用了自动提交的会话中使用ROLLBACK语句,则不会发生任何事情,因为会将事务自动提交到数据库。有关更改数据库会话的自动提交状态的更多信息,请参阅《 SAP HANA管理指南》中有关自定义管理控制台的信息。 - SAP HANA 数据库无法恢复到比其现有版本低的任何版本。用于恢复的 SAP HANA 数据库软件版本必须是相同或高于创建备份的 SAP HANA 数据库的版本。
- 要恢复到最新状态,日期必须晚于最新状态。(To recover to the most recent state, the date needs to be later than the most recent state.)
- 恢复的目标数据库不存在时,需要先创建好目标数据库,如果恢复的目标数据库和老的数据库名字相同,那么恢复后库的密码是新库的密码