ITPUB??ì3
ITPUB论坛 » Oracle数据库管理 » 给人搽屁股......数据恢复一例

标题: 给人搽屁股......数据恢复一例
  本主题由 Fenng 于 2008-4-28 14:16 设置高亮 
离线 husthxd
版主


精华贴数 8
个人空间 810
技术积分 59874 (9)
社区积分 3816 (329)
注册日期 2002-2-20
论坛徽章:103
现任管理团队成员ITPUB元老ITPUB北京九华山庄2008年会纪念徽章第18届世界杯(德国)纪念徽章管理团队2006纪念徽章会员2007贡献徽章
会员2006贡献徽章玉石琵琶九尾狐狸紫蜘蛛蓝色妖姬红孩儿

发表于 2008-4-24 10:43 
给人搽屁股......数据恢复一例

本文可任意转载,但请注明作者和出处。
http://space.itpub.net/6906/viewspace-250333

主题词:误删数据  恢复数据 问题反馈  凌晨

08年4月23日,一个值得“纪念”的日子。
晚上10点刚过抄起家当,准备回宿舍。由于要实施网上查询,一个同事H在本机导数据,本想到他机器上看看是否导完数据,但看到的桌面让我大吃一惊:
加Truncate参数,使用Oracle的Impdp在生产环境导数据!
立马打开查询窗口,查询相关的表,结果返回:no rows selected.数据已经全部清掉了。
一瞬间一下子就懵了:我Kao,搞什么鬼?怎么能把生产机的数据truncate掉?是不是脑子进水了?马上打电话给H,电话占线,Shit,再打,还是占线...... 急,先上洗手间,掏出手机,继续打,终于通了,第一句话:怎么在生产机上导数据?为什么动生产机的数据?
H给出的答复是由于刚才导网上查询数据时误操作把一张表的数据删掉了,没有把问题反馈上来,直接就想通过18:30左右的备份恢复该表,由于缺乏IMPDP的相关知识,以为导出文件有的表,在impdp的时候都必须制定,结果把其他十来各表都全部truncate。
出现问题没有反馈,掩盖问题试图自己解决,由于缺乏相关的知识,结果误操作导致更严重的后果。
由于有下班后的Expdp备份,本来是一张表的数据,而且该表数据在下班后不会变化,简单的通过impdp就可以恢复,结果用truncate选项把其他表统统清除掉,当时心里那个苦啊!
事已至此,没有办法,马上组织其他人手先通过备份恢复数据。
1.把大表和小表分开,大表先drop索引再导入,小表直接导入。
2.大表导入完毕后同步建立索引。
其他表都比较顺利,最后有两张表(大表A和中表B),死活导不进去。当时已经是凌晨0点10分左右。出现的现象是:
大表A导入了1.5个小时,没有任何反应,中表B导入时通过后台查询发现有其他进程lock该表,进程是ORACLE.EXE(DW01)。
再等了十分钟,还是如此,觉得不能这样坐以待毙,重启数据库,重写执行导入数据,还是如此。
大表A的导入没有任何异常情况,就是Hang着不动,这时候想到该表是复合分区表,如果改成普通表是否可以?通过rename原来的表,通过CTAS创建普通表,重新导入,It works!数据导入后,通过insert into as select导入到正式表,然后通过rename等操作把正式表恢复到正常的表名。
大表A导完后,发现中表B还是在等待ORACLE.EXEC(DW01),本想着通过alter system kill session把相关的session kill掉,半个小时过去,没有kill掉,只是mark kill。这时候查询session时发现相关schema是XDB,把XDB用户account lock,再导入,还是如此。这时候已经凌晨一点,就剩下这张表,头都有点大了,再仔细分析session的信息,发现module是Data pump,不是Oracle的必须后台进程,同时想起几年前在windows平台可以用orakill杀掉windows线程,抱着试试的心态,用 orakill杀掉了ORACLE.EXE(DW01)的线程,然后用impdp尝试导入,God,It works!谢天谢地,总算,数据都恢复了,这时候是凌晨1:30.
索引都创建完毕后,再次一张一张表检查一次,确保数据和索引都存在。
最后执行dbms_stats.gather_table_stats过程对相关的表执行一遍信息,并设定定时任务对数据库进行备份。
大功告成,凌晨2:30,可以躺一下了......

