Oracle 10g IMPDP undo表空间问题 大文件

Posted on 2009-12-30 18:19  blackcat  阅读(2564)  评论(0编辑  收藏  举报

  日前,处理了一则IMPDP导入失败的问题,到现在为止,还有一些问题无解,防止日后忘掉,也为了看看有没有高手给说说,故记录。

  

  某日上午,同事问,是不是Oracle ImpDp的文件多大,undo表空间就要多大?我认为,undo不过是处理一致性读的,ImpDp作为导入工具,这个ImpDp无论如何也不能对Undo造成太大影响,故说不必吧,结果同事说,他导入200g的数据时候(其中只有一个业务主表的数据),Impdp报临时表空间不足的问题。

 

     偶VPN到DB上,借机看看这套系统,这也是我们产品线目前应用中数据量最大的环境,Oracle DB配置如下:

  OS :Redhat linux as4 64bit

  Cpu  Intel 8核心,型号忘了

  Memory  32G

 

  这个时候查看下主表数据,基本上是个查询就挂起,产看undo表空间,undo的唯一数据文件已经是32g了,默认情况,这个是最大值了已经。。。。。。。。

  这个主表是个分区表,导入失败了,但是表空间显示占用了,就是看不到数据。

     查看了下undo中的对象,有一个居然是32.1G,这个很邪门,一定是Oracle的bug,或者是我的Toad显示有问题。。。。。。。。。。

     由于当时ImpDp已经取消了,但undo空间一直占用,我猜测,这个是Oracle的BUG,impdp异常退出了,有些资源没有及时清理。可惜呀,没有OTN的ID。

     当时数据库非常慢,外部链接基本上是这种情况:连接上,只要对那个主表有DML,当前连接马上就断掉,在v$session中program字段马上变成了空,本来正常情况,也就50~60个sessions,这个异常情况下,居然有140多个session了,(这个系统没有个稍微专业一点的管理人员,哪怕如我一般也好,虽然我很菜,所以参数都是默认的,除了sga调整过,还是我上次调整的)其他80多个都是program为空的情况。。。。

     关键是客户领导马上要看,问题很棘手呀。

     然后先应付过去领导,怎么应付就不说了,丢人了点。

   应付过去之后,我认为把undo清理一下,然后恢复下主表应该就没有问题了。

  

    接下来开始按照我的思路来:

    创建新的undo,进行切换。

  create undo tablespace 。

  alter system set undotablespace。

    然后删除之前的undo,提示删除不掉。

    然后加入隐藏参数,_CORRUPTED_ROLLBACK_SEGMENTS

  create pfile from spfile

  修改pfile,按照pfile启动,删除undo,这次成功了。

    

    然后导出主表数据,300w左右,truncate这个表 ,之前占用的数据文件释放了,然后导入,重启数据库,一切正常了。

  按照说明还要全库导出导入的,想想,算了。若还有问题,让他们重装吧就。

 

     总结:

  首先,impdp是不是真的是多大的文件,比如只有一个表,然后这个表数据200g,就要准备200g的数据文件。

  第二,undo中记录的和这个表相关的到底是什么,如果是闪回的话,就太恐怖了,几百G的数据,undo直接不用玩了。

     第三,我这种处理方式有没有啥大的隐患?

    

  哎,行文能力不足,下次自己读的时候,修改下吧。

     

 

Copyright © 2024 blackcat
Powered by .NET 9.0 on Kubernetes