Java stored procedure in Oracle, una buona idea?

4

Sto considerando l'utilizzo di una procedura memorizzata Java come uno shim molto piccolo per consentire la comunicazione UDP da un pacchetto PL / SQL. Oracle non fornisce un UTL_UDP in modo che corrisponda al suo UTL_TCP. C'è un XUTL_UDP di terze parti che usa Java, ma è closed source (cioè non riesco a vedere come è implementato, non che non voglio usare closed source).

Una distinzione importante tra PL / SQL e le stored procedure Java per quanto riguarda il networking: i socket PL / SQL sono chiusi quando viene chiamato dbms_session.reset_package, ma i socket Java non lo sono. Quindi, se si desidera mantenere aperto un socket per evitare i costi di rimozione / ricollegamento, non è possibile farlo nelle sessioni che utilizzano il reset_package (come le richieste HTTP mod_plsql o mod_owa).

Non ho mai usato le stored procedure Java in una capacità di produzione in Oracle. Questo è un database molto grande e molto usato, e questo particolare shim sarebbe anche molto usato (funge da ponte UDP tra un client syslog RFC 5424 PL / SQL e il demone rsyslog locale).

Mi sto aprendo per guai e orrore, o le procedure memorizzate Java sono stabili e robuste quanto basta per l'uso in 10g? Mi sto interrogando su problemi con JVM, jit, garbage collection o altre cose che potrebbero avere un impatto su un database pesantemente utilizzato.

    
posta Scott A 21.07.2011 - 06:24
fonte

2 risposte

2

Uno dei principali modi in cui Oracle è riuscito a creare tutti i nuovi componenti aggiuntivi PL \ SQL che hanno introdotto nel corso degli anni è tramite la JVM integrata, quindi penso che sia meno di un problema. Li ho usati in passato e li ho trovati non peggiori dei proc di PL \ SQL, quindi non vorresti necessariamente che facesse qualcosa che sarebbe in esecuzione tutto il tempo, ma un'operazione rapida e poi fatta va bene. Alcuni problemi sono, la JVM è spesso una generazione o 2 dietro la versione corrente, non sono sicuro di ciò nella storia recente, anche se Oracle è la fonte sia del DB che di Java. Il fatto che tu debba avvolgere la tua funzionalità in un metodo statico, quindi avvolgerlo in un blocco PL \ SQL è una specie di seccatura. A parte le "questioni religiose", non vedo nessun altro vero problema nel loro utilizzo.

    
risposta data 21.07.2011 - 17:10
fonte
0

Le stored procedure sono una buona idea?

Le stored procedure aggiungono un considerevole sovraccarico della CPU e i database Oracle tendono ad essere molto avidi per la CPU. Se finisci la CPU, verrai protetto. Pertanto, suggerisco caldamente di sviluppare benchmark realistici per vedere se stai potenzialmente mettendo il tuo database nei guai.

Supponendo che il sovraccarico nell'esecuzione della stored procedure non sarà un problema, non esiterei ad usare Java per questo. Oracle ha implementato per la prima volta le stored procedure Java in Oracle 8i (8.1.5). È stato rilasciato nel febbraio 1999, quindi la funzione è stata pubblicata per una dozzina di anni e ha avuto diversi rilasci importanti per correggere bug.

    
risposta data 21.07.2011 - 07:31
fonte

Leggi altre domande sui tag