Creazione indici e occupazione spazio
Per ogni tabella che ha associata una chiave primaria,
viene creato automaticamente dal sistema di un indice con dimensioni di default (quindi molto piu' grande del necessario)
che ha nome dato di default. Quidi e' bene creare un indice in modo esplicito su ogni chiave primaria,
assegnandogli un nome significativo e i parametri di storage appropriati.
Esempio:
CREATE TABLE nome_tab .... come al solito ma attenzione a non creare subito la chiave primaria
CREATE INDEX nome_index ON nome_tab(nome_campo)
STORAGE (
INITIAL 20
NEXT 2
MINEXTENTS 1
MAXEXTENTS 40
PCTINCREASE 10)
TABLESPACE nome_tablespace
PCTFREE 15
nota: per esprimere in byte le dimensioni del initiale del next, non si fa seguire al numero
nessuna lettera, INITIAL 20, invece per specificare la dimensione in Kilobyte: 20K e in Megabyte: 20M
ALTER TABLE nome_tab ADD CONSTRAINT nome_constr PRIMARY KEY(nome_campo)
Problematiche circa i Blob:
- Calcolo Storage in presenza di LOB
Per ora non comprendetelo nel calcolo delle clausole di storage, sara' oggetto di domande nel cosr
dell'intervento Reply
- Per memorizzare un oggetto BLOB vuoto in un database Oracle, si puo' utilizzare la funzione Oracle EMPTY_BLOB(),
che salva un blob di grandezza 0 nel DB.
Esempio:
insert into Prodotti values('CiaoCin spa','500000', EMPTY_BLOB(), 'Vaso Cinese')
E' possibile riempirlo in un secondo tempo, attraverso un programma java o con funzioni di libreria Oracle.
-
Per memorizzare un blob attraverso java, si veda l'esempio nella directory Tiroc degli esempi, tenendo presente
che nel package java.sql e nel package oracle.sql esiste l'oggetto BLOB
-
Per Materializzare l'oggetto blob in java esistono due metodi java dell'oggetto java.sql.BLOB:
java.io.InputStream in= Blob.getBinaryStream() per leggere l'oggetto come InputStream
long lunghezza = Blob.length();
byte[] b= Blob.getBytes(inizio, lunghezza) per leggere l'oggetto in formato di array di byte
Approfondire nelle api le specifiche sulle due funzioni
Si veda inoltre l'esempio nella directory Tiroc
Funzioni o Procedure PL/SQL a tempo:
é possibile schedulare a intervalli di tempo una funzione o procedura o comando PL/SQL, per questo e' necessario
esista (almeno) un processo di Oracle che "ascolti" soddisfi le richiesta a scadenze di orologio_job.
Invece il programmatore ha a disposizione il package oracle PL/SQL DMS_JOB nel quale e' compresa la
funzione submit
DMS_JOB.submit(job, what, next, interval, parse)
job: OUT NUMBER per contenere il numero del job dato dal sistema al suo lancio
what: IN VARCHAR2 comando o procedura o funzione da eseguire 'execute(nome_procedura)'
'begin ...comandi pl/sql... end;'
next: IN DATE data del 1 lancio sysdate lancio immediato
interval: IN VARCHAR2 porzione di giorno ogni quanto la funzione sara' rischedulata
12/24 ogni dodici ore, 1/1040 ogni minuto.
parse: IN BOOLEAN flag che indica se iniziare subito lo scheduling o partire da next
Esempio:
DMS_JOB.submit(j,'execute(prova)', sysdate, 'TRUNC(sysdate+1)+12/24',1)
FAQ
- Quando si cerca di caricare una servlet, sebbene il path sia corretto ed file class presente all'indirizzo dato, il servente Apache da come errore Internal Server Error.
Questo errore è dovuto al fatto che probabilmente non si sono impostati i permessi corretti di accesso al file class. I permessi necessari sono: lettura, scrittura, esecuzione al proprietario, lettura ed esecuzione sia al gruppo che a tutti.
- I dati inseriti con SQLPlus sono scomparsi.
Si verifica quando, dopo aver fatto delle modifiche al database o introdotto nuovi dati, si è cliccato sul tasto di chiusura della finestra del programma, senza prima fare una istruzione di commit(SQL>commit;). E' quindi bene eseguire tale istruzione oppure uscire dall'applicazione con il comando exit.
- Dopo aver cancellato una tabella, il trigger associato è stato cancellato.
Questo è normale, in quanto una volta cancellata la tabella anche i triggers che lavorano su di essa vengono cancellati.
-
Il comando javac non riesce a trovare il file che si vuole compilare
Se si è nella directory corretta ed il nome del file è anch'esso corretto, questo può essere dovuto al fatto che il proprio path punta ad una vecchia versione di java, occorre quindi impostarlo affinchè punti alla versione 1.3:
set path=d:\jdk1.3\bin;%path%
Per ulteriori informazioni vedere la pagina Isttruzioni Laboratorio.
- La compilazione di una servlet o programma java, sotto NT, segnala che java non riesce a trovare gli Oracle driver.
Occorre impostare il classpath affinchè esso punti alla directory in cui sono contenuti i driver JDBC.
set CLASSPATH=d:\JavaClasses\oracle\JDBC_8.1.6_jdk1.2.zip;%CLASSPATH%
Per ulteriori informazioni vedere la pagina Isttruzioni Laboratorio.