前天在做数据库割接预演的时候遇到一个比较棘手的问题。
我将老库的一张5000W级数据量的表 用 insert .....select 的方式导入到新表(不能用IMP导入,因为我导入的时候需要改一些数据)时候竟然执行了 20个小时没倒完, 我还倒了一个和这个表一样的数据量,表结构也一样 ,用的语句也一样表空间也一样的的表 这个导入只用了48分钟。 这是怎么回事?
在导入表的时候因为很慢 我怀疑是表被锁了,可是没有查询到该表被锁的信息。 我对这个表进行for update、截断、 delete 都说 资源正忙 , 我间隔时间查看表空间,表空间占用量根本没有变化 我只有让我们数据库管理员把 我执行的语句给杀掉 。
两张表完全相同为什么 一个可以导入,一个导不了呢?
各位大侠 给指点一下吧。估计是那块出的毛病,要是数据库服务器出的毛病,我估计也管不了了。
我将老库的一张5000W级数据量的表 用 insert .....select 的方式导入到新表(不能用IMP导入,因为我导入的时候需要改一些数据)时候竟然执行了 20个小时没倒完, 我还倒了一个和这个表一样的数据量,表结构也一样 ,用的语句也一样表空间也一样的的表 这个导入只用了48分钟。 这是怎么回事?
在导入表的时候因为很慢 我怀疑是表被锁了,可是没有查询到该表被锁的信息。 我对这个表进行for update、截断、 delete 都说 资源正忙 , 我间隔时间查看表空间,表空间占用量根本没有变化 我只有让我们数据库管理员把 我执行的语句给杀掉 。
两张表完全相同为什么 一个可以导入,一个导不了呢?
各位大侠 给指点一下吧。估计是那块出的毛病,要是数据库服务器出的毛病,我估计也管不了了。
insert select , 指定append. 假如是unarchive模式,可以指定 nologging这个不明白,给指点一下吧。
对了 我用的是服务器端是oracle 9i 我在倒表前 新表的索引都删了 老表是有索引的。我倒的两张表都是这么倒的就一个成功一个没反应
回滚段不足 会造成锁表么? 还是这条语句一直等待着可用的资源?
谢谢了
,start_time,expire_time,use_phone,use_money,desc_mode,status_code,is_active,sale_price,sale_code,op_accept,op_login
,op_time,op_code,note)
select t.valcardnum,b.res_code,nvl(a.group_id,'10031'),'********','10031',0,sysdate,0,'null'
,sysdate,t.expdate,'null',0,'********',c.new_status,decode(STAND,'0','0','1','1','2','1','3','1','4','2','x'),nvl(t.valprice,0)/100.0,'10',0,'system'
,nvl(t.optdate,sysdate),'****',t.re
from info.T_RS_ZCOMMONVALCARD_a t,tran.comp_groupid a,schnrescode b,pResStatusRel c
where t.rescodeid=b.res_code and t.orgcode=a.orgcode(+)
and t.usestat=c.old_status
and c.type='10'
and (( T.USESTAT <> '2') OR
( T.USESTAT = '2' AND T.OPTDATE > TO_DATE('20090101','YYYYMMDD')));commit;
/ !echo `${DATE_FORMAT}` `${TIME_FORMAT}`${SHELL_NAME} ${1} END---------------------------------------------------------------这是我的shell脚本 连个脚本都一样的 只是一个表是dchnrescardinfo0001 一个表是dchnrescardinfo0002