Почему ActivePerl 64-битный сбой, когда я вызываю sqlplus с обратными метками? - PullRequest
3 голосов
/ 19 января 2010

Мы столкнулись с ошибкой в ​​сценарии Perl, который обрабатывает данные в базе данных Oracle. Несколько деталей:

  • Сервер: Windows Server 2003 R2, 64-разрядная
  • Oracle: 10.2.0.4
  • Perl: ActivePerl 5.10 64-bit, сборка 1005

Таким образом, скрипт perl подключается к базе данных Oracle и запускает SQL для загрузки данных из другой базы данных. Он запускает SQL через командную строку sqlplus, например:

$resultString = `sqlplus $connectString \@sqlScript.sql $var1 $var2`;

{имена были изменены, чтобы защитить невинных}

Теперь странно то, что прошлой ночью база данных, на которой скрипт perl запускался на синем экране, перезапускалась. Когда сценарий perl был запущен снова этим утром, то же самое. Мы отследили его до приведенной выше строки в коде Perl, который пытался подключиться к базе данных, которая была закрыта в выходные дни.

Я могу надежно воспроизвести ошибку на рассматриваемом сервере, но не на другом 64-разрядном сервере win2003 (такая же установка perl).

У кого-нибудь есть идеи, почему системный вызов (когда он получил ошибку ORA-12500) может привести к сбою сервера? У меня не было возможности искать какие-либо файлы дампа, но пока я не могу вывести из строя ничего другого в той же базовой среде.

ОБНОВЛЕНИЕ: Таким образом, было определено, что два сервера (один из которых вышел из строя, а другой - нет) не были исправлены на одном уровне и не имели никаких последних обновлений. Так что оба были исправлены, и тесты были запущены на каждом снова. Тот, который не разбился раньше, все еще не разбился. Тот, который сделал еще. Думал, что я это выброшу, если кто-то думает, что заплатки.

1 Ответ

0 голосов
/ 11 июля 2013

Это довольно старый вопрос, но звучит так, будто не только Perl падает, но и вся машина. Также звучит так, как будто Perl работает на той же машине, что и база данных.

Без дополнительной информации о том, что находится внутри sqlscript, наиболее вероятной причиной является то, что вывод просто очень большой и использует всю системную память. Попробуйте запустить его без обратных галочек, используя system (), и посмотрите, поможет ли это.

...