BUG: Database String Pool Corrupted if Commit Method is Not Used (236956)



The information in this article applies to:

  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional
  • Microsoft Windows Installer 1.0
  • Microsoft Windows Installer 1.1

This article was previously published under Q236956

SYMPTOMS

The .msi database string pool becomes corrupt if no Commit method is used after editing the database in direct mode. This behavior may appear as unexplained SQL query results or failures. Use the MsiInfo utility to check the string pool (option /D). If corruption exists, you the following error appears:
Error 1620. String pool reference counts are incorrect.

CAUSE

When editing a database in transactional editing mode, any changes not committed before closing the database are rolled back. However, in direct editing mode changes are made immediately. The current database editing process uses some file write buffering, which requires that a Commit method take place in order to flush all buffers and write all changes to disk.

RESOLUTION

A user must always call the Commit method after attempting to change a database.

STATUS

Microsoft has confirmed that this is a bug in the Microsoft products that are listed at the beginning of this article.

MORE INFORMATION

Steps to Reproduce Behavior


  1. Open an existing database in direct mode.
  2. Insert a row into a table, making sure that the table data contains a string that's not already in the string pool.
  3. Do not use the Commit method on the database.
  4. Run MsiInfo <package> /D on the database.

REFERENCES

See "MsiDatabaseCommit" and "Commit Method" Help file topics in Msi.chm.

Modification Type:MajorLast Reviewed:12/11/2003
Keywords:kbAppSetup kbBug KB236956