Btrieve Error 80 In Deferred Processing
Btrieve Error 080 on Order Header File
This has been happening for the last 30 days off and on. What might cause this to happen?
A - This is what Btrieve Error 80 means based on PSQL documentation:
80: Btrieve encountered a record-level conflict.
Btrieve did not perform the Update or Delete operation
because of a record-level conflict. For example, station
A reads a record, station B reads the same record and
updates it, and then station A attempts to update the
record. The application should reread the record prior to
resending an Update or Delete operation. Alternatively,
the application can employ record locks to avoid conflicts.
Since you are receiving this error message when Deferred Processing runs at night, it is unlikely another process is competing for the same record. Based on our past experience, the likely reason is there are two Deferred Processing tasks running at the same time.
Running Multiple Deferred Processing Tasks at The Same Time
Elliott does not prevent two Deferred Processing tasks from running at the same time. A valid reason for this scenario is to speed up Deferred Processing. In that case, you need to be very careful by specifying which deferred batch will run for different deferred processing tasks, so two deferred processing tasks do not compete for the same deferred queue. For example, you segregate your deferred list into two different queues by using batch code BATCH-1 and BATCH-2. One deferred task runs BATCH-1, and one deferred task runs BATCH-2. This way two deferred tasks do not compete with one another. If you fail to do so, and two deferred tasks are running on the same queue, this will likely cause the problem. Btrieve Error 80 is one kind of message that may show up in that case.
How can you tell if you have two deferred processing tasks running at the same time?
First of all, you can go to all the desktops and make sure there is only one deferred processing task running in your whole organization.
If this is not practical due to the fact that you are working remotely or if you don't have access to all the desktops in the office, you could go to the Elliott Server's Console (the PSQL server), and bring up Server Manager by right clicking on "My Computer" and choosing "Manage." Then go to Roles -> File Services -> Share and Storage Management, and choose "Manage Open Files..." Be aware that the above procedure applies to the Windows 2008 Server. For a different server OS, the procedure may be different to bring up the "Manage Open Files..." window.
In the "Manage Open Files" window, scroll to the folder where you have Elliott installed. For Elliott V7, find the EL700DP.EXE in the Elliott root folder. For Elliott V8, find the EL800DP.EXE in the Elliott Bin folder. See the sample screen below:
In the above example, you can see that EL700DP.EXE is being referenced twice by user ADMIN. EL700DP.EXE is the V7 Elliott Deferred Processing executable. This implies there are two copies of Elliott Deferred Processing running, which can cause the Btrieve Error 80.
To find out which machines the two copies of Deferred Processing are running on, you can go to Share and Storage Management and choose "Manage Sessions...". The following sample screen will show up:
As shown in this sample screen, you can see that the user ADMIN is running from two computers. Go to the machine that should not be running the Deferred Processing task and close it accordingly.