博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据仓库备份思路
阅读量:6137 次
发布时间:2019-06-21

本文共 2725 字,大约阅读时间需要 9 分钟。

数据仓库的数据量一般是非常巨大的,我们需要每天都备份吗?这一点我至今还是不懂,只是感觉数据仓库最起码是从生产库流过来的数据没必要做完完全全的备份,但是备份还是需要的,比如我们的ETL流程如下

1:环境了解

环境:SQLServer2008R2

数据仓库的抽取过程如下

图像分析:

生产库→ods:采用的是SSIS,那么这一步我们只保存SSIS的程序包即可,因为ODS是最大限度的和业务库保持一致的原始数据

ods→dw:采用的是一个存储过程循环抽取视图的办法,原则上ods层有多少个视图,dw层就有多少个表

USE [SZCH_ODS_HIS]GO/****** Object:  StoredProcedure [dbo].[ODSTODW]    Script Date: 08/13/2015 16:26:59 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE PROCEDURE [dbo].[ODSTODW]WITH EXEC AS CALLERASdeclare viewsfrom cursor for  select t.name from sysobjects t where xtype='V';open viewsfrom;declare @viewname nvarchar(200);declare @sqlstr nvarchar(1000);while @@FETCH_STATUS=0begin  set @sqlstr = 'drop table [DW_HIS].dbo.'+@viewname;  print '删除表'+@viewname  exec(@sqlstr);begin try  set @sqlstr = 'select * into [DW_HIS].dbo.'+ @viewname+' from [ODS_HIS].[dbo].['+@viewname+']';  print '抽取表'+@viewnameexec(@sqlstr);  print '完成处理'+@viewnameend trybegin catch  insert into ETLConfiguration.dbo.ODSToDWErrMsg select @viewname,ERROR_MESSAGE(),GETDATE()end catch  fetch next from viewsfrom into @viewname;endclose viewsfrom;deallocate viewsfrom;GO

dw→target :和ods→dw的处理方法一样

2:设计方案

根据我们的DW抽取方案,本人感觉备份了SSIS程序之后ODS层的数据基本上可以保证OK了,大不了重新抽一个全量,可能会很耗时,当然这个地方是可以优化的。我们最简单的

方法就是备份ods和dw层的view创建脚本和procedure创建脚本,那么如何实现呢

2.1:相关脚本

--------------------------------------------------------------------相关技术---------------------------------------------------------------------------------

获取目标数据库中(sqlserver)所有视图和存储的创建脚本

select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.id where xtype ='p' or  xtype ='v'order by o.xtype,o.name,cm.text

效果如下

另附:

-- 获得视图和存储过程创建语句

select o.xtype,o.name,cm.text from syscomments cm
inner join sysobjects o on o.id=cm.id
where xtype ='p' or xtype ='v'
order by o.xtype,o.name,cm.text
select * from sysobjects
where xtype='u'

-- 查询所有表名、字段名、类型、长度

select o.name, c.name,t.name,c.length from syscolumns c
inner join systypes t on c.xtype= t.xtype
inner join sysobjects o on c.id= o.id
where o.xtype='u'
order by o.name, c.name,t.name
-- 所有数据都来自于这四张表
--select * from sysobjects
--select * from syscolumns
--select * from syscomments
--select * from systypes

--------------------------------------------------------------------相关技术---------------------------------------------------------------------------------

2.2:操作步骤

通过2.1的脚本和SSIS把结果集放入到一个表中,例如BACK_UP库

这样我们就备份了ods和dw的所有视图和存储的创建脚本,恢复的时候首先恢复视图然后执行存储即可恢复数据,别忘了按层级恢复

实现效果:

我们实现了利用备份对象结构的的小数据量的方法备份了数据仓库的相关结构和抽取方法,恢复的时候就是一个抽取时间的问题了

当然如果条件允许,我们还是建议双机热备的、还有传说中的容灾备份,除了问题切换一下就好的理想方案,这里只说一个小的思

路,而且还是在特定环境下的,一般的如果DW的每一层都是采用KETTLE或者SSIS这些ETL工具抽取而成的话,那么我们就更省

事了,是不是只备份ETL程序就好了呢,事实上情况还是复杂的多了,比如我们有手工创建的一些枚举值表等等,接下来面对数据

仓库庞大的数据量,你感觉有没有必要每天备份呢?有好的想法吗?那么来信告诉我吧,希望和大家在BI这条路上一起进步与共勉

 

转载地址:http://htkya.baihongyu.com/

你可能感兴趣的文章
java学习:jdbc连接示例
查看>>
PHP执行批量mysql语句
查看>>
Extjs4.1.x 框架搭建 采用Application动态按需加载MVC各模块
查看>>
Silverlight 如何手动打包xap
查看>>
建筑电气暖通给排水协作流程
查看>>
JavaScript面向对象编程深入分析(2)
查看>>
linux 编码转换
查看>>
POJ-2287 Tian Ji -- The Horse Racing 贪心规则在动态规划中的应用 Or 纯贪心
查看>>
Windows8/Silverlight/WPF/WP7/HTML5周学习导读(1月7日-1月14日)
查看>>
关于C#导出 文本文件
查看>>
使用native 查询时,对特殊字符的处理。
查看>>
maclean liu的oracle学习经历--长篇连载
查看>>
ECSHOP调用指定分类的文章列表
查看>>
分享:动态库的链接和链接选项-L,-rpath-link,-rpath
查看>>
阿里云企业邮箱 在Foxmail 7.0上POP3/IMAP协议设置方法
查看>>
Javascript一些小细节
查看>>
canvas学习总结
查看>>
Javascript的if判断
查看>>
spring cloud gateway 源码解析(3)记录请求参数及返回的json
查看>>
阿里云ECS数据盘格式化与挂载图文教程
查看>>