数据迁移中的几个问题总结

   总结一下昨晚在数据迁移前线奋战碰到的一些问题,虽然总体来说是按照预定的计划完成,并且提前完成,但是哪怕一丁点儿的操作都会导致一些严重的影响。

   总体来说,需要做的事情就是把核心业务服务器从一个机房迁移到另外一个机房,这个过程中因为环境的重要性和硬件软件的情况,大体分为了下面三个方向的技术方案。

  1. 迁移部分核心业务从Solaris到X86平台,同时需要升级数据库版本
  2. 迁移x86平台的部分核心业务,这个方向操作相对简单,基本就是主备切换
  3. 整合部分X86平台的环境,比如数据库a,b整合后就是一个数据库a

这些工作需要在几个小时内全部完成,而且保证不能出现数据类问题。

   技术方案1,是跨平台的数据库迁移式升级,我们采用了混合式的技术组合,比如对于小表,数据类不大使用Datapump来全量同步,对于中型表使用物化视图的prebuilt来达到增量刷新的目的,对于大型表,则使用OGG的复制方式,当然为什么中性型表和大型表要分开对待,都使用OGG行吗,可以的,这个主要还是考虑团队等的因素,而不单单技术可行。

  技术方案2,这个部分相对来说比较常规,就是主备切换。主备切换的过程其实没有更多可谈的了,完全没有理由切到一半切不动了。只要配置没问题,在DG Broker里面就一个命令即可。

   技术方案3,这个部分涉及数据整合,而且在这个基础上需要做一次数据库的升级,如果数据量不大,其实Datapump足矣,如果数据量在TB级别,要实现这类数据整合和升级的需求就有一些难度了,至少目前我看到的绝大多数情况是通过增量或者逻辑复制的方式。

   迁移的需求大体如上所述,维护时间是限定的,需要不到3个小时的时间内搞定,要么成功要么回退。

   我拿出几个迁移中碰到的问题,很多还是很有代表性,也是我们做技术方案的时候需要不断改进和完善的地方。

问题1:

在使用prebuilt的物化视图增量刷新的时候,在最后的数据确认阶段,再次尝试一次增量刷新,竟然抛出了下面的错误。

SQL> exec dbms_mview.refresh('GAMEUSER.PEAK_LOGINLOG','F');
BEGIN dbms_mview.refresh('GAMEUSER.PEAK_LOGINLOG','F'); END;
*
ERROR at line 1:
ORA-04062: timestamp of package "SYS.DBMS_SNAPSHOT_UTL" has been changed
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2809
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 3025
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2994
ORA-06512: at line 1
问题2:

还有一部分的物化视图增量刷新的时候会出现hang的情况,尽管主库的物化视图日志数据不多,但是这个刷新的过程就很慢。

 exec dbms_mview.refresh('TLBB.PURSE_RESERVE_RECORD','F');

上面的两类问题在时间不等人的数据迁移中,是很敏感的,所以如果这种一下,表数据量不是太大,就干脆直接全量同步或者Datapump来重新做。

还有一个技巧就是如果刷新的表极大,先优先查看物化视图日志,如果没有数据,心里就会踏实很多,哪怕刷新时出点小问题,心里还是亮堂的。

问题3:

在从源库使用DAtapump导出数据的时候,竟然抛出了错误,这对于依赖Datapump的迁移项目来说,不能很好的使用Datapump会困难重重,下面是一个基本的导出方式,当然在10g版本里面可能有点问题,比如使用了并行,导出的时候就可能提示溢出而失败。

expdp xx/xxx dumpfile=gameuser.dmp directory=dp_dir parfile=gameuser.par parallel=4

问题4:

这个问题是在数据库做了主备切换之后碰到的,看日志可以得知是归档的问题,但是实际上闪回区也足够,归档路径也是有效的。

Mon Jul 24 04:10:13 2017
ARC0: LGWR is actively archiving destination LOG_ARCHIVE_DEST_1
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance acccomdb - Archival Error
ORA-16014: log 1 sequence# 31829 not archived, no available destinations
ORA-00312: online log 1 thread 1: '/U01/app/oracle/oradata/acccomdb/redo01.log'
Mon Jul 24 04:13:11 2017
Starting background process SMCO
Mon Jul 24 04:13:11 2017
SMCO started with pid=39, OS id=51303

初步分析发现是归档路径的不规范,比如设置的归档路径参数有多个,像log_archive_dest1,log_archive_dest2其实有不同的含义和用法,解决问题的方法就是把这些路径参数清空,重置DG Broker来初始化。见效快还一步到位。

问题5:

DB link的问题,说实话DB link在多个数据库间查取数据库,有点蜘蛛网的感觉。我们可以使用tnsping的方式来验证tnsnames.ora的配置。但是如果端口通了,不一定证明tns的配置没有问题。

比如下面的报错信息,都是DB link的问题,但是报错信息不同

  java.sql.SQLException: ORA-04053: error occurred when validating remote object GAMECARD.USECARDMAIN@DB_SWORD_TEST0

ORA-00604: error occurred at recursive SQL level 1
ORA-02019: connection description for remote database not found

java.sql.SQLException: ORA-04045: errors during recompilation/revalidation of APP_TL_SDE_128.CHONG_KAMI_RECHARGE_NEW?
ORA-04052: error occurred when looking up remote object TLBB.USER_POINT@GCDB?
ORA-00604: error occurred at recursive SQL level 3?
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

