+1 voto
2.3k visite
quesito posto in SQL e PLSQL da (150 punti)
Ho necessità di aumentare la spazio che era stato dedicato ad una colonna di tipo varchar2, il problema è che con il solito costrutto ALTER TABLE XXX MODIFY non riesco perchè la tabella in questione è una tabella partizionata, qualcuno sa dirmi come posso arrivare ad una soluzione?

1 Risposta

0 voti
risposta inviata da (1.9k punti)

Ciao,

non riesco a capire cosa intendi per aumentare lo spazio che era stato dedicato ad una colonna. 

Se intendi, ad esempio, aumentare il campo da VARCHAR2(30) a VARCHAR2(50) non dovresti avere alcun tipo di problema anche se la tabella è partizionata.

Ti riporto di seguito un esempio.

1. Creazione di una tabella partizionata:

CREATE TABLE sales_range
(salesman_id  NUMBER(5), 
salesman_name VARCHAR2(30), 
sales_amount  NUMBER(10), 
sales_date    DATE)
PARTITION BY RANGE(sales_date) 
(
PARTITION sales_jan2000 VALUES LESS THAN(TO_DATE('02/01/2000','DD/MM/YYYY')),
PARTITION sales_feb2000 VALUES LESS THAN(TO_DATE('03/01/2000','DD/MM/YYYY')),
PARTITION sales_mar2000 VALUES LESS THAN(TO_DATE('04/01/2000','DD/MM/YYYY')),
PARTITION sales_apr2000 VALUES LESS THAN(TO_DATE('05/01/2000','DD/MM/YYYY'))
);
 
Creato table SALES_RANGE.
 
2. Aumento la larghezza di una colonna:
 
alter table sales_range modify (salesman_name varchar2(50));
 
table SALES_RANGE modificato.
 
Non dovrebbe darti problemi nemmeno se stai tentando di modificare la colonna utilizzata come chiave per stabilire su quale partizione deve essere inserito il record.
 
Fammi sapere se il tuo problema è differente ed eventualmente quale errore ti viene restituito.
commentato da (150 punti)
Praticamente mi da l'errore ora 14060 partition key column, need to be modified.

Quindi non gli va giù che provo a modificare proprio la colonna che ho usato come chiave per la partizione
commentato da (1.9k punti)
Ok. In questa discussione indicano che è necessario fare il rebuild della tabella:

https://community.oracle.com/thread/2445497

Puoi scegliere di farlo in maniera manuale oppure in utilizzando il package DBMS_REDEFINITION. Se opti per la prima strada ti consiglio quanto segue.

1. Rename della tabella
2. Creazione della nuova tabella partizionata con la colonna allargata
3. Insert into nuova_tabella (select * from vecchia_tabella)

Domande correlate

0 voti
0 risposte 269 visite
0 voti
0 risposte 2.1k visite
0 voti
0 risposte 166 visite
0 voti
0 risposte 301 visite
0 voti
0 risposte 111 visite
...