patternsqlMinor
How might a corrupt partition in TempDB result in DBCC CHECKDB reporting no issue?
Viewed 0 times
reportingresultmightpartitiontempdbcorruptdbccissuecheckdbhow
Problem
One of our SQL Servers reported the following error recently:
Less than 15 minutes later I connected to the server and ran:
Which returned 'tempdb'. I then ran:
Which returned no results, indicating no issues with the database affected.
How could corruption in the database result in the error message above yet
Once a page is marked 'suspect', how can it be marked not-suspect, or fixed, or reused, or whatever such that
Edit: 2013-02-27 13:24
Just for fun, I tried to recreate the corruption in TempDB assuming a #temp table was the culprit.
However, since I cannot set the
Instead of using
If you stop the instance, TempDB is automatically recreated at next startup; hence that won't do the trick either.
If anyone can think of a way to recreate this corruption, I'd be willing to do further research.
In order to test the hypothesis that a corrupted page cannot be fixed by
DATE/TIME: 2/25/2013 9:15:14 PM
DESCRIPTION: No catalog entry found for partition ID 9079262474267394048
in database 2. The metadata is inconsistent. Run DBCC CHECKDB to check for
a metadata corruption.Less than 15 minutes later I connected to the server and ran:
SELECT name
FROM sys.databases
WHERE database_id = 2;Which returned 'tempdb'. I then ran:
DBCC CHECKDB ('tempdb') WITH NO_INFOMSGS, TABLERESULTS;Which returned no results, indicating no issues with the database affected.
How could corruption in the database result in the error message above yet
DBCC CHECKDB not report the problem? I presume if a page checksum calculation fails, resulting in the page being marked as suspect that any object referencing that page would not be able to be dropped, but I must be wrong.Once a page is marked 'suspect', how can it be marked not-suspect, or fixed, or reused, or whatever such that
DBCC CHECKDB does not report any problem with the page in question?Edit: 2013-02-27 13:24
Just for fun, I tried to recreate the corruption in TempDB assuming a #temp table was the culprit.
However, since I cannot set the
SINGLE_USER option in TempDB, I cannot use DBCC WRITEPAGE to corrupt a page, and therefore I cannot force corruption in TempDB. Instead of using
DBCC WRITEPAGE one could set the database offline and use a hex editor to modify random bytes in the db file. Of course, that does not work either on TempDB since the database engine cannot run with TempDB offline. If you stop the instance, TempDB is automatically recreated at next startup; hence that won't do the trick either.
If anyone can think of a way to recreate this corruption, I'd be willing to do further research.
In order to test the hypothesis that a corrupted page cannot be fixed by
DROP TABLE I created a test database and used the following script to corrupt a page, then attempt Solution
Running
From MSDN:
Running DBCC CHECKDB against tempdb does not perform any allocation or catalog checks and must acquire shared table locks to perform table checks. This is because, for performance reasons, database snapshots are not available on tempdb. This means that the required transactional consistency cannot be obtained.
CHECKDB against tempdb is not the same as running it against a user database.From MSDN:
Running DBCC CHECKDB against tempdb does not perform any allocation or catalog checks and must acquire shared table locks to perform table checks. This is because, for performance reasons, database snapshots are not available on tempdb. This means that the required transactional consistency cannot be obtained.
Context
StackExchange Database Administrators Q#35595, answer score: 7
Revisions (0)
No revisions yet.