Error: "17004 - Error creating file. Too many open files."
"Error: 17004 - Error creating file. Too many open files."
To show the current limit of file descriptiors available to the process:
ulimit -Sn eg 1024
1. The fopen ( ) limitation, which chiefly affects the Solaris OS. 2. Insufficient <nofiles> ulimit.
To see how many queue files post may need to be open, run:
cd $SP_SYS_VARDIR/rim ls -l | wc -l
If on a Sun Server, also run:
./usr/proc/bin/pfiles -f < post Pid >
This will display how many files post is trying to open.
1. If the cause is due to fopen() 256 limitation, then lower the ulimit setting. This is more likely the cause in earlier Shareplex versions such as 4.x. In 5.x versions, Shareplex changed codes to use open() call more than fopen(), which does not have this limit.
A. Lower the soft limit for nofiles to 600 since Shareplex will try to open 1/3 of this setting for nofiles for queues.
shutdown sp_cop ulimit -n 600 start sp_cop
B. Run nscd demon on the Sun Server so that file descriptor 0-255 will be available for post to use for fopen. Change /etc/nscd.conf to enable cache for user and password. A similar program called pwgrd on HP Servers can be configured the same way.
2. If the cause is due to insufficient nofiles for the Shareplex session, increase the ulimit setting for nofiles for the Shareplex session. This is more likely the cause for Shareplex 5.1.+, especially if running Multi Threaded Processors.
A. Arrive at an approximation of transaction concurrency, by showing post or capture detail and look for High Water Mark concurrent sessions, then multiply this value by 3 to determine the number of file-descriptors used by each session to Oracle.
B. Divide the soft ulimit <nofiles> by 3 to determine the number of file-descriptors requisitioned by the queue understructure.
C. If the sum of the number of file-descriptors used for Oracle sessions and those used by the queue-logic exceeds the soft ulimit <nofiles>, increase ulimit <nofiles> to a value that covers the sum and leaves at least (64 + 10) file-descriptors available for general use.
Find out the hard limit for nofiles:
ulimit -Hn this show the maximum hard limit of files descriptors available to the process eg 2048
To increase the soft limit of # of files descriptors available to the process: