Btrieve tips

Pervasive says: Btrieve for NetWare v6.15 and Status 91 and Status 95 Issues Related to NetWare Patches

Several customers running Btrieve for NetWare v6.15 in a NetWare 3.x or 4.x environment are experiencing system wide status 95s "Session No Longer Valid" and status 91s "Server Error". Usually, applications will be running fine for some period of time, and then everyone will start getting the errors. The period of time can be anywhere from ten minutes to several days. Investigation of this problem is indicating that the problem is being caused by two of the patches Novell has released. They are called SPXTRMFX.NLM and SPXACKFX.NLM. If you are experiencing this problem, it is suggested that you remove these patches and see if the problem persists. Novell is in the process of re-examining these patches. These patches are in all the NetWare 3.x and 4.x patch sets, and have been included in several past revisions as well.

We will provide more information as it becomes available.

Les Martin <dst@c031.aone.net.au> also says that:

Even though the article only mentions Btrieve 6.15 we've found that removing the Netware patches also appears to solve the problem using Btrieve 6.1c.

This information helped us out a lot and why it is no longer on Pervasives site it beong me as I'm sure that there are other people ou there suffering the same symptoms (even though now I believe that Novell are no longer releasing these particular .NLMs).

One of our applications using btrieve 6.15, with a very large database kept returning corrupt database messages. After many weeks we found out that there is a bug in Netware 4.10 with the turbo fat becoming corrupt and causing false btrieve error messages. Btrieve sent me a novell patch for this called CLSFILFX. This corrected the problem. This patch is suppose to be included in 4.11 of Netware and is currently available from Novell. I think it is on their web site. "Tim C. Moore" <moortc@Interpath.com>

Micro US was investigating ways of converting files to Btrieve faster and they were told (by Btrieve support) that if you import data with the indexes offline and then create the indexes, that process is not benefitted by allocating a bunch of memory to the sort - in fact, it actuall slows down the sort time. The feeling seemed to be that the algorithm actually slows down when having to deal with a bunch of memory and that it's better to have about 1 meg max allocated to sort buffers at the server.

If a Btrieve file is opened from a workstation running Brequest v6.0, this connection cannot be reset from a workstation running Brequest v5.16. However, if a file is opened from a workstation running Brequest v5.16, its connection can be reset from a workstation running Brequest v5.16 or v6.0.

With BTRIEVE.NLM v6.0, a successful Btrieve operation (status = 0) that accesses the NLM must be performed from a workstation before that station can remotely reset the other station. With BTRIEVE.NLM v5.15, the reset is not dependent on the success (status !=0) of the call. If a Btrieve file is opened with Brequest v6.0 and needs to be reset remotely, run Brequest v6.0 on the remote workstation. Before the reset operation, make a successful call to BTRIEVE.NLM to establish a connection.

The new NetWare Btrieve v6.0 operation 42, to control Continuous Operations on a Btrieve file, can only be called from an NLM application, and not from a workstation application.

A number of Btrieve interfaces were changed to support 119 keys for Btrieve 6.x. These interfaces can be downloaded from Novell's NDEVREL CompuServe forum (Library 2, BTRINT.ZIP). The interfaces included are for BASIC and COBOL. They are:


The interfaces are only available on NDEVREL for those customers that have purchased the Btrieve v6.x SDK Supplement.

When you perform an Insert (2) operation on a file containing an autoincrement key, if the value of the autoincrement key is set to zero, on return from the operation, Btrieve will update the data buffer to the new assigned autoincrement value for the record. This happens regardless of what other errors might occur with the insert. For instance if you have a second key that generates a duplicate key error, the data buffer with still have the new autoinc value inserted. We experienced problems in some of our applications because we did not take this into account when writing the save routines. If your code relies upon the autoinc values it is important to zero the autoinc in the data buffer when btrieve returns a non-zero status code. This sounds like common sense, but if it is overlooked it can create problems.

When you issue an Extended Insert (40) operation to insert multiple records with a single call to Btrieve, if the data file contains an autoincrement key, the multiple records in the data buffer will be updated with the autoincrement value, as well.

If a data file is flagged "H" (hidden), NetWare Btrieve (NLM) cannot open the file. NetWare Btrieve (NLM) returns a status 12 (File Not Found), but Btrieve for DOS v5.10a is able to open data files that are hidden.

Currently, there is no solution for this inconsistency between the two Btrieve products.

Delaying Service Advertising Protocol (SAP) packets for more than one minute causes all file servers on the other opposite side of a CISCO router from the Btrieve NLM to delete the NLM from the bindery, producing a status 20 or a status 95.

CISCO routers can be configured to delay SAP packets by setting the NOVELL OUT-SAP-DELAY parameter in the port configuration setup. The LENGTH parameter is measured in milliseconds. To prevent the Btrieve NLM from being deleted from the bindery, be sure to set this parameter to a value that will not delay SAP packets too long.

Btrieve 6.x files that have a page size of 512K cannot exceed two gigabytes in file size. This limit results from the way Btrieve 6.x files use PAT pages to access the pages of the Btrieve file and is calculated as follows:

  128 (# of pages that a PAT can reference)
* 32K (# of PAT pages a Btrieve file can contain)
* 512 (the physical size of the Btrieve page)
     2 Gigabytes total file size

If you need to make a larger file, use a larger page size. Files with any other page size can grow up to four gigabytes in size.

The following error messages may be displayed when running the SAVE or RECOVER options of BUTIL.NLM v6.10x:

BUTIL-6.10-53: Btrieve error 59 occurred for file or command butiltmp.btr.
BUTIL-6.10-72: BUTIL has recovered 0 records.
BUTIL-6.10-9: The command did not complete due to an unrecoverable error.

These messages result whenever BUTIL tries to create a file called BUTILTMP.BTR in the same directory as the Btrieve file to be saved or recovered, and this file already exists in the directory.

To avoid these messages, delete or rename the BUTILTMP.BTR file before performing the BUTIL -SAVE or BUTIL -RECOVER. BUTILTMP.BTR is a temporary file created by BUTIL so that it can check if the current Btrieve engine running on the server supports "chunk" operations.

Copyright © Madis Kaal 2000-