海量数据迁移之一个误操作的问题总结

在生产环境中的数据迁移还是很惊心动魄的,毕竟生产的数据不容许有任何潜在的问题,很小的问题也可能导致业务的终端,这个时候dba的角色是很重要的,如果dba犯了一个很细小的问题,在海量数据迁移中可能会导致灾难性的结果,所以今天和大家讨论一下关于由vi误操作导致的问题及总结。
结合今天早上的例子来说明。
目前生产环境已经有大量的用户数据了,需要从老系统迁移一批用户数据过来,一切都在安装好计划进行准备和操作。我是采用了外部表的方式,把一个很大的表分为了几十上百个外部表,采用insert方式加载的。
数据的准备工作很快就完成了,一切都在等待最后的客户确认就准备开始运行脚本做数据批量加载了。结果当时查看系统资源,觉得可以把原本的10个并发进程该为12个。就简单的改了一下脚本。
这个时候就用vi很快的改完了,但是在数据加载的时候报了很多的错误,最开始以为是数据的问题,就发给数据迁移组去检查了。自己也在同时做一些检查,我采用了错误日志的方式来忽略主键冲突,唯一性冲突的数据。
关于错误日志的部分,可以参考数据紧急修复之启用错误日志  http://blog.itpub.net/23718752/viewspace-1192887/
但是奇怪的是,一共有5个表有数据问题,结果检查了3个,最后都是0 rows inserted.我就怀疑是什么地方出现问题了,数据已经加载进去了。应该是在加载第二次的时候全都失败了。
我就开始检查脚本的执行历史,没有发现问题,最后在一个小细节上发现了问题。

在使用ls -l查看文件的时候,有一个很特别的文件引起了我的注意。根据我的印象,这个文件时在用vi编辑的时候,本来退出vi应该为:q ,结果打错了,达成了;q 然后一不留神生成了一个;q的文件。
-rw-r--r-- 1 produser dba    201 Oct  9 23:44 par7_tab_parall.lst
-rw-r--r-- 1 produser dba    208 Oct  9 23:44 par8_tab_parall.lst
-rw-r--r-- 1 produser dba    198 Oct  9 23:44 par9_tab_parall.lst
-rw-r--r-- 1 produser dba    341 Oct  9 23:46 ;q
-rw-r--r-- 1 produser dba 135337 Oct 10 00:34 split_par_10_appendata.log
-rw-r--r-- 1 produser dba 116826 Oct 10 00:26 split_par_11_appendata.log
-rw-r--r-- 1 produser dba 113885 Oct 10 00:56 split_par_12_appendata.log
-rw-r--r-- 1 produser dba 169947 Oct 10 00:39 split_par_1_appendata.log
-rw-r--r-- 1 produser dba 143857 Oct 10 00:09 split_par_2_appendata.log
-rw-r--r-- 1 produser dba 124105 Oct  9 23:59 split_par_3_appendata.log
-rw-r--r-- 1 produser dba 114643 Oct 10 00:49 split_par_4_appendata.log
-rw-r--r-- 1 produser dba 143102 Oct 10 00:18 split_par_5_appendata.log
-rw-r--r-- 1 produser dba 141416 Oct 10 00:32 split_par_6_appendata.log

最后在不经意中查看这个文件的时候却运行了文件的内容。

查看命令历史的时候发现这个命令触发了两次。
  281  nohup ksh  tmp_split_par_6_appendata.sh   > split_par_6_appendata.log    &
  282  nohup ksh  tmp_split_par_7_appendata.sh   > split_par_7_appendata.log    &
  283  ksh check.sh|grep process
...
  295  ksh check.sh|grep process
  296  nohup ksh  tmp_split_par_7_appendata.sh   > split_par_7_appendata.log    &
  297  ksh check.sh|grep process
  298  ksh check.sh|grep process

找到问题的来源了,就可以确定问题的影响范围了,通过错误日志对数据进一步进行了检查,发现数据没有问题了。
对于这个问题的总结由以下几点:
首先尽量不要在生产环境进行脚本的修改,不要在生产环境中随意测试脚本,以免不必要的麻烦。这个需要准备工作要更加的充分。
对于数据的导入中,个人建议还是保留主键和唯一性约束,这样可以避免很多数据的误操作带来的大问题。如果数据导入出现问题,要么是约束无法enable,要么主键无法创建,而且越是大的表在创建索引的时候也是需要一定的时间的,如果涉及的表有上百个,不能保证你的操作完全没有问题。可能几个表出现问题就需要花费较多的时间来修复。
对于日志的记录还是建议能够尽量的全面和完整,有些系统升级甚至有截屏之类的,都可以参考,在发生问题之后,能够很快的定位和总结,避免之后再犯。
在数据的迁移之前,对数据的条数进行一个完整的统计,在数据迁移完成之后再进行一个统计,保证没有数据条数不一致的情况。
不管怎么样,误操作是系统升级成败的关键,在发生误操作之后需要冷静,认真的分析问题的原因。可能有些问题还真不是问题,尽量不要着急开始做决定,以免问题雪上加霜。
最后经过确认,这个问题没有造成影响,数据的条数都是完全匹配的。下次注意。

