2013-08-20 162 views

回答

36

試試這個: -

ALTER TABLE <TABLE NAME to be moved> MOVE TABLESPACE <destination TABLESPACE NAME> 

IVAN很不錯的建議,在如此認爲我的回答

注意添加註釋:這將註銷所有表的索引。所以這個命令通常跟着

alter index <owner>."<index_name>" rebuild; 
+0

[來自文檔](http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables006.htm#i1106606);和[更多此處](http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_3001.htm#i2081902) –

+6

注意:這將使所有表索引無效。所以這個命令通常跟着「改變索引重建」。 – ibre5041

+1

@伊萬: - 謝恩伊萬。好的一點。在答案中加入了這個! +1 :) –

2

試試這個來移動你的表(tbl1)到表空間(tblspc2)。

alter table tb11 move tablespace tblspc2; 
10

使用sqlsql:這

線軸輸出到文件:

select 'alter index '||owner||'.'||index_name||' rebuild tablespace TO_TABLESPACE_NAME;' from all_indexes where owner='OWNERNAME'; 

spoolfile信箱都會有這樣的事情:

alter index OWNER.PK_INDEX rebuild tablespace CORRECT_TS_NAME; 
+0

分開移動。您必須在index_name周圍使用「...」,否則您將獲得錯誤「ORA-01418:指定的索引不存在」。所以命令應該是:select'alter index'|| owner ||'。「'|| index_name ||'」重建表空間TO_TABLESPACE_NAME;' from all_indexes where owner ='OWNERNAME'; – Jan

7

移動表:

首先運行:

SELECT 'ALTER TABLE <schema_name>.' || OBJECT_NAME ||' MOVE TABLESPACE '||' <tablespace_name>; ' 
FROM ALL_OBJECTS 
WHERE OWNER = '<schema_name>' 
AND OBJECT_TYPE = 'TABLE' 
<> '<TABLESPACE_NAME>'; 

哪裏<schema_name>是用戶的名稱。 而<tablespace_name>是目標表空間。

當你像線結果:

ALTER TABLE SCOT.PARTS MOVE TABLESPACE用戶;

將結果粘貼到腳本或應用程序的oracle sql開發者中並運行它。

移動指標:

首先運行:

SELECT 'ALTER INDEX <schema_name>.'||INDEX_NAME||' REBUILD TABLESPACE <tablespace_name>;' 
FROM ALL_INDEXES 
WHERE OWNER = '<schema_name>' 
AND TABLESPACE_NAME NOT LIKE '<tablespace_name>'; 

在這個代碼可以爲您節省大量的時間,因爲它過濾掉它們已經在正確的表空間索引中的最後一行。

因此,你應該得到的東西,如:

ALTER INDEX REBUILD SCOT.PARTS_NO_PK TABLESPACE用戶;

將結果粘貼到腳本或應用程序的oracle sql開發者中並運行它。

最後但並非最不重要的,移動的LOB:

首先運行:

SELECT 'ALTER TABLE <schema_name>.'||LOWER(TABLE_NAME)||' MOVE LOB('||LOWER(COLUMN_NAME)||') STORE AS (TABLESPACE <table_space>);' 
FROM DBA_TAB_COLS 
WHERE OWNER = '<schema_name>' AND DATA_TYPE like '%LOB%'; 

這會將LOB類型的其他表空間。

因此,你應該得到的東西,如:

ALTER TABLE SCOT.bin $ 6t926o3phqjgqkjabaetqg == 0 $ MOVE LOB(日曆)STORE AS(TABLESPACE用戶);

將結果粘貼到腳本或應用程序的oracle sql開發者中並運行它。

O和還有一兩件事:

出於某種原因,我不能動「域」類型的索引。作爲一項工作,我放棄了索引。將用戶的默認表空間更改爲所需的表空間。然後再次重新創建索引。 有一種更好的方法,但它對我有效。

+3

SELECT'ALTER TABLE 。' || TABLE_NAME ||' MOVE TABLESPACE'||' ' FROM dba_tables WHERE OWNER =''AND TABLESPACE_NAME <>'';過濾器的表已在所需的表空間 – Barun

+0

答案中的第一個查詢應該用Barun的查詢替換。 – 3per

相關問題