activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Hatta <rmi_j...@yahoo.com>
Subject Re: maximum open cursors exceeded
Date Wed, 07 May 2008 01:29:15 GMT

Hi Rob,

I m thankful for your reply and the effort put up by yourself to get this
bug fixed.

I have already downloaded and run the standalone version of 5.2 snapshot on
windows environment.

After leaving it open for one night since 6 May 2008, I m glad to see that
its not producing the same problem anymore.

For validity purpose I will leave it on again for today. (its been running
more than 18 hours now).

Again, I appreciate the effort given. Thanks.

Regards
Hatta



rajdavies wrote:
> 
> Could you try  the latest SNAPSHOT - I'm hoping this could be fixed by
> https://issues.apache.org/activemq/browse/AMQ-1702
> 
> cheers,
> 
> Rob
> 
> http://open.iona.com/ -Enterprise Open Integration
> http://rajdavies.blogspot.com/
> 
> 
> On 5 May 2008, at 03:58, Hatta wrote:
> 
>>
>> Hi again,
>>
>> To the respected ActiveMQ Team, appreciate your kind response on  
>> this matter
>> as I have performed the action based on the following advise given by
>> Oracle.
>>
>> The result was the lock did not occurred for some time. But after 5  
>> to 6
>> hours, the message is getting displayed again.
>>
>> The message is the same as the previous posting.
>>
>> I sincerely appreciate that the ActiveMQ team would look into this  
>> matter.
>>
>> Regards
>> Hatta
>>
>>
>>
>>
>> Hatta wrote:
>>>
>>> Hi again,
>>>
>>> Below is the response from Oracle Meta-link regarding the issue with
>>> maximum open cursors exceeded:
>>>
>>> WORKAROUNDS FOR ORA-01000
>>>
>>> Solution Description:
>>> =====================
>>>
>>> There are two ways to workaround this ORA-01000 error. You can tune  
>>> cursor
>>> usage at the database level and at the application level.
>>>
>>> 1. Tuning at the DATABASE LEVEL
>>>
>>> There is a parameter you can set in the init.ora that determines the
>>> number of
>>> cursors a user can open in a session: OPEN_CURSORS.
>>>
>>> OPEN_CURSORS by default is 50 and usually, this is not high enough.  
>>> The
>>> highest
>>> value you can set this parameter to is operating system dependant.  
>>> For
>>> more
>>> information, please refer to Oracle7 Server Administrator's Guide,
>>> Appendix A.
>>>
>>> To solve the ORA-01000 error, set the OPEN_CURSORS to a higher number
>>> (such as
>>> 255). You may need to set it to the maximum of the operating system  
>>> limit.
>>>
>>> Consequences to changing this parameter:
>>>
>>> This parameter does not effect performance in any way but Oracle  
>>> will now
>>> need
>>> a little more memory to store the cursors.
>>>
>>>
>>> 2. Tuning at the APPLICATION LEVEL
>>>
>>> There are three parameters that affect handling cursors at the  
>>> application
>>> level: RELEASE_CURSOR, HOLD_CURSOR, MAXOPENCURSORS. You should set  
>>> these
>>> parameters at the precompiler level.
>>>
>>> HOLD_CURSOR by default is NO. This means that after Oracle executes  
>>> a SQL
>>> statement the links to the cursor cache, memory, and parse locks are
>>> released
>>> and marked for reuse.  For more details refer to Programmer's Guide  
>>> to
>>> Precompilers Version 1.6 p.6-16.
>>>
>>> RELEASE_CURSOR by default is NO. This means that after Oracle  
>>> executes a
>>> SQL
>>> statement, the links to the cursor cache is maintained and not  
>>> released.
>>> For
>>> more information, refer to Programmer's Guide to Precompilers  
>>> Version 1.6
>>> p.6-26.
>>>
>>> These two parameters must be used in conjunction for them to be  
>>> effective.
>>> Here is a table that shows how settings of the two parameters  
>>> interact.
>>>
>>>  	----------------------------------------------------
>>> 	|HOLD_CURSOR | RELEASE_CURSOR | LINKS ARE...       |
>>> 	----------------------------------------------------
>>> 	| NO	     | not applicable | marked as reusable |
>>> 	| YES	     | NO	      | maintained	   |
>>> 	| NO	     | YES 	      | removed immediately|
>>> 	| n/a	     | YES	      | removed immediately|
>>> 	----------------------------------------------------	
>>>
>>> To resolve the ORA-01000 error, you should set HOLD_CURSOR=NO and
>>> RELEASE_CURSOR=YES. This way, after the cursors are used, Oracle  
>>> will free
>>> up
>>> the memory for other cursors.
>>>
>>> Consequences of setting these parameters HOLD_CURSOR=NO and
>>> RELEASE_CURSOR=YES:
>>>
>>> This will cause Oracle to release the links and locks for each cursor
>>> after the
>>> SQL statement is executed. This means that the next time Oracle  
>>> needs to
>>> issue
>>> the same SQL statement, Oracle will have to reparse the statement,  
>>> and
>>> rebuild
>>> the execution plan. This will cause some performance overhead.
>>>
>>> MAXOPENCURSORS by default is 10. This number indicates the concurrent
>>> number
>>> of open cursors that the precompiler tries to keep cached. It  
>>> specifies
>>> the
>>> initial size of the cursor cache. The limit of this parameter is
>>> determined by
>>> what you set OPEN_CURSORS to. Here is the formula:
>>>
>>> 	MAXOPENCURSORS + 6 <= OPEN_CURSORS
>>>   		6 is the overhead cursors Oracle needs.
>>>
>>> Here is a calculation of the maximum number of cursors in use:
>>> 	SQL statement cursors
>>> 	PL/SQL parent cursors
>>> 	PL/SQL child cursors
>>>       +6 cursors for overhead
>>> 	-----------------------
>>> 	sum of cursors in use.
>>>
>>> Appreciate a response from the ActiveMQ Team.
>>>
>>> Regards
>>> Hatta
>>>
>>>
>>>
>>>
>>>
>>>
>>> Hatta wrote:
>>>>
>>>> Hi again,
>>>>
>>>> There are a few items which I would like to add on this topic as  
>>>> well,
>>>>
>>>> 1. I have referred to the Oracle Forums and the general statement  
>>>> given
>>>> was to ensure that the application client whom is accessing Oracle
>>>> Database to check their open cursor statement.
>>>>
>>>> If there exist codes where the open cursor statements are not  
>>>> closed,
>>>> then it should be considered to correct that code.
>>>>
>>>> From the Oracle point of view, is by increasing the open cursor  
>>>> parameter
>>>> in the database to a certain amount. This would definitely hide the
>>>> issue.
>>>>
>>>> But the flaw of this approach is that if the issue occured again,  
>>>> then
>>>> what is the final solution?
>>>>
>>>> Appreciate the ActiveMQ technical team to respond to this matter.
>>>>
>>>> Thanks in advance
>>>>
>>>> Hatta
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Hatta wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I m using ActiveMQ 5.1 SNAPSHOT version. I have already  
>>>>> experienced the
>>>>> same problem in ActiveMQ 5.0.0 Production release.
>>>>>
>>>>> ActiveMQ 5.1 has been installed on a Linux OS : kernel version  
>>>>> 2.6 and
>>>>> its currently connecting to an Oracle 10 RAC (Real Application  
>>>>> Cluster).
>>>>>
>>>>> After a few hours of observation and no activity between my  
>>>>> application
>>>>> and ActiveMQ 5.1, the following was noticed:
>>>>>
>>>>> ERROR DefaultDatabaseLocker          - Failed to update database  
>>>>> lock:
>>>>> java.sql.SQLException: ORA-01000: maximum open cursors exceeded
>>>>>
>>>>>
>>>>>
>>>>> java.sql.SQLException: ORA-01000: maximum open cursors exceeded
>>>>>
>>>>>
>>>>>
>>>>>        at
>>>>> oracle 
>>>>> .jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java: 
>>>>> 112)
>>>>>
>>>>>        at  
>>>>> oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
>>>>>
>>>>>        at  
>>>>> oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
>>>>>
>>>>>        at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:743)
>>>>>
>>>>>        at
>>>>> oracle 
>>>>> .jdbc 
>>>>> .driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:213)
>>>>>
>>>>>        at
>>>>> oracle 
>>>>> .jdbc 
>>>>> .driver 
>>>>> .T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:952)
>>>>>
>>>>>        at
>>>>> oracle 
>>>>> .jdbc 
>>>>> .driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java: 
>>>>> 1160)
>>>>>
>>>>>        at
>>>>> oracle 
>>>>> .jdbc 
>>>>> .driver 
>>>>> .OraclePreparedStatement 
>>>>> .executeInternal(OraclePreparedStatement.java:3285)
>>>>>
>>>>>        at
>>>>> oracle 
>>>>> .jdbc 
>>>>> .driver 
>>>>> .OraclePreparedStatement 
>>>>> .executeUpdate(OraclePreparedStatement.java:3368)
>>>>>
>>>>>        at
>>>>> org 
>>>>> .apache 
>>>>> .commons 
>>>>> .dbcp 
>>>>> .DelegatingPreparedStatement 
>>>>> .executeUpdate(DelegatingPreparedStatement.java:94)
>>>>>
>>>>>        at
>>>>> org 
>>>>> .apache 
>>>>> .activemq 
>>>>> .store 
>>>>> .jdbc.DefaultDatabaseLocker.keepAlive(DefaultDatabaseLocker.java: 
>>>>> 103)
>>>>>
>>>>>        at
>>>>> org 
>>>>> .apache 
>>>>> .activemq 
>>>>> .store 
>>>>> .jdbc 
>>>>> .JDBCPersistenceAdapter 
>>>>> .databaseLockKeepAlive(JDBCPersistenceAdapter.java:458)
>>>>>
>>>>>        at
>>>>> org.apache.activemq.store.jdbc.JDBCPersistenceAdapter 
>>>>> $3.run(JDBCPersistenceAdapter.java:260)
>>>>>
>>>>>        at
>>>>> java.util.concurrent.Executors 
>>>>> $RunnableAdapter.call(Executors.java:417)
>>>>>
>>>>>        at
>>>>> java.util.concurrent.FutureTask 
>>>>> $Sync.innerRunAndReset(FutureTask.java:280)
>>>>>
>>>>>        at
>>>>> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:135)
>>>>>
>>>>>        at
>>>>> java.util.concurrent.ScheduledThreadPoolExecutor 
>>>>> $ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java: 
>>>>> 65)
>>>>>
>>>>>        at
>>>>> java.util.concurrent.ScheduledThreadPoolExecutor 
>>>>> $ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java: 
>>>>> 142)
>>>>>
>>>>>        at
>>>>> java.util.concurrent.ScheduledThreadPoolExecutor 
>>>>> $ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:166)
>>>>>
>>>>>        at
>>>>> java.util.concurrent.ThreadPoolExecutor 
>>>>> $Worker.runTask(ThreadPoolExecutor.java:650)
>>>>>
>>>>>        at
>>>>> java.util.concurrent.ThreadPoolExecutor 
>>>>> $Worker.run(ThreadPoolExecutor.java:675)
>>>>>
>>>>>        at java.lang.Thread.run(Thread.java:595)
>>>>>
>>>>>
>>>>> However, My application is still able to send and receive jms  
>>>>> messages
>>>>> from the broker. But this error message is disturbing
>>>>> and may give an impression that there something wrong with the  
>>>>> server
>>>>> communication with the DB.
>>>>>
>>>>> Appreciate a response to this matter.
>>>>>
>>>>> Regards
>>>>> Hatta
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>
>> -- 
>> View this message in context:
>> http://www.nabble.com/maximum-open-cursors-exceeded-tp16834950s2354p17053893.html
>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/maximum-open-cursors-exceeded-tp16834950s2354p17093701.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Mime
View raw message