Under certain circumstances, the ToolTalk databases (TT_DB)can become corrupted to the extent that the rpc.ttdbserverd daemon will repeatedly crash, or simply produce many NetISAM errors.
This usually manifests itself in messages appearing in /var/adm/messages such as:
/usr/dt/bin/rpc.ttdbserverd: child status changed - core dumpedlast message repeated twenty times
or:
rpc.ttdbserverd[9010]: NetISAM: read failed
NetISAM[9010]: Fatal error: read failed - UNIX errno 11
inetd[100]: /usr/dt/bin/rpc.ttdbserverd: Child Status Changed
This condition can occur for a number of reasons such as an inconsistent installation, under rev. patches installed, or a full disk partition.
However, after such problems have been resolved, it is still necessary to clean out the old ToolTalk databases on disk.
This is best accomplished while the system is in a quiescent state (single-user mode), but if this is not possible for some reason, you can do it using the following procedure:
1) Stop the ToolTalk daemon.
Suspend the rpc.ttdbserver program with:
kill -TERM <pid-#-of-rpc.ttdbserverd>
Ensure that it has died using the command ;
ps -aef | grep rpc.ttdbserverd | grep -v grep
If it is still running, kill it using the command ;
kill -KILL <pid-#-of-rpc.ttdbserverd>
Once it is no longer running, comment out the line in /etc/inetd.conf so that it looks like:
for Solaris 2.5.1 and earlier -
#100083/1 stream rpc/tcp wait root /usr/dt/bin/rpc.ttdbserverd \
/usr/dt/bin/rpc.ttdbserverd
for Solaris 2.6 and later -
#100083/1 tli rpc/tcp wait root /usr/dt/bin/rpc.ttdbserverd \
/usr/dt/bin/rpc.ttdbserverd
and refresh inetd with the command:
kill -HUP <pid-#-of-inetd>
2) Remove all of the TT_DB directories and contents.
It is very important to clean ALL the ToolTalk databases otherwise the corruption may remain. To get a list of all possible locations where the TT_DB directories can exist for a host, use the command:
df -kF ufs | awk '{if (NR>1) print $6 "/TT_DB"}'
Don't worry if some of these don't contain a TT_DB directory; it is just a list of possible locations.
3) Remove the files within the directories that were returned using the rm command with the following format:
rm -f {mount_point}/TT_DB/*
4) Restart the daemon.
If you edited /etc/inetd.conf, then uncomment the rpc.ttdbserverd line again, and type:
kill -HUP <pid-#-of-inetd>
Otherwise, kill the rpc.ttdbserverd program with:
kill -KILL <pid-#-of-rpc.ttdbserverd>
The next request to rpc.ttdbserverd will restart the program and re-create the */TT_DB files as they are needed.
regards ph