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