Thursday, April 5, 2012

Database Accessibility


                There are going to be many times throughout the administration of databases that a DBA will need to control how the database is accessed.  Sometimes we need to shut it down altogether, or leave it open just enough to troubleshoot.  There are a few variations that can give you the end result for database accessibility.

Database State
                The database state controls whether or not the database is accessible, and the level of accessibility.  There are three options for database state
·         ONLINE – the database is accessible for user connections
·         OFFLINE – the database is shut down and can’t receive user connections
·         EMERGENCY – the database is READ_ONLY, and logging is disabled

Here are some examples in action:

Setting a database OFFLINE: (two variations for rolling back open transactions.  See code comments for descriptions of each)
use master
go

-- take database immediately offline
-- rollback all transactions right away
alter database YourDatabase
set offline
with rollback immediate
go

-- take database offline when all open trans are
--  committed or rolled back
-- rollback all transactions after 30 seconds
alter database YourDatabase
set offline
with rollback after 30
go

Setting a database ONLINE:
use master
go

alter database YourDatabase
set online
go

Setting a database in EMERGENCY:
alter database YourDatabase
set emergency
with rollback immediate
go


Database Updateability
                There are two options to control whether or not write operations can be executed on a database:
          ·         READ_ONLY – data can be read but not written
          ·         READ_WRITE – data can be read and written to (given appropriate privileges)

Put database in READ_ONLY:
alter database YourDatabase
set read_only
with rollback immediate
go

Put database in READ_WRITE:
alter database YourDatabase
set read_write
with rollback immediate
go


Database User Access
                There are no doubt times when you’ll absolutely need to change how many users and if only certain roles can connect to the database.  There are three options that control database user access:
          ·         MULTI_USER – all users are allowed to connect to the database (given appropriate privileges)
          ·         SINGLE_USER – only one user (with privileges to connect) can be connected at any given time
          ·         RESTRICTED_USER – only members of the following roles can connect to the database: db_owner (database role), sysadmin (server role), and dbcreator (server role)

Set database for MULTI_USER access:
alter database AdventureWorks2012
set multi_user
go

Set database for SINGLE_USER access:
alter database AdventureWorks2012
set single_user
with rollback immediate
go

Set database for RESTRICTED_USER access:
alter database AdventureWorks2012
set restricted_user
with rollback immediate
go

                In summary, this post has showed you numerous ways to control the way users, and who (and how many) is able to access the database.  Any comments, questions, or problems you can leave a comment below or email me at sqlsalt@gmail.com.

                As for the code to this post, it is kept in my SQLSalt GitHub repository, as follows:

No comments:

Post a Comment