【发布时间】:2013-11-17 23:33:25
【问题描述】:
我们正在尝试使用 Perl 对我们的 Oracle 数据库执行日常维护任务。我拥有对数据库的用户访问权限,并且正在数据库上本地执行所有脚本。我想在数据库上运行一条 SQL 语句来生成一个 pfile 并将它保存到 tmp 文件夹,以便我以后可以查看它。
但是,我们的系统上没有安装 DBI,因此我无法使用它来连接数据库并执行 SQL 语句。我有管理员权限,但我们试图避免使用 DBI,因为这个脚本将在每台机器上本地部署,我们不想在所有数据库上安装 DBI。如果您在数据库上本地运行脚本,是否有任何方法可以在不使用 DBI 的情况下在 Oracle 数据库上执行 SQL 语句?
例如,我需要运行这个 SQL 语句来生成一个 pfile:
create pfile='/tmp/pfile.ora' from spfile
如果我手动执行此操作,我将不得不 su 为 oracle,然后在机器上启动 sqlplus 以执行 SQL 语句。我试图通过将这些命令放入 here-doc 然后将其放入 system() 函数中来模拟这一点:
my $result =<<EOF;
su - oracle
sqlplus / as sysdba
create pfile='/tmp/pfile.ora' from spfile;
exit
EOF
system($result);
但这不起作用,因为它会等待su - oracle 命令退出,然后再继续执行其余语句(这也感觉像是一种草率的做事方式)。我也尝试通过创建一个 shell 脚本然后使用 system("sh script.sh") 从 perl 中执行该脚本来做同样的事情,但这产生了相同的结果。
有什么方法可以实现我想要做的事情,还是应该告诉上级,除了 DBI 没有其他方法可以做到这一点?
【问题讨论】: