Introduction
SQL Server Database can reside in one among the seven states. For example these can be ONLINE, OFFLINE, RESTORING, SUSPECT etc. This article explains each of these states and includes a TSQL code which can be used to identify the current state of a SQL Server Database.
How to Identify Current State of SQL Server Database
Execute the below query to identify the current state of all the SQL Server Database in your Instance.
Use master
GO
SELECT
@@SERVERNAME AS [Server Name]
,NAME AS [Database Name]
,DATABASEPROPERTYEX(NAME, 'Recovery') AS [Recovery Model]
,DATABASEPROPERTYEX(NAME, 'Status') AS [Database Status]
FROM dbo.sysdatabases
ORDER BY NAME ASC
GO
GO
SELECT
@@SERVERNAME AS [Server Name]
,NAME AS [Database Name]
,DATABASEPROPERTYEX(NAME, 'Recovery') AS [Recovery Model]
,DATABASEPROPERTYEX(NAME, 'Status') AS [Database Status]
FROM dbo.sysdatabases
ORDER BY NAME ASC
GO
TSQL Query to Identify Database which are Offline in SQL Server
Before we discuss different states of SQL Server Database we assume that you are aware of Different Recovery Mode in SQL Server.
Different States of SQL Server Database
A SQL Server Database is can only be in one specific state at a given time. Different States of SQL Server Database are:-
- ONLINE:- When a database is in ONLINE state the database is available for access. The primary filegroup is online eventhough the undo phase of recovery may not have been completed.
- OFFLINE:- When a database is in OFFLINE state then the database is not accessable for user connections. One can set the database to this state if you don’t want users to connect to the database. For example you have migrated the database to a new server and don’t want users to accidently connect to the Old SQL Server Database.
- RESTORING:- When a database is in RESTORING state then it means one or more files of the primary filegroup is been restored or one or more secondary files are being resotored offline.
- RECOVERING:- When a database is in RECOVERING state it means its in the process of recovery and it will become automatically ONLINE for user connectivity. In case of a failure the database will become SUSPECT and become unable for use until a database intervene and fixes the issues.
- RECOVERY PENDING: - When a database is in RECOVERY PENDING state it means SQL Server has encountered a resource related error during recovery. The database might be missing files. DBAs intervention is required in such a case.
- SUSPECT: - When a database is in SUSPECT state it means the database is unavailable for user connection. Database may be damaged or at leasr the primary filegroup is supect. DBAs intervention is required in such a case. Read the following article which explains “How to Repair SUSPECT Database in SQL Server”
- EMERGENCY: - When a database is in EMERGENCY state it means a user has changed the status of the database to EMERGENCY. In EMERGENCY mode database will remain in SINGLE_USER mode and the database can be repaired or restored. Database will remain READ_ONLY. You need to be a member of SYSADMIN role to set database in EMERGENCY mode. You make have to set the state of the database as EMERGENCY when the database is market as SUSPECT. Read the following article which explains “How to set Database in EMERGENCY state”
Reference: Database States on TechNet
Conclusion
SQL Server Security in itself is a vast topic and in this article we have discussed few of the settings which can be easily implemented to improve the overall security of the SQL Servers which you manage day-to-day in your work.
Read more: http://www.mytechmantra.com/LearnSQLServer/Different-States-of-SQL-Server-Database/#ixzz3h4ciXlCj
Follow us: @MyTechMantra on Twitter | MyTechMantra on Facebook
Recovering Suspect Database
Everyone knows that, how much pain it is when a LIVE database is marked as suspect and especially there is no latest backup of the database.
What Happened when a data base is marked as Suspect:
If your LIVE database is in suspect mode, then no transaction will take place until and unless you repair your database. That causes a show stopper for your up and running application. Here, you will find a way to get out of this.
So, What the Solutions:
In this article, I am going to illustrate some T-SQL statements that can help you in case of suspect database marked.
EXEC sp_resetstatus 'YourDBName'
GO
ALTER DATABASE YourDBName SET EMERGENCY
DBCC checkdb('YourDBName')
ALTER DATABASE DBName SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('YourDBName', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE YourDBName SET MULTI_USER
GO
/*
Rebuild the index is necessay
*/
ALTER INDEX ALL ON [ TableName] REBUILD
Hope the information of this article is quite informative and thanking you to provide your valuable time on it.