SQL Server detected a logical consistency-based I/O error - sql-server

I am using Sharepoint Foundation 2010. I got error message(824) in Event logs while executing regular schedule job for backing up databases.
WSS_Logging is showing error below:
"SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xa691e24a; actual: 0xb68ce671). It occurred during a read of page (1:6095) in database ID 9 at offset 0x00000002f9e000 in file 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\WSS_Logging.mdf'. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). "
Please help..

From MSDN:
What does this error mean:
This error indicates that Windows reports that the page is successfully read from disk, but SQL Server has discovered something wrong with the page. This error is similar to error 823 except that Windows did not detect the error. This usually indicates a problem in the I/O subsystem, such as a failing disk drive, disk firmware problems, faulty device driver, and so on
simply put,run CHKDSK and see if you get any errors
CHKDSK [volume[[path]filename]] [/F] [/V] [/R] [/X] [/I] [/C] [/L[:size]]
and also change the page_verify option to checksum if you haven't
Read below for more details from MSDN link
what are next steps:
Look for Hardware Failure
Run hardware diagnostics and correct any problems. Also examine the Microsoft Windows system and application logs and the SQL Server error log to see whether the error occurred because of hardware failure. Fix any hardware-related problems that are contained in the logs.
If you have persistent data corruption problems, try to swap out different hardware components to isolate the problem. Check to make sure that the system does not have write-caching enabled on the disk controller. If you suspect write-caching to be the problem, contact your hardware vendor.
Finally, you might find it useful to switch to a new hardware system. This switch may include reformatting the disk drives and reinstalling the operating system.
Restore from Backup
If the problem is not hardware-related and a known clean backup is available, restore the database from the backup.
Consider changing the databases to use the PAGE_VERIFY CHECKSUM option.

