ContentsIndexPreviousNext

B.5.1 Technical Specifications

This section provides additional information about Microsoft SQL Server features, and describes the system's limits and ranges.

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 need to 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:

4gl90003.gif the DBID,

4gl90003.gif the Table ID,

4gl90003.gif the process ID (PID) of the process that has the table open,

4gl90003.gif the Open Mode (Input, Output, I/O, or Extend),

4gl90003.gif whether Multiple records can be locked,

4gl90003.gif whether the file can be open for I/O by any other users,

4gl90003.gif whether the file can be open at all by any other users, and

4gl90003.gif whether Mass Update was specified in the open.

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, then 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-VISION-LOCKS-FILE.