2013-08-29 9 views
8

Devo utilizzare DBD :: Oracle per connettermi a un database Oracle che ha un trigger LOGON che verifica il mio v $ session.program al momento dell'accesso.

ho provato:

use strict; 
use warnings; 

use DBI; 

DBI->connect ('dbi:Oracle:host=<ip>;sid=<sid>', 'test', 'TEST', 
    { ora_module_name => 'My Program'}) || die DBI::errstr; 

ma questo non funzionerà, perché DBD :: Oracle non imposta v $ session.program fino a dopo la connessione.

Tuttavia, JDBC non supporta l'impostazione prima di connettersi, da:

Properties props = new Properties(); 
props.setProperty("user", username); 
props.setProperty("password", password); 
props.put("v$session.program", "My Program"); 
Class driver = Class.forName(driverClass); 

ma non sto utilizzando Java. Sto usando Perl. Eventuali suggerimenti?!

[UPDATE]

Running "strace" sul processo determina che il modulo DBD :: Oracle sta facendo il seguente:

aperto ("/ proc/self/cmdline", O_RDONLY) = 4 leggi (4, "perl \ 0test.pl \ 0", 255) = 13

Quindi sì, in teoria, potrei creare uno script (o un collegamento software) denominato "Il mio programma" e usarlo come riga di comando per eseguire il mio file. Ma questo è abbastanza alto nella scala "molto triste e per nulla simpatica". :(

+0

Consiglia di rimuovere il tag Java in quanto si tratta puramente di una connessione Perl e Oracle/proprietà/discussione di trigger. –

risposta

0

http://docs.oracle.com/cd/B19306_01/server.102/b14237/dynviews_2088.htm dice

PROGRAM  VARCHAR2(48) Operating system program name 

Significa che si dovrebbe rinominare in qualche modo il tuo binario al valore atteso

ci sono alcuni suggerimenti per fare questo:. http://www.perlmonks.org/?node_id=500714

perldoc perlvar:

$0  Contains the name of the program being executed. 

      On some (but not all) operating systems assigning to $0 
      modifies the argument area that the "ps" program sees. On some 
      platforms you may have to use special "ps" options or a 
      different "ps" to see the changes. Modifying the $0 is more 
      useful as a way of indicating the current program state than it 
      is for hiding the program you're running. 

...

+0

Contrassegna come corretto. MA ... in realtà questo non è davvero possibile. Vedi il mio auto commento qui sotto. –

Problemi correlati