Social Icons

twitter facebook google plus linkedin

viernes, 28 de septiembre de 2012

Contained Databases en SQL Server 2012

Es muy común que una base de datos, en algún momento de su existencia y por razones particulares, tenga que ser llevada hacia otro servidor SQL Server. El proceso es simple. Hay que exportar la base de datos hacia el servidor de destino y listo. No tiene mucha complicación ni ciencia alguna. Todos sabemos que este escenario ideal no existe. Nunca una migración va a ocurrir de esta forma. Siempre algo que requerirá más trabajo, que son los objetos a nivel de aplicación.

Una Contained Database guarda absolutamente todos sus objetos dentro de la base de datos, cosa que cuando sea necesario levantar la base de datos, lo pueda hacer sin problema alguno. O sea, no tiene dependencias.

Una contained database almacena lo siguiente:

  • Tables

  • Functions

  • Constraints

  • Schemas

  • Types

  • Logins

  • Application-Level Agent Job

  • Persisted error messages

  • Linked server information

  • System Settings


Y soporta ambas autenticaciones.

Para habilitar el login hacia contained databases, se debe ejecutar el siguiente código:


sp_configure 'show advanced', 1;
RECONFIGURE WITH OVERRIDE;
go
sp_configure 'contained database authentication', 1;
RECONFIGURE WITH OVERRIDE;
go


Para crear una base de datos contenida, se puede hacer via código:


CREATE DATABASE [MiDB] CONTAINMENT = PARTIAL


O se puede hacer a través del asistente:

[caption id="attachment_1415" align="alignnone" width="300"]Creacion de un usuario a través de wizard Creacion de un usuario a través de wizard[/caption]

Para crear un usuario se hace usan las mismas instrucciones como si fuera una base de datos común y corriente:


USE MiDB
GO
CREATE USER MiUSER WITH PASSWORD = 'TEST123!!'
GO


En conclusión, una contained db es una base de datos común y corriente, pero se diferencia de las demás porque almacena todos los objetos necesarios para funcionar en cualquier instancia de SQL Server 2012.