环境:
Oracle10.2.0.3
Windows2003 64bit
Inter Xeon CPU 8X

相关的SQL脚本:
1.查询等待或给锁定的object脚本
SELECT /*+ rule */ lpad(‘ ‘,decode(l.xidusn ,0,3,0))||l.oracle_username User_name,
o.owner,o.object_name,o.object_type,s.sid,s.serial#
FROM v$locked_object l,dba_objects o,v$session s
WHERE l.object_id=o.object_id
AND l.session_id=s.sid
ORDER BY o.object_id,xidusn DESC
2.查询v$session,可获取MODULE等信息。
3.orakill的用法可通过orakill -help获取
c:>orakill -help
Usage:  orakill sid thread

  where sid    = the Oracle instance to target
        thread = the thread id of the thread to kill

  The thread id should be retrieved from the spid column of a query such as:

        select spid, osuser, s.program from
        v$process p, v$session s where p.addr=s.paddr

在本例中用法为:
orakill prod 2203

[ 本帖最后由 husthxd 于 2008-4-25 12:19 编辑 ]


__________________
少吃饭,多吃菜少说话,多做事少灌水,多看文档-----------------------------------------------------------吃遍全城!------------------------------------------------------------Java钻研中........................................学好英语,报效祖国..........................------------------------------------------------------------人生最幸福的事情莫过于通过自己的努力实现自己的梦想!------------------------------------------------------------http://husthxd.itpub.net
只看该作者    顶部
离线 howard_zhang
鸡肋


精华贴数 0
个人空间 80
技术积分 8236 (144)
社区积分 57 (4302)
注册日期 2006-9-15
论坛徽章:21
会员2007贡献徽章铁扇公主授权会员2008北京奥运纪念徽章:跳水2008北京奥运纪念徽章:手球2008北京奥运纪念徽章:足球
生肖徽章2007版:狗ITPUB新首页上线纪念徽章数据库板块每日发贴之星生肖徽章:龙生肖徽章:龙生肖徽章:龙

发表于 2008-4-24 10:51 
呵呵


__________________
鸡肋食之无味,弃之可惜!学无止境~~
只看该作者    顶部
离线 tanfufa
资深会员



精华贴数 0
个人空间 0
技术积分 3893 (333)
社区积分 12 (9312)
注册日期 2005-9-27
论坛徽章:5
会员2007贡献徽章2008北京奥运纪念徽章:垒球2008北京奥运纪念徽章:花样游泳生肖徽章2007版:鸡ITPUB新首页上线纪念徽章 
      

发表于 2008-4-24 10:53 
wonderful .admire you .


只看该作者    顶部
离线 junsansi
无名扫把


来自 bj
精华贴数 7
个人空间 8123
技术积分 6788 (176)
社区积分 431 (1428)
注册日期 2006-7-17
论坛徽章:55
现任管理团队成员2008北京奥运纪念徽章:蹦床2008北京奥运纪念徽章:拳击2008北京奥运纪念徽章:游泳2008北京奥运纪念徽章:曲棍球2008北京奥运纪念徽章:垒球
      

发表于 2008-4-24 10:57 
没说明问题的原因啊,为啥dw01进程老锁住呢?


__________________
[三思笔记]学习动态性能表
[三思笔记]一步一步学rman
[三思笔记]oracle著名及非著名函数介绍
[三思笔记]Statspack初步学和用
[三思笔记]RMAN高级应用之Duplicate复制数据库
[三思笔记]使用传输表空间的特性复制数据
[三思笔记]一步一步学DataGuard
[三思笔记]全面学习分区表及分区索引
[三思笔记]手把手教你用VMware安装Oracle10g RAC

沉淀是一件很枯燥的事情,我要从沉淀中汲取营养,于枯燥中寻找乐趣,我没疯,你才是疯子,哇哈哈,哇哈哈哈哈~~
============================================
http://www.5ienet.com我爱我佳
扫地不过是我表面上的工作,我真正的身份其实是无名老僧------------------手里那根扫把~~~~
只看该作者    顶部
离线 chensq
版主



精华贴数 5
个人空间 0
技术积分 7914 (151)
社区积分 1401 (703)
注册日期 2002-8-29
论坛徽章:37
现任管理团队成员铁扇公主每日论坛发贴之星   
      

发表于 2008-4-24 11:01 



__________________
只看该作者    顶部
离线 husthxd
版主


