Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought






















                    VAX_Rdb/VMS_________________________________________
                    Release Notes for Version 4.1A


                    June 1993



                    This document contains the Release Notes for Rdb/VMS
                    Version 4.1A and describes the problems fixed in this
                    release, additional known problems not fixed, and
                    additional restrictions.







                    Operating System:             VMS

                    Software Version:             Rdb/VMS Version 4.1A






                    Digital Equipment Corporation
                    Maynard, Massachusetts












          ________________________________________________________________

          The information in this document is subject to change
          without notice and should not be construed as a commitment
          by Digital Equipment Corporation. Digital Equipment
          Corporation assumes no responsibility for any errors that
          may appear in this document.

          The software described in this document is furnished under
          a license and may be used or copied only in accordance with
          the terms of such license.

          No responsibility is assumed for the use or reliability
          of software on equipment that is not supplied by Digital
          Equipment Corporation or its affiliated companies.

          Restricted Rights: Use, duplication, or disclosure by the
          U.S. Government is subject to restrictions as set forth in
          subparagraph (c)(1)(ii)  of the Rights in Technical Data
          and Computer Software clause at DFARS 252.227-7013.

          © Digital Equipment Corporation 1993.

          All Rights Reserved.

          The following are trademarks of Digital Equipment
          Corporation: CDD/Plus, CDD/Repository, DEC, DECtrace,
          Rdb/VMS, VAX, VAX DOCUMENT, VAX Pascal, VAXcluster, VMS,
          and the DIGITAL logo.

          This document was prepared using VAX DOCUMENT, Version 2.1.

































  _________________________________________________________________

                                                           Contents



  Preface...................................................    vii

  1  Software Problems Fixed

        1.1   Installation Did Not Check for Existing UIC...    1-1
        1.2   RMU/BACKUP/AFTER/QUIET_POINT Corrupted .AIJ
              Backup File...................................    1-1
        1.3   .AIJ File Could Contain Duplicate Data
              Records.......................................    1-1
        1.4   Deadlocks on Backup of .AIJ Files.............    1-2
        1.5   RMU/BACKUP/AFTER_JOURNAL Failed Trying to
              Truncate the .AIJ File........................    1-2
        1.6   A Self-Insert Query with Mapped Columns
              Incorrectly Stored NULL Values................    1-3
        1.7   Bugcheck at PSIISCAN$END_SCAN + 26 After Lock
              Exceptions....................................    1-3
        1.8   Bugcheck at UTIO$TRNLNM + 0000008a............    1-3
        1.9   Bugcheck at RDMS$$INSERT_SYMBOL + 0BC and
              Other Offsets.................................    1-3
        1.10  Bugcheck at RDMS$$EXE_OPEN + 63 on Query......    1-4
        1.11  Bugcheck When Monitor Generated Section Name
              That Was Not Unique...........................    1-4
        1.12  Memory Corruption Sometimes Caused Error......    1-5
        1.13  Metadata Corruption from Committing After
              Failed ALTER, CREATE, or DROP Statements......    1-5
        1.14  Possible Access Violation with SET
              TRANSACTION...................................    1-5
        1.15  RDB$REMOTE_BUFFER_SIZE Was Translated Only
              from the Process Table........................    1-5
        1.16  Failure to Delete or Update Existing
              Records.......................................    1-6
        1.17  Update Attempt Generated Incorrect
              RDB-E-READ_ONLY_REL Error.....................    1-6

                                                                iii
































































          1.18  RDML Generated Incorrect RDML-E-READ_ONLY
                Error.........................................    1-6
          1.19  Unnecessary Arithmetic Exceptions for Divide
                and Multiply Operations.......................    1-7
          1.20  Importing Large Databases with Many Storage
                Areas.........................................    1-7
          1.21  Trailing Spaces in Selection Value Caused
                Incorrect Data Retrieval......................    1-8
          1.22  RDML Generated Incorrect RDML-W-JOIN_ATTRIBUTE
                Error.........................................    1-8
          1.23  Constraints Checked Only for Database First
                Declared......................................    1-9
          1.24  Possible Database Corruption from Fragmented
                Segmented String Records......................    1-9
          1.25  Monitor Exhausted Virtual Memory..............   1-10
          1.26  Bugcheck at KOD$UNBIND + 133 Affected
                Detaching from Database.......................   1-10
          1.27  Undeleted Mailbox Channels Could Cause Server
                Failure.......................................   1-10
          1.28  Monitor Terminated Abnormally When Closing a
                Database......................................   1-11
          1.29  Segmented Index Search Returned Incorrect
                Results.......................................   1-11
          1.30  Corrupted Segmented Strings...................   1-11
          1.31  RMU/RESTORE/ONLY_ROOT Incorrectly Updated the
                Root File.....................................   1-12
          1.32  Intermittent Access Violation Showed as an
                Error Condition...............................   1-12
          1.33  RMU/VERIFY/ALL Erroneously Flagged an Error...   1-12
          1.34  RMU/VERIFY/ALL Exceeded Quota.................   1-12
          1.35  RMU/VERIFY Bugchecked When Displaying Certain
                Messages......................................   1-12
          1.36  Incorrect Results Were Returned If First Value
                Was NULL......................................   1-13
          1.37  VERIFY Command Mishandled Root Files..........   1-13
          1.38  Join Query with Complex WHERE Clause
                Containing OR Predicate Returned Wrong
                Result........................................   1-13
          1.39  SQL/Services TCP/IP Support Did Not Work for
                Messages That Exceeded the Client Write Buffer
                Size..........................................   1-13
          1.40  Remote Start Transactions.....................   1-14



    iv










              1.41  B-Tree Corruption Resulted from Reorganizing
                    Sorted Indexes................................   1-14
              1.42  Wrong Results Were Returned for Some Retrieval
                    Strategies....................................   1-14
              1.43  Optimizer Chose Wrong Index for DELETE........   1-14
              1.44  Transaction Parameter Block Error When
                    DECtrace Was Running..........................   1-14
              1.45  Wrong Results Were Returned After Cursor Was
                    Opened........................................   1-15
              1.46  Optimizer Bugchecked at RDMS$$EXE_LEAF+453....   1-15
              1.47  SQL UPDATE ONLY Clause Caused Excessive
                    Journal Growth................................   1-15
              1.48  CURRENT_TIMESTAMP Did Not Return Actual
                    Current Time..................................   1-16
              1.49  LINK-E-SHRPSCLNG Errors Using SQL$USER.OLB....   1-16
              1.50  Incorrect Values During Index-Only Retrieval
                    Used Mapped Indexes...........................   1-17
              1.51  IMPORT Statement Resulted in an Access
                    Violation.....................................   1-18
              1.52  SELECT <correlation>.* FROM Table Failed with
                    Error.........................................   1-18
              1.53  Distributed Boolean Queries Did Not Always
                    Return Rows...................................   1-19
              1.54  Rows Not Sorted Correctly When Sorted on
                    VARCHAR Column................................   1-19

        2  Known Problems and Restrictions

              2.1   SQL$STARTUP.COM Command Procedure No Longer
                    Exists........................................    2-1
              2.2   RMU/EXTRACT Does Not Extract Certain
                    Details.......................................    2-1
              2.3   Virtual Address Space Is Exhausted by
                    RMU/VERIFY/ROOT...............................    2-2
              2.4   Corrupt Index Produces Bugcheck...............    2-3
              2.5   Delay Seen in First SQL SELECT Statement......    2-3
              2.6   Concurrent Table Inserts into Same Storage
                    Area Waste Space..............................    2-3
              2.7   RMU/EXTRACT Generates Output with Invalid
                    Syntax........................................    2-5
              2.8   SQL$PRE/Pascal Record Problem.................    2-5
              2.9   Creation of Tables Containing Incompatible
                    Data Types....................................    2-5


                                                                        v










          2.10  Creating a Descending Partitioned Sorted
                Index.........................................    2-6
          2.11  AIJ Header Translates Logical.................    2-7
          2.12  RMU/EXTRACT/ITEM=VERIFY All Sorted Indexes in
                Stream 1......................................    2-8
          2.13  Zigzag Match Strategy Loops or Bugchecks......    2-9
          2.14  File Limit on Sortwork Directory..............    2-9
          2.15  RMU/EXTRACT/ITEM=VERIFY Does Not Handle
                Certain Indexes Correctly.....................    2-9
          2.16  Bugcheck Storing Record After Snapshot File
                Has Been Truncated............................    2-9
          2.17  DBR Processes May Hang Due to Waiting Lock
                Requests......................................   2-10
          2.18  Problem Using Connections in Rdb/VMS..........   2-10
          2.19  Problem with Closing Cursors Between
                Executable and Shareable Images...............   2-11
          2.20  SQLPRE Confused with Exec SQL ALTER DATABASE
                Statement.....................................   2-11
          2.21  Column Name Is the Same as Domain.............   2-12
          2.22  Bugcheck at FIND_DIV_OR_MULT..................   2-12
          2.23  RMU/SHOW STATISTICS Does Not Handle Large
                Numbers.......................................   2-12
          2.24  SQL-F-INVRNG from SQL IMPORT and SQL CREATE
                DATABASE......................................   2-13
          2.25  Queries Using OR and Sorted Index May Result
                in a Bugcheck.................................   2-13
          2.26  Changes to Tables That Have DDAL Transfers
                Defined.......................................   2-13
          2.27  Documentation Errors in the V4.1 VAX Rdb/VMS
                Release Notes.................................   2-14
          2.27.1    Incorrect Example in Section 1.23.12......   2-14
          2.27.2    Incorrect Example in Section 3.2.15.......   2-14













    vi















        _________________________________________________________________

                                                                  Preface



              Rdb/VMS software is a general-purpose database management
              system based on the relational data model.

              This manual describes software problems fixed, known
              problems, and restrictions in the Rdb/VMS Version 4.1A
              release.

        Intended Audience

              These release notes are intended for all users of Rdb/VMS
              Version 4.1A, and should be read to supplement information
              contained in the Rdb/VMS Version 4.1 documentation set.

              To get the most out of this manual, you should be familiar
              with Rdb/VMS, data processing procedures, and basic
              database management concepts and terminology.

        A Note on the Terminology

              When the SQL and RDO interfaces use different terms to
              describe the same entity or concept, this manual uses
              the SQL term, unless the discussion is specifically about
              RDO or RDML. (This is also true of most other manuals in
              the Rdb/VMS documentation set.) For example, this manual
              normally uses table instead of relation, column instead of
              field (of a relation), and row instead of record.

        Operating System Information

              The version of VMS running on your system must be at least
              Version 5.3 for Rdb/VMS V4.1A. Other information about the
              versions of the operating system and related software that
              are compatible with this version of Rdb/VMS is included in
              the Rdb/VMS media kit and the V4.1 VAX Rdb/VMS Installation
              Guide.

                                                                      vii
































































          For information on the compatibility of other software
          products with this version of Rdb/VMS, refer to the System
          Support Addendum (SSA) that comes with the Software Product
          Description (SPD). You can use the SPD/SSA to verify which
          versions of your operating system are compatible with this
          version of Rdb/VMS.

    Structure

          This manual contains information pertaining to Rdb/VMS
          Version 4.1A.

          Chapter 1        Describes known software errors that are
                           fixed in Rdb/VMS Version 4.1A.

          Chapter 2        Describes current problems, additional
                           restrictions, and workarounds known to
                           exist for Rdb/VMS Version 4.1A.

    Related Manuals

          For more information on Rdb/VMS, see the following manuals
          in the Rdb/VMS V4.1 documentation set.

          o  Getting Started with VAX Rdb/VMS

             Introduces VAX Rdb/VMS, the Digital relational database
             management system for VMS software environments. It
             explains relational database concepts and introduces
             using SQL to retrieve, store, and update data. It also
             introduces how to create, load, and maintain a VAX
             Rdb/VMS database.

          o  VAX Rdb/VMS Guide to Database Maintenance

             Explains how to use the database maintenance utilities
             to perform such operations as database monitoring,
             security auditing, opening and closing a database,
             verifying and altering a database, backing up,
             restoring, and recovering a database, journaling
             database activity, modifying database characteristics,
             and handling bugcheck dumps.



    viii










              o  VAX Rdb/VMS Guide to Database Performance and Tuning

                 Describes how to analyze the elements that affect
                 database performance and how to tune those elements
                 to optimize performance. This book contains decision
                 trees that provide an organized approach to identifying
                 and solving common database performance problems.

              o  VAX Rdb/VMS RMU Reference Manual

                 Provides reference material and a complete description
                 of the commands and syntax of the Rdb/VMS Management
                 Utility (RMU).

              o  VAX Rdb/VMS Glossary and Master Index

                 Defines terms used in the documentation for Rdb/VMS and
                 related products. It also provides a master index to the
                 entire Rdb/VMS documentation set.

              o  VAX Rdb/VMS SQL Reference Manual

                 Provides reference material and a complete description
                 of the statements, the interactive, dynamic, and
                 module language interfaces, and the syntax for SQL,
                 the structured query language interface for Rdb/VMS.

              o  VAX Rdb/VMS Guide to Using SQL

                 Introduces the Rdb/VMS SQL (structured query language)
                 interface, and shows how to retrieve, store, and update
                 data interactively and through application programs. Can
                 be used as a tutorial for learning the major features of
                 SQL.

              o  VAX Rdb/VMS Guide to Using SQL/Services

                 Describes how to develop application programs that use
                 SQL/Services, a client/server software component of
                 Rdb/VMS. SQL/Services allows programs invoked on various
                 remote computers running the Macintosh, MS-DOS, OS/2,
                 SunOS, ULTRIX, ULTRIX for RISC, or VMS operating systems
                 to access Rdb/VMS databases as well as other databases
                 supported by SQL on a VMS server system.

                                                                       ix










          o  VAX Rdb/VMS Guide to Distributed Transactions

             Describes the two-phase commit protocol and distributed
             transactions, explains how to start and complete
             distributed transactions using SQL, RDBPRE, and RDML,
             and how to recover from unresolved transactions using
             RMU commands.

          o  VAX Rdb/VMS Guide to Database Design and Definition

             Explains how to design a logical database and how to
             translate that design into a physical database using
             Rdb/VMS data definition statements.

          o  VAX Rdb/VMS Installation Guide

             Describes how to install Rdb/VMS.

          o  VAX Rdb/VMS Release Notes

             Describes new features, problems and problems fixed,
             restrictions, and other information related to Rdb/VMS
             Version 4.1. Contains information about SQL and other
             Rdb/VMS interfaces and utilities.

    Conventions

          In examples, an implied carriage return occurs at the end
          of each line, unless otherwise noted. You must press the
          Return key at the end of a line of input.

          Often in examples the prompts are not shown. Generally,
          they are shown where it is important to depict an
          interactive sequence exactly; otherwise, they are omitted
          in order to focus full attention on the statements or
          commands themselves.

          This section explains the conventions used in this manual:

          <Ctrl/x>  This symbol in examples tells you to press
                    the Ctrl (control) key and hold it down while
                    pressing the specified letter key.

                    Vertical ellipsis points in an example mean that
              .     information not directly related to the example
              .     has been omitted.
              .
    x
































































               . . .    Horizontal ellipsis points in statements or
                        commands mean that parts of the statement or
                        command not directly related to the example have
                        been omitted.

              < >       Angle brackets enclose user-supplied names.

              $         The dollar sign represents the DIGITAL Command
                        Language prompt. This symbol indicates that the
                        DCL interpreter is ready for input.

        References to Products

              The Rdb/VMS documentation to which this document belongs
              often refers to products by their abbreviated names:

              o  DECtrace for VMS software is referred to as DECtrace.

              o  VAX CDD/Plus software is referred to as CDD/Plus, the
                 data dictionary, or the dictionary.

              o  VAX Pascal software is referred to as Pascal.

              o  Rdb/VMS software is referred to as Rdb/VMS. Rdb/VMS
                 software Versions 4.1 and 4.1A are often referred to as
                 V4.1 and V4.1A respectively.

              o  The SQL interface to VAX Rdb/VMS is referred to as SQL.
                 The SQL interface is Digital Equipment Corporation's
                 implementation of the SQL standard ANSI X3.135-1989, ISO
                 9075:1989, commonly referred to as ANSI/ISO.













                                                                       xi













                                                                        1
        _________________________________________________________________

                                                  Software Problems Fixed


              The following sections describe problems with previous
              versions of the Rdb/VMS software that are fixed in Version
              4.1A for all interfaces. These software problems no longer
              exist.

        1.1 Installation Did Not Check for Existing UIC

              The installation did not check for existing UIC when
              asking the question for creating the RDB$REMOTE or the
              RDB$REMOTE41 account.

        1.2 RMU/BACKUP/AFTER/QUIET_POINT Corrupted .AIJ Backup File

              It was possible for the
              RMU/BACKUP/AFTER_JOURNAL/QUIET_POINT command to produce
              a corrupt .AIJ backup file when the following conditions
              were true:

              o  The /CONTINUOUS qualifier was used.

              o  The fast commit feature was enabled.

              o  Users were active when the AIJ backup operation was
                 performed.

              The resulting .AIJ backup file was not usable for a
              subsequent database recovery operation. No damage to the
              active database occurred as the result of this problem, nor
              was the active .AIJ file corrupted in any manner.

        1.3 .AIJ File Could Contain Duplicate Data Records

              AIJ data records could be duplicated in the .AIJ file under
              two conditions:

              o  During large group commit operations, where the data
                 being written to the .AIJ file exceeded 64 blocks

                                              Software Problems Fixed 1-1
































































          o  During AIJ lock rebuild operations

          While AIJ data was merely duplicated, not lost, the
          resulting .AIJ file could be considered "corrupt" by the
          roll-forward utility, if it encountered AIJ data records it
          did not expect.

          Data is now journaled in the .AIJ file without being
          duplicated. Rdb/VMS corrects the formatting of AIJ request
          blocks into the AIJ cache, so that AIJ request blocks are
          always atomically formatted, not partially formatted. In
          addition, when Rdb/VMS rebuilds the AIJ lock value block,
          if the number of bytes used is nonzero, the last written
          AIJ block must be the first block in the AIJ cache.

    1.4 Deadlocks on Backup of .AIJ Files

          If a process failed while the RMU/BACKUP/AFTER_JOURNAL
          utility was trying to perform a critical operation on the
          .AIJ file (such as truncating it), it was possible for RMU
          to fail because of a deadlock with the database recovery
          process's freeze lock. This problem occurs because the
          AIJ backup utility does not make certain critical lock
          operations completable with respect to the freeze lock
          protocol.

          The problem was more likely to occur on high-volume,
          update-intensive applications. The problem did not occur
          when there was no database update activity during the AIJ
          backup.

    1.5 RMU/BACKUP/AFTER_JOURNAL Failed Trying to Truncate the .AIJ
        File

          RMU may have failed when attempting to truncate the .AIJ
          file. This problem occurred only when fast commit was
          enabled. Also, this problem was more likely to occur during
          periods of high database throughput, typically when the
          application process had attached to multiple databases.






    1-2 Software Problems Fixed










        1.6 A Self-Insert Query with Mapped Columns Incorrectly Stored
            NULL Values

              Rdb/VMS inserted NULL values instead of aggregated values
              when both of the following conditions were true:

              o  The query selected the data from and inserted it into
                 the same table.

              o  The columns in the SELECT list were mapped columns
                 (either GROUP BY plus aggregate columns or UNION
                 columns).

              This problem could have also occurred if the SELECT
              statement had a UNION clause.

        1.7 Bugcheck at PSIISCAN$END_SCAN + 26 After Lock Exceptions

              A bugcheck could occur after a lock exception, such as
              %RDMS-F-DEADLOCK, deadlock on freeze. In engineering tests,
              this bugcheck occurred at PSIISCAN$END_SCAN + 26, although
              offsets varied. Such bugchecks were caused by a timing
              window problem when Rdb/VMS cleaned up the lock failure.

        1.8 Bugcheck at UTIO$TRNLNM + 0000008a

              A bugcheck was produced if a logical name table had access
              control lists that denied world access.

        1.9 Bugcheck at RDMS$$INSERT_SYMBOL + 0BC and Other Offsets

              Bugchecks were observed with an exception at
              RDMS$$INSERT_SYMBOL + 0BC. (They also occurred under other
              offsets, such as + 0B8.) This bugcheck was rare and was
              generally caused by a lock conflict on freeze or timeouts
              when Rdb/VMS tried to load metadata information for a
              table.

              The lock conflict forced unloading of the metadata
              information. However, the unload operation did not clean
              up some symbol table information. When a metadata reload
              was attempted, the bugcheck occurred because the reload
              operation tried to insert information into a symbol table
              that already existed.

                                              Software Problems Fixed 1-3










    1.10 Bugcheck at RDMS$$EXE_OPEN + 63 on Query

          The following query resulted in a bugcheck at
          RDMS$$EXE_OPEN + 63 because a structure containing
          information about a loaded table was not properly loaded
          before the second open cursor. For example:

    SQL> ATTACH 'FILENAME TEST';
    SQL> CREATE TABLE TAB (COL SMALLINT);
    SQL> INSERT INTO TAB VALUES (100);
    SQL> DECLARE C1 CURSOR FOR SELECT COL FROM TAB ORDER BY COL;
    SQL> OPEN C1;
    SQL> FETCH C1;
    SQL> COMMIT;
    SQL> OPEN C1;
    %RDMS-I-BUGCHKDMP, generating bugcheck dump file DISK4:[WD]RDSBUGCHK.DMP;1
    %SQL-I-BUGCHKDMP, generating bugcheck dump file DISK4:[WD]SQLBUGCHK.DMP;1
    %SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual
    address=00000034, PC=00000000, PSL=00000000
    SQL>

    1.11 Bugcheck When Monitor Generated Section Name That Was Not
         Unique

          The monitor occasionally failed at MON$CREATE_TROOT_SECTION
          with the following error:

          Exception At MON$CREATE_TROOT_SECTION+CB
          %RDMS-F-BUGCHECK, fatal, unexpected error detected

          This exceptionally rare problem occurred when the monitor
          generated a random global section name that already
          existed. The random name generation routine for the monitor
          relies on the PID (process ID) for uniqueness. Because the
          monitor is a persistent process whose PID never changes,
          it was possible to generate a duplicate global section
          name if multiple sections were created in rapid succession.
          Now, each global section name produced by a process with a
          particular PID must also be unique.






    1-4 Software Problems Fixed










        1.12 Memory Corruption Sometimes Caused Error

              Memory corruption caused random bugchecks, looping,
              and other abnormal behavior. The most common bugchecks
              reported for this particular class of problem
              occurred in the routines KOD$GET_VM, KOD$FREE_VMLIST,
              PSIISCAN$GET_NEXT_DUPLICATE, PSIISCAN$END_SCAN, and
              RDMS$$COMPILE_INDEX_MAPS. The exception was typically a
              SYSTEM-F-ACCVIO or a SYSTEM-F-ROPRAND.

        1.13 Metadata Corruption from Committing After Failed ALTER,
             CREATE, or DROP Statements

              Metadata corruption may have occurred if you executed a
              COMMIT statement after receiving an error during a CREATE,
              DROP, or ALTER statement.

              This problem did not affect user data in any way. If
              the view, trigger, or constraint definitions were not
              referenced, they caused only an inconvenience.

        1.14 Possible Access Violation with SET TRANSACTION

              It was possible to get an access violation doing a two-
              phase commit transaction. The access violation occurred
              only if the SET TRANSACTION declaration was invalid. For
              example:

              SQL>
                ATTACH 'ALIAS ONEDB FILENAME WORK$DB:PERSONNEL.RDB';
                ATTACH 'ALIAS TWODB FILENAME WORK$DB:PERSONNEL.RDB';
                SET TRANSACTION ON ONEDB USING (READ ONLY WAIT 3)
                AND ON TWODB USING (RESERVING TWODB.EMPLOYEES FOR
                  PROTECTED WRITE WAIT 3);

              In V4.1A an appropriate error message is generated.

        1.15 RDB$REMOTE_BUFFER_SIZE Was Translated Only from the Process
             Table

              The RDB$REMOTE_BUFFER_SIZE logical was translated only
              from the process table. If the logical was defined in
              other tables, it was not translated. The logical is now
              translated from LNM$DCL_LOGICAL. To see the tables defined
              by this structure, issue the following command:

              $ SHOW LOGICAL/STRUCTURE LNM$DCL_LOGICAL
                                              Software Problems Fixed 1-5































































    1.16 Failure to Delete or Update Existing Records

          Under certain circumstances, previous versions of Rdb/VMS
          failed to select records to delete or update.

          This failure occurred, in general, under the following
          conditions:

          o  An index existed on the table to be operated on, and
             that index was used for selection of the records to be
             deleted or updated.

          o  The display of the strategy using the RDMS$DEBUG_FLAG =
             "S" showed that a temporary table was being used.

          o  A substring expression was used on a column within the
             table to select the appropriate records.

          o  The last record selected by the selection criteria was
             not the last record that existed within the index.

    1.17 Update Attempt Generated Incorrect RDB-E-READ_ONLY_REL Error

          Rdb/VMS returned an incorrect RDB-E-READ_ONLY_REL error
          when a reserved table was used as the source for an UPDATE
          statement. The following example shows the sequence of
          commands that generated the error:

          SQL> SET TRANSACTION READ WRITE
          cont> RESERVING TABLE1 FOR SHARED WRITE,
          cont> TABLE2 FOR SHARED READ;
          SQL> UPDATE TABLE1
          cont> SET FIELD1 = (SELECT FIELD1 FROM TABLE2);
          %RDB-E-READ_ONLY_REL, relation TABLE2 was reserved for
             read access; updates not allowed

          The READ_ONLY_REL error is no longer generated in this
          situation.

    1.18 RDML Generated Incorrect RDML-E-READ_ONLY Error

          When using STORE and MODIFY statements, RDML attempted
          to detect assignments into COMPUTED BY fields, which were
          read-only. RDML incorrectly determined that an assignment
          from a COMPUTED BY field to a field that is read/write was
          illegal.

    1-6 Software Problems Fixed
































































              RDML generated an incorrect %RDML-E-READ_ONLY error when
              processing queries like the following:

              FOR R1 IN REL1
                FOR R2 IN REL2
                  MODIFY R2 USING
                    R2.F2 = R1.F1   <----(R1.F1 is a COMPUTED BY field)
                  END_MODIFY
                END_FOR
              END_FOR

              FOR R1 IN REL1
                STORE R2 in REL2 USING
                  R2.F2 = R1.F1     <----(R1.F1 is a COMPUTED BY field)
                END_STORE
              END_FOR

        1.19 Unnecessary Arithmetic Exceptions for Divide and Multiply
             Operations

              Under certain circumstances, Rdb/VMS unnecessarily
              generated arithmetic exceptions for queries involving
              division and multiplication operations. This occurred when
              Rdb/VMS evaluated a division expression involving a divisor
              value of 0, or a multiplication of two large values, prior
              to applying a selection predicate that would have excluded
              the row under consideration (thus making the performed
              operation unnecessary).

        1.20 Importing Large Databases with Many Storage Areas

              Attempts to import large databases with many storage areas
              sometimes failed with the following error:

              %SQL-F-NOIDXRES, unable to import index SX_CONS_MONEY_PREM_DT
                  %RDB-F-SYS_REQUEST, error from system services request
                  -RDB-E-NO_META_UPDATE, metadata update failed
                  -RDMS-F-FILACCERR, error opening storage area file {filename}
                  -SYSTEM-F-NOIOCHAN, no I/O channel available

              The error happened because Rdb/VMS had a hardcoded limit
              on the number of open channels it would allow from EXEC
              mode for each stream. For previous versions of Rdb/VMS,
              the limit was 512 open channels per database attach. The
              maximum number of open I/O channels has been increased to
              1536. You must increase the VMS system parameter CHANNELCNT

                                              Software Problems Fixed 1-7
































































          (the maximum number of open channels allowed by VMS)
          correspondingly.

    1.21 Trailing Spaces in Selection Value Caused Incorrect Data
         Retrieval

          When all of the following were true, Rdb/VMS did not return
          the correct set of database rows:

          o  The database was defined with a collating sequence.

          o  An index was defined and used for accessing a table.

          o  The selection value contained one or more trailing
             spaces.

          The trailing spaces in the selection value caused Rdb/VMS
          to incorrectly retrieve the data values from the index.

    1.22 RDML Generated Incorrect RDML-W-JOIN_ATTRIBUTE Error

          RDML issues an error when an ERASE or MODIFY statement
          operated on a context that is used in a query strategy
          that results in a CROSS clause. This construct is illegal
          because it can lead to unpredictable results. In Rdb/VMS
          V4.1, RDML sometimes incorrectly determined that a relation
          was part of a cross operation. For example:

          FOR E IN APPL$HANDLE.EMPLOYEES WITH E.EMPLOYEE_ID = CUR_ID_CODE
            FOR E0 IN APPL$HANDLE.EMPLOYEES WITH E0.RDB$DB_KEY = E.RDB$DB_KEY
              MODIFY E0 USING
                ON ERROR
                  $PUTMSG (RDB$MSG_VECTOR);
                END_ERROR
               E0.EMPLOYEE_ID := NEW_ID_CODE;
              END_MODIFY;
            END_FOR;
          END_FOR;

          Preprocessing this code incorrectly produced the following
          error:

          %RDML-W-JOIN_ATTRIBUTE, Relation 'EMPLOYEES' is part of a
           join cannot be updated
          %RDML-I-ATLINE, at line 36 in the file DISK02:[RDB]TEST.RPA

    1-8 Software Problems Fixed
































































        1.23 Constraints Checked Only for Database First Declared

              The SET ALL CONSTRAINTS ON statement, using a context
              variable or parameter for the two-phase commit protocol
              with multiple databases and multiple transactions, used
              to check the constraints in only the database that was
              declared first. Now it checks the constraints in all
              declared databases.

        1.24 Possible Database Corruption from Fragmented Segmented
             String Records

              Under V4.1, database corruption could occur if the
              segmented string record become fragmented. Rdb/VMS V4.0
              introduced an optimization when allocating segmented
              strings. This optimization avoided extending the area
              by reusing space that was made available in the current
              transaction. In other words, if a segmented string was
              previously deleted (either by deleting the row, assigning
              NULL to the column, or replacing the value with new data)
              the old segments were saved and recycled.

              Unfortunately, in cases where the old segment was too
              small for the new data, the segment could be fragmented.
              In addition, if the old segment was less than 10 bytes long
              (including a standard 5-byte header) then the fragmentation
              information would not fit in the available space, thus
              corrupting the database page.

                ________________________ Note ________________________

                This corruption did not occur in any of the following
                situations:

                o  If you used WORM (write-once, read-many) areas,
                   this corruption did not occur in those areas
                   because the segmented string data was never
                   revised.

                o  If you defined the logical,
                   RDMS$USE_SEGMENTED_STRING, to Yes.

                o  When you used CDD/Plus or CDD/Repository, because
                   the data dictionary always uses the old-style
                   segmented strings.

                ______________________________________________________
                                              Software Problems Fixed 1-9































































          The correction to the problem may also improve retrieval
          performance of segmented strings because Rdb/VMS no longer
          fragments any segmented string segments that are recycled.

    1.25 Monitor Exhausted Virtual Memory

          With databases containing a large number of global buffers
          or a large number of storage areas, the database monitor
          would exhaust virtual memory, prohibiting additional
          database attaches, as follows:

          o  When the database parameters were set to "OPEN IS
             MANUAL," successive or repetitive opening and closing
             of the databases eventually caused the database monitor
             to run out of virtual memory.

          o  When the database parameters were set to "OPEN IS
             AUTOMATIC," repetitive "first" user attaches eventually
             caused the database monitor to run out of virtual
             memory. This condition was harder to detect and prevent.

          The problem was caused because the monitor created a
          global section that contained more than 32,000 VMS pages
          of memory.

    1.26 Bugcheck at KOD$UNBIND + 133 Affected Detaching from
         Database

          Users might have encountered a bugcheck at KOD$UNBIND + 133
          with OpenVMS V5.5 and later, with an error of %SYSTEM-F-
          SUBLOCKS when lock remastering occurred and a process that
          was doing Rdb/VMS activity ended (normally or abnormally).

          When this problem occurred, the database remained locked;
          you could release the lock only by deleting all processes
          that had locks associated with the database.

    1.27 Undeleted Mailbox Channels Could Cause Server Failure

          The SQL/Services communications server did not delete
          mailbox channels. Under some circumstances this problem
          caused the server to fail.

          Configurations with the following characteristics were more
          likely to experience this problem:

          o  Insufficient system resources
    1-10 Software Problems Fixed































































              o  Low idle timer setting

              o  High number of execute server processes created

              o  System up for a long time

        1.28 Monitor Terminated Abnormally When Closing a Database

              The monitor terminated abnormally when you used the
              RMU/CLOSE/CLUSTER command. The exception listed in the
              monitor log was one of the following:

        "***** Exception at 000068D4 : MON$RELEASE_LCKTRM_USER + 0000006C"

        "***** Exception at 00004DD2 : MON$FREE_VM + 0000001B"

              This problem was caused by a timing condition in the
              clusterwide database close procedure. It was possible for
              a database recovery process (DBR) to be started because
              a user process was abnormally terminated (Ctrl-Y/STOP or
              DELETE/QUEUE) while the database was being closed on a
              cluster with the /ABORT=FORCEX qualifier.

        1.29 Segmented Index Search Returned Incorrect Results

              Queries that used segmented indexes sometimes returned
              incorrect results. The problem occurred because a SELECT
              statement with value qualifiers that fell between two
              existing index keys used the B-tree index. The B-tree
              search algorithm incorrectly chose the lesser index key
              as matching the search criteria.

        1.30 Corrupted Segmented Strings

              If you converted your database to V4.1 using the
              RMU/CONVERT/NOCOMMIT command, and then inserted or
              modified segmented strings, without having the logical
              RDMS$USE_OLD_SEGMENTED_STRING defined, then issued an
              RMU/CONVERT/ROLLBACK command, corruption of the segmented
              strings could have occurred.





                                             Software Problems Fixed 1-11










    1.31 RMU/RESTORE/ONLY_ROOT Incorrectly Updated the Root File

          The RMU/RESTORE/ONLY_ROOT command incorrectly updated the
          root file if changes to the physical storage area occurred
          after the backup file was created. For example, suppose
          that the thresholds were set at (0,0,50) when a database
          was backed up. If you issued the following command, you
          would expect the threshold values to be changed:

          $ RMU/RESTORE/ONLY_ROOT TEST_AREA /THRESHOLD=(50,70,90)

          Although thresholds are reported as changed to (50,70,90),
          they were evaluated using the values (0,0,50).

    1.32 Intermittent Access Violation Showed as an Error Condition

          A very rare and intermittent access violation manifested
          itself as an error condition (SQLCODE of -1) returned
          from SQL. A call to SQL$GET_ERROR_TEXT returned an access
          violation with the reason mask, PC, and PSL all zero.

    1.33 RMU/VERIFY/ALL Erroneously Flagged an Error

          When a previously filled segmented string was set to NULL,
          the RMU/VERIFY/ALL command flagged an error.

    1.34 RMU/VERIFY/ALL Exceeded Quota

          If there were a lot of fragmented segmented string
          data, the RMU/VERIFY/ALL command might have reported a
          RDMS-F-EXQUOTA error message.

          This problem has been fixed, but if you continue to get
          RDMS-F-EXQUOTA messages while doing an RMU/VERIFY/ALL
          you can avoid this error by exporting and importing the
          database and modifying the buffer size to equal the page
          size. Database performance may or may not be impacted by
          this change.

    1.35 RMU/VERIFY Bugchecked When Displaying Certain Messages

          A bugcheck dump was generated whenever RMU/VERIFY attempted
          to display a message when any of the following errors were
          detected:

          o  The length of a nonduplicate B-tree node was incorrect.

          o  A dbkey in a duplicate B-tree node was invalid.

    1-12 Software Problems Fixed






























































              o  The length of a duplicated B-tree node was incorrect.

        1.36 Incorrect Results Were Returned If First Value Was NULL

              A query sometimes incorrectly returned no data because of
              the way the query was formulated. The problem arose when
              an OR retrieval with an index for each field was placed
              on either side of the OR clause. When the value returned
              in the first part of the OR was NULL and the value in the
              second part of the OR retrieval was non-NULL then Rdb/VMS
              returned incorrect results.

        1.37 VERIFY Command Mishandled Root Files

              The RMU/VERIFY command did not correctly handle root
              specifications with search list logicals. Unless the
              database was in the first directory specified in the search
              list, the RMU/VERIFY command returned an error saying the
              database did not exist.

        1.38 Join Query with Complex WHERE Clause Containing OR Predicate
             Returned Wrong Result

              A query joining two tables with a complex WHERE clause
              containing the OR predicate returned wrong results. The
              strategy used was OR index retrieval. The wrong result was
              produced because some of the predicates in the WHERE clause
              were evaluated too early; that is, before all required
              contexts were available.

        1.39 SQL/Services TCP/IP Support Did Not Work for Messages That
             Exceeded the Client Write Buffer Size

              SQL/Services TCP/IP support failed when client messages
              exceeded the client write buffer size. The default write
              buffer size is 1300 bytes. If a client message was larger
              than the write buffer size, SQL/Services broke the message
              into packets. The SQL/Services communications server
              incorrectly expected to receive the same number of packets
              and the same size packets that the client sent. This
              could not be assumed with TCP/IP. If the server read
              packets faster than the client sent them, the SQL/Services
              execution server bugchecked, displaying the following
              error:

                                             Software Problems Fixed 1-13










          SQL Services Internal Error: 41

    1.40 Remote Start Transactions

          After a remote link was broken, the next START TRANSACTION
          statement from the remote attach failed with:

          %RDB-F-SYS_REQUEST, error from system services request

          -LIB-F-INSFVIRMEM, insufficient virtual memory

    1.41 B-Tree Corruption Resulted from Reorganizing Sorted Indexes

          A B-tree node could be corrupted when sorted indexes were
          reorganized under the following conditions:

          o  The B-tree node being reorganized contained a single
             entry.

          o  The dbkey in the entry had a compressed length that was
             different from that of the dbkey it was replacing.

          The problem was caused because the B-tree node length
          had not been updated correctly to reflect the potential
          difference in size of the compressed dbkey.

    1.42 Wrong Results Were Returned for Some Retrieval Strategies

          Depending on whether an ORDER BY clause was present or on
          the choice of the optimizer strategy, wrong results were
          returned. This problem was evident with a match strategy,
          the outer loop of which is a cross strategy of two entries.

    1.43 Optimizer Chose Wrong Index for DELETE

          During a DELETE operation, sometimes the wrong index was
          chosen by the optimizer. The SELECT operation chose the
          correct strategy.

    1.44 Transaction Parameter Block Error When DECtrace Was Running

          Executing an RMU/UNLOAD, RDO EXPORT, or SQL EXPORT command
          while DECtrace was running generated an RDB-F-BAD_TPB_FORM
          error.

    1-14 Software Problems Fixed










        1.45 Wrong Results Were Returned After Cursor Was Opened

              The first time a cursor was opened in a program, subsequent
              fetches did not always return the complete selection. The
              second time the cursor was opened, correct results were
              returned. This error was not seen with interactive queries.

              This error in processing was rare. The error could occur
              only during processing of a query that used host-variables
              to specify ORed index ranges and a strategy of dynamic OR
              index retrieval. The same query with only constant values
              works correctly.

        1.46 Optimizer Bugchecked at RDMS$$EXE_LEAF+453

              Rdb/VMS bugchecked with the exception RDMS$$EXE_LEAF + 453
              when using dynamic optimization with the backround using
              many indexes. The following example is a strategy that can
              generate this problem:

              Sort
              Cross block of 2 entries
                Cross block entry 1
                  Conjunct        Conjunct        Conjunct        Conjunct
                  Leaf#01 BgrOnly TAB1 Card=147928
                    BgrNdx1 IND1_TAB1 [4:4] Bool Fan=10
                    BgrNdx2 IND2_TAB1 [2:2] Fan=12
                    BgrNdx3 IND3_TAB1 [3:3] Bool Fan=9
                Cross block entry 2
                  Leaf#02 BgrOnly TAB2 Card=150294
                    BgrNdx1 IND1_TAB2 [2:2] Fan=12

        1.47 SQL UPDATE ONLY Clause Caused Excessive Journal Growth

              Excessive RUJ, SNP, and AIJ growth was observed for some
              queries that read records with the intent of later updating
              some or all of them. This problem occurred under the
              following circumstances:

              o  Rdb/VMS V3.1, V3.1A, and V3.1B had this problem due to
                 their implementation of the UPDATE ONLY feature. UPDATE
                 ONLY was then disabled for V3.1B and continued to be
                 disabled for V3.1C and V4.0*.


                                             Software Problems Fixed 1-15










          o  In Rdb/VMS V4.1, new syntax and semantics were added to
             the SQL DECLARE TABLE CURSOR statement to provide the
             UPDATE ONLY feature for cursors. UPDATE ONLY cursors
             should be used when all or most of the rows will be
             modified by subsequent UPDATE . . . WHERE CURRENT OF or
             DELETE FROM . . . WHERE CURRENT OF statements.

             For UPDATE ONLY cursors, all rows fetched from the
             database are locked for UPDATE. If the UPDATE ONLY
             clause is not used then, the rows will be locked for
             READ, and then these locks will be later converted to
             UPDATE locks. In general, the use of UPDATE ONLY avoids
             lock conversion operations and also possible deadlocks
             resulting from this conversion process.

          o  In Rdb/VMS V4.1, new semantics were added to the SQL
             searched UPDATE statements (UPDATE statements that do
             not use a cursor) so that UPDATE ONLY was always used.
             This was removed in V4.2 and V5.0.

          The excessive journaling problem has been fixed for
          searched UPDATE statements and UPDATE ONLY cursors in
          Rdb/VMS V4.1A and DEC Rdb V5.1, and will be fixed in all
          Rdb/VMS V4.1 and V4.2 future mandatory updates.

    1.48 CURRENT_TIMESTAMP Did Not Return Actual Current Time

          The CURRENT_TIMESTAMP, CURRENT_DATE, and CURRENT_TIME SQL
          functions did not always return the actual current value.

          In Rdb/VMS V4.1, the CURRENT_TIMESTAMP code was
          restructured to update current date-time values with each
          database request rather than by run-time generated code. An
          unneeded condition test was left in the newly restructured
          code that sometimes prevented the current date-time values
          from being updated with each database request.

    1.49 LINK-E-SHRPSCLNG Errors Using SQL$USER.OLB

          In a shareable image when V4.0* and V4.1 modules are
          linked, the following error occurred:

          %LINK-E-SHRPSCLNG, Psect SQL$CALLER_PC has length of 8
                  in module SQL$CVT file SYS$COMMON:[SYSLIB]SQL$USER41.OLB;7
                  which exceeds length of 4 in shareable image
                  DISK2:[SMITH]RUNTIME.EXE;4
          -LINK-E-NOIMGFIL, image file not created
    1-16 Software Problems Fixed































































        1.50 Incorrect Values During Index-Only Retrieval Used Mapped
             Indexes

              Due to a problem in the decompression of compressed
              integers within a mapped index, incorrect values were
              returned during queries that carried out index-only
              retrieval on the mapped index.

              This problem occurred only if the value from the mapped
              index rather than the value from the record itself, was
              used for comparisons or display. For example:

              SQL> CREATE TABLE T1 (F1 INTEGER, F2 INTEGER, F3 INTEGER);
              SQL> CREATE INDEX I1 ON T1
              (F1 , F2 MAPPING VALUES 70000000 TO 99999999);
              SQL> INSERT INTO T1 VALUE ( 1, 79999991, 1);
              1 row inserted
              SQL> INSERT INTO T1 VALUE ( 1, 79999994, 1);
              1 row inserted
              SQL> INSERT INTO T1 VALUE ( 1, 79999998, 1);
              1 row inserted
              SQL> SELECT * FROM T1;
              Get     Retrieval by index of relation T1
              Index name  I1 [0:0]
                      F1            F2            F3
                       1      79999991             1
                       1      79999994             1
                       1      79999998             1
              3 rows selected
              SQL> SELECT F2 FROM T1;
              Index only retrieval of relation T1
              Index name  I1 [0:0]
                                    F2
                              79999991
                              79999991
                              79999995
              3 rows selected








                                             Software Problems Fixed 1-17










    1.51 IMPORT Statement Resulted in an Access Violation

          The IMPORT statement of an Rdb/VMS V4.0* database resulted
          in an access violation when the database had a collating
          sequence defined for the database. An IMPORT statement of
          an Rdb/VMS V4.1 database resulted in an invalid database
          parameter error. For example:

          CREATE SCHEMA FILENAME 'TEST' DICTIONARY IS NOT REQUIRED
          COLLATING SEQUENCE IS GERMAN GERMAN;
          !
          CREATE DOMAIN D1 IS CHAR(4);
          CREATE DOMAIN D2 IS CHAR(10);
          CREATE DOMAIN D3 IS CHAR(5);
          CREATE TABLE T1 (F1 D1, F2 D2, F3 D3);
          CREATE INDEX I1 ON T1 (F1, F2);
          COMMIT;
          !
          EXPORT SCHEMA FILENAME TEST INTO TEST_EXP;
          !
          FINISH;
          !
          DROP SCHEMA FILENAME TEST;
          !
          IMPORT SCHEMA AUTHORIZATION TEST FROM TEST_EXP;

          %SQL-F-ERRCRESCH, Error creating database filename TEST
          -RDB-E-BAD_DPB_CONTENT, invalid database parameters in the
              database parameter block (DPB)
          -RDMS-F-BUFSMLPAG, buffer size is less than page size
          -RDMS-F-AREA_NAME, area RDB$SYSTEM

    1.52 SELECT <correlation>.* FROM Table Failed with Error

          SQL module language utilizing a singleton SELECT failed
          with the following error:

          "SQL-F-INVSELSTAR, (1) * is not allowed in this context".

          This could occur during the execution of any singleton
          SELECT. For example:




    1-18 Software Problems Fixed










                     SELECT A.*
                             INTO :DATA
                             FROM STUFF2 B, DATA A
                             WHERE B.STUFF3 = :KEY_DEF.STUFF3
                             AND   A.ID = B.ID;

              The error came back as:

                    SELECT A.*
                           1
                   %SQL-F-INVSELSTAR, (1) * is not allowed in this context

        1.53 Distributed Boolean Queries Did Not Always Return Rows

              A query did not return all of the rows (it typically
              returned no rows) that met the selection predicate criteria
              when all of the following circumstances were true:

              o  The query predicate contained a nondistributed Boolean
                 clause (AND, OR) and a column or columns in the Boolean
                 clause were compared to user program variables (instead
                 of literals).

              o  The optimizer picked a multisegment index that contained
                 those columns.

              o  The nondistributed Boolean predicate column was not the
                 first segment in the multisegment index.

        1.54 Rows Not Sorted Correctly When Sorted on VARCHAR Column

              Rows were not returned in the correct order when the
              following conditions were true:

              o  The rows were sorted on VARCHAR columns.

              o  Some of the stored rows had zero length data in those
                 VARCHAR columns.

              o  A collating sequence was declared for that column.

              Rdb/VMS incorrectly encoded a single character when
              encoding the collating sequence for the zero length VARCHAR
              columns. That character was essentially random, and thus
              caused the particular row to collate into any random place
              in the output stream.

                                             Software Problems Fixed 1-19



































































                                                                        2
        _________________________________________________________________

                                          Known Problems and Restrictions


              This chapter describes known problems and restrictions
              relating to Rdb/VMS Version 4.1A, and includes workarounds
              where appropriate.

        2.1 SQL$STARTUP.COM Command Procedure No Longer Exists

              Beginning with Rdb/VMS V4.1, the command procedure
              SQL$STARTUP.COM no longer exists.

              Unless you modify RMONSTART.COM to do so, none of the
              SQL images supplied as part of Rdb/VMS are installed.
              Applications that use SQL and are installed with privileges
              require that you install the following images using the VMS
              Install utility. To install the images, use the following
              commands:

              $ INSTALL ADD SYS$LIBRARY:SQL$INT.EXE
              $ INSTALL ADD SYS$LIBRARY:SQL$SHR.EXE

              Unless you install these images, applications installed
              with privileges will encounter the following error:

        %SQL-F-NOENTRYPT, Older SQL version not compatible with compiled SQL

              It is not necessary to install the SQL images as shared or
              with privileges to avoid this error.

        2.2 RMU/EXTRACT Does Not Extract Certain Details

              The RMU/EXTRACT command does not generate an edit string,
              query name, query header, and default value from view
              definitions. The following example shows a view containing
              an edit string, query name, query header, and default
              value:


                                      Known Problems and Restrictions 2-1










          SQL> SHOW VIEW V1
          Information for table V1

          Columns for view V1:
          Column Name                     Data Type        Domain
          -----------                     ---------        ------
          F1                              INTEGER
          Edit String:   XXXXXX
          DTR Default Value:     999
          Query Name:    VIEW EDIT 1
          Query Header:  Signed
          Quadword
          Isn't Scaled
          F2                              INTEGER
          Source:
          SELECT
          C1.F1,
          C1.F2
          FROM T1 C1

          From this view, the RMU/EXTRACT command generates the
          following:

          CREATE VIEW V1
               (F1,
               F2)
               AS SELECT
               C1.F1,
               C1.F2
               FROM T1 C1;

    2.3 Virtual Address Space Is Exhausted by RMU/VERIFY/ROOT

          The RMU/VERIFY/ROOT command may run out of VIRTUALPAGECNT
          if the database uses a large number of buffers. The errors
          returned are:

          %RMU-F-ABORTVER, fatal error encountered; aborting verification
          %RMU-F-CANTMAPTROOT, error mapping to the troot section
          -SYSTEM-F-VASFULL, virtual address space is full

          The workaround is to increase VIRTUALPAGECNT.



    2-2 Known Problems and Restrictions










        2.4 Corrupt Index Produces Bugcheck

              When the RMU/VERIFY/ALL command finds a corrupted index,
              it may bugcheck at exception RMUVERNDX$WALK_BTREE, and
              an SQL DROP INDEX statement will result in an exception
              at PSII$DESTROY_TREE. This is caused by an inconsistency
              between the size of the index node and the total length of
              the key entries in the node.

              The workaround is to export and then import the database.

              This problem is fixed in Rdb/VMS V4.2.

        2.5 Delay Seen in First SQL SELECT Statement

              On the first SELECT statement in interactive SQL, dynamic
              SQL, or SQL/Services against some database tables, you may
              see an unusually long delay before the query completes. An
              elapsed time period as long as 4 or 5 minutes may occur.
              The delay does not occur on subsequent SELECT statements
              during the same database attach.

              This problem is fixed in Rdb/VMS V4.2.

        2.6 Concurrent Table Inserts into Same Storage Area Waste Space

              Concurrent loads of two different tables mapped to the same
              uniform area cause a gross misuse of space in the storage
              area. The loads could be performed either by using ordinary
              application inserts or by using the RMU/LOAD utility.

              For example, the following is a dump of a SPAM page and
              some pages in the particular SPAM interval. The dumps were
              taken after two RMU/LOAD operations were started at the
              same time, each loading a different table. Both tables
              were mapped to the same uniform storage area. The pages
              in questions are pages 951 through 956. Although these
              pages were allocated to logical area 46, when the pages
              are dumped, the output reveals that one record was stored
              on page 951, yet the load failed to load any records into
              pages 952 through 956 although they were presumably loaded
              into the process's Rdb/VMS buffers. Much of the storage
              area is wasted.


                                      Known Problems and Restrictions 2-3










    *-------------------------------------------------------------------------
    * Rdb/VMS V4.1-0                                    6-OCT-1992 12:40:51.38
    *
    * Dump of Live area TEST1
    *     Filename: VIA$DB:[D_MCELHOES.RDB]TEST1.RDA;1
    *     Database: VIA$DB:[D_MCELHOES.RDB]MF_PERSONNEL.RDB;1
    *
    *-------------------------------------------------------------------------

                       000D 00000344  0000  page 836, physical area 13 (space mgmt)
                            CAC55AEF  0006  checksum = CAC55AEF
                   00961AED 1C9FBB80  000A  time stamp = 6-OCT-1992 10:46:59.64
                           0000 0001  0012  1 free byte, 0 locked
    0F00FFFFFFFFFFFFFFFFFFFFFFFFFFFF  001416  pages 837-892: threshold 3
                                            pages 893-896: threshold 0
                                            pages 897-898: threshold 3
                                            pages 899-900: threshold 0
    FFFF00300F00303F00F00F03FFFF0030  0026  pages 901-902: threshold 0
                                            page 903: threshold 3
                                            pages 904-908: threshold 0
                                            pages 909-917: threshold 3
                                            pages 918-920: threshold 0
                                            pages 921-922: threshold 3
                                            pages 923-926: threshold 0
                                            pages 927-928: threshold 3
                                            pages 929-932: threshold 0
                                            pages 933-935: threshold 3
                                            pages 936-938: threshold 0
                                            page 939: threshold 3
                                            pages 940-944: threshold 0
                                            pages 945-946: threshold 3
                                            pages 947-950: threshold 0
                                            page 951: threshold 3
                                            pages 952-956: threshold 0
                                            pages 957-964: threshold 3
    0FF00303F0FF00F00F00303F00F00F03  0036  page 965: threshold 3
                                            pages 966-968: threshold 0
                                            pages 969-970: threshold 3
                                            pages 971-974: threshold 0

       .
       .
       .


    2-4 Known Problems and Restrictions










              As a workaround, perform the record insert operations
              serially.

        2.7 RMU/EXTRACT Generates Output with Invalid Syntax

              The RMU/EXTRACT command generates an output file containing
              invalid syntax for some CREATE STORAGE MAP and CREATE INDEX
              statements. The workaround modifies the output file to
              correct the syntax.

              If the remote database is restored to the local system on
              which the RMU/EXTRACT command is being executed, the output
              file generated is valid.

        2.8 SQL$PRE/Pascal Record Problem

              TYPE declaration of a Pascal record requires a semicolon
              (;) separator between the last field and the END, even
              though this is optional in the Pascal language itself.
              If the semicolon (;) is missing, various errors may
              appear either in the precompilation phase (host variables
              apparently undeclared), or in the Pascal compilation phase.

              For example and workaround:

              TYPE my_type = record
                          fld1 : integer;
                          fld2 : real;
                          fld3 : packed array [1..20] of char;
                          end;                               ^ This semicolon
                                                       (;) is necessary for
                                                       the precompiler even
                                                       though it is optional
                                                       in the Pascal language.

        2.9 Creation of Tables Containing Incompatible Data Types

              Rdb/VMS accepts the creation of a table or domain from CDD
              that contains an incompatible data type and DEFAULT VALUE
              FOR SQL or MISSING VALUE attribute. An error message is
              displayed when a user tries to insert values into the table
              or domain. The following example displays the described
              behavior:


                                      Known Problems and Restrictions 2-5










    $ DICT OPERATOR
    CDO> DEFINE FIELD FIELD1 DATATYPE IS DATE
    cont> DEFAULT_VALUE FOR sql IS "CED".
    CDO> DEFINE FIELD FIELD2 DATATYPE IS TEXT SIZE IS 20 CHARACTERS.
    cont> DEFINE RECORD TABLE1.
    cont> FIELD1.
    cont> FIELD2.
    cont> END RECORD.
    COD> EXIT
    $ SQL$
    SQL> CREATE DATABASE FILE FOO PATH FOO;
    SQL> CREATE TABLE FROM TABLE1;
    SQL> INSERT INTO TABLE1 (FIELD2) VALUES ('field2');
    %RDB-E-ARITH_EXCEPT, truncation of a numeric value at runtime
    -SYSTEM-F-IVTIME, invalid time

          A workaround to avoid the preceding problem is to ensure
          the data types and DEFAULT VALUE FOR SQL or MISSING VALUE
          attribute are compatible in CDD prior to CREATE TABLE or
          DOMAIN FROM or a dictionary integrate. By first correcting
          and verifying that the data types and DEFAULT VALUE FOR SQL
          or MISSING VALUE attribute are valid in the dictionary, you
          can ensure that inconsistencies will not exist when you use
          those definitions in the database.

    2.10 Creating a Descending Partitioned Sorted Index

          You cannot create or import a descending partitioned sorted
          index on a table with existing records. The CREATE INDEX
          statement puts all of the index records into the last
          partition. Rdb/VMS does not return an error until a user
          attempts a delete or modify operation (where the key value
          changes).

          Records inserted after the index is created go into the
          correct partitions.

          The CREATE INDEX statement in the following example
          illustrates the problem:






    2-6 Known Problems and Restrictions










        SQL> CREATE DATABASE FILENAME LLAMAS
        cont>  CREATE STORAGE AREA AR1 FILENAME AR1 ALLOCATION IS 20 PAGES
        cont>  CREATE STORAGE AREA AR2 FILENAME AR2 ALLOCATION IS 20 PAGES
        cont>  CREATE STORAGE AREA AR3 FILENAME AR3 ALLOCATION IS 20 PAGES
        cont> CREATE TABLE LLAMAS (F1 CHAR(4), F2 CHAR(2), F3 CHAR(4),
        cont> F4 SMALLINT, F5 CHAR(4), F6 CHAR(4), F7 SMALLINT,
        cont> F8 CHAR(6), F9 SMALLINT);
        SQL> INSERT INTO LLAMAS VALUES
        cont> ('MSGL','  ','  ',1,'1000','SSTR',8,'000006',0);
        SQL> INSERT INTO LLAMAS VALUES
        cont> ('DEC ','  ','  ',1,'01  ','INV1',1,'000002',0);
        SQL> COMMIT;
        SQL> CREATE UNIQUE INDEX I1 ON LLAMAS
        cont> (F1 DESC,F2 DESC,F3 DESC,F4 DESC, F5 DESC,
        cont> F6 DESC,F7 DESC,F8 DESC, F9 DESC)
        cont> STORE USING (F1) IN AR1 WITH LIMIT OF ('ASOC')
        cont> IN AR2 WITH LIMIT OF ('DEC')
        cont> IN AR3 WITH LIMIT OF ('FS') OTHERWISE IN RDB$SYSTEM;
        SQL> COMMIT;
        SQL> UPDATE LLAMAS SET F2='99',F9=99
        cont> WHERE F1='DEC' AND F2=' ' AND F7=1 AND F8='000002';
        SQL> ROLLBACK;
        SQL> EXIT;

                ________________________ Note ________________________

                All workarounds for this problem have a major
                drawback; you must load records after the index is
                created. This can be done initially, but maintenance
                becomes a problem because you must unload all of the
                records, create the index, then reload the records.

                ______________________________________________________

        2.11 AIJ Header Translates Logical

              The RMU/VERIFY command sometimes fails with the following
              error message:

              %RMU-E-BADFNMAIJ, after-image journal file contains
               references to wrong database

              expected: "VIA_1:[RDBLAB]MF_PERSONNEL.RDB;1"
              found:    "DSA54:[VIA.][RDBLAB]MF_PERSONNEL.RDB;1"

                                      Known Problems and Restrictions 2-7










          This error indicates a discrepancy between the file
          specification of the database root as stored in the after-
          image journal file and the one stored in the database root
          itself. It manifests itself only when all of the following
          conditions are true:

          o  The database is multifile (the problem does not happen
             for single file databases as they do not keep the file
             specification of the root file).

          o  Journaling is active.

          o  The database root file is defined using a concealed
             logical name.

          o  The database was opened manually using the RMU/OPEN
             command.

          The error can be ignored. The journal file is correct and
          can be used to perform recovery by specifying the database
          to be recovered with the /ROOT qualifier.

          You can avoid this error message by:

          o  Opening the database with a file name specification that
             does not use any concealed logicals.

          o  Changing the database to open automatically.

          o  Closing the database prior to performing the
             verification operation.

    2.12 RMU/EXTRACT/ITEM=VERIFY All Sorted Indexes in Stream 1

          When an RMU/EXTRACT/ITEM=VERIFY command is used, all of
          the sorted indexes are verified in stream 1 with the system
          relations, no matter where the sorted indexes are stored.
          They should be verified with the storage area where they
          are stored.

          As a workaround, use the output from the
          RMU/EXTRACT/ITEM=VERIFY command as is, or modify it to
          verify the index with the corresponding storage area.


    2-8 Known Problems and Restrictions










        2.13 Zigzag Match Strategy Loops or Bugchecks

              Queries that generate a zigzag match strategy with a
              dynamic leaf strategy in the inner loop may bugcheck at
              RESTORE_RSS2 + 13C or may go into an infinite loop.

              As a workaround, restructure the query or redefine
              indexes such that a dynamic leaf retrieval strategy is not
              generated for the inner loop of a zigzag match strategy.

        2.14 File Limit on Sortwork Directory

              When a version limit is set on the directory where sortwork
              files are being directed and Rdb/VMS tries to create a
              sortwork file that would exceed that limit, the process
              doing the database activity enters a CPU loop within Rdb.
              At this point, the only way to recover the process is to
              stop it using a $STOP PROC/ID command.

              As a workaround, change or remove the version limit on the
              directory where sortwork files are directed.

        2.15 RMU/EXTRACT/ITEM=VERIFY Does Not Handle Certain Indexes
             Correctly

              If an index is defined to be stored in an area other than
              RDB$SYSTEM and is not used for placing records, then
              RMU/EXTRACT/ITEM=VERIFY assumes the index is stored in
              RDB$SYSTEM.

              A workaround is to edit the output file created by
              RMU/EXTRACT so that the index is verified as part of the
              storage area in which it resides.

        2.16 Bugcheck Storing Record After Snapshot File Has Been
             Truncated

              When attempting to store a record after the snapshot file
              has been truncated it is possible to receive a bugcheck at
              the following exception:

     PIOFETCH$WITHIN_DB+194, %RDMS-F-BUGCHECK, fatal, unexpected error detected

              This problem occurs when a snapshot file is truncated
              while the database is open and there are active snapshot
              transactions at the time of the snapshot file truncation.
              Rdb/VMS V4.1 was enhanced to allow the snapshot files to be
              truncated if exclusive access to the area can be acquired

                                      Known Problems and Restrictions 2-9






























































          (for additional information on this enhancement, please see
          the V4.1 VAX Rdb/VMS Release Notes).

          This problem does not pose any danger to database
          integrity; no database corruption will occur.

          The workaround is to truncate a snapshot file only when the
          database has been closed on all nodes. Once the database is
          closed, the snapshot files can safely be truncated.

    2.17 DBR Processes May Hang Due to Waiting Lock Requests

          Under certain circumstances, DBR (database recovery) might
          hang because of VMS lock manager behavior. When granting
          WAIT queue lock requests only when the CONVERT queue for
          that lock resource is empty, DBR can starve an area lock.
          This problem can be identified by examining the RMU/SHOW
          LOCKS output and identifying storage area locks for the DBR
          process waiting on the WAIT queue.

          Consider an area A that process 1 and process 2 has in
          Concurrent Write (CW). Let process 3 be on the CONVERT
          queue for area A and let the requested mode be Protected
          Write (PW). If process 2 dies and a DBR comes up for
          the dead process, it tries to get area A in CW. However,
          because this is a new lock request, the VMS lock manager
          places this request on the WAIT queue and does not service
          the request until the PW is granted. Because the mode
          requested by the DBR is compatible with the currently
          granted mode, process 1 is not blasted to release the lock
          and thus the DBR is starved of the lock.

          This problem is fixed in Rdb/VMS V4.2.

    2.18 Problem Using Connections in Rdb/VMS

          When attempting to connect from both executable and a
          sharable image, SQL might incorrectly return the error
          SQL-F-TWOIMPTXN.

          If you create a connection in an executable image, start
          a transaction and open a cursor, then call a routine in a
          shareable image that creates a second connection, the error
          SQL-F-TWOIMPTXN may be generated.

          The workaround is to execute the CONNECT statement from the
          default connection. This problem is fixed in DEC Rdb V5.1.
    2-10 Known Problems and Restrictions































































        2.19 Problem with Closing Cursors Between Executable and
             Shareable Images

              There is a problem with the wrong cursor being closed. This
              occurs when there is a COMMIT in a shareable image that
              is linked with an executable image where cursors have been
              opened in the shareable and executable image. The problem
              occurs only if the shared images are linked with their
              RDB$TRANSACTION_HANDLE PSECTs as LCL.

              This behavior is demonstrated when a transaction in an
              executable image opens a cursor and calls a routine in the
              shareable image that starts a transaction, opens a cursor,
              and does a fetch and a commit. At this point, the cursor
              in the main image is closed but the cursor in the shareable
              image is left open. If you try to open the cursor in the
              shareable image for a second time, the following error is
              returned:

              %SQL-F-CURALROPE, Cursor cursor_name was already open

              If you return to the main executable image, doing a fetch
              returns the following error:

              %SQL-F-CURNOTOPE, Cursor !AC is not opened

              One workaround is to close the cursor in the main
              executable image before calling the routine in the sharable
              image. Or you can link the RDB$TRANSACTION_HANDLE PSECTs as
              GBL in the sharable images.

              This problem is fixed in DEC Rdb V5.1.

        2.20 SQLPRE Confused with Exec SQL ALTER DATABASE Statement

              When using the ALTER DATABASE statement in the same module
              as other SQL statements, the following errors may be
              incorrectly returned:

              %SQL-F-TRAACT_1, A database cannot be created or altered while a
               transaction is active
              -SQL-F-TRAACT_2, ROLLBACK or COMMIT the transaction

              There are three possible workarounds:

              o  Remove the ALTER DATABASE statement.

              o  Make the ALTER DATABASE statement the first statement in
                 the program.

                                     Known Problems and Restrictions 2-11





























































          o  Put the ALTER DATABASE statement in a separately
             compiled module.

          This problem is fixed in DEC Rdb V5.1.

    2.21 Column Name Is the Same as Domain

          Prior versions of Rdb/VMS erroneously propagated domain
          attributes to a COMPUTED BY column if that column had the
          same name as the domain.

          Until Rdb/VMS V4.1, this was harmless, and although these
          attributes might have included VALID IF or DEFAULT clauses,
          they had no meaning for a read-only column. However, in
          V4.1 new functionality was added that propagates the
          default for a new column to all previously stored rows
          in the table.

          This problem can be avoided by altering the domain to have
          a default of NULL before the EXPORT statement is executed.
          After the import operation is complete, the domain can
          have its original default restored. This works because the
          update operation is not performed if NULL is the default.

          Alternatively, do not name COMPUTED BY columns the same as
          existing domains.

    2.22 Bugcheck at FIND_DIV_OR_MULT

          When DIVIDE or MULTIPLY are used in aggregates, such as
          SUM(),  and computed by definitions with unary operators
          such as EXTRACT, NEGATE, CHAR_LENGTH, and OCTET_LENGTH, a
          bugcheck and an access violation will be generated.

          This problem is fixed in DEC Rdb V5.0.

    2.23 RMU/SHOW STATISTICS Does Not Handle Large Numbers

          When activity is high on a database, sometimes RMU/SHOW
          STATISTICS cannot display the actual numbers being reported
          because they are too large. Instead it displays a series of
          asterisk (*) characters.

          This problem is fixed in DEC Rdb V5.0.

    2-12 Known Problems and Restrictions










        2.24 SQL-F-INVRNG from SQL IMPORT and SQL CREATE DATABASE

              The SQL CREATE DATABASE and SQL IMPORT statement return
              an SQL-F-INVRNG error when creating a storage area that
              specifies a snapshot maximum extent that is less than the
              minimum storage area extent.

              The equivalent RDO DEFINE DATABASE and RDO IMPORT commands
              successfully create the database and do not encounter this
              error.

              As a workaround, modify the specified value for the
              snapshot maximum extent to be at least the value specified
              for the minimum storage area extent.

              Alternatively, you can modify the specified value for the
              minimum storage area extent to be less than or equal to the
              value specified for the snapshot maximum extent.

              This problem is fixed in DEC Rdb V5.1.

        2.25 Queries Using OR and Sorted Index May Result in a Bugcheck

              A query mixing several AND predicates and OR predicates
              in a given order, and using sorted index, may result in
              a bugcheck at address PROCESS_OR_CRTV + 00000078 with
              an access violation depending on how Rdb/VMS builds its
              internal index structures.

              A workaround is to rewrite the query to change the place
              of the OR predicates within the WHERE clause, such that
              Rdb/VMS take the indexes in a different order. Otherwise
              the dump allows you to find the offending index so that you
              can drop it.

              This problem is fixed in DEC Rdb V5.1.

        2.26 Changes to Tables That Have DDAL Transfers Defined

              Section 4.10.4.1 of the VAX Data Distributor Handbook,
              Version 2.2, states: "Data Distributor does not have any
              direct means within a transfer definition to copy existing
              indexes, constraints, triggers, or access control lists to
              a target database. You can make changes to such database
              structures without concern that existing transfers might
              fail."

                                     Known Problems and Restrictions 2-13
































































          However, if you attempt to add or drop a constraint from
          a table that was referenced in a replication transfer
          definition, Rdb/VMS generates the following errors:

    %RDB-E-NO_META_UPDATE, metadata update failed
    -RDMS-F-RELUSETRA, relation JOB_HISTORY is used in a transferred definition

    2.27 Documentation Errors in the V4.1 VAX Rdb/VMS Release Notes

          The section lists the documentation errors in the V4.1 VAX
          Rdb/VMS Release Notes.

    2.27.1 Incorrect Example in Section 1.23.12

          Section 1.23.12 contains an incorrect example. The example
          showing how to use the RDM$MON_USERNAME, defines the
          logical as a PROCESS logical:

          $ DEFINE RDM$MON_USERNAME GOOD_QUOTAS

          The example should define the logical as a SYSTEM logical:

          $ DEFINE/SYSTEM/EXEC RDM$MON_USERNAME GOOD_QUOTAS

    2.27.2 Incorrect Example in Section 3.2.15

          Section 3.2.15 reads:

          $ LINK PROGRAM,SYS$INPUT/OPT
          SYS$SHARE:RDBINTSHR.EXE/OPT
          PSECT_ATTR=RDB$MESSAGE_VECTOR,SHR
          PSECT_ATTR=RDB$TRANSACTION_HANDLE,SHR

          It should read:

          $ LINK PROGRAM,SYS$INPUT/OPT
          SYS$SHARE:RDBINTSHR.EXE/SHARE
          PSECT_ATTR=RDB$MESSAGE_VECTOR,SHR
          PSECT_ATTR=RDB$TRANSACTION_HANDLE,SHR






    2-14 Known Problems and Restrictions

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026