为海量数据仓库定制多重备份策略

为海量数据仓库定制多重备份策略

本文描述对海量数据仓库的备份思路,欢迎大家拍砖
为海量数据仓库定制多重备份策略
     本文所描述的数据仓库环境是指电信行业数据仓库系统。
数据库备份主要保障数据库系统稳定可靠,但由于数据仓库存储海量数据库,数据库非常庞大。传统的数据库全备(或增量备份)+归档日志备份的方法在备份和恢复上都不能满足业务要求,比如有如下表所示的经营分析系统数据库环境
类别        说明
数据库所在主机        IBM p570(16*1.65MHZ 48G内存)
操作系统        AIX 5.3
数据库软件        Oracle 9i Enterprise Edition Release 9.2.0.6-64bit Production for AIX 5L
磁盘阵列        IBM 8300
备份带库        IBM 3584
备份实施时数据库大小        30T
预计数据库最终大小        50T
系统每天归档日志大小        1T
假设有以下一些恢复需求:
        恢复表table1的一个分区partition10(table1是分区表,每个分区1.5G,table1中存放着90个分区)。
        恢复表空间tablespace1(tablespace1大小为400G,里面存放15张表)。
        恢复系统中一个关键参数表,要求恢复时间小于一小时。
        恢复一个存储过程,要求恢复时间小于一小时。
如果按照传统的备份恢复方法,需要使用数据库全备+归档日志来恢复,此系统数据库全备的速度是1T/H,备份时间是25h左右,恢复时间至少要20h以上。此恢复时间根本不能满足生产系统的要求。
有两种有效的方法可以缩短备份与恢复的时间,一是减少每次备份数据量,二是采用其它更零活的备份方式。
一.减少每次备份数据量
可采用表空间备份来减少每次备份的数据量,表空间备份也称为热表空间备份,是一种在数据库打开且表空间联机时进行的一种表空间备份。因为表空间中的数据在备份过程中被修改,所以这种备份还被称为不一致的。需要同时备份归档日志。
比如上面提到的表空间tablespace1(400G,存放最近6个月的数据),采用表空间备份时可以把表空间中的数据规划出当前表数据和历史数据,当前表空间存放当前业务系统最经常访问,发生变化的数据(比如最近一个月的数据),历史表空间存放其它相对不经常访问,不变的数据(一个月之前的数据)。这样备份时就可以把备份分成两部分,一是当时表空间备份,一是历史表空间备份,由于当前表空间数据量相对比较少,可以有效的减少备份恢复的时间。
二.其它备份方式
  表级逻辑备份
    表级逻辑备份是通过oracle自带的exp/imp工具把表中的数据导成文件,然后把文件备份。这个备份方式最灵活,可以备份单个表,如果是分区表还可以备份单个分区,对其它的分区,表没有任何影响。在恢复时可以恢复单个分区或单个表,并且可以通过调整exp/imp参数控制对系统资源消耗和备份恢复的速度。
    表级的逻辑备份只能备份某一时间点表中的数据,当表需要恢复时只能恢复当时备份的数据。由于表级逻辑备份备份粒度较细,实施配置相对繁琐。
表级的逻辑备份脚本:
1)分区表导出脚本
select 'nohup exp USERNAME/PASSWORD@INSTANCE LOG='||
               t.partition_name
               ||'.log TABLES=/('||
               t.table_name
               ||':'||
               t.partition_name
               ||'/) FILE='||
               t.partition_name
               ||'.dmp  ROWS=y &'
         from all_tab_partitions t
        where t.table_name = 'TABLE_NAME'
          and t.partition_name like '%200602%'
        order by t.partition_name;
2)非分区表导出脚本
此脚本实现按表导出,每个表导出一个数据文件,并记录一个日志文件,各地可以根据需求进一步修改成通过关联配置表实现表自动导出。
select 'nohup exp USERNAME/PASSWORD@INSTANCE LOG='||
               t.table_name
               ||'.log TABLES='||
               t.table_name
               ||' FILE='||
               t.table_name
               ||'.dmp  ROWS=y &'
         from all_all_tables t
        where t.table_name  = '% TABLE_NAME %'
        order by t.table_name;
3)分区表导入脚本
imp " USERNAME/PASSWORD" file=exp_partition_file_name.dmp TABLES=table_name fromuser=from_username touser= to_username rows=y IGNORE=y  commit=y buffer=600000000 feedback=100000 INDEXES=n log=log_file_name
4)非分区表导入脚本
imp " USERNAME/PASSWORD" file=exp_table_file_name.dmp TABLES=table_name fromuser=from_username touser= to_username rows=y IGNORE=y  commit=y buffer=600000000 feedback=100000 INDEXES=n log=log_file_name
脚本备份
脚本备份是通过编写程序或通过第三方软件把数据库的表、存储过程、函数、视图等等脚本导出文件形式,再把文件备份。脚本备份的目的是预防数据库中的表、存储过程、函数等等被误删除,或者需要它们恢复到某一时间点,脚本备份只备份脚本,不能备份数据。
关键参数表备份
关键参数表备份是按照业务需要,对经营分析系统中重要的表(比如配置表等等)进行在线备份(在数据库中新建备份表),备份周期可以为一天一次或一天几次。
关键参数表备份优点是可以快速恢复,但因为是在线备份,所以此种备份只适合备份比较小的表。如果备份大表,需要大量存储。
综合考虑以上各备份的特点,对海量的数据仓库应可采取几种备份方式相结合的方式,来满足业务上的恢复需求,下表中例举数据仓库中备份方式。
备份方案        备份周期        备份存储周期
数据库全备+
当前表空间备份+历史表空间备份+
归档日志备份+
表级逻辑备份+
脚本备份+
关键参数表备份        数据库全备        2周        数据库全备        两周
        当前表空间备份        1周        当前表空间备份        1周
        历史表空间备份        4周        历史表空间备份        4周
        归档日志备份        3小时        归档日志备份        两周
        表级逻辑备份        1周        表级逻辑备份        1年
        脚本备份        1天        脚本备份        1年
        关键参数表备份        1天        关键参数表备份        1周
     对数据仓库实施备份时,可以根据业务及客户需要对表中所述备份方案进行裁剪。
对于海量的数据仓库制定备份策略时,如果传统的数据库全备,增量备份不能满足业务需求,可以考虑为数据仓库定制多重备份机制,满足业务对备份的需求。
最后的备份方案格式不是很好,不方便大家阅读,重新整理了一下。
数据仓库备份方案如下:
备份内容                  备份周期           备份存储周期
数据库全备                 2周                2周
当前表空间备份             1周                1周
历史表空间备份             4周                4周
归档日志备份               3小时              两周
表级逻辑备份               1周                1年
脚本备份                   1天                1年
关键参数表备份             1天                1周

你可能感兴趣的:(为海量数据仓库定制多重备份策略)