我们需要花一些时间来修复这类问题,排查的过程会因为信息提供的误差而偏离问题的方向。我们需要冷静一点,再细心一些。

时间: 2024-07-30 20:42:46

数据迁移中的几个问题总结的相关文章

数据迁移中的数据库检查和建议

关于数据迁移,在之前也讨论过一些需要注意的地方,可能林林总总列了不少,都是在数据迁移迁移前和迁移时需要注意的.http://blog.itpub.net/23718752/viewspace-1195364/http://blog.itpub.net/23718752/viewspace-1254945/ 我在这些帖子的基础上进行更多的总结和补充. 数据库级的检查和建议1)参数检查 有些参数是需要在数据迁移前临时做变更的,有些是性能相关的,需要考虑. log_buffer在数据导入的过程中会有极

数据迁移中需要考虑的问题

在生产环境中,做数据迁移需要考虑很多的可能性和场景,尽量排除可能发生的问题.我自己总结了下,大体有如下需要注意的地方.1)充分的测试,评估时间,总结经验,提升性能 在生产中进行数据的大批量迁移时,充分的测试时必须的.一方面可以根据这些测试积累一些必要的数据作为生产中使用参考,另外一方面可以基于之前的测试,总结经验,总结不足之处,加入改进,在生产中每一分钟的改进都是很重要的. 2)完整的备份策略热备甚至冷备     在数据迁移之前进行完整的备份,一定要是全量的.甚至在允许的情况下做冷备都可以.数据

有关数据迁移中MYSQL错误请教

问题描述 我在数据迁移建表时出错:Mysql::Error:Can't create table'.store_developmentgoals.frm'<error:121>CREATE TABLE 'goals'<'id' int<11> DEFAULT NULL auto_increment PRIMARY KEY, 'title' varchar<255> DEFAULT NULL, 'description' text DEFAULT NULL >

数据迁移中碰见的一些问题

单位有一套Oracle 9i的古老测试数据库,因为机房搬迁,所以需要迁移数据,新库是Oracle 11g了,一个比较简单的需求,但过程中碰见了一些问题,看似比较琐碎,值得总结一下. 由于源库是9i,因此只能用imp/exp,不能用数据泵. 问题1:导入目标库用户的默认表空间 源库由于不规范的使用,对象默认存储的是数据库默认表空间USERS,既然是迁移,新库就要尽量规范一些.但问题来了,impdp/expdp可以使用remap_tablespace映射新旧表空间,exp/imp应该如何做? 网上有

.net2.0中使用SqlBulkCopy进行大批量数据迁移

sql|数据 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataTable或DataReader批量迁移数据.数据源可以来自关系数据库或者XML文件,甚至WebService返回结果.其中最重要的一个类就是SqlBulkCopy类,使用它可以很方便的帮助我们把数据源的数据迁移到目标数据库中.下面我们先通过一个简单的例子说明这个类的使用:

数据迁移类测试策略

前言 前段时间做了一次数据迁移,针对数据迁移类型的测试方法进行了一些了解和总结,以下工具愚公移山和精卫为淘宝开发的工具,已使用于多个产品.项目中,质量有保障. 一.工具介绍 1.愚公移山 概述: 数据的动态迁移,可完成数据全量.增量迁移,进行数据比对,保证数据的正确:目前较多运用在数据迁移中,已经被很多团队使用,是很成熟可靠的数据迁移工具 适用范围: 可支持:支持oracle和mysql,分库分表,实时同步,数据比对 不支持:涉及到外部依赖,迁移规则非常复杂的数据 性能情况: 没有对愚公进行压测

NAS数据迁移初探

阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例.HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展.单一命名空间.多共享.高可靠和高可用等特性的分布式文件系统.相比于传统的存储设备,NAS所具有的高容量.高可靠.多共享等特性是现在诸多企业迫切需要的,能够解决他们对现有系统在性能.扩展性方面的需求.传统解决方案如何上云,第一步就是原始数据的搬迁问题,如何做到不停服无缝搬迁,在

生产环境数据迁移问题汇总

在测试环境中做了3轮数据迁移的演练,最终到了生产环境中,还是出现了不少问题,经过大半夜的奋战,终于是数据都迁移成功了.1)共享存储的配置问题 共享存储使用NFS来共享存储,但是在实际操作中发现配置出了问题,原因是因为两台服务器上的用户不同在,目标机器上没有任何写权限. -rw-r--r-- 1 3160 dba      6608 Jun 26 23:35 tmp_gunzip.sh         -rw-r--r-- 1 3160 dba       624 Jun 26 23:30 tmp

Datapump数据迁移前的准备工作

    其实对于Datapump迁移而言,如果参与过XTTS,OGG,Veritas SF,外部表增量等迁移方式的话,会发现Datapump还是很简单清晰的,一个优点就是操作简单清晰,想必于imp而言性能要好.所以不要小看这种迁移方式,不是说哪些迁移方式就是最好的,数据迁移中也没有银弹,最合适的就是最好的.     迁移之前我们还是需要做一些准备工作,尽量避免临时的忙乱,减少出错概率,要知道升级迁移都是在大早上,大晚上,都是精力比较差的时候,如果迁移前的准备不足,没有充足的准备,就会忙乱一团.所