我必须使用 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。有什么建议么?!
[更新]
在进程上运行“strace”确定 DBD::Oracle 模块正在执行以下操作:
open("/proc/self/cmdline", O_RDONLY) = 4 读取(4, "perl\0test.pl\0", 255) = 13
所以是的,理论上我可以创建一个名为“我的程序”的脚本(或软链接)并将其用作命令行来运行我的文件。但这在“非常悲伤而且一点也不好”的等级上相当高。:(