2013-08-29 3 views
8

Je dois utiliser DBD :: Oracle pour me connecter à une base de données Oracle qui a un déclencheur LOGON qui vérifie mon programme v $ session.program au moment de la connexion.

J'ai essayé:

use strict; 
use warnings; 

use DBI; 

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

mais cela ne fonctionne pas, parce que DBD :: Oracle ne définit pas v session.program $ jusqu'à ce que la connexion APRÈS.

Cependant, JDBC ne supporte la mise en avant se connecter, par:

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

Mais je ne suis pas en Java. J'utilise Perl. Aucune suggestion?!

[UPDATE]

course "strace" sur le processus détermine que le module DBD :: Oracle fait ce qui suit:

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

Alors oui, je pourrais en théorie créer un script (ou un lien logiciel) nommé "Mon programme" et l'utiliser comme ligne de commande pour exécuter mon fichier. Mais ce taux est assez élevé sur l'échelle «très triste et pas gentil du tout». :(

+0

Nous vous recommandons de supprimer le tag Java car il s'agit purement d'une discussion Perl et Oracle sur les connexions/propriétés/trigger. –

Répondre

0

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

PROGRAM  VARCHAR2(48) Operating system program name 

Cela signifie que vous devez renommer en quelque sorte votre binaire à la valeur attendue

Il y a quelques conseils pour le faire. 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

Marquage correct. MAIS ... en fait ce n'est pas vraiment possible. Voir mon commentaire personnel ci-dessous. –

Questions connexes