我现在想把现场数据库对象搬回公司的测试环境,不带数据的。
用 exp sys/sys@orcl file=d:\user.dmp owner=(user) rows=n。然后 在 公司测试环境对应建好用户和表空间后。
imp sys/sys@orcl file=d:/user.dmp fromuser=user touser=user。但是 现场的数据量很大,有些表 在建表的时候,初始化的占用空间都是100M、200M、300M。如下:
tablespace STG
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 275776K
    minextents 1
    maxextents unlimited
  );同时公司资源有限,我给这个表空间只能划个2g的空间出来,问题就来了。
当我imp的时候,没多久就开始报 ORA-01658: 无法为表空间 STG 中的段创建 INITIAL 区 这个错误。
于是我只能到数据库里面,把 已经导入的表 的 INITIAL 数值 手工改成 64k,然后重新imp一次,
于是这次又能多导入几个表,但是同样导入3-4个后,又报错,我只能又到数据库中修改 INITIAl数值偏大的表。我现在想的是,有没有什么可以设置的,直接在imp的时候统一表结构的INITIAL值,或者在数据库中统一一次修改所有表的INITIAL值呢??请各路英雄多多支招,帮忙解答,谢谢!

解决方案 »

  1.   

    直接把建表的ddl语句弄出来,再在测试库上执行就行了。
      

  2.   

    oracle自带的sqldeveloper不挺好的吗?有直接导出DDL语句的
      

  3.   

    没有,楼上两位没理解我说的意思。
    无论是通过SELECT DBMS_METADATA.GET_DDL('TABLE', u.table_name) FROM USER_TABLES u
    还是sqldeveloper导出来的ddl语句,表结构初始大小都非常大。
    我的测试环境不允许这么大的表结构,所以要修改 
    tablespace STG
       pctfree 10
       initrans 1
       maxtrans 255
       storage
       (
       initial 275776K
       minextents 1
       maxextents unlimited
       );
    这个 initial 值 ,有人看我的帖子说明没??
      

  4.   

    使用ultra Edit编辑器,手动编辑*.dmp文件,注意,不要减小文件的大小。