共计 1900 个字符,预计需要花费 5 分钟才能阅读完成。
虽说实践了不少的数据迁移项目,但是从我的感触来说,一些很细小的差别就会造成整个数据迁移方案的大不同。数据是系统的核心命脉,所以对于 DBA 来说,保证数据的一致性和准确性是一个最基本的要求。对此我的一个基本观点就是高可用的需求除非特殊需要,一般都还是需要一个维护窗口的,这种方式更为保守,但是更为保证。
而在 Datapump 迁移中还是遇到了不少的小问题,也算是一些心得或者建议吧。
1)如果是跨平台的数据迁移,在升级前需要得到一个清单,包含哪些失效的对象,是否需要重新编译,如果不确认,在迁移之后就会更加迷茫,到底是不是迁移之后造成的问题。
2)数据迁移中还是建议直接停掉监听,保证没有其它的外来连接,在之前的大型数据迁移中,虽然从口头上制度上会有一些约束,但是不能完全保证其他人能够完全遵守,有时候应用的同事需要提前检查一些数据,可能会想做一些查询,这个就比较难控制了。而且很可能会触发一些小问题,尤其是性能问题。
3)如果在数据迁移时条件允许,还是建议直接设置为非归档模式,有缺点也有优点,优点是整体的速度会提高差不多 1 倍,但是缺点是主备库的架构会需要重建,而且在数据迁移后期,收集统计信息的阶段其实会消耗掉不少的时间,如果是非归档模式,必须要等待迁移彻底完成才可以,而如果时间窗口允许,而且需要保证主备库的架构,只能在归档模式下,优点就是保留了主备的架构,无需重新搭建,另外一个有点就是编译存储过程,收集统计信息的阶段,其实已经可以在内部开始一些基本的验证和测试了。因为内部的一些流程和步骤本身需要一些时间,所以这个时间段就可以充分结合起来。缺点也很明显,效率上会差一些,而且需要额外的空间,同步增量的数据需要较高的带宽。所以这是一把双刃剑。
4)在源库中导出 dump,传输到目标库的时候,不要开启过多的传输进程,这个时候会有一种问题就是会严重影响其他的客户端连接进来,这里也有一些需要注意的地方,有时候还是很值得琢磨琢磨,比如有 1000 个 dump,那么我们肯定不可能开启 1000 个进程同时传输,我们只能开启一小部分,始终保留有数据的传输,这个持续的过程就有几种考量,一种是一批一批,比如一次 30 个 dump,完成之后再开启 30 个 dump 的传输。另外一种是按照时间的先后开启 30 个,但是始终保证后台运行偶 30 个 dump 的传输进程。第一种方式可以做成脚本的模式,但是可控性,灵活性略微差一些,而第二种就是半自动的方式,需要很多时候人工介入。
5)在传输 dump 的时候还是直接使用固定的 IP 而非绑定的漂移 IP,这个性能差异个人感觉还是非常大的,在演练中使用同样的硬件环境,同样数据量大概需要传输 40 分钟,而使用绑定 IP, 漂移 IP 这个性能就差了很多,花费的时间多了一倍。
6)如果在迁移后目标服务器的 IP 需要变更为源服务器的 IP,这这个过程中让人比较纠结的就是 DB Link, 而随着相关的就是含有 DB Link 的存储过程,包体,视图等。这个过程尤其需要注意,建议还是在迁移前就修改 IP,保证防火墙信息和源库一致,这样 DB Link 的坑就会避免。迁移升级的时间,每一分钟都是需要尽量去争取的,对于系统级的网络超时是一分钟,如果存在大量的存储过程存在过多依赖,那这个编译过程就会大打折扣。
比如我们在迁移中碰到的存储过程编译。
ALTER PROCEDURE “TEST”.”P_TEST” COMPILE PLSQL_OPTIMIZE_LEVEL= 0 PLSQL_CODE_TYPE= INTERPRETED PLSQL_DEBUG= TRUPLSCOPE_SETTI
NGS= ” REUSE SETTINGS TIMESTAMP ‘2014-09-18 07:35:33’
其实这种编译过程能花费什么时间,时间都在网络的验证超时上了。
7)迁移的演练非常重要,尽可能完全仿真整个迁移的过程,如果嫌麻烦跳过了一些步骤,或者认为可能影响不大忽略了一些小的步骤,那么这些问题就会交给迁移时间,碰到了问题处理起来就非常痛苦了。
8)迁移前的准备越充分,迁移的时候就会越轻松,迁移最后有一个检查清单和步骤,特别是在有时候工作不在状态的时候,这个就是一个纲要和指导方针。
9)迁移是一件苦活,需要始终保持注意力,细心的对待可能出现的问题环节,对于突发情况还是要冷静,这个当然多说无益,实践出真知。
更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-07/133176.htm