数据库中跨平台迁移方法介绍

一、迁移方法介绍:
exp/imp:
这也算是最常用最简单的方法了 , 一般是基于应用的owner级做导出导入 。
操作方法为:在新库建立好owner和表空间 , 停老库的应用 , 在老库做exp user/pwd owner=XXX file=exp_xxx.dmp log=exp_xxx.log buffer=6000000 , 传dmp文件到新库 , 在新库做imp user/pwd fromuser=XXX touser=XXX file=exp_xxx.dmp log=imp_xxx.log ignore=y.
优缺点:优点是可以跨平台使用;缺点是停机时间长 , 停机时间为从exp到网络传输到新库 , 再加上imp的时间 。
存储迁移:
这种情况下 , 数据文件、控制文件、日志文件、spfile都在存储上(一般情况下是裸设备) , 我们可以直接把存储挂到新机器上 , 然后在新机器上启动数据库 。
操作方法:将老库的pfile(因为里面有指向裸设备的spfile链接) , tnsnames.ora , listener.ora , 密码文件传到新库的对应位置 。将存储切至新机 , 或者用文件拷贝或dd的方式复制数据文件 , 启动数据库 。
优缺点:优点是该迁移方式非常简单 , 主要的工作是主机工程师的工作 , dba只需配合即可 , 停机时间为当库、切存储、起库的时间 。缺点是要求新老库都是同一平台 , 是相同的数据库版本 。
利用data guard迁移:
用dg我们不仅可以用来做容灾 , 物理的dg我们还可以作为迁移的方式 。
操作方法:可见http://www.oracleblog.cn/study-note/dg-created-by-rman/或者http://www.oracleblog.cn/study-note/create-dg-by-rman-one-datafile-by-one-datafile/或者其他相关网文 。注意switch over之后 , 可以将dg拆掉 , 去掉log_archive_dest_2、FAL_SERVER、FAL_CLIENT、standby_file_management参数 。另外还要注意如果用rman做dg , 注意手工添加tempfile 。
优缺点:优点是停机时间短 , 停机时间为switch over的时间 。缺点:主机必须双份、存储必须双份 。
用rman做迁移:
rman比较适合于跨文件系统的迁移 , 如同平台下的不同文件系统 。
1.传归档日志 , 并且对归档进行做recover:recover database until sequence = 归档的序号 thread = 1;
2.对数据库open resetlogs:RMAN>sql "alter database open resetlogs";
3.alter tablespace temp add tempfile "XXXXXX" size XXM reuse;
优缺点:优点是可以跨文件系统 , 停机时间少 。缺点是要时刻关注这归档日志 , 做recover的时候一个都不能少!
二、迁移样式介绍:
1、直接映射 , 原来是什么就是什么 , 原封不动照搬过来 , 对这样的规则 , 如果数据源字段和目标字段长度或精度不符 , 需要特别注意看是否真的可以直接映射还是需要做一些简单运算 。
2、字段运算 , 数据源的一个或多个字段进行数学运算得到的目标字段 , 这种规则一般对数值型字段而言 。
3、参照转换 , 在转换中通常要用数据源的一个或多个字段作为Key , 去一个关联数组中去搜索特定值 , 而且应该只能得到唯一值 。这个关联数组使用Hash算法实现是比较合适也是最常见的 , 在整个ETL开始之前 , 它就装入内存 , 对性能提高的帮助非常大 。
4、字符串处理 , 从数据源某个字符串字段中经常可以获取特定信息 , 例如身份证号 。而且 , 经常会有数值型值以字符串形式体现 。对字符串的操作通常有类型转换、字符串截取等 。但是由于字符类型字段的随意性也造成了脏数据的隐患 , 所以在处理这种规则的时候 , 一定要加上异常处理 。
5、空值判断 , 对于空值的处理是数据仓库中一个常见问题 , 是将它作为脏数据还是作为特定一种维成员?这恐怕还要看应用的情况 , 也是需要进一步探求的 。但是无论怎样 , 对于可能有NULL值的字段 , 不要采用“直接映射”的规则类型 , 必须对空值进行判断 , 目前我们的建议是将它转换成特定的值 。

推荐阅读