Error 3904

Severity

21

Message text

Can't unsplit logical page %ld in object '%S_OBJID' in database '%S_DBID' - both pages together contain more data than will fit on one page.

Explanation

Data and index pages are split when Adaptive Server determines that a row cannot be inserted due to insufficient room on the existing page. During transaction rollback (either by a user request or during database recovery), Adaptive Server tries to undo the changes done by the transaction. Error 3904 occurs when Adaptive Server fails to unsplit pages that were split during the transaction. Error 3904 is caused by an Adaptive Server problem.

When this error occurs, data integrity may have been compromised.

Action

  1. Use the procedure in “Finding an object name from a page number” in the chapter “Other Useful Tasks” in the most recent version of Troubleshooting and Disaster Recovery to identify which table and index correspond to the page number in the error message text.

    WARNING! The procedure referenced in step 1 uses the dbcc page command. Use the dbcc page command only as directed. This command is undocumented, nonstandard, and is provided “as is” without any warranty. Sybase Technical Support does not support this command for general use. Although the command syntax is provided for reference, use this command only in the specific diagnostic situations described, and with the specific syntax shown. Failure to do so could cause performance problems and database corruption.

  2. If the object encountering the error is not a system table (a system table’s object ID is less than 100), go to step 3.

    If the object with the error is a system table and the index ID is not 0 (zero), refer to “Fixing a corrupted system table index” in the chapter “Other Useful Tasks” in the most recent version of the Troubleshooting and Disaster Recovery guide for instructions on how to repair the system table index.

    If the object with the error is a system table and the index ID is 0, contact Sybase Technical Support to help you repair the corruption. However, it may be necessary to restore from clean backups.

  3. For a user table, if the index is 0, go to step 4. If the user table index ID is not 0:

    1. Run the sp_helpindex procedure on the index to get information for rebuilding it.

    2. Drop the index.

    3. Re-create the index. This clears the corruption in most cases.

    4. Run dbcc checktable on the table to verify data integrity. If errors occur, call Sybase Technical Support.

  4. For a user table, if the index ID is 0, run dbcc checktable on the table to verify data integrity. If errors occur, restore the database from clean backups.

Additional information

Refer to “drop index” and “create index” in the Reference Manual: Commands for information about dropping and re-creating indexes.

Refer to “Developing a Backup and Recovery Plan” in the System Administration Guide: Volume 2 for information about how to safely create, dump, load, and re-create databases

Versions in which this error is raised

All versions