环境:XP系统,ORACLE10G数据库 10.2.0.1
新建了一个新的表空间:YSS ,然后将导出的DMP导入到新的表空间中;DMP是从另外一个10G的库导出,原来的默认表空间是SYSTEM,因为不想将这个库放在SYSTEM里,所以新建了一个YSS的表空间,专门放这个数据库。新建用户:test
CREATE USER "TEST"  PROFILE "DEFAULT" 
    IDENTIFIED BY "q" DEFAULT TABLESPACE "YSS" 
    TEMPORARY TABLESPACE "TEMP" 
    ACCOUNT UNLOCK;
GRANT CREATE ANY VIEW TO "TEST"
GRANT "CONNECT" TO "TEST";
GRANT "RESOURCE" TO "TEST";1,删除无限制的权限
REVOKE UNLIMITED TABLESPACE FROM test;2、设置默认表空间:alter user test default tablespace  test3、设置默认的表空间无限配额:alter user test quota unlimited on yss4、设置test用户对其他表空间的quota为0:alter user test quota 0 on system
完成后,导入DMPIMP-00017: 由于 ORACLE 错误 1536, 以下语句失败:
 "CREATE TABLE "TB_001_COMP_INDEXCFG" ("FINDEXCFGCODE" VARCHAR2(20) NOT NULL "
 "ENABLE, "FINDEXCFGNAME" VARCHAR2(100) NOT NULL ENABLE, "FINDEXTYPE" VARCHAR"
 "2(20) NOT NULL ENABLE, "FBEANID" VARCHAR2(30), "FCOMPPARAM" VARCHAR2(20) NO"
 "T NULL ENABLE, "FREPCODE" VARCHAR2(20), "FINDEXDS" CLOB, "FMEMOYWAY" VARCHA"
 "R2(20) NOT NULL ENABLE, "FTGTTABLEVIEW" VARCHAR2(30), "FBEFORECOMP" VARCHAR"
 "2(20) NOT NULL ENABLE, "FFINALCOMP" VARCHAR2(20) NOT NULL ENABLE, "FWARNANA"
 "LYSIS" VARCHAR2(500), "FVIOLATEANALYSIS" VARCHAR2(500), "FFORBIDANALYSIS" V"
 "ARCHAR2(500), "FDESC" VARCHAR2(100), "FCHECKSTATE" NUMBER(1, 0) NOT NULL EN"
 "ABLE, "FCREATOR" VARCHAR2(20) NOT NULL ENABLE, "FCREATETIME" VARCHAR2(20) N"
 "OT NULL ENABLE, "FCHECKUSER" VARCHAR2(20), "FCHECKTIME" VARCHAR2(20))  PCTF"
 "REE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 FREELISTS 1"
 " FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM" LOGGING NOCOMPR"
 "ESS LOB ("FINDEXDS") STORE AS  (TABLESPACE "SYSTEM" ENABLE STORAGE IN ROW C"
 "HUNK 8192 PCTVERSION 10 NOCACHE LOGGING  STORAGE(INITIAL 65536 FREELISTS 1 "
 "FREELIST GROUPS 1 BUFFER_POOL DEFAULT))"
IMP-00003: 遇到 ORACLE 错误 1536
ORA-01536: 超出表空间 'SYSTEM' 的空间限额系统可以导入指定的默认表空间:YSS,但只要用CLOB、BLOB字段的表就导不进去,错误如上:
可能有的人以为根据错误信息,将SYSTEM的空间限额打开,不就可以了吗?是的,如果执行下面的语句:
alter user test quota unlimited on system打开SYSTEM表空间的配额限制,导入的表就全部到SYSTEM中,根本就进不了默认的YSS中。
还请各位大虾们指教啊!

解决方案 »

  1.   

    首先你需要把log segment从system中移走.因为log segment默认都会放在system当中.移走后,然后再使用quota的方式.不知道楼主是否明白我的意思?
      

  2.   

    就是你的blob等大对象产生的segment.
      

  3.   

    eg. ALTER TABLE foo MOVE LOB(lobcol) STORE AS lobsegment 
      (TABLESPACE new_tbsp STORAGE (new_storage));
      

  4.   

    有一点效果,但还是有一些问题!如下:红色的部分是有效果的部分,确实已经将表空间改过来了.
    但蓝色的部分还是SYSTEM表空间,所以还是报一样的错误.
    IMP-00017: 由于 ORACLE 错误 1950, 以下语句失败:
     "CREATE TABLE "TB_001_REP_DATASOURCE" ("FREPDSCODE" VARCHAR2(20) NOT NULL EN"
     "ABLE, "FREPDSNAME" VARCHAR2(50) NOT NULL ENABLE, "FDSTYPE" NUMBER(1, 0) NOT"
     " NULL ENABLE, "FTROWCOLOR" NUMBER(10, 0) NOT NULL ENABLE, "FBROWCOLOR" NUMB"
     "ER(10, 0) NOT NULL ENABLE, "FTEMPTAB" VARCHAR2(20), "FSTORAGETAB" VARCHAR2("
     "20), "FBEANID" VARCHAR2(30), "FDATASOURCE" CLOB, "FFILLRANGE" VARCHAR2(20) "
     "NOT NULL ENABLE, "FDESC" VARCHAR2(100), "FCHECKSTATE" NUMBER(1, 0) NOT NULL"
     " ENABLE, "FCREATOR" VARCHAR2(20) NOT NULL ENABLE, "FCREATETIME" VARCHAR2(20"
     ") NOT NULL ENABLE, "FCHECKUSER" VARCHAR2(20), "FCHECKTIME" VARCHAR2(20))  P"
     "CTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 327680 FREELIS"
     "TS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM" LOGGING NOCO"
     "MPRESS LOB ("FDATASOURCE") STORE AS "LOBSEGMENT"  (TABLESPACE "YSS" ENABLE "
     "STORAGE IN ROW CHUNK 8192 PCTVERSION 10 NOCACHE LOGGING  STORAGE(INITIAL 21"
     "2992 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT))"
    IMP-00003: 遇到 ORACLE 错误 1950
    ORA-01950: 对表空间 'SYSTEM' 无权限
    成功终止导入, 但出现警告。
      

  5.   

    ORA-01950: 对表空间 'SYSTEM' 无权限 
    检查一下quota情况?
      

  6.   

    alter user test quota unlimited on system 打开SYSTEM表空间的配额限制,导入的表就全部到SYSTEM中,根本就进不了默认的YSS中。
      

  7.   

    当然了,你把system设置为default ,
    这样吧,先把yss 设置为defaultalter database default tablespac yss;再导入.