It is possible in certain situations for the links from one page to another to get corrupted. All pages in an object or index have pointers to the previous and next pages in the object or index. If these links point to the wrong page, it can result in pages getting skipped and can even cause an infinite loop in a scan. One way this can occur is if the server crashes in the middle of pages getting flushed to disk. If some pages are updated and others are not, some of the pages may point to the wrong page.
Chain Linkage Problems
If you perform an integrity check either by running DBCC CHECKDB or using Idera’s free tool SQL Integrity Check, chain linkage problems are very obviously called out in the error messages. Often this error will be combined with other corruption error messages.
Table error: Object ID 245575913, index ID 1. Page (1:51355) is missing a reference from previous page (1:48621). Possible chain linkage problem.
It is tempting to attempt to perform a repair of the table with the invalid links. The repair option here fixes linkage problems by deleting the bad pages and making sure everything that remains has valid links. In other words, data loss. Do not try this option unless it is your last resort or if you don’t care about data loss.
There are a couple of tactics you can take with this issue. If the issue is with the base table (heap or clustered index), you can try to bcp the data out of the table, truncate or drop and recreate the table, and then reimport the data. This should get rid of all of the tables with linkage problems and leave you with a clean table if that was your only problem. If it is with a nonclustered index, just drop and recreate the index or disable and rebuild the index.
If the linkage issues are coupled with other forms of corruption, I will often opt to go straight to a full restore of the database. Trying to fix multiple forms of corruption can be problematic as one form of corruption can sometimes prevent the preferred fix for another form of corruption. For example, if the linkage problem is with a nonclustered index and the clustered index also has corruption, then the clustered index corruption would prevent us from recreating the nonclustered index.
In short, the best options are to reload or recreate the table or index.