R – Why does ActivePerl 64-bit crash when I call sqlplus from backticks

64-bitoracle10gperlwindows-server-2003

We came upon an error with a Perl script that processes data into an Oracle database. A few details:

  • Server: Windows Server 2003 R2 64-bit
  • Oracle: 10.2.0.4
  • Perl: ActivePerl 5.10 64-bit, build 1005

So the perl script connects to an Oracle database, and runs SQL to load data from another database. It runs the SQL through a sqlplus command line, like so:

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

{names were changed to protect the innocent}

Now what's weird is that last night the database the perl script runs on blue screened and restarted. When the perl script was run again this morning, same thing. We tracked it down to the above line in the perl code, which was attempting to connect to a database that had been shutdown over the weekend.

I can reproduce the error reliably on the server in question, but not on another win2003 64-bit server (same perl install).

Anyone have any ideas why the system call (when it received an ORA-12500 error) would crash the server? I haven't had a chance to look for any dump files, but so far I can't crash anything else with the same basic environment.

UPDATE: So it was determined that the two servers (one that crashed, one that didn't) were not patched to the same level, nor did they have any recent updates. So both were patched, and the tests were run on each again. The one that didn't crash before still didn't crash. The one that did still does. Thought I'd throw that out there in case anyone was thinking patches.

Best Answer

This is a pretty old question, but it sounds like it isn't just Perl that crashes, its the entire machine. Also sounds like Perl is running on the same machine as the database.

Without any more info about what is inside the sqlscript, the most likely cause is that the output is just very big and uses up all the system memory. Try to run it without the backticks, using system(), and see if it helps.