一种数据迁移过程中产生快照过旧问题的解决方法.doc

上传人:gs****r 文档编号:1629438 上传时间:2019-03-09 格式:DOC 页数:5 大小:51KB
下载 相关 举报
一种数据迁移过程中产生快照过旧问题的解决方法.doc_第1页
第1页 / 共5页
一种数据迁移过程中产生快照过旧问题的解决方法.doc_第2页
第2页 / 共5页
一种数据迁移过程中产生快照过旧问题的解决方法.doc_第3页
第3页 / 共5页
一种数据迁移过程中产生快照过旧问题的解决方法.doc_第4页
第4页 / 共5页
一种数据迁移过程中产生快照过旧问题的解决方法.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、一种数据迁移过程中产生快照过旧问题的解决方法摘 要随着大型数据库系统的应用和实施,在数据库部署过程中经常需要进行数据迁移,数据迁移是数据整合中保证系统平滑升级和更新的关键部分,在新旧系统的切换过程中,必然要面临数据迁移。然而目前企业级的海量数据迁移在数据库层面会产生快照过旧的问题,本文主要论述一种海量数据迁移过程中产生快照过旧问题的解决方法。 中图分类号:TP311.13 文献标识码:A 文章编号:1009-914X(2016)09-0099-01 1、引言 目前企业级海量数据存储大部分都使用 Oracle 数据库,Oracle 官方提供了数据泵工具来进行数据迁移。数据泵工具支持并行处理导入导

2、出任务,导入导出时提供了非常细粒度的对象控制,通过 Include/Exclude以及 Query 等参数可以详细制定是否包含或不包含某个对象。利用Oracle 数据泵工具对系统超大数据表进行数据迁移,迁移过程中由于数据量过大而回滚段空间不足,会产生快照过旧(ORA-01555)的问题,尤其在数据表中字段类型为 BLOB 类型(该字段类型常用来存储图片、声音等大数据文件)时,经常会产生快照过旧的问题导致数据迁移中断。 2、现象描述 在对系统非结构化数据表 (该表中存在类型为 BLOB 的字段)进行迁移时,由于系统回滚表空间(undo tablespace)空间不足而导致数据迁移失败,产生如下错

3、误: ORA-01555:snapshot too old:rollback segment number 18 with name _SYSSMU168 is too small. ORA-22924:snapshot too old 分析产生该错误的主要原因为回滚段设置太小,通常在 UNDO 回滚段中会保留数据库在某个时间点的数据,用来保证数据的一致性读。而在用户利用数据泵工具执行导出数据表操作时,又有其它用户对该表进行了修改,如果修改提交后 UNDO 中无足够空间,之前保存在 UNDO 中的数据资料就会被覆盖,从而依赖于这些数据资料的操作就无法获得一致性读,导致数据迁移过程产生以上报错。

4、而且 Oracle 由参数undo_retention 指定时间去释放 UNDO 回滚段,所以如果数据迁移时长超过 undo_retention 指定时间也会导致快照过旧的问题产生。 但是调整回滚段的大小并不能从根本上解决该问题,而且回滚段的大小也不能无限增大,undo_retention 指定时间也有最大值限制,故针对系统超大数据表的迁移,我们采用了一种典型的解决方法来处理迁移过程中产生的快照过旧问题。 3、解决方法和步骤 针对非结构化数据表迁移过程中产生的快照过旧问题,我们进行了深入的分析,首先从报错提示入手,查看了系统表空间的使用率,调整了系统参数 undo_retention 指定时间

5、的大小,仍无法解决文中报错。后续我们进行了多次尝试调整,总结出了定位并解决该问题的一套思路和方法,即按照数据库参数 ROWID 和 ROWNUM 先将记录进行排序预处理,然后将数据按照排列好的顺序分批导出,解决了快照过旧(ORA-01555)的问题。具体步骤如下: 首先,查看报错提示为系统表空间回滚段过小,通过脚本查看系统表空间的使用率得知,系统 UNDO 表空间使用率未超过 80%,回滚段是循环使用的,其表空间使用率不高说明目前回滚段的大小足够大,足以保证被提交的数据信息保存足够长的时间去完成大事务的一致性读取,判断并非由于 UNDO 回滚段过小导致该问题。故考虑增加 undo_retent

6、ion参数的大小,使得在 undo_retention 规定时间内,Oracle 都无法释放UNDO 表空间,任何其它事务都不能覆盖当前数据。使用以下语句来修改undo_retention 参数值的大小: alter system set undo_retention=36000 scope=both; 通过以上语句将 undo_retention 参数值设置为 10 个小时(36000 秒),然后利用数据泵工具进行数据迁移,结果发现继续产生快照过旧的问题。分析发现该数据表的迁移数据量共计 881G,在 undo_retention 规定时间内并不能完成数据迁移,而将 undo_retenti

7、on 设置过大又会影响系统性能。故我们利用 Oracle 数据库的 ROWID 和 ROWNUM 对表中数据排序后进行分批迁移,首先需要查询系统的非结构化数据表中共有多少条记录,将其记录为 total_record。查询出数据表的记录总数后可以根据公式计算出数据迁移的数据集个数expdp_set_num=total_record/set_record_num(其中 set_record_num表示单个数据集中的记录数,本文中采用的数值为 100000 条) 。本文中total_record=756653,故数据迁移可以分为 8 个数据集进行,每个数据集 100000 条记录(其中最后一个数据集

8、中有 56653 条记录) ,平均每个数据集的大小是 110G,对每个数据集的迁移可以根据服务器当时的负载和网络情况并行处理。然后使用以下语句查询出该非结构化数据表中前100000 条记录: select * FROM (SELECT ROWNUM PNUM,rowid prowid, T.* FROM MW_SYS.MWT_OM_FSDATA T ORDER BY rowid) TT WHERE PNUM between 1 and 100000; 其中 MW_SYS.MWT_OM_FSDATA 为系统的非结构化数据表,以此类推就可以查询出表中其它数据集中的数据。接下来就需要使用数据泵工具的

9、query 参数来进行数据迁移脚本的编写。本次数据迁移的第一条到第100000 条记录可以使用以下数据泵参数来进行导出: TABLES=MW_SYS.MWT_OM_FSDATA QUERY= MW_SYS.MWT_OM_FSDATA:“where rowid in(select prowid FROM (SELECT ROWNUM PNUM,rowid prowid, T.* FROM MW_SYS.MWT_OM_FSDATA T ORDER BY rowid) TT WHERE PNUM between 1 and 100000)“ 采用以上方法顺利完成了系统非结构数据表的迁移,成功解决了由于超大数据表迁移产生的 ORA-01555 快照过旧问题。 4、浅谈经验 在实际的数据迁移过程中,我们需要根据系统情况和用户需求来对数据泵工具的相关参数进行设置,并同时考虑系统性能和数据迁移的时效性,对数据迁移的时间和空间进行合理的规划。本文提供了一种海量数据迁移过程中产生快照过旧问题的解决方法,在迁移过程中发生报错时及时进行了处理,确保数据迁移工作的正常进行。 作者简介 杨恒翔,出生于 1987.06,研究生毕业于天津大学,计算机科学与技术专业。目前从事信息运维工作。 王涛,出生于 1987.05,研究生毕业于河北工业大学,计算机科学与技术专业。目前从事信息运维工作。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。