Мы пытаемся выполнить обычные задачи обслуживания наших баз данных Oracle с помощью Perl. У меня есть пользовательский доступ к базам данных, и я делаю все свои скрипты локально в базах данных. Я хотел бы запустить инструкцию SQL в базе данных для создания файла pfile и сохранить его в папке tmp, чтобы потом просмотреть его.Выполнять SQL-запросы в Perl на базе Oracle DB без DBI?
Однако у нас нет DBI, установленного в наших системах, поэтому я не могу использовать его для подключения к БД и выполнения SQL-операторов. У меня есть доступ администратора, но мы стараемся избегать использования DBI, поскольку этот скрипт будет развернут локально на каждой машине, и мы не хотим устанавливать DBI во все наши базы данных. Есть ли какой-либо возможный способ выполнения SQL-запросов в Oracle db без использования DBI, если вы используете скрипты локально в БД?
Например, мне нужно было бы запустить этот SQL заявление для того, чтобы сгенерировать PFILE:
create pfile='/tmp/pfile.ora' from spfile
Если бы я делал это вручную, я бы су, как oracle
и затем запустить sqlplus
на для выполнения инструкции SQL. Я пытался как бы эмулировать это, помещая эти команды в здесь-документ, а затем бросить его в system()
функции:
my $result =<<EOF;
su - oracle
sqlplus/as sysdba
create pfile='/tmp/pfile.ora' from spfile;
exit
EOF
system($result);
Но это не работает, потому что она ждет команды su - oracle
для выхода перед продолжением остальная часть заявлений (это также похоже на небрежный способ делать вещи). Я также попытался сделать то же самое, создав скрипт оболочки, а затем выполнив скрипт из perl с помощью системы («sh script.sh»), но это дало те же результаты.
Есть ли способ достичь того, что я пытаюсь сделать, или я должен говорить, что у вас больше нет другого способа сделать это, кроме DBI?