刚开始使用oracle的时候不知道更改表空间,把自己系统的表全部建在SYSTEM表空间下,现在SYSTEM01.DBF已经有2G大小,现在想把SYSTEM下的内容全部转到USERS下,用alter table table_name move tablespace tablespace_name和alter index index_name rebuild tablespace space_name 把所有的表和索引转到users下,但是原来的system表空间却仍然有2G多大小,网上查到的内容多只言片语,想求一个完整的转移表空间的方案,要实现两个操作:
1.将system表空间内的对象转移到users,不能丢失数据
2.压缩system表空间,将system表空间文件缩小为略大于实际用量(system表空间有许多系统对象,已经占用了后部的数据块,resize不能进行)

解决方案 »

  1.   

    If the table includes LOB column(s), this statement can be used to move the table along with LOB data and LOB index segments (associated with this table) which the user explicitly specifies. If not specified, the default is to not move the LOB data and LOB index segments
      

  2.   

    exp userid/psw@sid   -- 导出整个user的数据;drop user userid;    --  然后把该user删除create user newUserId 
    identified by pwd 
    default tablespace USERS;  -- 建个新user, 写SQL比较麻烦, 建议使用Console之类的工具grant connect, resource to newUserId --给足够的权限.imp newUserID/psw@sid  -- 把刚才导出的文件再导回去, 搞定, 什么都不会缺
      

  3.   

    --------------------------------------------------------------
    您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
    您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
    http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选终选的30位数据库工程师将与您展开积极的互动。他们会为您的问题提供满意的答案,此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
    http://www.bestdba.cn/match_discussion3.aspx?pointid=461&pointid2=1&pointid3=5&pcount=stc非常感谢您对本次活动的支持!
    --------------------------------------------------------------
      

  4.   

    sozdream()
    你的方法不可能解决问题,因为exp的时候导出的表定义里会包含tabalspace的信息,所以再次导入的时候,表定义里的指定的tablespace的优先级肯定高于user的默认表空间设定,所以不管user的默认表空间是什么,都回保持导出前的表空间。
      

  5.   

    用pl/sql有一个导出工具可以导出成sql语句,然后……
      

  6.   

    swimming8243(swimming) 的方法理论上行得通,但是2G的数据要重新写一遍工作量太大了,而且其中有blob数据,这种方式可能处理不了
      

  7.   

    proman2003(旗舰) ( ) 信誉:100  2006-8-8 17:04:04  得分: 0  
     
     
       
    sozdream()
    你的方法不可能解决问题,因为exp的时候导出的表定义里会包含tabalspace的信息,所以再次导入的时候,表定义里的指定的tablespace的优先级肯定高于user的默认表空间设定,所以不管user的默认表空间是什么,都回保持导出前的表空间。  
     
    --------------
    用fromuser,touser导入到一个不同的schema下,会进入新的schema的default tablespace其实这种情况,如果库不是很大,而且可以接受一两个小时停机的话,建议重建库比较简单。
      

  8.   

    blob数据特殊处理吧,我的也是这样
    这个毕竟没什么好办法,至少我的知识不够……
      

  9.   

    先导出到ACCESS中然后更换表名在导入ORACLE中你自已的表空间
      

  10.   

    ACCESS这么大的数据量肯定不行,对oracle来说2g不算什么,可Access就不行了
      

  11.   

    ALTER TABLE test MOVE TABLESPACE new;
    alter index test_indx rebuild tablespace new_indx online; 
    ALTER TABLE test MOVE LOB (test_lob) STORE AS (TABLESPACE new_lob);