DBCC CHECKDB (yourdatabasename)
and DBCheck will give errors against the tables.
You can do repair each table with this function CHECKTABLE('tablename1', REPAIR_ALLOW_DATA_LOSS)
USE yourdatabasename;
GO
ALTER DATABASE yourdatabasename
SET single_user;
GO
DBCC CHECKTABLE('tablename1', REPAIR_ALLOW_DATA_LOSS)
GO
DBCC CHECKTABLE('tablename2', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE yourdatabasename
SET MULTI_USER;
GO
USE dbreckitInventory;
GO
ALTER DATABASE dbreckitInventory
SET single_user;
GO
DBCC CHECKTABLE('tblpurchasedetails', REPAIR_ALLOW_DATA_LOSS)
GO
DBCC CHECKTABLE('TblSalesDetails', REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE dbreckitInventory
SET MULTI_USER;
GO

Related

Recover a corrupted database/tables

Our customer faces an issue with a corrupted database caused by a 3rd party software. Unfortunatelly they found out too late and no longer have a valid backup to return to. Fixing views etc. is easy but there are couple tables that are unaccessible and contain important data.
When trying to select data from corrupted tables I receive this error:
SQL Server detected a logical consistency-based I/O error: incorrect
pageid (expected 1:7733; actual 114:7667823). It occurred during a
read of page (1:7733) in database ID 5 at offset 0x00000003c6a000 in
file 'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQL2008\MSSQL\DATA\aspe_bad1.MDF'. Additional
messages in the SQL Server error log or system event log may provide
more detail. This is a severe error condition that threatens database
integrity and must be corrected immediately. Complete a full database
consistency check (DBCC CHECKDB). This error can be caused by many
factors; for more information, see SQL Server Books Online.
Running DBCC CHECKDB gives this error
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a
system table is inconsistent. Check previous errors.
Running DBCC CHECKTABLE gives the same error as select does.
When running DBCC PAGE I get Metadata: ObjectId = 0, meaning:
If you see the ObjectId is 0, that means there was no metadata found.
This could be because:
The table that the page was part of has been deleted since the page corruption was logged
The system catalogs are corrupt in some way
The page is corrupt and so incorrect values were used to look up the metadata
Checking SQL Server Logs contains only 1 different error and that is:
SQL Server detected a logical consistency-based I/O error: unable to
decrypt page due to missing DEK. Itoccurred during a read of page
(1:7727) in database ID 5 at offset 0x00000003c5e000 in file
'C:\Program Files\Microsoft SQL
Server\MSSQL10_50.SQL2008\MSSQL\DATA\aspe_bad1.MDF'. Additional
messages in the SQL Server error log or system event log may provide
more detail. This is a severe error condition that threatens database
integrity and must be corrected immediately. Complete a full database
consistency check (DBCC CHECKDB). This error can be caused by many
factors; for more information, see SQL Server Books Online.
Honestly I'm at my wits end. Can anyone help me fix this issue? Is it even possible to repair to at least some extent?
Thanks,
Z

Database Keeps Going into Recovery Pending State

I have a SQL server database that has been running perfectly fine on my machine for about 6 months, a couple days ago out of nowhere it was inaccessible (Pending Recovery).
I did a bunch of Googling and have tried the following things to fix the issue but thus far restoring it from a previous backup is the only thing that seems to work.
I have tried (From SMS and SQLCMD):
ALTER DATABASE mydatabase SET EMERGENCY
ALTER DATABASE mydatabase set single_user
DBCC CHECKDB (mydatabase, REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
ALTER DATABASE mydatabase set multi_user
Step #3 errors out with: "cannot open mydatabase is already open and can only have one user at a time"
Second try:
EXEC sp_resetstatus 'mydatabase';
ALTER DATABASE mydatabase SET EMERGENCY
DBCC CHECKDB ('mydatabase')
ALTER DATABASE mydatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CHECKDB ('mydatabase', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE mydatabase SET MULTI_USER
Step #5 errors out with the same error.
My question is what could be causing this in the first place and how can I fix it properly without having to do a restore twice a day.
Database is already open and can only have one user at a time, this is error number 924. The complete error message looks like this:
An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
Msg 924, Level 14, State 1, Line 1 Database ‘db_name’ is already open and can only have one user at a time.
The level 14 belongs to security level errors like a permission denied. It means that it cannot be open because someone is using it.
Use the sp_who or sp_who2 stored procedures. You can also use the kill command to kill the processes that are active in the database.
I also found this thread useful: How to fix Recovery Pending State in SQL Server Database?
what could be causing this in the first place and how can I fix it properly without having to do a restore
The most likely cause is a a hardware or driver problem with your hard disk.
In my case, I had databases set up on my local machine but on an external drive mapped to my hard drive. I have the external drive connected to my docking station all the time but I had to disconnect the hard drive and after I connected it again - the databases that are restored on the external drive went into Recover Pending mode.
In my case what helped me was to set the database offline in Microsoft SQL Server Management Studio by right clicking on the database - Tasks - Take Offline. The status of the database changes to Offline. After that bring the database online again by right clicking on the database - Tasks - Bring online.
The database was successfully recovered without any issues. But if the cause is different these steps may not help.
Take the database offline
Bring the database back online

Database Recovery Pending - SQL Server 2014

My server is shutting down because the electrical. And when I opened my database in SSMS, database is recovery pending.
I checked my ERROR LOG, the message are :
4 transactions rolled forward in database 'POSDW' (14:0). This is an
informational message only. No user action is required.
restoreHkDatabase: DbId 14, Msg 41313, Level 16, State 1, The C
compiler encountered a failure. The exit code was 2.
[ERROR] Database ID: [14] 'POSDW'. Failed to load XTP checkpoint.
Error code: 0x82000009.
(d:\sql12_main_t\sql\ntdbms\hekaton\sqlhost\sqlmin\hkhostdb.cpp : 3126
- 'RecoverHkDatabase') Error: 41313, Severity: 16, State: 1.
I already tried to take offline but when I bring online I get error.
Can you guys help me.
Thanks
It looks like corruption. You can try one of the following options:
Restore from existing backup
Try enter the database into emergency mode and run DBCC CHECKDB. according to the results you can see if you can restore the pages from existing backup (in some cases) or run DBCC CHECKDB .
If you have functional replica of the data take the data from there.
Hope this helps.
You were able to move the database files while they were in "Recovery Pending" mode because that status means SQL couldn't open the database files for some reason. It also means it couldn't lock the files as well.
Setting a database to "offline" is similar because it unlocks the underlying files (that's why you can move database files while it's offline).
I'm pretty sure that if you'd try setting all these databases to "online" you'd get the error message you talk about or something similar.
ALTER DATABASE MyDB SET ONLINE
You can use the above statement to try and activate databases that are "offline" or are in "Recovery Pending" mode. If there's some kind of problem, SQL Server will let you know at that moment.
You can also read this thread: How to fix Recovery Pending State in SQL Server Database?

SQL Server production server - all databases are in recovery pending state

All the databases in my SQL Server production server are in recovery pending state. I tried to execute different queries but they were of no use. Please help me as production work has been stopped at client side.
Tried to execute alter commands - but show error as following:
Msg 5120, Level 16, State 101, Line 1 Unable to open the physical file
"G:\Data\MSSQL\Database.mdf". Operating system error 3: "3(The system
cannot find the path specified.)". File activation failure. The
physical file name "G:\Data\MSSQL\Data\Database_log.ldf" may be
incorrect. Msg 945, Level 14, State 2, Line 1 Database 'Database'
cannot be opened due to inaccessible files or insufficient memory or
disk space. See the SQL Server errorlog for details
Msg 5069, Level 16, State 1, Line 1
Recovery pending means that for some reason SQL cannot run restart recovery on the database. Usually this is because the log is missing or corrupt.
Check to see if you can find the Database.mdf and Database_log.ldf files in the folder specified.
Check your system has not run out of disk space.
This could be caused by a hard drive failure. You may need to do a full restore of your last full back, any differentials and then restore the logs up until the log error occurred.
See similar issue here
My team encountered this error many times for my clients & I know, It is not easy to manage in the Production server. In your case Error 5120 –This error comes when the database is in Read Only Mode.
To fix this you can below code
USE [master]
GO
ALTER DATABASE [SQLAuthority] SET READ_WRITE WITH NO_WAIT
GO
After fixing 5120, you can process to fix "databases are in recovery pending state"
Recovery Pending – If the SQL Server knows that database recovery needs to be run but something is preventing it from starting, the Server marks the db in ‘Recovery Pending’ state. This is different from the SUSPECT state because it cannot be said that recovery is going to fail – it just hasn’t started yet.
Execute the following set of queries:
ALTER DATABASE [DBName] SET EMERGENCY; GO
ALTER DATABASE [DBName] set single_user GO
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS; GO
ALTER DATABASE [DBName] set multi_user GO
Note: You can also read the Microsoft Warning on DBCC CHECKDB REPAIR ALLOW DATA LOSS.
It might be because of following possible causes:
Permissions
Find your SQL Server instance in the services list and double-click it, then select the Log On tab. It is this log on account that must have sufficient permissions to write to the temporary backup folder location. Check the permissions on the temporary backup folder by right-clicking it in Windows Explorer, selecting Properties, then navigating to the Security tab. Make sure that the account SQL Server is using has explicit read/write permissions for this folder.
Mapped Drives
Use a fully qualified UNC path instead of a mapped drive letter.
Lack Of Domain Trust
You can resolve this issue by ensuring that a trust between the two domains is established. You may also need to configure the SQL Server service account with pass-through authentication between the domains.
Please refer more here for recovery db
Execute these queries to fix SQL server database in recovery pending state:
ALTER DATABASE [DBName] SET EMERGENCY
GO
ALTER DATABASE [DBName] SET single_user
GO
DBCC CHECKDB ([DBName], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS
GO
ALTER DATABASE [DBName] SET multi_user
GO
EMERGENCY mode marks the SQL Server database as READ_ONLY, deactivates logging, and gives the permission to system admin only. This method is capable of resolving any technical issue and bringing the database back to the accessible state. The database will automatically come out of the EMERGENCY mode.

sql server incorrect checksum error on deployment

When I try to start the Sql Server (SqlExpress) service I got the following message:
I've looked at the log file (C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Log\ERRORLOG) and find out the following lines:
2010-03-09 06:12:35.51 spid7s Error: 824, Severity: 24, State: 2.
2010-03-09 06:12:35.51 spid7s SQL
Server detected a logical
consistency-based I/O error: incorrect
checksum (expected: 0x3ee24b20;
actual: 0x8d0681bd). It occurred
during a read of page (1:375) in
database ID 1 at offset
0x000000002ee000 in file 'C:\Program
Files\Microsoft SQL
Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\master.mdf'.
Additional messages in the SQL Server
error log or system event log may
provide more detail. This is a severe
error condition that threatens
database integrity and must be
corrected immediately. Complete a full
database consistency check (DBCC
CHECKDB). This error can be caused by
many factors; for more information,
see SQL Server Books Online.
2010-03-09 06:12:35.51 spid7s SQL
Trace was stopped due to server
shutdown. Trace ID = '1'. This is an
informational message only; no user
action is required.
How can I solve it?
Thank you!
Sounds like your master mdf file (master database) is corrupted.
Options include:
1. Restoring from backup
2. Detach existing databases (if possible), remove, and reinstall.
You might want to look a little deeper to see why this happened. It might be a failing drive on that machine. In which case, your number one priority is going to be to fix the hardware.
Try DBCC with proper parameters (CHECKFILEGROUP). If that does not help.... try identifying whether the error is in an index (then you can recreate that).
Otherwise.... get the backups. You HAVE backups, or?? ;) (good test for those - could have been a real database, not just the mater)
As this is master...
...detach all databases, get a new master generated (if anything ails reinstall server), reattach databases.
I know this is an old question, this blog post helped me tremendously. Help this will benefit others who run into the same issue down the road.
You should read the article for detailed step-by-step process. But this is the key command.
DBCC CheckTable ('corrupted_table', REPAIR_ALLOW_DATA_LOSS)

Resources