新创建了一个用户USER,并为其指定默认的表空间TABLESPACE_NEW,这个TABLESPACE_NEW也是新建的。然后回收了该用户对表空间的unlimited权限,并将用户USER在System表空间和原有的默认表空间TABLESPACE_OLD的配额置为0,又将在表空间TABLESPACE_NEW的配额设置成unlimited,以使用户USER导入数据库时,数据会放在表空间TABLESPACE_NEW里。用imp命令导入时,发现数据的确导入了TABLESPACE_NEW中。但是现在发现了一个问题,导入过程中,某些表出现了“超出表空间TABLESPACE_OLD的配额”,导致了无法导入该表。想问的是,既然现在导入在TABLESPACE_NEW里,那么为什么还和TABLESPACE_OLD有关系?

解决方案 »

  1.   

    查看一下,出问题的表是否有lob类型,如blob,clob,long等
      

  2.   

    你导出数据的表空间是在OLD的吧,那么导入时候去找表的默认表空间OLD,
      

  3.   

    的确有个字段是blob的,请问这是为什么,怎么会和配额有关系呢?
      

  4.   

    是这样的,导出数据的表空间是在OLD。但是其他的表都可以导入NEW中,为何这几个不行呢?
      

  5.   


    因为在导入数据的时候,需要先创建表,创建表的时候,跟随有默认的表空间OLD,所以出现这种情况。
      

  6.   

    lob类型的存储方式和其他字段类型不一样,他与对应user的default tablespace没有必然的联系。在exp/imp的时候,用普通的方法不行。好像10以后去掉了这个限制。
    可变通实现,如先在目标用户及新表空间上建表,然后导入的时候ignore=y。
    或者通过copy将含有lob的表迁移
      

  7.   

    因为你导出的dmp文件中,建表语句中肯定包含原数据库的OLD表空间。
    再往新数据库中导的时候,就有问题了。
      

  8.   

    原来是这样。也就说不含lob类型的表是会和user的default tablespace有联系的,这样的表会直接导入在TABLESPACE_NEW中,而含有lob类型的,还是会往原有的默认表空间TABLESPACE_OLD中导入,而我把用户对TABLESPACE_OLD的配额设置为0,也就出现了这个错误。
      

  9.   

    因为别的表可以这场导入,而只有这几个含有lob类型的表没有导入。
      

  10.   


    是的。前面的显性授权与撤销是必须的,但是,对于lob类型无效。他们存储在单独的lob segment里面。