Skip to content

Instantly share code, notes, and snippets.

@marcusrehm
Last active September 1, 2020 17:37
Show Gist options
  • Save marcusrehm/9144921 to your computer and use it in GitHub Desktop.
Save marcusrehm/9144921 to your computer and use it in GitHub Desktop.
This script helps bring all databases with Suspect, Single User and Recovery Pending state to Online state in SQL Server 2012.
declare @dbname varchar(255);
DECLARE dbname_cursor CURSOR FOR
SELECT name--, database_id, create_date, STATE_DESC
FROM sys.databases
WHERE STATE_DESC in ('SINGLE_USER', 'SUSPECT', 'RECOVERY_PENDING');
OPEN dbname_cursor
FETCH NEXT FROM dbname_cursor
INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Recovering "' + @dbname + '"...'
exec sp_resetstatus @dbname;
exec('alter database [' + @dbname + '] set emergency');
dbcc checkdb(@dbname)
dbcc checkdb(@dbname)
exec('alter database [' + @dbname + '] set single_user with rollback immediate');
dbcc checkdb (@dbname, repair_allow_data_loss)
exec('alter database [' + @dbname + '] set multi_user');
dbcc checkdb (@dbname)
FETCH NEXT FROM dbname_cursor
INTO @dbname
END
CLOSE dbname_cursor;
DEALLOCATE dbname_cursor;
@lizhaskin
Copy link

Hi
I ran the script, it sent it completed successfully, but the database still says (Recovery Pending)
Please advise

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment