欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

试用EsgynDB新特性:在线备份及恢复功能

程序员文章站 2022-04-01 20:48:45
EsgynDB是基于开源版本Apache Trafodion的基础上实现的商业版本,除了Trafodion本身的特性之外,EsgynDB还附带了很多其他的功能,如界面化的管理工具EsgynDB...

EsgynDB是基于开源版本Apache Trafodion的基础上实现的商业版本,除了Trafodion本身的特性之外,EsgynDB还附带了很多其他的功能,如界面化的管理工具EsgynDB Manager,多数据中心支持,在线备份等功能。

备份恢复是数据库中比较重要的功能,定期的数据库备份是必要的,这可以防止数据库在出现突发状况时保持数据不丢失,或者可以防止由于管理员操作不当误删除表而无法恢复的问题(毕竟人不是机器,也会有失误)。

开源版本的Trafodion提供了离线备份及恢复的功能,关于离线备份及恢复。本文介绍试用商业版本的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.

至此,简单的在线备份恢复功能已经展示完成,在后续的文章中,我们会继续了解下如何导出并导入这些备份的数据集并恢复到新的集群中。