Domanda

Sto avendo un problema con un semplice importatore di dati / updater che prende i dati da Informix, lo inserisce in una tabella in Oracle, e aggiorna un flag nella tabella originale. Il set up è questo

Pro*C program calls a PL/SQL procedure
The procedure 
  opens a cursor on Informix, 
  loops through each row
    insert the data into an oracle table
    commit
    update the "new data" flag in Informix (i.e. stop a re-import)
    commit

sono necessari per fermare un particolare errore Oracle I due commit (non ricordo quale, ma è perché le tabelle di essere aggiornati sono in due basi di dati e un singolo impegnano a non in grado di gestire). Questo codice funziona bene per un piccolo numero di record (5-10) nella tabella di origine, ma cade a terra quando ci sono> 1000. Il registro degli avvisi nella directory di registro di Oracle mostra un errore di "Lost connessione RPC al agente remoto". Non v'è alcun errore corrispondente nella directory di Informix, così ho il sospetto il conducente è in difetto. Stiamo utilizzando Oracle 10.2 con il driver unixODBC sul cappello rosso.

Qualcuno ha qualche idea per una soluzione alternativa o addirittura come risolvere il problema? Non sembra essere tutte le informazioni utili su questo messaggio di errore -. La maggior parte delle pagine semplicemente dire qualcosa sulla falsariga di "Non è un problema di Oracle"

È stato utile?

Soluzione

normalmente, un COMMIT chiude cursori aperti. Potrebbe essere necessario effettuare il cursore su Informix un cursore con HOLD (ESQL / C gergo - che avrebbe dovuto tradurre in ODBC). Si potrebbe ottenere un paio di righe di lavoro a causa del buffer; una singola operazione di recupero potrebbe raccogliere diversi (forse più di 10) record da Informix, e si nota solo il problema quando arriva il momento di tornare al database per di più -. quando il cursore è chiuso

Io non sono completamente a mio agio con questo come una spiegazione; UPDATE più COMMIT dovrebbe segnare il cursore come chiuso.

Supponendo che si sta utilizzando un driver ODBC Informix (al contrario di driver ODBC di qualche altro fornitore per Informix), allora si potrebbe essere in grado di eseguire il debug impostando SQLIDEBUG = 2: xyz nell'ambiente prima dell'avvio del programma. Questo dovrebbe produrre un file il cui nome inizia 'xyz _ ###' dove '###' è una certa serie di cifre, possibilmente cifre esadecimali. Questo file può quindi essere interpretato da sqliprint. Vi mostrerà le informazioni trasmesse tra l'applicazione e il server di database Informix -. E potrebbe mostrare il raggruppamento di dati inviati attraverso il filo, etc

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top