分区表跨数据库移动数据惨重的教训

前几天,在移动分区表的数据时经历一次惨重的教训,先分享给大家,以便大家不要犯类似错误,并研究其原因.
环境:

ADB: oracle 8.1.7.4 , table name : component,  分区: M2,M3….M12

BDB: oracle 10.2.0.1 ,table name: component,  分区: M2,M3….M12

目的: ADB COMPONENT partition m2 的数据移动到 BDBCOMPONENT partition m2

ADBCOMPONENT PARTITION M2大小为1536M

时间: 2007/3/11 星期日 上午 11:00 ,产线下午三点备线

经验: 上次移动数据库时,500Mtable 需要移动30分钟

估计: 3个小时可以完成

    因为BDB UNDO是系统管理的,ADBRBS 6G,没有人使用ADB,故在ADB上建立了DB LINK 名为tonew,为了速度,停止了原来转移数据的存储过程,改用一句SQL一次性转,SQL如下:

   Insert into component@ibm select * from component partition(m2)

时间: 15:00 仍然没有完成

时间: 16:00 仍然没有完成,ADB的M2 partition 1536m M3 partition 3600M,此时 BDB的M2已经 1536M ,BDB的M3 1200M

时间: 18:00 仍然没有完成, BDB的M2 1536M , BDB的M3 1600M

    16:00开始,因虚拟内存耗尽,系统无法运作,监听器停止,Server上键盘,鼠标均无法操作,用toad看,用户session已经全部停止,为何M3的数据量仍在增加。这说明数据库执行的是Insert into component@tonew select * from component。连到ADB,发现执行的语句的确是Insert into component@ibm select * from component partition(m2),BDB执行的却是INSERT INTO COMPONENT SELECT  * FROM " COMPONENT"@! "A2"   

  为了让产线立刻work起来,决定停止insert操作,因为如果要将M3的数据insert完,估计要到10点。

  因键盘鼠标失效,直接按电源开关,开机后系统正常起动,只是系统需要UNDO。

  以上,是我昨天遇到的一个问题,希望能够给大家一个经验,也希望大家能提供一个原因,因为我感到很疑惑。

欢迎转载,但请注明出处!
原文地址:https://www.cnblogs.com/kevinsun/p/675781.html