Error 2559

Severity

16

Message text

Data page number %ld is empty but is not the first page. Status = 0x%x.

Explanation

When an object is first created, a single, empty page is allocated to it. Usually there are no other empty pages. Error 2559 occurs when dbcc checktable or dbcc checkdb encounters an empty page while traversing the page chain of an object which is not the first page of the chain.

If you are not encountering any other errors either at run time or from dbcc, it is possible that the empty page will not cause any further problems. Therefore, it is acceptable to wait to correct this problem until nonpeak hours. If other errors are occurring, refer to the information in this manual if applicable or contact Sybase Technical Support.

Action

Correct this situation by forcing the page chain involved to be rebuilt. This can be accomplished in different ways, depending on whether or not the page chain involved is associated with an index or table data. To determine this, refer to the procedure “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 determine the index ID and object ID associated with the page number from the error message.

WARNING!  “Finding an object name from a page number” 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.

If the error is on a user table (a system table’s object ID is less than 100), go to “User tables or clustered indexes (index ID is 0 or 1)”.

If the error is on a system table and the index ID is not 0 (zero), the error is on a system table index. 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 for instructions on how to repair the system table index.

If the error is on a system table and the index ID is 0 (zero), contact Sybase Technical Support. They may be able to help you repair the corruption or it may be necessary to restore from clean backups.


User tables or clustered indexes (index ID is 0 or 1)

There are two ways to correct this error, depending on whether you have enough extra disk space to create a clustered index on the table in question.

Solution 1: Drop index

If a clustered index exists, drop and re-create it. If not, create a dummy clustered index and then drop it. This will remove the problem since creation of a clustered index causes the table to be copied and does not copy the empty pages. Note that clustered index creation does require considerable disk space (refer to “create index” in the Reference Manual: Commands).

Solution 2: Use the bulk copy (bcp) utility

Use bcp to copy the table out of and then back to the Server:

  1. bcp the table data out to an operating system file.

  2. Empty the table with the truncate table command.

  3. (Optional) Drop all indexes on the table.

  4. bcp the table data into Adaptive Server.

  5. (Optional) Re-create all indexes on the table.


For nonclustered indexes (1 < index ID < 255)

There are two ways to correct this error on a nonclustered index:

Solution 1: Drop index

  1. Execute the following query in the database in question to determine the index name:

    1> select name from sysindexes 
    2> where id = <object_ID> and indid = <index_ID> 
    3> go
    

    Where <object_ID> and <index_ID> are from the output of dbcc page that you ran earlier.

  2. Drop and re-create the nonclustered index specified in the query.

Solution 2: Create a Clustered Index

Create a clustered index since this forces all nonclustered indexes to be rebuilt. This method may not be suitable for large tables because of the overhead required for creating a clustered index.

Versions in which this error is raised

All versions