精华贴数 8
个人空间 810
技术积分 59874 (9)
社区积分 3816 (329)
注册日期 2002-2-20
论坛徽章:103
现任管理团队成员ITPUB元老ITPUB北京九华山庄2008年会纪念徽章第18届世界杯(德国)纪念徽章管理团队2006纪念徽章会员2007贡献徽章
会员2006贡献徽章玉石琵琶九尾狐狸紫蜘蛛蓝色妖姬红孩儿

发表于 2008-4-24 11:03 
出现问题的时候,要保持清醒的头脑,H就缺乏这一点,出现问题并不可怕,关键是要:
1.把问题反馈出来:你的同事、你的上司。
2.确认你所做的下一步是正确的,如果不能确定,参照第一点。
人非圣贤,蜀能无错,但不能一错再错!


__________________
少吃饭,多吃菜少说话,多做事少灌水,多看文档-----------------------------------------------------------吃遍全城!------------------------------------------------------------Java钻研中........................................学好英语,报效祖国..........................------------------------------------------------------------人生最幸福的事情莫过于通过自己的努力实现自己的梦想!------------------------------------------------------------http://husthxd.itpub.net
只看该作者    顶部
离线 husthxd
版主


精华贴数 8
个人空间 810
技术积分 59874 (9)
社区积分 3816 (329)
注册日期 2002-2-20
论坛徽章:103
现任管理团队成员ITPUB元老ITPUB北京九华山庄2008年会纪念徽章第18届世界杯(德国)纪念徽章管理团队2006纪念徽章会员2007贡献徽章
会员2006贡献徽章玉石琵琶九尾狐狸紫蜘蛛蓝色妖姬红孩儿

发表于 2008-4-24 11:04 


QUOTE:
原帖由 junsansi 于 2008-4-24 10:57 发表
没说明问题的原因啊,为啥dw01进程老锁住呢?

这个暂时还没有深究。
个人感觉,windows平台下10.2.0.3的expdp和impdp问题都不少。


__________________
少吃饭,多吃菜少说话,多做事少灌水,多看文档-----------------------------------------------------------吃遍全城!------------------------------------------------------------Java钻研中........................................学好英语,报效祖国..........................------------------------------------------------------------人生最幸福的事情莫过于通过自己的努力实现自己的梦想!------------------------------------------------------------http://husthxd.itpub.net
只看该作者    顶部
离线 chensq
版主



精华贴数 5
个人空间 0
技术积分 7914 (151)
社区积分 1401 (703)
注册日期 2002-8-29
论坛徽章:37
现任管理团队成员铁扇公主每日论坛发贴之星   
      

发表于 2008-4-24 11:06 
flasbhack没有启用?


__________________
只看该作者    顶部
离线 ZALBB
正在看黑山老妖


精华贴数 8
个人空间 0
技术积分 27659 (29)
社区积分 13569 (97)
注册日期 2001-10-15
论坛徽章:45
现任管理团队成员     
      

发表于 2008-4-24 11:06 
这时候查询session时发现相关schema是XDB,把XDB用户account lock,再导入,还是如此。这时候已经凌晨一点,就剩下这张表,头都有点大了,再仔细分析session的信息,发现module是Data pump,不是Oracle的必须后台进程,同时想起几年前在windows平台可以用orakill杀掉windows线程,抱着试试的心态,用 orakill杀掉了ORACLE.EXE(DW01)的线程,然后用impdp尝试导入,God,It works!谢天谢地

1 查询session时发现相关schema是XDB,----什么意思?导入这表与这用户有什么关系?
2 再仔细分析session的信息,发现module是Data pump,不是Oracle的必须后台进程,---- module 是  data dump 有什么问题?你不是在
作DUMP吗?DATA DUMP 在干什么,怎么会阻止数据导入?


__________________
三民主义统一中国。
只看该作者    顶部
离线 ZALBB
正在看黑山老妖


精华贴数 8
个人空间 0
技术积分 27659 (29)
社区积分 13569 (97)
注册日期 2001-10-15
论坛徽章:45
现任管理团队成员     
      

发表于 2008-4-24 11:07 


QUOTE:
原帖由 chensq 于 2008-4-24 11:06 发表
flasbhack没有启用?

FALSHBACK 对TRUNCATE 不起作用。


__________________
三民主义统一中国。
只看该作者    顶部
相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问