資料庫物件遷移表空間

regonly1發表於2010-07-27
今天做了一個資料庫物件的表空間遷移,因為懷疑現在的一個表空間有問題(建表報錯,而建到另外表空間則正常)。實施的步驟是先建立另外一個表空間,命名為htable2,將原表空間的所有物件遷移到此。
透過如下SQL生成遷移語句:
select s.owner, s.segment_name, s.partition_name, s.tablespace_name,
       case s.segment_type
       when 'TABLE' then 'alter table ' || s.owner || '.' || s.segment_name || ' move tablespace fund_htable;'
       when 'INDEX' then
            case d.iot_type
            when 'IOT' then 'alter table ' || d.owner || '.' || d.table_name || ' move tablespace fund_htable'
            else 'alter index ' || s.owner || '.' || s.segment_name || ' rebuild tablespace fund_htable;' end
       when 'TABLE PARTITION' then 'alter table ' || s.owner || '.' || s.segment_name || ' move partition ' || s.partition_name || ' tablespace fund_htable;'
       when 'TABLE SUBPARTITION' then 'alter table ' || s.owner || '.' || s.segment_name || ' move subpartition ' || s.partition_name || ' tablespace fund_htable;'
       end ss
  from dba_segments s,
       (select ind.index_name, ind.owner, dt.iot_type, dt.table_name
          from dba_indexes ind, dba_tables dt
         where ind.owner = dt.owner
           and ind.table_name = dt.table_name
           and dt.iot_type = 'IOT') d
 where d.index_name(+) = s.segment_name
   and d.owner(+) = s.owner
   and s.tablespace_name = 'FUND_HTABLE';
此語句可以生成將以上幾種型別的資料庫物件遷移到目標表空間的SQL語句。
其中IOT表的情況比較特殊,是直接遷移表而不是遷移主鍵索引來實現。而表沒有實際的segment,因此透過dba_indexes進行關聯,再將表進行move tablespace。

然後刪除原表空間:
drop tablespace htable;

由於9i沒有重新命名錶空間的功能,所以只好再建立一個htable表空間,然後將htable2上的物件遷移到此(還是用上面的指令碼遷移)

再將htable2表空間刪除:
drop tablespace htable2 including contents and datafiles;

差不多工作已經完成,除了還有一個無用的資料檔案還未刪除。
這個資料檔案就是原來htable下的那個。現在麻煩了,好像不能直接刪除:
alter database datafile 'xxx' offline drop;
這個命令只是把檔案給offline,但是在控制檔案中還是存在的(雖然啟動的時候也不會去檢查),因此不能直接從作業系統上將此檔案直接刪除。
那怎麼辦呢?我繞了一圈,首先建立一個表空間,重用該資料檔案,然後再用including contents and datafiles選項刪除該表空間,就去掉這個檔案了:
drop tabelspace temm including contents and datafiles;

另外,如何重新命名錶空間呢?
10g裡面,有如下命令:
alter tablespace xxx rename to yyyy;

9i下沒有這樣的命令。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-669577/,如需轉載,請註明出處,否則將追究法律責任。

相關文章