Error: TRANSACTION: Unable to open or index mstransaction table (MSTPUT)

Solution or Workaround

What action should be taken when the LIBRARIAN TRANSACTION command returns one of the following messages:

"Index file is obsolete
Unable to index mstransaction (MSTPUT)
Unable to open mstransaction table
Unable to mark map sections
Transaction not set."


This may occur due to multiple reasons.

1. NFS file locking is not turned on by the existence of an empty file named $ARCHOME/sysgen/filelocking. Unless NFS filelocking is turned on, the MSTRANSACTION and TRANSACTION file can be corrupted by two processes simultaneously writing to one of these MONITOR directory files or an INFO arc.dir file.

2. You do not have read/write permission to the .../DATABASE/MONITOR directory and to every file in the .../DATABASE/MONITOR directory. Without read/write permission the MSTRANSACTION and TRANSACTION files cannot be properly processed.

3. Other people beginning, setting and ending transactions do not share the same group file permissions as the last person to end a transaction. When a transaction is ended, the MSTRANSACTION files are re-indexed. This process creates new MSTRANSACTION index files. The new index files will be owned by the person ending the transaction and assigned that person's primary group. Anyone else not belonging to this primary group will not have group 'rw' access to the MSTRANSACTION index files. Consequently next time they execute the LIBRARIAN TRANSACTION BEGIN command they will be denied read or write access. This lack of read/write permission causes the (MSTPUT) error to occur.

4. If too many users are simultaneously updating library data, the ARC LIBRARIAN transaction processing capacity can be exceeded.


Make sure a file named $ARCHOME/sysgen/filelocking exists.

Make sure everyone running the LIBRARIAN TRANSACTION command has "umask 002" set in their .cshrc files. Without this, editing MONITOR directory files may change permissions to the MONITOR files. Typing the command 'umask' at the UNIX prompt will display the current userid's umask setting. Check the 'umask' setting at the Arc: prompt by doing this.

Arc: umask

Makes sure everyone running the LIBRARIAN TRANSACTION command has read and write access to the MONITOR directory and all it's files. Use the UNIX 'ls -lg' command to check permissions and use the UNIX 'chmod' command to change them.

Make anyone able to end transactions have a primary operating system access group that others doing transactional processing also belong too. This may entail setting up dummy logins for people with LIBRARIAN MANAGER and ADMINISTRATOR access. The dummy logins would all have a comman primary operating system access group to which others with with LIBRARIAN OPERATOR access also belong.

If you are simply doing too much simultaneous editing of library data, minimize the selection of map sections that are simultaneously checked out from the same tile. Consider putting the data in multiple LIBRARIAN libraries. Consider scheduling staff activity to minimize simultaneous processing. Or consider converting the map library to an ArcStorm library to take advantage of the robust client/server ArcStorm transactional processing.


To re-establish a good set of MONITOR transaction files, use the LIBRARIAN MAKESTANDARD COMMAND and then use the LIBRARIAN MAKE TRANSACTIONAL command. Be sure no one is using the library while you do this. Be sure to quit LIBRARIAN after running each command. Making the library standard will destroy all the library's existing transactional files. You may want to back up the MONITOR directory first to help reestablish the transactional environment.

NSF file locking in discussed in the 7.x ArcDoc. See Master Contents. Data management, > Using map libraries, > Using related tables and distributed files, > File locking and NFS for the UNIX network.

The "index file is obsolete" message is a warning and can be ignored.

The library MONITOR directory location is .../database/monitor. The library's DATABASE directory location is listed on the LIBRARIES INFO file located in the $ARCHOME/tables directory. Do the following to list the DATABASE directory location.

UNIX: cd $ARCHOME/tables
UNIX: ../programs/info