oracle tipi - Perché i nomi di tabelle / colonne / indici Oracle sono limitati a 30 caratteri?




5 Answers

Credo che sia lo standard ANSI.

MODIFICARE:

In realtà, penso che sia lo standard SQL-92.

Una versione successiva dello standard sembra consentire facoltativamente nomi di 128 caratteri, ma Oracle non supporta ancora questo (o ha un supporto parziale per esso, nella misura in cui consente 30 caratteri. Hmmm.)

Cerca "F391, identificatori lunghi" in questa pagina ... http://stanford.edu/dept/itss/docs/oracle/10g/server.101/b10759/ap_standard_sql001.htm

(Cercando un riferimento)

varchar2 leggere

Posso capire che molti anni fa ci sarebbe stato questo tipo di limitazione, ma oggi sicuramente questo limite potrebbe facilmente essere aumentato. Abbiamo convenzioni di denominazione per gli oggetti, ma c'è sempre un caso che si verifica dove raggiungiamo questo limite, specialmente nel nominare le chiavi esterne.

Qualcuno in realtà sa perché questa non è una dimensione più grande - o è più grande in 11g?

Apparentemente la risposta è che interromperà attualmente gli script che non sono codificati in modo difensivo. Dico che è una cosa molto preoccupante, Oracle sta cercando di essere il database, sicuramente questo è il genere di cose che devi costantemente migliorare, altrimenti il ​​tuo prodotto morirà di mille tagli.

Ogni volta che vedo in casa questo tipo di obiezione, penso che sia ora di mordere il proiettile e risolverlo. Se le persone eseguono script che non controllano o mantengono quando aggiornano le versioni di Oracle, lascia che subiscano le conseguenze di tale scelta. Fornire loro un flag di compatibilità, aumentare le dimensioni a 4000, quindi salvarmi il tempo perso quando sto creando oggetti di dover contare costantemente su 30 per verificare che il nome sia 'OK'.




Stavo cercando questo e ho trovato questa domanda via Google, ma ho anche scoperto che a partire da Oracle 12c Release 2 (12.2), questo non è più strettamente il caso. ( https://oracle-base.com/articles/12c/long-identifiers-12cr2 )

Ad un certo punto ogni DBA o sviluppatore avrà colpito un punto in cui il limite di 30 caratteri per i nomi oggetto ha causato un problema. Questo limite può essere estremamente doloroso quando si eseguono progetti di migrazione da SQL Server o MySQL a Oracle. In Oracle Database 12cR2, la lunghezza massima della maggior parte degli identificatori è ora di 128 caratteri.

Questa è una nuova funzionalità in 12.2, secondo ( http://blog.dbi-services.com/oracle-12cr2-long-identifiers/ ). Secondo quel post, 12.1 era ancora limitato a 30 caratteri.

Modifica: questo è un link alla documentazione ufficiale di Oracle che spiega il cambiamento. ( https://docs.oracle.com/cloud/latest/exadataexpress-cloud/CSDBF/longer-identifier-names.htm#CSDBF-GUID-F4CA155F-5A37-4705-8443-0A8C9E3F875C )

A partire da Oracle Database 12c Release 2 (12.2), la lunghezza massima dei nomi identificativi per la maggior parte dei tipi di oggetti di database è stata aumentata a 128 byte.




Le violazioni dei vincoli vengono segnalate in SQLERRM che è limitato a 255 caratteri e che la maggior parte dei client utilizza per rendere visibili gli errori. Sospetto che l'aumento delle dimensioni consentite dei nomi dei vincoli influenzi significativamente la capacità di segnalare le violazioni (in particolare laddove una violazione dei vincoli è stata introdotta da alcuni livelli di codice PL / SQL).




Tutti questi "vincoli" sono lasciati alle risposte alle limitazioni imposte dalle architetture dei processori che provengono dagli anni '70. Da quel momento i processori si sono evoluti al punto che queste limitazioni non sono più necessarie; sono appena rimasti. Tuttavia, cambiarli è un grosso affare per gli scrittori del RDBMS. Dal momento che questi limiti di lunghezza influiscono su tutto il processo a valle cambiandolo a piacere per dire che un nome più lungo può e probabilmente romperà molte altre cose, come la segnalazione in esecuzione, il dizionario dei dati, ecc., Ecc. Ecc. Avrei bisogno di una grande riscrittura di Oracle RDBMS.




Tutti i commenti di cui sopra sono giusti, ma è necessario tenere a mente il costo delle prestazioni dei nomi più lunghi. Nei primi anni '90, quando Informix allestì un enorme cartellone "Informix Faster Than Oracle!" sulla route 101 accanto alla sede di Oracle, Informix ha consentito che i nomi delle tabelle fossero solo più brevi di 18 caratteri! La ragione è ovvia: i nomi delle tabelle nella loro forma letterale (cioè come nomi effettivi anziché "t138577321" o qualcosa del genere) sono memorizzati nel dizionario dei dati. Nomi più lunghi equivalgono a un dizionario dati più ampio e poiché il dizionario dati viene letto ogni volta che una query richiede un'analisi complessa, un dizionario dati di dimensioni maggiori equivale a prestazioni scadenti ...




Related