时间: 2024-09-28 21:47:22

海量数据迁移之一个误操作的问题总结的相关文章

云秘盘,用云存储挽救文件编辑“误操作”

亲,你试过做了一个晚上的设计因为一个未保存,让文件顿时间灰飞烟灭吗? 亲,你试过编了一个下午的程序因为你的一指冲动,让努力付之东流吗? 亲,也许你还记得在上计算机课的时候,老师说"世上没有后悔药,但计算机却有后悔药!"这副后悔药就是Ctrl+Z,我们在工作中常用的撤销操作步骤的组合键,但是这幅后悔药在windows系统里只有一副,在office文件里也有步骤限制,而且当保存关闭文件后, office记录的可撤销的步骤就全部清除了.如果您不小心存错了文件,再打开想恢复到以前状态那就只能捶

9i新特性之Flashback Query的应用-------------针对DML误操作的恢复(2)

恢复 用DBMS_FLASHBACK包   DBMS_FLASHBACK 包提供了以下几个函数:   ENABLE_AT_TIME:设置当前SESSION 的闪回查询时间 ENABLE_AT_SYSTEM_CHANGE_NUMBER:设置当前SESSION的闪回查询SCN GET_SYSTEM_CHANGE_NUMBER:取得当前数据库的SCN       DISABLE:关闭当前SESSION 的闪回查询       如: SQL> select dbms_flashback.get_syst

利用事务日志来恢复Update、Delete误操作引起的数据丢失

恢复|数据 可能有不少朋友遇到过这样的问题:update或delete语句忘带了where子句,或where子句精度不够,执行之后造成了严重的后果,这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的SQL没有进行相应的全库备份或不能备份日志(truncate log on checkpoint选项为1),那么就无法进行数据的恢复了,或者只能恢复到最近一次的备份的数据了. 以下简单说明恢复数据方法:1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进进行

利用事务日志来恢复Update、Delete误操作引起的数据丢

恢复|数据 可能有不少朋友遇到过这样的问题:update或delete语句忘带了where子句,或where子句精度不够,执行之后造成了严重的后果,这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的SQL没有进行相应的全库备份或不能备份日志(truncate log on checkpoint选项为1),那么就无法进行数据的恢复了,或者只能恢复到最近一次的备份的数据了. 以下简单说明恢复数据方法:1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进进行

9i新特性之Flashback Query的应用-------------针对DML误操作的恢复(1)

恢复  9i新特性之Flashback Query的应用-------------针对DML误操作的恢复   作者:刘颖博 时间:2003-12-29 mail:liuyingbo@126.com,请指正   转载请注明出处及作者   在9i之前,如果出现DML的误操作,只能通过备份来完成基于时间点的恢复,9i给提供了一个新的特性Flashback Query,我们可以应用此特性,可以很方便的实现恢复.但是要注意的是,Flashback Query 仅仅是一个查询的机制,不会真正的UNDO任何数

小小快捷键改变Flash界面 减少误操作

网页教学网:下面这个界面是大家熟悉的Flash界面,在调整Flash时间轴面板大小的时候很容易误拖辅助线,其实有一个方法可以有效减少这种误操作. 在Flash IDE中时间轴面板的空白处,按住alt+shift后再双击它. 就可以变成下面这个界面: 网页教学网:注意看横标尺上方 这个界面的好处就是可以避免在调整时间轴面板大小的时候误拖拽辅助线,能够有效减少工作失误,提高效率.

Oracle基于用户管理的不完全恢复(二)恢复过去某个时间点误操作的表

案例1--恢复过去某个时间点误操作的table 1.基于时间点 SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name='TB01'; USERNAME               SCN TIMESTAMP           SQL_REDO --------------- ---------- ------------------- -------------------------

ApexSQL Log-SQL误操作恢复工具(支持sql2008,sql2012)

今天不小心对数据库执行了一次误操作,心想有没有什么工具能恢复这次误操作呢?于是找到 了Log Explorer 4.2,可惜它最多只支持SQL 2005,在SQL 2008上无法使用,然后又找到了ApexSQL Log,最新版本最高支持SQL 2008以及SQL 2012,试用版可以提供功能无限制14天的免费试用期,功能倒真是强大   直接下载安装,官方下载地址:http://www.apexsql.com/sql_tools_log.aspx 安装完成,打开主界面:   点击"New"

风行怎么避开误操作 三招变成风行高手

以精选式收录海量高清大片而名声大振的风行,正在成为越来越多网络影迷的装机必备.尽管使用风行在线观看各类高清电影的确很爽,不过有时候也会出现由于部分操作不当而带来的一些不大不小的麻烦.其实有的操作不当完全是因为没有深入了解软件所致.这里分享三则避开误操作的妙招,让大家用风行看电影真正体验"爽到底". 妙招一:避开影视点播误操作 当发现风行中又收录进来了好电影,在进行正式点播影片之前,往往可能都会有想看一看影片详细资料的冲动,比如影片的导演是谁,有哪些明星主演及大致的故事梗概等.但是当我们