Newsgroup: it.comp.software.database
Titolo: [ORACLE] Esportazione tabella

Anch'io ho un problema simile al thread precedente, mi spiego,
Oracle 7 database con circa 40 tabelle, di cui 6-7 tabelle  con 3.000.000
di record ciascuna risultato ... lentezza esasperante,
io ho pensato di risolvere nel seguente modo:
la tabella principale, TabA contiene come chiave univoca, codice e
progressivo,(e altri dati tra cui la data)  le altre tabelle(tabB,tabC
ecc, con rapporto 1 a enne da questa, 
hanno anche loro codice e progressivo ,
la soluzione che avevo pensato era la seguente: togliere
tutti record dalle tabelle secondarie la cui data (da ricavare nella
tabella principale), fosse anteriore al 31/12/2000
in modo da svecchiare il database
cosi' avrei fatto:
DELETE TabB b WHERE b.progressivo IN
(SELECT progressivo FROM TabA WHERE anno < '31-DEC-00' AND
TabA.anno=b.anno)
prima pero' avrei dovuto fare una copia di sicurezza dei dati cancellati
in modo da poter in futuro ricaricare tutti i dati, 
qual'e' pero' il modo migliore? fare una exp?
ma la exp mi permette di fare join tra tabelle? dal manuale vedo 
che la sintassi dovrebbe essere la seguente:
exp user/psw tables=tabB query=\WHERE b.progressivo IN
\(SELECT progressivo FROM TabA WHERE anno \< \'31-DEC-00\' AND
TabA.anno=b.anno\)\"  
come faccio a portare la delete nella query d'esportazione
grazie .
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ma la exp mi permette di fare join tra tabelle?
No, tu esporti TUTTE le tabelle, tutte intere. Se qualche cosa va'
male le re-importi intere.
Davide

 Davide
nel modo che dico io oggi faccio l'export dei dati con data <30/12/2000
e cancello i record con date antecedenti
nel frattempo nel db vengono caricati record mettiamo per un mese,
tra un mese viene richiesta una query sui dati cancellati
io faccio l'import dei dati <30/12/2000 faccio dgirare la query
e ricancello il tutto
nel tuo modo se tra un mese re importassi i dati salvati, avrei perso
i dati immessi nel frattempo, avrei dovuto fare tutti i giorni esportazioni
come mai mi sconsigli di esportare parte della tabella?


 in modo da poter in futuro ricaricare tutti i dati,
Potresti fare un
CREATE TABLE vecchi as
SELECT progressivo FROM TabA WHERE anno < '31-DEC-00' AND
                                 TabA.anno=b.anno
e fare la export di queste tabelle create.
Poi se devi reinserire i dati puoi fare un
insert into TabA select * from vecchi
oppure meglio ancora fare una vista data dalla union delle due tabelle
create view tutti_i_dati as
select * from TabA union select * from vecchi
Oppure se usi oracle9i puoi fare uno spool con il risultato della select dei
dati che cancellerai, e poi al momento di doverli utilizzare creare una
tabella esterna, che funziona bene (l'ho dovuto usare ed e' comodissima).
Se questo poi ti risolve oppure no la performance, sinceramente non te lo
posso assicurare.
Io proverei prima a fare un banalissimo "analyze table ..... for table" e
"analyze table ... for all indexes columns"; che non fa mai male e se sei
fortunato gia' solo con quello potresti risolvere i tuoi problemi di
lentezza.
Paulus
Paulus
--------------------------------
Inviato via 
http://usenet.libero.it

Tre domande prima di dare un suggerimento:
- la colonna anno contiene la data troncata (tutte le ore a 0.00.00)?
- hai l'opzione bitmap installata?
- fai update frequenti su quella tabella?
Concordo comunque con Davide: verifica le query facendo un explain plan per
vedere se agganciano correttamente gli indici.
Il tuo problema potrebbe anche essere dovuto ad un row migration/chaining,
magari in fase di creazione della tabella hai lasciato troppo poco spazio
per le update. In quest'ultimo caso ha senso fare una copia della tabella,
svuotarla e ricopiarci dentro nuovamente tutti i record (previo coalesce del
tablespace).
Saluti,
Ender