DOCUMENT #687 ======================================================================= TROUBLESHOOT MEMORY ERRORS ======================================================================= PRODUCT: R:BASE VERSION : 3.1 or Higher ======================================================================= CATALOG: Database Design, AREA : Memory Management Structure & Integrity ======================================================================= Each day computers grow more powerful and more complex. It is not unusual for machines to have modems, fax boards, extra large monitors, disk compression utilities, scanners, CD ROM drives, virus detection software etc. Each of these adds complexity to the computer system and requires a driver and/or additional software to operate. In addition, many machines use Windows or other multi-tasking programs. As systems become more complex, products share the same resources (memory and CPU ) and must be able to interact together. As more products are run concurrently, however, chances of conflict or incom- patibility increase dramatically. For example, loading QEMM386, Windows and then R:BASE 4.0 loads 3 levels of memory managers that must work together. A memory error message may come from one product, but actually be caused by other software or hardware. The error message itself does not always indicate where the problem lies. The approach to solving memory related errors is the same: regardless of the error, follow a step-by-step process of reduction and elimination. As you reduce the levels of complexity and interaction and remove elements from your system (temporarily) one-by-one, you're likely to pinpoint the command or program causing the error. R:BASE Memory Errors ==================== There are a number of errors R:BASE returns that indicate a problem with memory, either not enough memory or a conflict in addressing an area in memory. The following error messages are the most common: "Insufficient memory to load protected mode R:BASE" (386/486 version only) "Cannot find protected mode R:BASE files in current directory or path." (386/486 version only) "Fatal error: evm0009: EMM error: error = 81, function = 4732" (286 version only) "Out of dynamic memory" "Out of dynamic space" "Insufficient memory to continue this function" "Insufficient buffer space to process expressions" "Insufficient space to process" Use the following step-by-step process to resolve the error. Steps to Resolving Memory Errors ================================ 1. Verify that you are using the most current version of the software. A new version may even be sitting on the shelf uninstalled. Old software is not always compatible with a new computer and vice versa, new software is not always compatible with an old computer. Many companies do in-line releases. Call the vendor to verify that you have the most current release or to find out how to get it. 2. Check the documentation. In particular, look through the README files for all software you are loading and any hardware that has been added to the machine. The README files often have reference to known software or hardware incompatibilities, or identify settings or drivers that need to be loaded for particular environments. 3. Make sure there is enough available memory. R:BASE 4.0 (386/486 version) requires a minimum of 2.5 Mb (2,560,000 bytes) of available extended or expanded memory. To check available memory use the DOS MEM command. Execute MEM immediately after booting your machine. Following is output from a MEM command on a machine with 6Mb total RAM, HIMEM.SYS, 512Kb SMARTDRV cache and DOS 5.0 loaded high. 655360 bytes total conventional memory 655360 bytes available to MS-DOS 565744 largest executable program size (available conventional memory) 5505024 bytes total contiguous extended memory (total extended memory) 0 bytes available contiguous extended memory 4721664 bytes available XMS memory (available extended memory) MS-DOS resident in High Memory Area HIMEM.SYS is an extended memory manager and no memory is being used as expanded. If an expanded memory manager is used instead, the output from MEM may look like this: 655360 bytes total conventional memory 655360 bytes available to MS-DOS 565744 largest executable program size (available conventional memory) 5505024 bytes total EMS memory 4721664 bytes free EMS memory (available expanded memory) 5505024 bytes total contiguous extended memory (total extended memory) 0 bytes available contiguous extended memory 4721664 bytes available XMS memory MS-DOS resident in High Memory Area Notice that available extended memory (XMS) and available expanded memory (EMS) are the same amount. This is because all the memory is being used as one pool, either extended or expanded, depending on the software requesting memory. Third party memory managers provide the ability to divide memory into two separate pools, one extended and one expanded. When your memory is split into two pools, the MEM command will show different numbers for available extended memory (XMS) and available expanded memory (EMS). If your memory is split into both extended and expanded, try allocating it as extended only. By default, R:BASE 4.0 attempts to use all available extended memory as it executes. Try the DOS16M parameters as specified in the MEMORY.TXT file to restrict the amount of extended memory that R:BASE 4.0 will use. This option is available to machines with at least 6Mb total memory. CodeLock and Gateway (Import/export) require 465 Kb of available conventional memory. R:BASE 4.0 (286 version) requires 465 Kb (476,160 bytes) of available conventional memory. The MEM command shows available conventional memory, or you can use the DOS CHKDSK command. The CHKDSK command shows available conventional memory only. It does not give information about extended or expanded memory. In addition, it gives information about available disk space. The very last line of the CHKDSK output shows the amount of available conventional memory. Below is the CHKDSK output using DOS 5.0. 86827008 bytes total disk space 12288 bytes in 6 hidden files 262144 bytes in 118 directories 81917952 bytes in 2162 user files 4546560 bytes available on disk 2048 bytes in each allocation unit 42396 total allocation units on disk 2220 available allocation units on disk 655360 total bytes memory 565744 bytes free (available conventional memory) In the 286 version, extended or expanded memory is used for code swapping only, not for execution. It executes in conventional memory only, but there can still be memory conflicts. If you get EVM error messages when starting the 286 version, turn off use of extended and/or expanded memory by R:BASE. There are two DOS SET parameters that control this (other programs are not affected by these settings). The SET command is entered at the DOS prompt. Be sure there are no spaces around the equal sign (=). Try turning off one section of memory at a time. SET RTVMEXP=0% -- turns off use of expanded memory by R:BASE SET RTVMEXT=0% -- turns off use of extended memory by R:BASE Memory conflicts with the 286 version are most often caused by a conflict with another software program. Also try Step 5 below. 4. Start R:BASE from the operating system prompt, not from within a menuing system or multi-tasking program such as Windows or DESQview. Start R:BASE from the R:BASE program files directory (usually RBFILES). This eliminates any conflict with other programs or versions of R:BASE on the path. R:BASE always looks first for files in the current directory. Additional information on running the 286 version of R:BASE under Windows is in the Installation Guide. The PIF file settings which may require changes are Memory requirements, EMS memory and XMS memory. Below are two different configurations that work under Windows with the 286 version and HIMEM.SYS. If using an expanded memory manager you need to specify EMS memory rather than XMS memory. Some situations require both. Configuring non-Windows applications for Windows is a process of trial and error. Memory requirements Memory requirements ------------------- ------------------- KB required -1 KB required 420 KB desired -1 KB desired 640 EMS memory EMS memory KB required 0 KB required 0 KB desired 0 KB desired 0 XMS memory XMS memory KB required 1024 KB required 0 KB desired 2048 KB desired 1024 With the 386/486 version of R:BASE the situation becomes more complex. You now have a 32-bit protected mode program (R:BASE) running under a 16-bit protected mode program (Windows). Both have their own memory manager and a third memory manager is often speci- fied in the CONFIG.SYS file. It's easy to see how with 3 levels of memory management trying to coexist there may be some conflicts. Information and tips on running the 386/486 version of R:BASE under Windows is included in the README.TXT file. As with the 286 version, it is often a long process of trial and error. There are some machine configurations that do not seem able to run the 386/486 version under Windows. The best solution in this instance is to run the 286 version under Windows. You have the same features and functionality as the 386/486 version but different memory management and performance. For information on running with other multi-tasking software, contact the vendor of your multi-tasking software. 5. Remove any possible interference or interaction with other software by going to a "clean" configuration. This means starting your computer with CONFIG.SYS and AUTOEXEC.BAT files containing only elements that are absolutely required to start your computer. For example, a hard disk driver is required, a network driver or disk cache is not. Most people can go to a configuration such as: CONFIG.SYS file: FILES=20 BUFFERS=16 AUTOEXEC.BAT file: PROMPT $P$G PATH=C:\;C:\DOS;C:\RBFILES Note that no device drivers or other software programs are loaded. The 386/486 version of R:BASE 4.0 does not require a memory manager. The 286 version does not require a memory manager either, but operates much faster with one present. Make copies of your original CONFIG.SYS and AUTOEXEC.BAT files before making any changes. Retry the operation that failed. If it still fails, then the hardware may be faulty or the problem may lie in the database or with the R:BASE program itself. If the problem does not occur, then there must be something in the CONFIG.SYS or AUTOEXEC.BAT that is creating a conflict. 6. Add elements back to your CONFIG.SYS and AUTOEXEC.BAT files one-by-one, restarting your computer and retrying the operation after each addition. At some point the operation will fail. Having added elements back one-by-one, you now know exactly which driver or program is causing a memory conflict with R:BASE. An easy way to modify the CONFIG.SYS and AUTOEXEC.BAT files is by putting the word "REM" followed by a space at the beginning of each line you don't want to execute. This way, elements are "added" and "deleted" from the files by adding or removing the "REM" at the beginning of the line. The original lines aren't changed and don't need to be reentered. Following are some possible options once the conflicting element has been identified: - Remove the item permanently - Check the documentation for the particular utility or driver, - including README files - Try loading drivers in a different order - Contact the developer of the utility or driver - Modify the program's parameters 7. Remove hardware devices. If hardware, such as a modem, network card or scanner card, has recently been added to the machine, remove the hardware (and drivers) and retry the operation. Replace the hardware one item at a time, retrying the operation after each addition. 8. Determine if the problem is related to a specific database. Try the operation on a different database. Use the sample database, CONCOMP, for example. If the same operation fails on the sample database, then the problem may lie within the R:BASE program. Contact Microrim Technical Support, 206-649-9551. We may be familiar with the problem and have a workaround. If the problem seems to be related to a particular database check the following: - Compare the database settings to the default values or to the settings in a working database. Some settings are stored in the database, others are set from the RBASE.CFG file. The settings that commonly cause problems are BLANK, DELIMIT and NULL which are stored in the database. The SET entry in the Command Dictionary section of the Reference Manual has a complete list of settings stored with the database versus the other settings. - Use RBCHECK or RSCOPE to check the database for structure and pointer errors. RBCHECK is a database checking utility that comes with your R:BASE 3.x or 4.0 product. RSCOPE is a database check and correction utility that can be purchased from our Sales Department. To run RBCHECK, from the DOS prompt enter, RBCHECK dbname * dbname.chk Results of the check are written to the file dbname.chk. - There are settings specific to the 286 version that affect memory usage. You can set a DOS environment variable to increase the size of the data area used for processing. Try increasing this area if you get "Out of dynamic space" messages. At the DOS prompt enter, SET RTVMCONV=640,200 The second number is the size, in Kb, of the data area. You cannot increase this above the limits of available conventional memory. In addition, there is the -H startup option which allows specification of the number of memory handles to use (default is 300). - Settings specific to the 386/486 version that affect memory usage are the -Z and -K startup options and SET SORT. By default, the 386/486 does not use conventional memory for processing data, it is all reserved for other programs accessed through the ZIP command. The -Z startup switch is used to reserve a specified amount of conventional memory for other programs, allowing R:BASE to use the rest. The -K option specifies the size of memory blocks R:BASE will allocate. SET SORT allows specification of the amount of memory to use for sorting. - Use PACK (Pack in place) or RELOAD (Pack to) to rebuild the data pointers and all indexes in the database. - Use the BACKUP and RESTORE procedure to rebuild the database structure and load the data. This is different from PACK and RELOAD, it completely recreates the database from scratch. - Check for invalid data in tables, particularly in the SYSINFO table. The SYSINFO table contains long table and column names, descriptions and autonumber information. BROWSE * FROM SYSINFO and look for data that does not belong. Here's what some of the data from the SYSINFO table in CONCOMP looks like: first eight column or table numeric precision full column characters description and scale and table names of table name | | | | first eight | autonumber | autonumber | characters | increment | next value | | of column name | | | | syssname syscname sysdescr sysinc sysfmt sysnext syslong -------- -------- -------- -------- -------- -------- -------- employee emplname Employee -0- -0- -0- -0- last name employee empaddre Employee -0- -0- -0- empaddress home address employee entrydat Date infor- -0- -0- -0- entrydate mation entered transdet Transaction -0- -0- -0- transdetail details transdet transid Transaction -0- -0- -0- -0- id number transdet detailnu Detail line -0- -0- -0- detailnum number customer custid Customer 1. -0- 111 -0- id number - Try the operation with MULTI OFF if the database is on a network file server. - Try the operation on a different computer. 9. Reinstall the R:BASE program. If all else fails, try reinstalling the program. Additional reading about memory =============================== The Waite Group's Tricks of the MS-DOS Masters The Waite Group 100 Shoreline Highway, Suite A-285 Mill VAlley, CA 94941 Quarterdeck Manifest Quarterdeck Office Systems 150 Pico Blvd. Santa Monica, CA 90405 R:BASE Exchange articles: "Fine Tuning R:BASE", January/February 1993 (#680) "Problem Solving with R:BASE", September/October 1992 (#663) "An Introduction to R:BASE 4.0 and Memory Management", July/August 1992 (#647, #648) "Finding Your Optimum RTVMCONV - an Empirical Approach", January/ February 1992 (#373) "How R:BASE Organizes & Manages Memory - Part I", July/August 1991 (#319) "Run Microrim's R:BASE Under Microsoft Windows", March/April 1991 (#299) All of the Exchange articles are available from our automated FAX server, 206-649-2789. The document number is shown in parentheses. Windows is a registered trademark of Microsoft, Inc. QEMM386, DESQview, and Quarterdeck Manifest are trademarks of Quarterdeck Office Systems.