trafodion表元数据破坏,hbase数据正常情况下恢复trafodion表数据步骤

当你遇到trafodion中元数据遭到破坏而导致trafodion表访问失败,然而hbase的数据仍然能够正常访问的情况下恢复trafodion数据步骤如下:

一、模拟创建损坏的目标表
–trafodion创建表并插入数据(trafci中操作)
create table seabase.t001(id int, name varchar(32));
insert into seabase.t001 values(1, ‘dd’);
由于当前没有元数据损坏而hbase数据正常的表,但是实际场景中很有可能某些操作导致trafodion元数据损坏,所以,为了更形象描述处理过程,加上t001的元数据损坏。

二、数据恢复步骤
1、hbase创建快照(hbase执行)
–创建快照(hbase shell中操作)
snapshot ‘TRAF_RSRVD_3:TRAFODION.SEABASE.T001’, ‘snapsot_t001’

2、创建与需要恢复的表相同表结构的表(trafci执行)
–trafodion创建一个与seabase.t001表结构相同的表,例如seabase.t002
create table seabase.t002(id int, name varchar(32));
select * from seabase.t002;
这里写图片描述

3、删除表(hbase shell中执行。注意:trafodion中元数据仍然存在)
–删除hbase中seabase.t002对应的表(即TRAF_RSRVD_3:TRAFODION.SEABASE.T002),并使用clone_snapshot把seabase.t001中的数据clone到新TRAF_RSRVD_3:TRAFODION.SEABASE.T002表中
disable ‘TRAF_RSRVD_3:TRAFODION.SEABASE.T002’
drop ‘TRAF_RSRVD_3:TRAFODION.SEABASE.T002’
clone_snapshot ‘snapsot_t001’,’TRAF_RSRVD_3:TRAFODION.SEABASE.T002’
这里写图片描述

4、查看trafodion新表中是否加载数据(trafi执行)
–进入trafodion查询seabase.t002即可看到seabase.t001的数据已经备份到
select * from seabase.t002;
这里写图片描述
此时,我们可以看到,损坏的表已经通过hbase的snapshot在trafodion中有了相同的数据,剩下的就是清理损坏的表,并且把新的表重命名即可。

5、恢复坏表(trafci执行)
–删除seabase.t001并且seabase.t002重命名为seabase.t001即可恢复数据
drop table seabase.t001;
create table seabase.t001 as select * from seabase.t002;
select * from t001;
–数据正常后清理过渡表:
drop table seabase.t002;

6、清理snapshot(hbase shell中执行)
delete_snapshot ‘snapsot_t001’

至此,整个恢复数据的过程完成。

猜你喜欢

转载自blog.csdn.net/yangpengpeng2015/article/details/78397059
今日推荐