ContentsIndexPreviousNext

B.6.1 Acu4GL for Microsoft SQL Server: Table Locking

By default, Microsoft SQL Server doesn't support the type of record and table locking that COBOL expects. For this reason, the Acu4GL for Microsoft SQL Server product implements its own locking method. This is accomplished with the addition of two tables to a database. You choose which database will hold these tables during installation of the Acu4GL for Microsoft SQL Server product.

Before using the locking tables, you must execute the included ms_inst.sql script. (See the installation instructions you used from this User's Guide for the exact procedure. They can be located in the table of contents.) If you don't perform this step, the first time you try to execute a COBOL program that opens a Microsoft SQL Server table, you will receive error 9D,11, "ACUCOBOL Lock Table Incorrect".

The first locking table is called AcuLocks; it holds the record locks. The columns in this table are the DBID, the Table ID, the Process ID of the process holding the lock, and the primary key of the record that is locked. There is a unique index on the DBID, the Table ID, and the Key Value, so that inserts into this table are automatically rejected if another user holds a lock on the row in question. This also gives the Database Administrator the information needed to determine who has locks set, and whether the user in question still has a connection to the server.

The second locking table is called AcuOpenTables; it holds information about open tables.

The columns in this table are:

There are no indices on this table, but there is a trigger, which will automatically reject opens that are not allowed based on other users' open modes.

By using these lock tables, the Acu4GL for Microsoft SQL Server product is able to support all the types of locking ordinarily supported by ACUCOBOL-GT. No special runtime configuration variables are required.

This method of locking is all that is needed if no applications other than COBOL programs are going to be using the Acu4GL for Microsoft SQL Server product. But if your site has other applications that access the Microsoft SQL Server databases, you need to use a method of locking that is inherent to Microsoft SQL Server.

Another method of locking that Microsoft SQL Server supports internally is the result of time stamping and the use of BROWSE MODE (see the discussion of BROWSE MODE in the Microsoft SQL Server Commands Reference Manual). If a table has a time stamp column, the Acu4GL for Microsoft SQL Server product will use browse mode. This will allow the server to detect whether another application has modified a record while an ACUCOBOL-GT application has had it locked.

For information about alternative locking methods, see the configuration variables A_MSSQL_NATIVE_LOCK_TIMEOUT and A_MSSQL_USE_DROPDOWN_QUERIES.