oracle 数据迁移 imp/exp 和 物化视图 的区别

使用ON PREBUILT MATERIALIZED VIEW进行数据迁移有很多的优点:

物化视图迁移方式是基于对象方式,这种方式是基于Oracle的,因此和数据库所在的平台无关,这使得这种方式可以用于跨平台迁移;

Oracle对物化视图的后向兼容性使得物化视图可以在不同版本之间进行刷新,这也使得这种方式具有跨版本的特点。因此,这种迁移方式可以用作系统的升级;

物化视图迁移的另一个优点是具有很短的停机时间。应该说,采用物化视图迁移总的消耗时间并没有缩短,但是物化视图的特点使得很多工作可以放在停机之前进行。这样耗费时间的物化视图建立、完全同步等工作都可以放到平常工作时间进行,一旦停机之后,只需要将物化视图执行一次快速刷新,同步上次刷新之后的修改就可以了。这样极大的缩短了迁移所需的时间。

物化视图迁移还有一个重要的特点,迁移方式是逻辑性质的。这意味着迁移过程中可以只迁移需要的表;只迁移表中必要的列;只迁移表中部分记录;可以在迁移过程中修改表的逻辑结构和物理结构;也可以在迁移过程中进行数据的处理和转换。

下面对比一下物化视图迁移方式和传统逻辑迁移工具EXP/IMP。

物化视图方式和EXP都是跨平台的;

物化视图方式和EXP都是跨版本的:其中EXP跨版本需要遵循低版本导出,目标版本导入的原则,而物化视图则没有这个限制。不过个别版本之间创建物化视图是存在bug的,这个需要进行额外的处理。

上面这两点对比,似乎物化视图方式并没有多大的优势,不过下面的两个方面,物化视图方式的优势就很大了。

物化视图迁移的所需停机时间远远小于EXP/IMP的时间。在利用EXP/IMP进行迁移的时候,很头痛的一个问题就是导入、导出的速度。即使采用10g的新功能数据泵EXPDP/IMPDP,速度仍然是导出、导入工具的一个比较致命的缺点。几百G的数据库采用EXP/IMP或EXPDP/IMPDP方式,停机时间很可能会超过1天,这对于很多系统都是无法接受的。而对于物化视图迁移而言,这就是最大的优势之一。首先要说的是,物化视图迁移方式并不能明显的缩短所需的总时间。但是由于物化视图可以进行快速刷新,因此,可以把完全刷新的步骤放在停机之前进行,这样只需要在停机的时候进行一次快速刷新就可以了,极大的缩短了大数据量数据库的迁移时间。

物化视图迁移和EXP都属于逻辑迁移:但是EXP方式很难对表的逻辑结构进行修改。如果提前创建表,并使用IGNORE=Y的方式,可以修改表的物理存储结果,如改变表空间,改变表的分区方式等;如果在EXP的时候指定QUERY参数,可以导出表中的部分记录,但是这种方式使用方式很有限,只能针对个别的表,否则就要求QUERY语句中的WHERE条件对导出所涉及的所有表都生效,对于大部分的情况,这是很难做到的。如果要改变逻辑结果,使用EXP就非常困难了,如果添加新的列还好一些,如果要去掉一些列,用EXP的方式基本上不太可能。而上面提到的所有的修改,对于物化视图方式来说都不是困难的事情,物化视图方式可以轻松的修改基表的结构,创建物化视图也可以指定行和列。

当然,物化视图迁移方式也不是尽善尽美的,这种方式也存在很多的缺点,比如前面提到的跨版本的bug问题,如果刨除bug不谈,那么物化视图迁移方式至少会面临以下问题:

首先,物化视图迁移是表和数据的迁移,而EXP则是数据库中所有对象的迁移,因此使用物化视图迁移方式,必须手工处理索引、约束、过程、触发器、对象、序列、同义词、视图、数据库链以及对象的授权。对于一个大型数据库环境,这些要手工处理这些工作,工作量可想而知。一个相对简单的处理方法是,物化视图与EXP/IMP配合使用,通过EXP导出所有的对象,只是不包含表中的记录,表中的记录通过物化视图的功能进行同步。不过这样还需要在物化视图同步之后,检查两个数据库中所有对象的是否一致,避免丢失源环境中EXP之后做出的修改。总而言之,使用物化视图迁移方式,迁移的复杂程度要远远超过使用EXP的方式。

其次,物化视图迁移对表结构有一定的要求。首先,为了保证迁移后目标数据库中仍然是表,不会变成物化视图,必须采用ON PREBUILT方式建立物化视图。而这种方式建立的物化视图必须是基于主键的,这就要求基表必须包括主键。对于不包括主键的表,是没有办法采用物化视图方式进行迁移的。

你可能感兴趣的:(数据结构,oracle,工作)