DBD :: Oracle如何在连接之前设置v $ session.program

时间:2013-08-29 06:02:16

标签: java oracle perl session

我必须使用DBD :: Oracle连接到具有LOGON触发器的Oracle数据库,该触发器在登录时验证我的v $ session.program。

我试过了:

use strict;
use warnings;

use DBI;

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

但这不起作用,因为DBD :: Oracle直到连接后才设置v $ session.program。

但是,JDBC确实支持在连接之前进行设置:

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

但我不是在使用Java。我正在使用Perl。有什么建议吗?!

[UPDATE]

在进程上运行“strace”确定DBD :: Oracle模块正在执行以下操作:

open(“/ proc / self / cmdline”,O_RDONLY)= 4 read(4,“perl \ 0test.pl \ 0”,255)= 13

所以是的,我理论上可以创建一个名为“我的程序”的脚本(或软链接),并将其用作命令行来运行我的文件。但是在“非常伤心且根本不好”的规模上,这个比率相当高。 :(

1 个答案:

答案 0 :(得分:0)

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

PROGRAM     VARCHAR2(48)    Operating system program name

这意味着你应该以某种方式将二进制文件重命名为预期值。

有一些提示可以做到这一点: 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.

...