2013-08-20 7 views

risposta

36

Prova questa: -

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

Bellissimo suggerimento di IVAN nei commenti così pensato di aggiungere nella mia risposta

Nota: si rischierebbe di invalidare gli indici tutti di tabella. Di solito questo comando è seguito da

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

[Dalla documentazione] (http://docs.oracle.com/cd/E11882_01/server.112/e25494/tables006.htm#i1106606); e [altro qui] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/statements_3001.htm#i2081902) –

+6

Nota: questo invaliderà tutti gli indici della tabella. Quindi questo comando è solitamente seguito da "alter indice ricostruito". – ibre5041

+1

@ Ivan: - Grazie Ivan. Bel punto. Aggiunto questo nella risposta pure !! +1 :) –

2

Prova a spostare la tabella (tbl1) in tablespace (tblspc2).

alter table tb11 move tablespace tblspc2; 
10

Usa sql da sql: uscita

rocchetto di questo in un file:

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

SpoolFile avrà qualcosa di simile:

alter index OWNER.PK_INDEX rebuild tablespace CORRECT_TS_NAME; 
+0

Devi usare "..." attorno al nome_indice altrimenti otterrai un errore "ORA-01418: l'indice specificato non esiste". Quindi il comando dovrebbe essere: selezionare 'alter index' || owner || '."'|| index_name ||'" ricompilare tablespace TO_TABLESPACE_NAME; ' da all_indexes dove owner = 'OWNERNAME'; – Jan

7

tavoli in movimento:

.210

Prima esecuzione:

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

Dove <schema_name> è il nome dell'utente. E <tablespace_name> è lo spazio tabelle di destinazione.

Come risultato si ottiene linee come:

ALTER TABLE SCOT.PARTS gli utenti si spostano TABLESPACE;

Incollare i risultati in uno script o in uno sviluppatore sql di Oracle come l'applicazione ed eseguirlo.

indici in movimento:

prima esecuzione:

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>'; 

L'ultima riga in questo codice potrebbe risparmiare un sacco di tempo, perché filtra gli indici che sono già in tablespace corretta.

Come risultato si dovrebbe ottenere qualcosa di simile a:

ALTER INDEX REBUILD SCOT.PARTS_NO_PK UTENTI TABLESPACE;

Incollare i risultati in uno script o in uno sviluppatore sql di Oracle come l'applicazione ed eseguirlo.

Ultimo ma non meno importante, i LOB in movimento:

prima esecuzione:

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%'; 

Questo sposta il LOB oggetti verso l'altro spazio tabelle.

Come risultato si dovrebbe ottenere qualcosa di simile a:

ALTER TABLE SCOT.bin $ 6t926o3phqjgqkjabaetqg == $ 0 per passare LOB (calendario) STORE AS (UTENTI TABLESPACE);

Incollare i risultati in uno script o in uno sviluppatore sql di Oracle come l'applicazione ed eseguirlo.

O e non v'è ancora una cosa:

Per qualche ragione non ero in grado di muoversi 'DOMINIO' indici di tipo. Come un aggeggio ho lasciato cadere l'indice. cambiato lo spazio tabella predefinito dell'utente nel tablespace desiderato. e quindi ricreare nuovamente l'indice. Esiste probabilmente un modo migliore ma ha funzionato per me.

+3

SELEZIONA 'ALTER TABLE .' || TABLE_NAME || ' SPOSTARE TABLESPACE '||' ' FROM dba_tables WHERE OWNER =' 'AND TABLESPACE_NAME <>' '; tabelle dei filtri già nella tablespace desiderata – Barun

+0

La prima query nella risposta deve essere sostituita con la query di Barun. – 3per