SYMPTOM:
Executing a report in Strategy Developer causes the following error message to be returned:
Error:SQL Generation CompleteIndex out of range QueryEngine encountered error: Execute Query failed. Error type: Odbc error. Odbc operation attempted: SQLExecDirect. [ORA-04030: out of process memory when trying to allocate 886880 bytes (callheap, temporary memory) Error in Process method of Component: QueryEngineServer, Project 2, Job 51090, Error Code= -2147212544. System Error 0x00000000 (0): The operation completed successfully.
This error may occur when the SQL created by the report is particularly large.
CAUSE:
The "ORA-04030" error number indicates that the database process running on the database server machine does not have enough memory to complete the request.
ACTION:
The database system administrator should increase the amount of memory available to the database process, either by raising the memory quota allowed to the process, adjusting virtualization parameters (if Oracle is running in UNIX and the UNIX system uses zones or LPARs), or increasing the physical memory on the machine.
Strategy recommends running the Intelligence Server on a dedicated machine, separate from any database servers. Assuming this recommendation has been followed, the memory shortage would have occurred on a machine other than the host of the Strategy Intelligence Server; thus, the error is outside of Strategy's control. The only action possible on the Strategy side is to reduce the size or volume of reports.
If the Intelligence Server and the database are running on the same machine, this is not an optimal configuration. If it is unavoidable to run them on the same machine, virtualization in UNIX operating systems can alleviate contention between the Intelligence Server and the database by setting aside pools of total system memory for separate environments. These pools can be tuned based on the results of system profiling. This approach does not eliminate memory concerns, but it reduces the likelihood that the Intelligence Server would consume memory expected to be available for the database, or vice versa.