Ho 471 file per un totale di circa 100 GB. I file sono "\ t" separata, con i dati delle transazioni nel seguente formato:Oracle 11gR2 che carica più file: sqlldr o tabelle esterne?
char(10) not null,
char(8) not null,
char(1) not null,
char(4) not null,
number not null,
char(1) not null,
char(1) not null,
char(1) not null,
number not null
L'ordine delle operazioni nei file è importante e deve essere preservato, idealmente con un id chiave primaria. Inizialmente, ho caricato questi file con sqlldr ma ci vuole molto tempo. Recentemente ho imparato a conoscere i tavoli esterni. Da una prospettiva strategica, quale metodo è migliore? Come funziona il tavolo esterno? Grazie.
* Come funziona la tabella esterna * Questo è completamente documentato nel manuale: http://docs.oracle.com/cd/E11882_01/server.112/e22490/et_concepts.htm –
perché sqlldr richiederebbe molto tempo? Prova il carico diretto e assicurati che i tuoi dati siano sulla stessa sottorete locale o SAN (o fondamentalmente, non spinga i dati attraverso piccoli tubi attraverso la rete, come un server in NJ che preme su un db in CA). Alcune restrizioni per il carico diretto, ma MOLTO più veloce. – tbone
Ho calcolato che sqlldr sta caricando ad una velocità di 85 milioni di righe all'ora. Basato sul parlare con un ragazzo, questo sembra ragionevole, ma non è un esperto. C'è un commit ogni 300k righe. Una sequenza oracle genera una chiave primaria sull'inserto. L'ordine dei dati è importante e la chiave conserva l'ordine. I file si trovano su un'unità sullo stesso server del database. Si può ottenere un tasso migliore? –