数据迁移(又称分级存储管理,hierarchical storage management,hsm)是一种将
离线存储与在线存储融合的技术。它将高速、高
容量的非在线
存储设备作为磁盘设备的下一级设备,然后将磁盘中常用的 数据按指定的策略自动迁移到
磁带库(简称带库)等二级大容量存储设备上。当需要使用这些数据时,分级
存储系统会自动将这些数据从下一级
存储设备调回到上一 级磁盘上。对于用户来说,上述数据迁移操作完全是透明的,只是在访问磁盘的速度上略有怠慢,而在逻辑磁盘的
容量上明显感觉大大提高了。
数据迁移的实现可以分为3个阶段:数据迁移前的准备、数据迁移的实施和数据迁移后的校验。由于数据迁移的特点,大量的工作都需要在准备阶段完成,充分而周到的准备工作是完成数据迁移的主要基础。具体而言,要进行待迁移数据源的详细说明(包括数据的存储方式、数据量、数据的时间跨度);建立新旧系统数据库的数据字典;对旧系统的历史数据进行质量分析,新旧系统数据结构的差异分析;新旧系统代码数据的差异分析;建立新老系统数据库表的映射关系,对无法映射字段的处理方法;开发、部属ETL工具,编写数据转换的测试计划和校验程序;制定数据转换的应急措施。
其中,数据迁移的实施是实现数据迁移的3个阶段中最重要的环节。它要求制定数据转换的详细实施步骤流程;准备数据迁移环境;业务上的准备,结束未处理完的业务事项,或将其告一段落;对数据迁移涉及的技术都得到测试;最后实施数据迁移。
数据迁移后的校验是对迁移工作的检查,数据校验的结果是判断新系统能否正式启用的重要依据。可以通过质量检查工具或编写检查程序进行数据校验,通过试运行新系统的功能模块,特别是查询、报表功能,检查数据的准确性。
数据迁移的技术准备
数据转换与迁移通常包括多项工作:旧系统数据字典整理、旧系统数据质量分析、新系统数据字典整理、新旧系统数据差异分析、建立新旧系统数据之问的映射关系、开发部署数据转换与迁移程序、制定数据转换与迁移过程中的应急方案、实施旧系统数据到新系统的转换与迁移工作、检查转换与迁移后数据的完整性与正确性。
数据转换与迁移的过程大致可以分为抽取、转换、装载三个步骤。数据抽取、转换是根据新旧系统数据库的映射关系进行的,而数据差异分析是建立映射关系的前提,这其中还包括对代码数据的差异分析。转换步骤一般还要包含数据清洗的过程,数据清洗主要是针对源数据库中,对出现二义性、重复、不完整、违反业务或逻辑规则等问题的数据进行相应的清洗操作;在清洗之前需要进行数据质量分析,以找出存在问题的数据,否则数据清洗将无从谈起。数据装载是通过装载工具或自行编写的SQL程序将抽取、转换后的结果数据加载到目标数据库中。
对数据的检查包括以下6个方面。
(1)数据格式检查。检查数据的格式是否一致和可用,目标数据要求为number型。
(2)数据长度检查。检查数据的有效长度,对于char类型的字段转换到varchar类型中,需要特别关注。
(3)区间范围检查。检查数据是否包含在定义的最大值和最小值的区间中。例如年龄为300或录入日期为4000—1—1显然有问题。
(4)空值、默认值检查。检查新旧系统定义的空值、默认值是否相同,不同数据库系统对空值的定义可能不同,需要特别关注。
(5)完整性检查。检查数据的关联完整性。如记录引用的代码值是否存在,特别需要注意的是有些系统在使用一段时间后,为了提高效率而去掉了外键约束。
(6)一致性检查。检查逻辑上是否存在违反一致性的数据,特别是存在分别提交操作的系统。
数据迁移的工具选择
数据迁移工具的开发、部署主要有2种选择,即自主开发程序或购买成熟的产品。这2种选择都有各自不同的特点,选择时还要根据具体情况进行分析。纵观目前国内一些大型项目,在数据迁移时多是采用相对成熟的ETL产品。可以看到这些项目有一些共同特点,主要包括:迁移时有大量的历史数据、允许的宕机时间很短、面对大量的客户或用户、存在第三方系统接入、一旦失败所产生的影响面将很广。同时也应该看到,自主开发程序也被广泛地采用。
目前,许多数据库厂商都提供数据抽取工具,如Informix的InfoMover、Microsoft SQLServer的DTS和0raele的Oracle Warehouse Builder等。这些工具在一定范围内解决了数据的提取和转换。但这些工具基本都不能自动完成数据的抽取,用户还需利用这些工具编写适当的转换程序。
例如Oracle的Oracle Warehouse Builder(OWB)数据抽取工具提供的功能包括:模型构造和设计,数据提取、移动和装载,元数据管理等。但OWB提供的流程繁琐,维护很困难,不易于使用。
在第三方产品中,Ascential Software公司的DataStage是一套相对比较完善的产品。DataStage可以从多个不同的业务系统、从多个平台的数据源中抽取数据,完成转换和清洗,装载到各种系统里面,其中每步都可以在图形化工具里完成;同样可以灵活地被外部系统调度,提供专门的设计工具来设计转换规则和清洗规则等,实现了增量抽取、任务调度等多种复杂而实用的功能。其中简单的数据转换可以通过在界面上拖拉操作和调用一些DataStage预定义转换函数来实现,复杂转换可以通过编写脚本或结合其他语言的扩展来实现,并且DataStage提供调试环境,可以极大地提高开发和调试抽取、转换程序的效率。
数据抽取和转换的准备
数据抽取前,需要作大量的准备工作,具体归纳为如下4个部分。
(1)针对目标数据库中的每张数据表,根据映射关系中记录的转换加工描述,建立抽取函数。该映射关系为前期数据差异分析的结果。抽取函数的命名规则为:F_目标数据表名_E。
(2)根据抽取函数的SQL语句进行优化。可以采用的优化方式为:调整SORTAREA_SIZE和HASH_AREA_SIZE等参数设置、启动并行查询、采用提示指定优化器、创建临时表、对源数据表作ANALYZES、增加索引。
(3)建立调度控制表,包括ETL函数定义表(记录抽取函数、转换函数、清洗函数和装载函数的名称和参数)、抽取调度表(记录待调度的抽取函数)、装载调度表(记录待调度的装载信息)、抽取日志表(记录各个抽取函数调度的起始时间和结束时间以及抽取的正确或错误信息)、装载日志表(记录各个装载过程调度的起始时间和结束时间以及装载过程执行的正确或错误信息)。
(4)建立调度控制程序,根据抽取调度表动态调度抽取函数,并将抽取的数据保存入平面文件。平面文件的命名规则为:目标数据表名.txt。
数据转换的工作在ETL过程中主要体现为对源数据的清洗和代码数据的转换。数据清洗主要用于清洗源数据中的垃圾数据,可以分为抽取前清洗、抽取中清洗和抽取后清洗。ETL对源数据主要采用抽取前清洗。对代码表的转换可以考虑在抽取前转换和在抽取过程中进行转换,具体如下。
(1)针对ETL涉及的源数据库中数据表,根据数据质量分析的结果,建立数据抽取前的清洗函数。该清洗函数可由调度控制程序在数据抽取前进行统一调度,也可分散到各个抽取函数中调度。清洗函数的命名规则为:F_源数据表名_T_C。
(2)针对ETL涉及的源数据库中数据表,根据代码数据差异分析的结果,如果需要转换的代码数据值长度无变化或变化不大,考虑对源数据表中引用的代码在抽取前进行转换。抽取前转换需要建立代码转换函数,代码转换函数由调度控制程序在数据抽取前进行统一调度。代码转换函数的命名规则为:F_源数据表名_T_DM。
(3)对新旧代码编码规则差异较大的代码,考虑在抽取过程中进行转换。根据代码数据差异分析的结果,调整所有涉及该代码数据的抽取函数。
数据迁移后的校验
在数据迁移完成后,需要对迁移后的数据进行校验。数据迁移后的校验是对迁移质量的检查,同时数据校验的结果也是判断新系统能否正式启用的重要依据。
可以通过以下2种方式对迁移后的数据进行校验:新旧系统查询数据对比检查,通过新旧系统各自的查询工具,对相同指标的数据进行查询,并比较最终的查询结果;先将新系统的数据恢复到旧系统迁移前一天的状态,然后将最后一天发生在旧系统上的业务全部补录到新系统,检查有无异常,并和旧系统比较最终产生的结果。
对迁移后的数据进行质量分析,可以通过数据质量检查工具或编写有针对性的检查程序进行。对迁移后数据的校验有别于迁移前历史数据的质量分析,主要是检查指标的不同。迁移后数据校验的指标主要包括5方面:完整性检查,引用的外键是否存在;一致性检查,相同含义的数据在不同位置的值是否一致;总分平衡检查,例如欠税指标的总和与分部门、分户不同数据的合计对比;记录条数检查,检查新旧数据库对应的记录条数是否一致;特殊样本数据的检查,检查同一样本在新旧数据库中是否一致。
方法
数据迁移可以采取不同的方法进行,归纳起来主要有三种方法,即系统切换前通过工具迁移、系统切换前采用手工录入、系统切换后通过新系统生成。
迁移(和回迁)是将文件从珍贵的高速磁盘空间移出并移到辅助高
容量主媒体光盘的过程。文件在
脱机时仍可用,但用户需通过网络访问它们。
该过程是通过将存档文件的名称列表保留在主媒体上实现的。当用户需要存档的文件时,他们在该目录中查找该文件,找到后像普通的文件一样打开它。随即文件从辅助存储器(光盘)上回迁到
主存储器(
磁盘)上。该过程在后台发生,用户可能不知道文件已经从光盘中回迁出来。当用户处理完成时,文件又迁回至辅助存储器中。迁移过程在某个特定的时间段后或按用户或
网络管理员的意愿立即发生。
Novell NetWare高
容量存储系统(
HCSS)是支持
脱机光盘自动换盘机
存储设备的数据存档系统。光盘自动换盘机是可以从可重写
光盘库中选盘的自动换盘设备。
HCSS使用数据迁移技术在高速、低
容量存储设备(服务器的硬盘)和低速、大容量
存储设备(
光盘库)之间移动文件。用户在一个特殊的目录中仍能采用文件的清单,这些文件看起来就象被联机存储一样。
HCSS系统将管理员作上标记的文件“迁移”到
脱机光盘库存储设备中。如果用户需要已迁移的文件,他只需按普通方法对其进行访问。
HCSS系统反向迁移文件到磁盘,用户就能对其访问。除了很短的访问延迟,用户将不会意识到访问的是归档文件。一段时间后,文件又重新迁移回光盘。
特点
直接映射
原来是什么就是什么,原封不动照搬过来,对这样的规则,如果数据源字段和目标字段长度或精度不符,需要特别注意看是否真的可以直接映射还是需要做一些简单运算。
字段运算
数据源的一个或多个字段进行数学运算得到的目标字段,这种规则一般对数值型字段而言。
参照转换
在转换中通常要用数据源的一个或多个字段作为Key,去一个
关联数组中去搜索特定值,而且应该只能得到唯一值。这个
关联数组使用Hash算法实现是比较合适也是最常见的,在整个ETL开始之前,它就装入内存,对性能提高的帮助非常大。
字符串处理
从
数据源某个字符串字段中经常可以获取特定信息,例如身份证号。而且,经常会有数值型值以字符串形式体现。对字符串的操作通常有类型转换、字符串截取等。但是由于字符类型字段的随意性也造成了
脏数据的隐患,所以在处理这种规则的时候,一定要加上
异常处理。
空值判断
对于空值的处理是数据仓库中一个常见问题,是将它作为
脏数据还是作为特定一种维成员?这恐怕还要看应用的情况,也是需要进一步探求的。但是无论怎样,对于可能有NULL值的字段,不要采用“直接映射”的规则类型,必须对空值进行判断,我们的建议是将它转换成特定的值。
日期转换
在
数据仓库中日期值一般都会有特定的,不同于日期类型值的表示方法,例如使用8位
整型20040801表示日期。而在
数据源中,这种字段基本都是日期类型的,所以对于这样的规则,需要一些共通函数来处理将日期转换为8位日期值、6位月份值等。
日期运算
基于日期,我们通常会计算日差、月差、时长等。一般数据库提供的日期运算函数都是基于日期型的,而在
数据仓库中采用特定类型来表示日期的话,必须有一套自己的日期运算函数集。
聚集运算
对于事实表中的度量字段,他们通常是通过
数据源一个或多个字段运用
聚集函数得来的,这些聚集函数为SQL标准中,包括sum,count,avg,min,max。
既定取值
这种规则和以上各种类型规则的差别就在于它不依赖于数据源字段,对目标字段取一个固定的或是依赖系统的值。
通俗地讲,数据迁移 是一种可以把大量不经常访问的数据存放在
带库、盘库等离线介质上,只在盘阵上保存少量访问频率高的数据的技术。当那些磁带等介质上数据被访问时,系统自动 的把这些数据回迁到盘阵中;同样,盘阵中很久未访问的数据被自动迁移到磁带介质上,从而大大降低投入和管理成本。