Che fine ha fatto ORA-01450?

martedì 2 settembre 2008 alle 02:45 | Pubblicato su Installation and Configuration, SQL | 1 commento
Tag: , , ,

Ebbene, oggi per la prima volta mi sono scontrato con l’errore ORA-01450.  Il messaggio completo è:

ORA-01450: maximum key length (6398) exceeded

All’inizio ero perplesso, perchè non mi ricordavo che ci fosse un limite sulla dimensione delle chiavi su cui si possono costruire indici. La cosa che però veramente mi sconcerta è il fatto che mentre la descrizione di questo errore è presente nella documentazione della 9iR2, sulla documentazione della 10gR2 sembra essere stato rimosso,   a parte qui (forse è sfuggito?)

Il messaggio che ho riportato sopra riporta una lunghezza massima di 6398 byte, riferita a due ambienti su cui ho provato io, su Windows e su Linux 64 bit, entrambi 10.2.0.3 ed entrambi con block size 8192 byte.

La documentazione invita a guardare la documentazione specifica per il proprio sistema operativo, ma sembra che tale limite dipenda dalla dimensione del blocco del database più che dal sistema operativo; infatti mi è capitato per la prima volta di incontrare questo errore perchè abbiamo installato la nostra applicazione presso un cliente che disponeva di un database gia creato con dimensione del blocco di 4kb.

Cercando informazioni sul metalink sono arrivato alla nota 316158.1 che appunto spiega come tale limite dipenda dal parametro DB_BLOCK_SIZE. La nota spiega che è richiesto che per ogni blocco dell’indice devono esserci almeno due chiavi, quindi il limite è inferiore alla metà della dimensione del blocco. La nota risulta aggiornata ad agosto 2008, ma fa riferimento alla documentazione della versione 8 ….

La fase successiva è la ricerca su Google, questi mi porta a un post di Alex Gorbachev su Pythian. Riporta un problema diverso, ma con lo stesso messaggio.

Infine affinando la ricerca sono arrivato qui, dove si dice che il limite è qualcosa sotto il 75% della dimensione del blocco. In realtà, calcolatrice alla mano, il 75% di 8192 a me viene 6144, che è meno di 6398 riportato nel messaggio.

Al di là del fatto che le informazioni su questo limite sono vaghe è bene stare in guardia su questa problematica.

1 commento »

RSS feed for comments on this post. TrackBack URI

  1. bè dice 75% meno un overhead quindi ci siamo circa

    molto utile ed interessante

    Grazie

    Alessandro


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: