OBJECT_ID e DATA_OBJECT_ID

martedì 4 settembre 2007 alle 04:26 | Pubblicato su Diario, Installation and Configuration | Lascia un commento

Oggi cercavo su internet del materiale didattico per un piccolo corso su Oracle che dovrei tenere presso un nostro cliente; a tal proposito mi pareva di ricordare che ci fosse qualcosa sul sito di Howard J. Rogers, quindi sono andato a vedere sulla sezione “knowledge base” del sito, sfogliando sono capitato al capitolo “Object Identifiers” e in tale capitolo l’autore spiega una cosa che non avevo mai notato: sulla tabella di sistema DBA_OBJECTS vi sono due campi, OBJECT_ID, DATA_OBJECT_ID e bisogna fare attenzione alla differenza fra i due. Io il campo DATA_OBJECT_ID non l’ho mai usato, ma in alcuni casi deve essere utilizzato come argomento in procudure PL/SQL di utilità quali quelle del package DBMS_ROWID.

Howard spiega come il campo OBJECT_ID contenga l’id dell’oggetto logico, quali la definizione di una vista, un package o la definizione di una tabella. Nel caso di oggetti quali package e viste che non occupano spazio fisico al di la di quello per la loro definizione, che sta nel dizionario dati e quindi nella tablespace SYSTEM, il campo DATA_OBJECT_ID non è valorizzato. Viceversa, per oggetti che hanno anche una occupazione fisica quali tabelle e indici, tale campo viene valorizzato, e inizialmente è uguale a OBJECT_ID.

Mentre il valore di OBJECT_ID probabilmente per tutta l’esistenza dell’oggetto non cambia, il valore di DATA_OBJECT_ID cambia in conseguenza di certe DDL, ad esempio le istruzione ALTER TABLE … MOVE e TRUNCATE TABLE … provocano il cambiamento del valore del campo DATA_OBJECT_ID.

Dalle verifiche che ho fatto ho osservato che probabilmente il contatore usato per i due campi è lo stesso, quindi quando faccio un  ALTER TABLE … MOVE o TRUNCATE TABLE … il valore di DATA_OBJECT_ID viene incrementato, e se creo un altro oggetto viene creato con un valore per OBJECT_ID successivo al valore di DATA_OBJECT_ID del precedente oggetto modificato.

Quindi, come raccomandato da Howard Rogers, se si usa il package DBMS_ROWID occorre fare attenzione all’object id da usare

Lascia un commento »

RSS feed for comments on this post. TrackBack URI

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...

Blog su WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: