A database can be marked for many reasons. Generally it falls into the following conditions :
- A database or log file is missing.
- In SQL 6.5, a device may not be present or in 7.0/2000 a file may not exist.
- SQL Server may not have been able to restore the database in ample time.
- The database could be corrupt.
- The database is being help by the operating system. This could be a 3rd party
backup software or defrag software. I've had even a virus scanning software cause this once.
- SQL Server does not have enough space to recover the database on startup.
To fix this problem, perform the following functions:
- Review the SQL Server and NT error logs to see if you can find where the problem occured.
- Start SQL Server in single user mode.
- Go to your control panel and services.
- Stop SQL Server
- Add the -m switch in the parameters pane below.
- Start SQL Server
- Run sp_resetstatus with the @dbname parameter.
(ie : sp_resetstatus @dbname = "pubs")
- Perform detailed DBCC checks (CHECKDB, CHECKALLOC, etc)
- Run a few random queries to see if you experience any problems.
- If no problems occur, stop and start SQL Server and open the database to production.
As an absolute last resort, you can place your database in emergency mode. By placing it in this mode, you will be allowed to copy data out of the database, even if the data is corrupt.
To place your database in emergency mode, use the
following command:
SP_CONFIGURE 'allow updates', 1
RECONFIGURE WITH OVERRIDE
GO
UPDATE master..sysdatabases set status = -32768 WHERE name = 'pubs'
GO
SP_CONFIGURE 'allow updates', 0
RECONFIGURE WITH OVERRIDE
You can then BCP data out and place it into a different database.