EsgynDB是基于开源版本Apache Trafodion的基础上实现的商业版本,除了Trafodion本身的特性之外,EsgynDB还附带了很多其他的功能,如界面化的管理工具EsgynDB Manager,多数据中心支持,在线备份等功能。
备份恢复是数据库中比较重要的功能,定期的数据库备份是必要的,这可以防止数据库在出现突发状况时保持数据不丢失,或者可以防止由于管理员操作不当误删除表而无法恢复的问题(毕竟人不是机器,也会有失误)。
开源版本的Trafodion提供了离线备份及恢复的功能,关于离线备份及恢复,读者可以参考我之前的另外一篇博客:http://blog.csdn.net/post_yuan/article/details/53393267。本文介绍试用商业版本的EsgynDB的在线备份功能备份数据。
目前最新版本的EsgynDB的在线备份功能可以支持多粒度的数据库备份,包括全量备份或子集备份。全量备份就是备份整个数据库,包括所有用户数据及元数据;子集备份提供备份指定schema备份和指定table备份,即可以备份单个schema或几个schema的数据,也可以备份单个表或几个表的数据。具体语法如下,
BACKCUP TRAFODION {br-optioins1, [br-options2,]...[br-optionsN]}
br-option is:
{TAG 'tag -name '}
[SCHEMA (sch ema -name )]
[SCHEMAS (sch ema -name1 ,… sch ma -name N)]
[TABLE (table -name )]
[TABLES (table -name 1,…table -name N)]
[SHOW OBJECTS ]
上述的br-option中,”{TAG ‘tag -name ‘}”是必须的,其余是可选的。举个例子,以下是SEABASE下面的所有表,我们希望备份TEST-[A-F] 这些表,应该怎么实现呢?
SQL>get tables;
Tables in Schema TRAFODION.SEABASE
==================================
SB_HISTOGRAMS
SB_HISTOGRAM_INTERVALS
SB_PERSISTENT_SAMPLES
TEST_1
TEST_2
TEST_A
TEST_B
TEST_C
TEST_D
TEST_E
TEST_F
根据上面的备份语法,我们可以先使用以下命令确认要备份的数据,其中”show objects”表示显示要备份的对象而不真正执行备份,
SQL>backup trafodion,tag 'bk_test_a_to_e',tables (seabase.test_a,seabase.test_b,seabase.test_c,seabase.test_c,seabase.test_d,seabase.test_e,seabase.test_f),show objects;
DDL_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------
MetaData objects to be backed up
================================
TRAFODION._BACKUP_bk_test_a_to_e_.COLUMNS
TRAFODION._BACKUP_bk_test_a_to_e_.INDEXES
TRAFODION._BACKUP_bk_test_a_to_e_.KEYS
TRAFODION._BACKUP_bk_test_a_to_e_.OBJECTS
TRAFODION._BACKUP_bk_test_a_to_e_.REF_CONSTRAINTS
TRAFODION._BACKUP_bk_test_a_to_e_.SEQ_GEN
TRAFODION._BACKUP_bk_test_a_to_e_.TABLES
TRAFODION._BACKUP_bk_test_a_to_e_.TABLE_CONSTRAINTS
TRAFODION._BACKUP_bk_test_a_to_e_.TEXT
TRAFODION._BACKUP_bk_test_a_to_e_.UNIQUE_REF_CONSTR_USAGE
TRAFODION._BACKUP_bk_test_a_to_e_.VIEWS
TRAFODION._BACKUP_bk_test_a_to_e_.VIEWS_USAGE
TRAFODION._BACKUP_bk_test_a_to_e_.COLUMN_PRIVILEGES
TRAFODION._BACKUP_bk_test_a_to_e_.OBJECT_PRIVILEGES
TRAFODION._BACKUP_bk_test_a_to_e_.SCHEMA_PRIVILEGES
TRAFODION._BACKUP_bk_test_a_to_e_.SB_HISTOGRAMS
TRAFODION._BACKUP_bk_test_a_to_e_.SB_HISTOGRAM_INTERVALS
TRAFODION._BACKUP_bk_test_a_to_e_.SB_PERSISTENT_SAMPLES
User objects to be backed up
============================
TRAFODION.SEABASE.TEST_A
TRAFODION.SEABASE.TEST_B
TRAFODION.SEABASE.TEST_C
TRAFODION.SEABASE.TEST_D
TRAFODION.SEABASE.TEST_E
TRAFODION.SEABASE.TEST_F
--- SQL operation complete.
上述结果表明,在备份用户数据的同时也会备份相关的元数据信息,这些元数据信息也不可缺少,元数据信息和用户表组合一起用来做后续恢复用途。确认需要备份的表列表无误后,我们使用以下的命令执行真正的备份工作,
SQL>backup trafodion,tag 'bk_test_a_to_e',tables (seabase.test_a,seabase.test_b,seabase.test_c,seabase.test_c,seabase.test_d,seabase.test_e,seabase.test_f);
--- SQL operation complete.
备份完成后,我们可以使用以下命令获取备份的数据集,
SQL>get all backups;
BackupTag Type Status Timestamp
==========================================================================
bk_test_a_to_e SUBSET VALID 2018-01-25 18:01:58
--- SQL operation complete.
SQL>get backup, tag 'bk_test_a_to_e';
BackupTag Type Status Timestamp
==========================================================================
bk_test_a_to_e SUBSET VALID 2018-01-25 18:01:58
--- SQL operation complete.
现在备份完成了,现在我们来模拟一个场景:用户误删除表test_f,使用上述备份集恢复。步骤如下,
//模拟误删表test_f
SQL>drop table test_f;
--- SQL operation complete.
SQL>select * from test_f;
*** ERROR[4082] Object TRAFODION.SEABASE.TEST_F does not exist or is inaccessible. [2018-01-25 18:11:14]
//使用备份集恢复表test_f,查看恢复的内容
SQL>restore trafodion, tag 'bk_test_a_to_e', table (seabase.test_f), show objects;
DDL_OUTPUT
--------------------------------------------------------------------------------------------------------------------------------
MetaData objects to be restored
===============================
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.COLUMNS
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.COLUMN_PRIVILEGES
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.INDEXES
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.KEYS
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.OBJECTS
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.OBJECT_PRIVILEGES
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.REF_CONSTRAINTS
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SB_HISTOGRAMS
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SB_HISTOGRAM_INTERVALS
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SB_PERSISTENT_SAMPLES
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SCHEMA_PRIVILEGES
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.SEQ_GEN
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.TABLES
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.TABLE_CONSTRAINTS
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.TEXT
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.UNIQUE_REF_CONSTR_USAGE
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.VIEWS
TRAF_RSRVD_3:TRAFODION._BACKUP_bk_test_a_to_e_.VIEWS_USAGE
User objects to be restored
===========================
TRAF_RSRVD_3:TRAFODION.SEABASE.TEST_F
--- SQL operation complete.
使用备份集恢复表test_f,执行恢复动作
SQL>restore trafodion, tag 'bk_test_a_to_e', table (seabase.test_f);
--- SQL operation complete.
//查看表是否被恢复
SQL>select count(*) from test_f;
(EXPR)
--------------------
2
--- 1 row(s) selected.
至此,简单的在线备份恢复功能已经展示完成,在后续的文章中,我们会继续了解下如何导出并导入这些备份的数据集并恢复到新的集群中。