domingo, 28 de junio de 2009

Conceptos de seguridad en SQL Server

El manejo de la seguridad en SQL SERVER 2005 se basa en tres entidades, Principales, Permisos y asegurables

Los principales son todos aquellos objetos a los cuales se les colocan permisos para acceder a los asegurables.

Ejemplos de principales son : Grupos de windows, Cuentas de dominio, usuario locales, Logins de sql, roles de servidor, roles de base de datos, role de aplicación y usuarios

Los asegurables son aquellos objetos que son utilizados por los principales. Existen tres tipos de niveles de asegurables.

Nivel de servidor
*Logins
*Endpoints
*Databases

Nivel de Base de datos
*Usuarios
*Roles
*Roles de aplicación
*Certificados
*Llaves simetricas
*Llaves asimetricas
*Ensamblados
*Catálogos de Full-test
*Eventos DDL
*Esquemas

Nivel de esquema
*Tablas
*Vistas
*Funciones
*Procedimientos
*Tipos
*Sinonimos
*Agregados

Noten que por ejemplo los Roles son principales y asegurables a la vez.

Los permisos controlan el acceso de los principales a los asegurables, estos se pueden otorgar, revocar o denegar

Siempre el permiso denegar tiene mayor preferencia que los otros permisos, con excepción cuando se deniega el permiso sobre un tabla pero se otorga en una columna

Otorgar permisos

GRANT ALL [ PRIVILEGES ] permission [ ( column [ ,...n ] ) ] ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ] TO [ ,...n ] [ WITH GRANT OPTION ] [ AS ]

La opción ALL otorga los siguientes permisos teniendo en cuenta ANSI-92

*Permisos de función escalar: EXECUTE y REFERENCES.
*Permisos de función con valores de tabla: DELETE, INSERT, REFERENCES, SELECT y UPDATE.
*Permisos de procedimiento almacenado: EXECUTE, SYNO
NYM, DELETE, INSERT, SELECT y UPDATE.
*Permisos de tabla: DELETE, INSERT, REFERENCES, SELECT y UPDATE.
*Permisos de vista: DELETE, INSERT, REFERENCES, SELECT y UPDATE.

La opción PRIVILEGES se coloco por compatibilidad con versiones anteriores

La opción WHIT GRANT OPTION indica que el principal también podrá otorgar el mismo permiso a otros principales

Ejemplo: Asignar al usuario julio permiso sombre la tabla empleados en la base de datos prueba

USE Prueba
GRANT SELECT ON OBJECT::DBO.EMPLEADOS TO JULIO
GO

Asignar al usuario julio permiso de lectura sobre el campo EmployeeID de la tabla empleados con WHIT GRANT OPTION

USE Prueba
GRANT SELECT (EmployeeID) ON OBJECT::DBO.EMPLEADOS TO JULIO WITH GRANT OPTION
GO

Denegar permisos

DENY ALL [ PRIVILEGES ] permission [ ( column [ ,...n ] ) ]ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ] TO [ ,...n ] [ CASCADE ] [ AS ]

La opción CASCADE indica que también se denegara el permiso a las entidades a las cuales el principal le otorgo el permiso

Ejemplo: Denegar al principal julio el permiso de insertar sobre la tabla empleados de la BD prueba

USE Prueba
DENY INSERT ON OBJECT::DBO.EMPLEADOS TO JULIO CASCADE
GO

Revocar permisos

REVOKE [ GRANT OPTION FOR ] [ ,...n ] ON [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ] { FROM TO } [ ,...n ] [ CASCADE ] [ AS ]

Ejemplo: Quitar el permiso de ejecución del procedimiento almacenado ActualizarSalario de la BD Prueba al usuario julio

USE Prueba
REVOKE EXECUTE ON OBJECT::dbo.ActualizarSalario FROM julio
GO

Los permiso que se pueden otorgar, revocar y denegar a un asegurable son:

*Control: Da al principal todos los privilegios que tiene el propietario sobre el asegurable
*Alter: Tiene todos los privilegios con excepción de tomar propiedad de un asegurable
*Take Ownership: tomar propiedad del asegurable
*Create: Permite al principal crear asegurables
*View definition: permite ver la sentencias T-SQL con las cuales fueron creadas los asegurables
*Select: Permite al principal leer datos sobre el asegurable
*Insert: Permite al principal insertar datos sobre el asegurable
*Update: Permite al principal modificar datos sobre el asegurable
*Delete: Permite al principal borrar datos sobre el asegurables
*Reference:
*Execute:
Permite al principal ejecutar asegurables

Service Broker

Es una plataforma para construir servicios seguros, confiable y escalables. Utilizan mensajes para intercambiar información entre servicios por medio de TCP IP

Es útil cuando se necesita procesamiento asíncrono o distribuir trabajos en diferentes computadores

Para habilitarlo es necesario ejecutar la siguiente sentencia T-SQL

ALTER DATABASE AdventureWorks SET ENABLE_BROKER

Para configurar la arquitectura del Service Broker contamos con 4 objectos.

Message Type: Define el nombre del mensaje y el tipo de informacion que el mensaje contiene. Estos mensajes deben ser creados en ambas partes de la conversacion

CREATE MESSAGE TYPE message_type_name
[AUTHORIZATION owner_name]
[VALIDATION =
{NONE EMPTY WELL_FORMED_XML
VALID_XML WITH SCHEMA COLLECTION schema_collection_name}]


Los posibles valores para VALIDATION son:
NONE: no se realiza ninguna validación
EMPTY: El cuerpo del mensaje debe tener valor NULO
WELL_FORMED_XML: Debe contener un XML bien formado
VALID_XML WITH SCHEMA COLLECTION: El contenido del XML debe cumplir con el XML SCHEMA señalado

Para modificarlo necesitamos utiliza la sentecia ALTER

ALTER MESSAGE TYPE message_type_name
VALIDATION =
{NONE EMPTY WELL_FORMED_XML
VALID_XML WITH SCHEMA COLLECTION schema_collection_name}]

Y para eliminar

DROP MESSAGE TYPE message_type_name

Contract: Define los tipos de mensajes que un servicio puede utilizar en una conversación y la dirección en que los mensajes pueden ser enviados

CREATE CONTRACT contract_name
[ AUTHORIZATION owner_name ]
( { message_type_name SENT BY { INITIATOR TARGET ANY }
[ DEFAULT ] } [ ,...n] )


Los posibles valores para SENT BY son:
INITIATOR: indica que solo el iniciador puede enviar dicho tipo de mensaje
TARGET: Indica que solo el destino puede enviar dicho tipo de mensaje
ANY: Indica que tanto el iniciador y el destino pueden enviar dicho tipo de mensaje

Para eliminar un contrato la sintaxis es la siguiente:

DROP CONTRACT contract_name

Queue: Define la ubicación donde se almacenaran los mensajes hasta que un servicio este disponible para atender los mensajes

CREATE QUEUE [database_name.[schema_name].schema_name.] queue_name
[ WITH
[ STATUS = { ON OFF } [ , ] ]
[ RETENTION = { ON OFF } [ , ] ]
[ ACTIVATION (
[ STATUS = { ON OFF } , ]
PROCEDURE_NAME = stored_procedure_name,
MAX_QUEUE_READERS = max_readers ,
EXECUTE AS { SELF 'user_name' OWNER }
) ]
]
[ ON { filegroup [ DEFAULT ] } ]


STATUS: Especifica si la cola esta habilitada. Cuando esta en OFF ningún servicio podría retirar mensajes de la cola.

RETENTION:Indica si la cola debe mantener todos los mensajes hasta que la conversación finalice

ACTIVATION STATUS: Indica si se debe activar el procedimiento almacenado cuando llegue un mensaje a la cola

MAX_QUEUE_READERS: Indica la cantidad máxima de servicio que correrán simultáneamente

EXECUTE AS:
especifica la cuenta de usuario con que correrá el servicio

Para modificar esta es la sintaxis

ALTER QUEUE [database_name.[schema_name].schema_name.] queue_name
[ WITH
[ STATUS = { ON OFF } [ , ] ]
[ RETENTION = { ON OFF } [ , ] ]
[ ACTIVATION (
[ STATUS = { ON OFF } , ]
PROCEDURE_NAME = stored_procedure_name,
MAX_QUEUE_READERS = max_readers ,
EXECUTE AS { SELF 'user_name' OWNER }
] DROP })
]


Para eliminar una cola la sintaxis es:

DROP QUEUE [database_name.[schema_name].schema_name.] queue_name

SERVICE: Relaciona las colas con los contractos

CREATE SERVICE service_name
[ AUTHORIZATION owner_name ]
ON QUEUE [ schema_name. ]queue_name
[ ( contract_name [DEFAULT] [ ,...n ] ) ]


Para modificar el servicio utilice la siguiente sintaxis:

ALTER SERVICE service_name
[ON QUEUE [schema_name].queue_name]
[(ADD CONTRACT contract_nameDROP CONTRACT contract_name)]



ON QUEUE: Especifica la nueva cola para el servicio y mueve todos los mensajes de la cola vieja a la nueva

ADD CONTRACT: Añade un contrato a la colección de contratos asociados a este servicio

DROP CONTRACT: Especifica los contratos que se eliminaran del servicio. En caso de que alguno se este ejecutando mostrara un mensaje de error.

Para comenzar a usar los servicios se deben establecer una conversación. Estos son los pasos para establecer una conversación.

Crear la variable que identificara de manera única la conversación.

DECLARE @dialog_handle uniqueidentifier

Iniciar la conversación

BEGIN DIALOG [ CONVERSATION ] @dialog_handle
FROM SERVICE initiator_service_name
TO SERVICE 'target_service_name'
[ , { 'service_broker_guid' 'CURRENT DATABASE' } ]
[ ON CONTRACT contract_name ]
[ WITH
[ { RELATED_CONVERSATION = related_conversation_handle
RELATED_CONVERSATION_GROUP = related_conversation_group_id } ]
[ [ , ] LIFETIME = dialog_lifetime ]
[ [ , ] ENCRYPTION = { ON OFF } ] ]


RELATED_CONVERSATION o RELATED_CONVERSATION_GROUP relaciona un nuevo dialogo con una conversacion existente

LIFETIME= tiempo en segundo en la que será valido el dialogo

Enviar mensaje

SEND
ON CONVERSATION conversation_handle
[ MESSAGE TYPE message_type_name ]
[ ( message_body_expression ) ]

El destino recibe el mensaje

[ WAITFOR ( ]
RECEIVE [ TOP ( n ) ]
[ ,...n ]
FROM
[ INTO table_variable ]
[ WHERE { conversation_handle = conversation_handle
conversation_group_id = conversation_group_id } ]
[ ) ] [ , TIMEOUT timeout ]


WAITFOR: especifica que la clausula RECEIVE espera un mensaje

RECEIVE: lee los mensajes de la cola y los elimina en caso de que la opción RETENTION de la cola este desactivada.

TOP: Indica cuantos mensajes se van a leer de la cola, sino se especifica se leerán todos los mensajes

INTO: Ingresa todos los mensajes en una tabla para ser tratados después

WHERE: especifica la conversación o grupo de conversaciones para los mensajes leídos

TIMEOUT: Especifica el tiempo en milisegundos en que la instrucción espera un mensaje.

Para terminar la conversación

END CONVERSATION conversation_handle
[ [ WITH ERROR = failure_code DESCRIPTION = 'failure_text' ]
[ WITH CLEANUP ]


Ejemplo de todo el proceso

CREATE MESSAGE TYPE TicketRequest AUTHORIZATION dbo
VALIDATION = WELL_FORMED_XML

CREATE MESSAGE TYPE TicketStatus AUTHORIZATION dbo
VALIDATION = WELL_FORMED_XML

CREATE QUEUE SenderQUEUE

CREATE QUEUE ReceiverQUEUE

CREATE CONTRACT Ticketservicescontract
(TicketRequest SENT BY INITIATOR,
TicketStatus SENT BY TARGET)

CREATE SERVICE SendTicketingService ON
Queue SenderQUEUE
(Ticketservicescontract)

CREATE SERVICE ReceiveTicketingService ON
Queue ReceiverQUEUE
(Ticketservicescontract)

declare @message xml
declare @conversationhandle UNIQUEIDENTIFIER
set @message =
'
dandy@ilikesql.com
5
Sybex SQLTraining
' '

BEGIN DIALOG CONVERSATION @conversationHandle
FROM SERVICE SendTicketingService
TO SERVICE 'ReceiveTicketingService'
ON CONTRACT Ticketservicescontract
WITH ENCRYPTION = OFF;

SEND ON CONVERSATION @conversationHandle
MESSAGE TYPE TicketRequest
(@message);
END CONVERSATION @conversationHandle

CREATE PROCEDURE STP_ProcessQueue
AS
BEGIN
DECLARE @conversation_handle UNIQUEIDENTIFIER,
@message_body XML,
@message_type_name NVARCHAR(128);
RECEIVE TOP(1)
@conversation_handle = conversation_handle,
@message_type_name = message_type_name,
@message_body = message_body
FROM [dbo].[ReceiverQUEUE]
-- DO SOMETHING with the message
if @message_type_name = 'TicketRequest'
BEGIN
-- EXEC stp_processticketrequest @message_body
SELECT @message_body
END
END CONVERSATION @conversation_handle ;
END
GO

ALTER QUEUE ReceiverQUEUE
WITH ACTIVATION (STATUS = ON,
PROCEDURE_NAME = STP_ProcessQUEUE,
EXECUTE AS OWNER)
GO

EXEC STP_ProcessQUEUE

sábado, 27 de junio de 2009

XML

SQL SERVER 2005 incluye el manejo de datos de tipo XML en su base de datos, la cual proporciona diferentes herramientas para consultar, modificar Y validar datos XML.

Dentro de la posibilidades de manejo de XML en SQL SERVER están:

Almacenamiento nativo de datos XML
Conversión de datos relacionales a estructuras XML por medio de la Clausula FOR XML
Realizar consultas por medio de la sentencia OPENXML
Usar expresiones XQUERY
Creación de Indexes XML
Validación de estructuras XML por medio Esquemas XML

Clausula FOR XML

Esta clausula sirve para transformar información relacional en documentos XML.

Sintaxis

FOR XML
{
{ RAW [ ( 'ElementName' ) ] AUTO }
[

[ , { XMLDATA XMLSCHEMA [ ( 'TargetNameSpaceURI' ) ] } ]
[ , ELEMENTS [ XSINIL ABSENT ]
]
EXPLICIT
[

[ , XMLDATA ]
]
PATH [ ( 'ElementName' ) ]
[

[ , ELEMENTS [ XSINIL ABSENT ] ]
]
}
::=
[ , BINARY BASE64 ]
[ , TYPE ]
[ , ROOT [ ( 'RootName' ) ] ]


Para los siguientes ejemplos utilizaremos la siguiente consulta a la BD AdventureWorks















El significado de los parámetros es el siguiente:

*RAW: Transforma cada fila en un elemento XML que tiene un identificador genérico.
Si se especifica RAW (indentificador) el resultado seria el siguiente:








*AUTO: Devuelve un XML anidado donde la información de cada tabla utilizada en la consulta se convierte en un elemento


















*EXPLICIT: especifica el formato de XML

La siguiente consulta devuelve un formato parecido a resultado del ejercicio anterior.






















*PATH: Especifica un formato XML de una manera mas sencilla que utilizando la opción explicit
















*ELEMENTS: Devuelve las columnas como elementos en vez de atributos, aplica para las opciones AUTO y RAW

Ejemplo de auto con elements



















*ROOT: coloca un elementos raíz en el resultado de la consulta


















*TYPE: Devuelve los resultados como tipo de datos XML

*XMLDATA: Incluye en los resultados el schema (XDR)














*XMLSCHEMA: incluye en los resultados el schema (XSD)














*XSINIL: crea elementos para los valores nulos

OPEN XML

OPEN XML Transforma datos XML en datos relacionales.

OPENXML(idoc int [in],rowpattern nvarchar[in],[flags byte[in]])
[WITH (SchemaDeclaration TableName)]


Los siguientes ejemplos se realizaran basados en el siguiente XML

Para comenzar debemos declara las variable que almacenara el XML y el puntero al documento XML preparado












Después preparamos el documento para que nos pase el puntero que necesita el OPEN XML para realizar la consulta

















Como podrán observar a la instrucción se le paso la variable @Hdoc que tiene el puntero a la representación del documento XML, se especifico la ruta @ '/ROOT/Customers/Orders/Order_Details' para tenerlo como referencia de búsqueda en los valores

Las variables que están en el Xpath se especifican con una @ mas el nombre del atributo, los que están en elementos superiores deben especificar tantos ../ necesarios para ubicarse en el elemento respectivo y los que están en elementos inferiores deben especificar la ruta .

Si se quiere extraer el contenido de un elemento se puede realizar especificando el xpath y en ves de utilizar @NombreVariable se coloca Text()

XQUERY

Es una herramienta que se utiliza para realizar consultas sobre fuentes de datos XML y esta implementado en los tipos de datos XML de sql server 2005

Posee 5 métodos:

*Query
*Value
*Exist
*Node
*Modify

Para la explicación vamos a utilizar el siguiente documento XML











Metodo Query

Sirve para extraer fragmentos XML por medio de expresiones XQUERY














Metodo Value

Sirve para devolver un único valor







Metodo Exist

Sirve para determinar la existencia de un nodo en el documento, devuelve 1 si encuentra alguna coincidencia en caso contrario devuelve 0






Metodo Modify (XML DML)

Sirve para insertar, modificar y eliminar nodos en un XML

Clausula insert

insert Expression1 (
{as first as last} into after before
Expression2 )













Clausula replace

replace value of Expression1 with Expression2










Clausula delete

delete Expression





Metodo Nodes

Extrae los datos XML en formato relacional









Este método también se puede utilizar en columnas tipo XML de la siguiente manera










Inserciones masivas

INSERT INTO Tbl_orders(Xmldata)
SELECT * FROM OPENROWSET(
BULK 'c:\Sybex\OpenRowsetXmldata.xml',
SINGLE_BLOB) AS x


Se utiliza Single_Blob ya que admite mas codificaciones de Windows

SINGLE_CLOB: lee los datos com ASCII
SINGLE_NLOB: lee los datos como Unicode

Índices XML

Para crear indices XML debe cumplirse los siguientes requerimientos

*La tabla que contiene la columna XML debe tener una llave primaria Closterado
*Si cambias la llave primaria debes eliminar todas los índices XML y volver a créalos después de realizar al cambio en la llave primaria
*Puedes tener un primary index xml por columna
*No se pueden tener un xml índice y un no xml índice con el mismo nombre en la mimas tabla
*No puedes usar las opciones IGNORE_DEP_KEY y ONLINE cuando creas el índice
*No puedes crear índices XML en vistas, Variable tipo tabla ni variables XML
*Debes eliminar un índice XML si quiere cambiar el tipo de índice
*Debes activar la opción ARITHABORT cuando creas un índice XML o cuando realizas alguna acción DML en la columna XML

Los índices XML están compuesto por un índice primario y un secundario

El índice XML primario realiza una representación B-tree delos nodos XML. La sintaxis de creación es la siguiente

CREATE PRIMARY XML INDEX PXML_ProductModel_CatalogDescription
ON Production.ProductModel (CatalogDescription)


El Índice XML secundario es un índice no Closterado del índice primario. Existen 3 tipos.

Índice PATH : mejora el rendimiento de consultas que utilizan PATH y VALUE para seleccionar datos, como por ejemplo la consultas que utilizan el método exist en el where de una consulta. /ItemList/Item[@ProductID="1"]

CREATE XML INDEX XMLPATH_ProductModel_CatalogDescription
ON Production.ProductModel(CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription
FOR PATH

Indice VALUE: mejora el rendimiento de consultas que utilizan VALUES para seleccionar datos. Ideal para busquedas de un valor que puede aparecer en diferentes partes del xml. //Item[@ProductID="1"]

CREATE XML INDEX XMLVALUE_ProductModel_CatalogDescription
ON Production.ProductModel(CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription
FOR VALUE


Indice PROPERTY: mejora el rendimiento de consultas que utilizan VALUES para extraer datos-(/ItemList/Item/@ProductID)[1]

CREATE XML INDEX XMLPROPERTY_ProductModel_CatalogDescription
ON Production.ProductModel(CatalogDescription)
USING XML INDEX PXML_ProductModel_CatalogDescription
FOR PROPERTY



Snapshot

Una Snapshot es la representación de una base de datos en un momento determinado.

Esta base de datos es de solo lectura y debe estar en el mismo servidor donde esta la base de datos original. No se puede realizar un backup ni mucho menos restaurarla.

La única manera de crear un Snapshot es por código T-SQL

Una Snapshot solo almacena copias de paginas de datos que fueron modificadas después de realizarse el Snapshot, de esta manera cuando se realiza un consulta sobre el Snapshot el motor de la BD realiza la búsqueda en las paginas de datos de la BD y en las de el Snapshot y de esta manera devuelve los resultados de la fecha correspondiente al Snapshot

La sintaxis es la siguiente

CREATE DATABASE Snapshotname ON
( NAME = Logicalfile , FILENAME =
'Physicalfilename' )
AS SNAPSHOT OF SnapshotThisDatabase;


Ejemplo:

CREATE DATABASE Prueba_10AM ON( NAME = Prueba, FILENAME = 'C:\BD\Prueba_10AM.ss' )AS SNAPSHOT OF Prueba;

Después de creado el Snapshot este puede ser utilizado como método para recuperar información perdida o dañada accidentalmente.

Existen 4 escenarios donde se puede recuperar información de in Snapshot

Registros borrados

INSERT INTO Ventas
SELECT *
FROM
Prueba_10AM.Ventas

Registros modificados

UPDATE ventas
SET Total = (
SELECT Total
FROM
Prueba_10AM.Ventas
WHERE anio = 2009)
WHERE anio = 2009

Objetos borrados

Se genera el script de creación del objeto, se corre en la base de datos y se rellena la tabla con la información del Snapshot

Restaurar todo el Snapshot

RESTORE DATABASE Prueba
FROM DATABASE_SNAPSHOT = 'Prueba_10AM'

Log Shipping

Log Shipping es una técnica de alta disponibilidad en la cual las transacciones realizadas sobre un servidor principal son restauradas periódicamente en otro servidor dejando al segundo servidor disponible para realizar consultas. Esta tecnología no realiza automatic Fail over

Entre mas frecuente sean la realización de los backups de los log, el servidor de contingencia estará mas actualizado.

Opcionalmente tu puedes crear un monitor server, que vigilara el comportamiento del log shipping. Este servidor debería estar en otro servidor diferente al principal y el de contingencia

Como prerrequisito para configurar el log shipping tu debes realizar lo siguiente:

Crear una carpeta compartida donde se ubicaran los backups de los logs. Preferiblemente esta carpeta debería estar en otro servidor que no sea el principal para que los servidores secundarios puedan acceder a esta aunque el servidor principal este caído

Crear una carpeta compartida en cada uno de los servidores secundario, para que el log shipping copie los archivos allí


Los Procedimiento almacenados para configurar manualmente el log shipping son

sp_add_log_shipping_primary_database: Configura el Log shipping en el servidor primario incluyendo el Job del backup y el monitor
sp_add_jobschedule: Crea un nuevo Programa de trabajo
sp_add_log_shipping_alert_job: Crea un job de alertas
sp_add_log_shipping_secondary_primary: Configura la información del servidor primario, añade los monitores y copia y restaura jobs en el segundo servidor
sp_add_log_shipping_secondary_database: Configura el servidor secundario para log shipping
sp_add_log_shipping_primary_secondary : Añade servidores secundarios al principal

Para intercambiar los roles se deben realizar los siguientes pasos

*Copiar los backups de la carpeta compartida del servidor principal a la carpeta compartida del secundario
*Si el servidor primario esta disponible , se debe realizar un backup de log con la opción NORECOVERY
*Restaure todos los logs en el servidor secundario con la opción RECOVERY
*Deshabilite los job del logshipping en el servidor Primario y deshabilite los jobs de restauración en el secundario
*Reconfigurar el Servidor secundario como primario.

Database Mirroring

Database mirroring es una solución de alta disponibilidad implementada en hardware comunes.

En una solución de Database mirroring pueden actuar tres participantes con diferentes roles.

Principal Server: Es el servidor que mantiene la copia activa de la BD que están utilizando los clientes. Cada transacción es realizada al tiempo en el servidor y en el espejo
Mirror Server : Mantiene la copia de la Bd principal sincronizada
Witness Server: Es un componente adicional (Instancia o equipo) que monitoriza el estado del los servidores y en caso de presentarse una falla en el principal, habilita al Mirror como Principal

Existen tres tipos de modos de configuración de Database Mirroring

Alta Disponibilidad: Garantiza la consistencia transaccional entre el servidor principal y el espejo y ofrece Automatic Failover por medio de un Testigo
Alta Protección: Garantiza la consistencia transaccional entre el servidor principal y el espejo
Alto Rendimiento: Aplica la transacciones en el Servidor Espejo de manera asíncrona ocasionando mejoras significativas en el rendimiento del servidor principal pero no garantiza que dichas transacciones se hallan realizado de manera exitosa en el espejo.

Para configurar un el Data base Mirroring tu debes realizar los siguientes pasos

*Crear los mirroring Endpoints y logins.
*Configurar el modo de recuperación FULL
*Realizar un Backup de la BD principal y restaurarla en el espejo
*Copiar cualquier recurso adicional en el servidor espejo

La comunicación entre los servidores se hace por medio de Endpoints

Un ejemplo de un EndPoints seria:

CREATE ENDPOINT endpoint_mirroring
STATE = STARTED
AS TCP ( LISTENER_PORT = 4099 )
FOR DATABASE_MIRRORING
(
AUTHENTICATION = WINDOWS KERBEROS,
ENCRYPTION = SUPPORTED,
ROLE=ALL);


Estos Endpoint deberían ser creados en cada uno de los componentes de la solución especificando su respectivo role

Los roles pueden ser ALL, PARTNER o WITNESS

Para que los participantes sepan quienes son los otros componentes es necesario configurar la base de datos para que los conozca

En el servidor Principal debemos ejecutar esta instrucción para que el conozca quien es su compañero

ALTER DATABASE PRUEBA SET PARTNER ='TCP://MIRROR.DOMINIO.com:5022'

En el Servidor espejo debemos ejecutar esta instrucción

ALTER DATABASE PRUEBA SET PARTNER = 'TCP://PRINCIPAL.DOMINIO.com:5022'

Y si tenemos un testigo debemos ejecutar la siguiente instrucción en ambos servidores

ALTER DATABASE PRUEBA SET PARTNER = 'TCP://TESTIGO.DOMINIO.com:5023'

Existen otras configuraciones que se pueden realizar con ALTER DATABASE como son:

Safety: Esta opción puede tomar dos valores FULL o OFF. Cuando esta configurada como FULL las transacciones se realizan sincrónicamente y se garantiza el Fails over automático. Cuando esta en OFF las transacciones se realizan asíncronamente

ALTER DATABASE Prueba SET PARTNER SAFETY FULL

Failover: Realiza manualmente un fail over del principal al espejo. Esto se ejecuta en el Principal


ALTER DATABASE Prueba SET PARTNER FAILOVER

Force_Service_Allow_Data_Loss: Forza al espejo a tomar el rol de principal. Esta se utiliza cuando el principal no esta disponible y el testigo esta Off

ALTER DATABASE Prueba SET PARTNER
FORCE_SERVICE_ALLOW_DATA_LOSS

Servidores Linkiados

Un Servidor linkiado te permite realizar consultas sobre servidores remotos. Deben ser configurados cuando se utilizan frecuentemente

La sintaxis es la siguiente:

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ] [ , [ @provider= ] 'provider_name' ] [ , [ @datasrc= ] 'data_source' ] [ , [ @location= ] 'location' ] [ , [ @provstr= ] 'provider_string' ] [ , [ @catalog= ] 'catalog' ]

Ejemplo: Linkiar BD Access

EXEC sp_addlinkedserver @server = 'SEATTLE Mktg', @provider = 'Microsoft.Jet.OLEDB.4.0', @srvproduct = 'OLE DB Provider for Jet', @datasrc = 'C:\MSOffice\Access\Samples\Northwind.mdb'

Linkiar archivo de Excel

EXEC sp_addlinkedserver 'ExcelSource', 'Jet 4.0', 'Microsoft.Jet.OLEDB.4.0', 'c:\MyData\DistExcl.xls', NULL, 'Excel 5.0'

Para asociar un inicio de session a una cuenta remota en n linkserver se utiliza este procedimiento

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' [ , [ @useself = ] 'TRUE' 'FALSE' 'NULL'] [ , [ @locallogin = ] 'locallogin' ] [ , [ @rmtuser = ] 'rmtuser' ] [ , [ @rmtpassword = ] 'rmtpassword' ]

Si se especifica la variable @locallogin como NULL, esto significa que todos los inicios de sesión que no estén mapeados seguirán dicha configuración

Ejemplo

Asociar el usuario julio al servidor remoto Externo con el usuario julioexterno

EXEC sp_addlinkedsrvlogin 'Externo', 'false', 'julio', 'julioexterno', 'qdwe98hg'

Para quitar la asignacion utilizamos el siguiente código

EXEC sp_droplinkedsrvlogin 'Externo', 'julio'

Para listar los servidores linkiados se utilizar el procedimiento almacenado sp_linkedservers .

Encriptación

SQL SERVER 2005 soporta llaves criptográficas, certificados digitales y funciones criptográficas para aumentar el nivel de seguridad de la información .

Llaves simétricas
Es un valor que es usado para encriptar o desencriptar datos. Esta llave debe ser compartida entre el encriptador y el desencriptador.

La sintaxis para crear una llave simétrica es:

CREATE SYMMETRIC KEY key_name [ AUTHORIZATION owner_name ] WITH [ , ... n ] ENCRYPTION BY [ , ... n ] ::= CERTIFICATE certificate_name PASSWORD = 'password' SYMMETRIC KEY symmetric_key_name ASYMMETRIC KEY asym_key_name ::= KEY_SOURCE = 'pass_phrase' ALGORITHM = IDENTITY_VALUE = 'identity_phrase' ::= DES TRIPLE_DES RC2 RC4 RC4_128

Ejemplo:

CREATE SYMMETRIC KEY LlaveSimetrica
WITH ALGORITHM= AES_256
ENCRYPTION BY PASSWORD = 'SF$5454%&2DSF'


Llave asimétrica
Son un par de valores que están compuesto por una llave publica y una privada.
la llave publica es una llave compartida que se encarga de encriptar los datos y la llave privada se encarga de desencriptarlos .

Estas llaves son usadas para crear firmas digitales.

La sintaxis para crear una llave asimétrica es:

CREATE ASYMMETRIC KEY Asym_Key_Name [ AUTHORIZATION database_principal_name ] { [ FROM ] WITH [ ENCRYPTION BY ]::= FILE = 'path_to_strong-name_file' EXECUTABLE FILE = 'path_to_executable_file' ASSEMBLY Assembly_Name PROVIDER Provider_Name ::= ALGORITHM = PROVIDER_KEY_NAME = 'key_name_in_provider' CREATION_DISPOSITION = { CREATE_NEW OPEN_EXISTING } ::= { RSA_512 RSA_1024 RSA_2048 } ::= PASSWORD = 'password'

Ejemplo

CREATE ASYMETRIC KEY LlaveAsimetrica
WHIT ALGORITHM=RSA_2048
ENCRYPTION BY PASSWORD = 'SF$5454%&2DSF'


Certificados digitales
Los certificados asocian una llave publica con una persona

Los certificados contienen:

*Una llave publica del sujeto
*Información sobre el sujeto
*Tiempo de expiración
*Identificación del emisor y firma digital

CREATE CERTIFICATE certificate_name [ AUTHORIZATION user_name ] { FROM } [ ACTIVE FOR BEGIN_DIALOG = { ON OFF } ] ::= ASSEMBLY assembly_name { [ EXECUTABLE ] FILE = 'path_to_file' [ WITH PRIVATE KEY ( ) ] } ::= [ ENCRYPTION BY PASSWORD = 'password'] WITH SUBJECT = 'certificate_subject_name' [ , [ ,...n ] ] ::= FILE = 'path_to_private_key' [ , DECRYPTION BY PASSWORD = 'password' ] [ , ENCRYPTION BY PASSWORD = 'password' ] ::= START_DATE = 'mm/dd/yyyy' EXPIRY_DATE = 'mm/dd/yyyy'


Ejemplos:

CREATE CERTIFICATE Ventas ENCRYPTION BY PASSWORD = ''SF$5454%&2DSF' WITH SUBJECT = 'Certificado de ventas', EXPIRY_DATE = '10/31/2009';


Crear certificado desde archivo

CREATE CERTIFICATE Ventas FROM FILE = 'c:\DB\Ventas.cer' WITH PRIVATE KEY (FILE = 'c:\DB\Ventas.pvk', DECRYPTION BY PASSWORD = 'sldkflk34et6gs%53#v00');

Create certificado a un ensamblado

CREATE CERTIFICATE Ventas FROM ASSEMBLY AssemblyVentas

Para realizar una copia del certificado se debe utilizar la siguiente sintaxis

BACKUP CERTIFICATE Ventas
TO FILE = 'c:\DB\Ventas.cer'


Funciones de criptográficas

EncryptByKey y DecryptByKey: encripta y desencripta datos con llaves simétricas
EncryptByAsymKey y DecryptByAsymKey: encripta y desencripta datos con llaves asimétricas
EncryptByCert y DecryptByCert: encripta y desencripta datos con certificados digitales

Ejemplo

OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037;
EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);

Configurar el SQL Server DatabaseMail

DatabaseMail es una solución empresarial para enviar correo electrónico desde sql server. Esta no esta disponible para versiones de Sql Express edition

Para habilitarla debes hacerlo a trabes del SQL Server Surface Area Configuration o Database Mail Configuration Wizard

Por medio del asistente tu puedes realizar la siguientes tareas

*Configurar el Database email
*Administrar las cuentas de correo y perfiles
*Administrar la seguridad de los perfiles
*Ver y cambiar parámetros del sistema

Para poder configurarlo debes ser miembro de Sysadmin rol y para poder utilizarlo debes ser miembro de DatabaseMailUserRole en MSDB

Los siguientes procedimiento almacenados sirven para configurar el DatabaseMail:

sysmail_configure_sp: Configura las opciones de DM

sysmail_help_configure_sp : Muestra las opciones de configuracion


sysmail_(add,update,delete)_account_sp: añade,modifica o borra una nueva cuenta de usuario

sysmail_(add,update,delete)_profile_sp : añade, modifica o borra un perfil


sysmail_(add,update,delete)_profileaccount_sp : añade, modifica o barra una cuenta de usuario de un perfil

sysmail_help_(account,profile,profileaccount)_sp : lista informacion sobre las cuentas, perfiles y cuentas asociadas a perfiles


sysmail_(add, update,delete)_principalprofile_sp : da , modifica o quita los permisos de un principal sobre un perfil

sysmail_(start,stop)_sp: inicia o detiene el DataBsaeMail y su respectiva cola

Un ejemplo sencillo de configurar el database mail puede ser el siguiente script,

use msdb

--Creacion de cuenta de correo
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'UserAccount',
@description = 'Mail account for administrative e-mail.',
@email_address = 'dba@Prueba.com',
@display_name = 'Prueba Automated Mailer',
@mailserver_name = 'smtp.Prueba.com' ;


--Creacion de perfil de correo
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'Prueba Administrator',
@description = 'Perfil del administrador' ;

--asociacion de cuenta de correo a perfil
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'Prueba Administrator',
@account_name = 'UserAccount',
@sequence_number = 1 ;


--Creacion del usuario en la BD msdb
create user julio

-- Asignacion de rol DatabaseMailUserRole al principal julio
EXEC sp_addrolemember N'DatabaseMailUserRole', N'julio'

-- asignacion del profile a el principal
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@principal_name = 'julio',
@profile_name = 'Prueba Administrator',
@is_default = 1 ;

Como es almacenada la información en la Base de Datos

SQL Server almacena los datos en Extends, que son bloques de 64 KB que contiene 8 paginas de datos, por lo tanto una pagina tiene un tamaño de 8 KB.

En la mayoría de los casos todos las paginas que contienen un extend son utilizadas por un mismo objeto, pero existe la posibilidad de que en un extend existan paginas con diferentes objetos debido a que cada uno de ellos no se consume muchas paginas.

Una pagina esta compuesta por 8192 bytes de los cuales 8060 bytes son utilizados para datos y el resto para la cabecera y datos de validación de la pagina.

Existen diferentes tipos de paginas, como lo son:

Paginas de datos: Son las paginas donde los datos son guardados
Pagina de índices: Contienen las llaves delos índices
Pagina de Texto/Imágenes: Pagina de datos para tipo de dato text, ntext e imagen
Pagina GAM: Mantiene la información de cuales extends están siendo usados y cuales no dentro de un archivo de datos
Pagina IAM: Mantiene el rastro de cuales extends están siendo utilizados en una tabla o índice
Pagina de espacio libre: Tipo especial de pagina que mantiene el espacio libre de todas las paginas de la BD
Pagina cambios masivos: Mantiene información acerca de las ultimas paginas de datos que fueron cambiadas por modificaciones masivas desde el ultimo backup del log
Pagina de cambios diferenciales: Mantiene información acerca de las paginas que han sido modificadas desde el ultimo backup de la BD

Ubicación de los archivos de base de datos

La ubicación de los archivos de datos, es decisivo en el rendimiento de una base de datos, pero esta depende de la complejidad y características de la solución, además del presupuesto que se tenga.

En aplicaciones pequeñas que no exigen alta disponibilidad, se podría utilizar varios discos para aumenta el rendimiento de la BD

Por ejemplo en un aplicación sencilla compuesta por una archivo de dato y un log, se podría mejorar el rendimiento ubicando los archivos en discos diferentes, para que de esta manera incrementar la velocidad de escritura y lectura físicas a disco.

Otro posibilidad con pocos recursos, seria además de los dos discos ubicar un tercero en donde se podría almacenar un archivo con los índices. Para hacer esto se debería crear un FileGroup en el nuevo disco y crear todos los índices hay. Esto en muchas situación puede mejorar el rendimiento, ya que se podría buscar los datos en los índices y en el archivo de datos simultáneamente.

Otra posibilidad con otro disco adicional sería crear otro archivo de datos en el mismo filegroup, para que de esta manera la información pudiese ser escrita y leída en paralelo

En escenario donde es necesario alta disponibilidad, se podría utilizar discos configurados como RAID.

Para archivos de datos un RAID 5 (striping with parity) seria ideal, ya que este brinda tolerancia a falla y lecturas rápidas

Para archivos de Log, necesitan velocidades rápidas de escritura y ya que las escrituras son secuenciales, un RAID 1 (disk mirroring), brindaría Tolerancia a falla y velocidades de escritura altas

En escenarios ideales un RAID 0+1 ofrecería un RAID 5 con espejo

Creación de Base de Datos

Base de datos del sistema

Las base de datos del sistema son 5

Master: Almacena toda la información sobre las base de datos de usuario, debe hacerse un backup de ella cada vez que se crear o elimina una base de datos del servidor

Model: Esta base de datos es una especie de Template utilizado cuando se crea una base de datos nueva, es decir que la configuración por defecto de las nuevas base de datos serán tomadas de esta base de datos

Msdb:En esta base de datos se almacena toda la configuración del SQLAGENT y planes de mantenimiento

TempDB: En esta base de datos se almacena toda la información temporal necesaria para realizar una consulta como tablas temporales, procedimientos almacenados temporales. Se recomienda mover esta Base de datos para un solo disco y de esta manera mejorar el rendimiento del servidor.



Resource: Es una base de datos de solo lectura que contiene todos los objetos del sistema. (Sys.objects). El objetivo de esta base de datos es facilitar las actualizaciones de versiones de SQL Server

Creación de Base de Datos de Usuario

Una base de datos esta compuesta por lo menos por dos archivos. Un archivo de datos con extensión .mdf y un archivo de log con extensión .ldf. Estos archivos pertenecen a un FILEGROUP

Un FILEGROUP se utiliza para facilitar el mantenimiento de la BD y mejorar el rendimiento. Mas adelante profundizaremos sobre estos

Para crear una BD de usuario se puede utilizar el asistente a través del SQL SERVER MANAGEMENT STUDIO (SSMS) o por medio de T-SQL.

La sintaxis para crearla por T-SQL es:

CREATE DATABASE database_name
[ ON
[ <> [ ,...n ] ]
[ , <> [ ,...n ] ]
]
[ LOG ON { <> [ ,...n ] } ]
[ COLLATE collation_name ]
[ FOR LOAD FOR ATTACH ]
<> ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
<> ::=
FILEGROUP filegroup_name <> [ ,...n ]


Expliquémoslo por medio de ejemplos:

Supongamos que queremos crear una BD de llamada prueba que comience con un tamaño inicial de 10 MB, que tenga un tamaño máximo de 50 MB y un crecimiento de 5 MB con un log de tamaño inicial 5 MB, tamaño máximo de 25 MB y crecimiento de 5 MB

USE master


GO


CREATE DATABASE PruebaON ( NAME = Prueba_dat, FILENAME = 'c:\BD\Prueba.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )LOG ON( NAME = 'Prueba_log', FILENAME = 'c:\BD\Pruebalog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB )


GO

Si quisiéramos créala con mas de un archivo de datos tendríamos que agrégale después del primer archivo de datos una coma y escribir lo siguiente

( NAME = Prueba_dat2, FILENAME = 'c:\BD\Prueba2.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 )



Note que el nombre del archivo termina en ndf, que es la estexion por defecto de archivos de datos secundarios.

Por defecto en el ejemplo anterior la BD fue creada en el FileGroup configurado por defecto, si este no ha sido modificado desde la instalación, La BD fue creada en el FileGroup Primary.

Si quisieramos crealo en otro FileGroup deberiamos especificarlo despues de la palabra ON.

CREATE DATABASE Prueba ON Secundary

Por ejemplo aquí se crearía la BD en el FileGroup Secundary.

Si los archivos de Bd ya existen en el servidor, la BD se puede crear de la siguiente manera

CREATE DATABASE PruebaON PRIMARY (FILENAME = 'c:\BD\Prueba.mdf')FOR ATTACH

La opción FOR LOAD es incluida por compatibilidad con versiones de SQL SERVER 7.

Con la opción COLLATE se especifica la colación por defecto de la BD, si esta no es definida se tomara por defecto la del servidor, para mas información consulte http://msdn.microsoft.com/en-us/library/aa258237(SQL.80).aspx


Modificación de Base de Datos de Usuario

Después que se ha creado un BD, se pueden realizar muchas configuraciones, como agregar, modificar o quitar un archivo de datos o de Log de la BD o modificar las opciones de configuración de la BD

Primero vamos a explicar con ejemplo como se puede agregar, modificar o quitar archivos de datos siguiendo la siguiente sintaxis.

ALTER DATABASE database
{ ADD FILE <> [ ,...n ] [ TO FILEGROUP filegroup_name ]
ADD LOG FILE <> [ ,...n ]
REMOVE FILE logical_file_name
ADD FILEGROUP filegroup_name
REMOVE FILEGROUP filegroup_name
MODIFY FILE <>
MODIFY NAME = new_dbname
MODIFY FILEGROUP filegroup_name {filegroup_property NAME = new_filegroup_name }
SET <> [ ,...n ] [ WITH <> ]
COLLATE <>
}

Para agregar un tercer archivo de datos a la base de datos prueba debemos realizar lo siguiente

ALTER DATABASE Prueba ADD FILE ( NAME = Prueba_dat3, FILENAME = 'c:\BD\Prueba3.ndf', SIZE = 5MB, MAXSIZE = 100MB, FILEGROWTH = 5MB)



Para eliminarlo hacemos lo siguiente

ALTER DATABASE Prueba REMOVE FILE Prueba_data GO

Si queremos modificar el tamaño máximo de un archivo de datos o de log podemos hacer lo siguiente

ALTER DATABASE Prueba MODIFY FILE (NAME = Prueba_dat2, MAXSIZE = 200MB)

Ahora para modificar las opciones de configuración de la BD también utilizamos la sentencia Alter Database.

Para cambiar el FileGroup por defecto de un BD, debemos correr este script

ALTER DATABASE Prueba MODIFY FILEGROUP [Secondary] DEFAULT

Despues de ejecutar este script todas la bases de datos que se creen y no se les especifique el filegroup seran creadas en el FileGroup Secondary

Es recomendable que las BD de usuario sean creadas en un FileGroup diferente a Primary por organización, mejoras de rendimiento si el Filegroup esta en otro disco y también para evitar que en ciertos casos las base de datos del sistema se queden sin recursos cuando estan siendo utilizados por la BD de usuarios.


Si queremos cambiar el modelo de recuperación de la Bd por script, deberiamo correr el siguiente codigo T-SQL

ALTER DATABASE Prueba SET RECOVERY FULL

Las opciones son muchas, en la grafica se podrán visualizar algunas.


Opciones de configuración de BD


Collation : Cambia la colección de la BD

ALTER DATABASE PruebaCOLLATE {<>}

Recovery Model : Existen tres modo de recuperación:
*Simple: Utiliza muy poco el log de transacciones, es utilizado para ambientes de desarrollo en donde lno es tan importante recuperar información perdida cuando hay algún fallo en el sistema. En caso de un fallo se debe restaura el ultimo full backup realizado.
*Bulk-logged: Utiliza el log de transacciones, ignorando únicamente las inserciones masivas. Con este modelo es posible recuperar mas datos en caso de una falla, únicamente se perderían los datos insertados masivamente. Este modelo es utilizado en ciertos casos cuadno se quiere realizar inserciones masivas sin comprometer el rendimiento del Servidor
*Full: Registra todo en el Log de transacciones. Usando este modelo es posible restaurar la BD reduciendo la perdida de información en caso de un fallo.

ALTER DATABASE Prueba SET RECOVERY FULL


Compatibility Level : Especifica el nivel de compatibilidad de la BD, por defectos las bases de datos de SQL SERVER 2005 tiene el nivel de compatibilidad configurado con el valor 9, las de 2000 las tendría en 8 y así sucesivamente

Auto Close: Cierra la BD después de que el ultimo usuario se desconecta de la BD. Esta opción decremento la cantidad de recursos que necesita el servidor a para base de datos que se consulta muy poco.

Auto Create Statistics: Permite que se generen estadísticas automáticamente. El optimizador de consultas utiliza estas estadísticas para determinar la mejor manera de buscar los datos en la BD

Auto Shrink: Permite que la BD automáticamente libere espacio que no esta reservado para la BD pero no esta siendo utilizado. Esta acción es automáticamente realizada por el sistema cuando se realiza un backup de log de transacciones y debe realizarse manualmente cuando la cantidad de espacio libre reservado a la BD es superior al 25 %

Auto Update Statistics: Actualiza automáticamente las estadísticas

Auto Update Statistics Asynchronously: modo en que trabajara el Update Statistic

Close Cursor on Commit : Cierra automáticamente los cursores abierto cuando se realiza un commit

Default Cursor: Especifica el ámbito de cursor. Puede ser Global o Local

ANSI NULL Default: Cuando esta en ON cualquier comparación con nulo será igual a 0, en el caso contrario dará Nulo

ANSI NULLS Enabled: Especifica si el Ansi Null esta habilitado o no

ANSI Padding Enabled:Cuando esta en On los datos almacenados en un campo string que tengan longitud inferior al tamaño del campo serán rellenados con espacios en blanco, en el caso contrario será almacenado tal cual como fue insertado

ANSI Warnings Enabled : Genera alarmas cuando en una función agregada como SUM o AVG es encontrado un valor nulo

Arithmetic Abort Enabled: Cuando un error de división por cero se da la consulta es cancelada y el mensaje de error es ilustrado. Cuando es configurado en off la consulta continua

Concatenate Null Yields Null: Especifica que cualquier cosa que sea concatenado con nulo de nulo

Date Correlation Optimization Enabled: Cuando esta opción es configurada con ON, el servidor guarda estadísticas de la relación Foreingn Key que existe entre dos tablas

Numeric Round-Abort: Cuando es configurada en ON cualquier perdida de precisión generara u mensaje de error

Quoted Identifiers Enabled : Permite el uso de doble cuotaciones para especificar el nombre de un objeto en T-SQL

Recursive Triggers Enabled: Habilita los disparadores recursivos

Page Verify: Especifica como debe validar la información de las paginas de la BD. Checksum oTornPageDetection

Database Read-Only: Configura la BD como solo lectura

Restrict Access: Existen tres posible socnfiguraciones:
Multiple: todo ususrioa que tenga permiso accedera a la BD
Single Only: Solo un usaurio podra acceder ala BD al tiempo
Restricted: Unicamente los usuarios db_owner, dbcreator y sysadmin pueden acceder a la BD


Eliminación de una Base de datos de Usuario


Para eliminar una base de datos, usted puede hacerlo utilizando el siguiente código T-SQL

DROP DATABASE Prueba

Configuraciones de Servidor

Seguridad
Por medio de esta pantalla podemos realizar una de las configuración mas comunes cuando trabajamos en ambientes donde no solo se trabaja con equipo clientes Windows, y es configurar
el tipo de modo de autenticación.





















En la imagen podemos observar que esta habilitado el modo de autentificación mixto, donde el servidor aceptara login de tipo Windows y de SQL SERVER

Otra de las opciones importantes de esta pantallas es la habilitación de trazas C2, la cual configura al servidor para que registre intentos de acceso exitosos y fallidos.

Otras configuraciones puede realizarse por medio de sentencia T-SQL utilizando el procedimiento almacenado SP_Configure.

Por ejemplo el siguiente script modifica el valor predeterminado de relleno de índices.

select * from sys.configurations
where name = 'fill factor (%)'
go
sp_configure 'show advanced options', 1
GO
RECONFIGURE
GO
Sp_configure 'fill factor', 100
RECONFIGURE
select * from sys.configurations
where name = 'fill factor (%)'
go

El resultado de este script es:






El listado de opciones a nivel de servidor se encuentran en la tabal de sistema sys.configurations

Las opciones mas comunes son:

Show advanced option: Con esta opción en 1 puedes cambiar los valores de las opciones avanzadas del servidor
C2 Audit mode:configura al servidor para que registre intentos de acceso exitosos y fallidos.
Fill Factor: Factor de relleno por defecto de índices
Valor máximo y mínimo de memoria del servidor: Modifica la cantidad de memoria en MB usada por un instancia de SQL
Nested Triggers: Controla los Disparadores anidados
Query Governos Cost Limit: Tiempo en segundos en el cual una consulta puede correr
Query Wait: Tiempo de una consulta espera por los recursos

jueves, 25 de junio de 2009

Consideraciones para actualizar a SQL SERVER 2005

Versiones Soportadas

Se puede actualizar directamente a SQL SERVER 2005

*SQL SERVER 7.0 SP4 o superior
*SQL SERVER 2000 SP3 o superior

Para versiones compatibilidad con collation de versiones anteriores seleccionar la opción SQL Collation

Procedimiento

Antes de comenzar a actualizar debes correr el Upgrade Advisor o SCC (System Configuration Checks) quien genera un reporte de los cambios que deberás hacer antes y después de la migración.
Estos cambios pueden incluir recomendaciones de Software, Hardware, Seguridad y requerimientos de sistema

Sigues el asistente y seleccionas la instancia que deseas actualizar.

Después de terminar la actualización debe asegurarte de subir el nivel de compatibilidad de la BD para que puedes aprovechar la funcionalidad de la nueva versión

Otros procedimiento de migracion pueden consistir en "detach attach", Copy Database Wizard, backup and restore y Script de la BD


Cuentas de Servicio

Las cuentas de servicio que pueden utilizar los servicios de SQL SERVER son:

















































Tipo




Limitación




Ventajas




Built-in
system account




No
podrás comunicarte con otro SQL SERVER de la red




No
necesitas configurar ninguna cuenta de usuario




Local
user account




No
podrás comunicarte con otro SQL SERVER de la red




Permite
modificar los permisos del servicio sin tener acceso a la red




Domain
user account




Ninguna,
pero mas dificl de configurar, ya que el administrador de la red debe crearlo






Permite
comunicarte con otros servidores SQL SERVER y de correo de la red


Requerimientos de Software

*Internet explorere 6 SP1
*ISS (Para Reporting)
*TCP/IP
*.NET Framework 2.0
*Windows installer 3.1
*MDAC 2.8 SP1

Requerimientos de Hardware

CPU

Procesador Intel (o compatible) de 600 MHz o Superior, Recomendado 1 GHz

Memoria (Requerida por SQL SERVER, no por el SO)

Para la versión Express 192 MB, recomendada 512 MB
Para las demás versiones 510MB, recomendada 1GB

Disco

*Componentes de BD: 150 MB mínimo
*Analisis Server: 35 MB mínimo
*Reporting Services: 40 MB Mínimo

Instalacion de SQL Server 2005

Existen 6 versiones de SQL Server 2005 las cuales satisfacen diferentes necesidades.

Sql Server Express Edition (Disponible para 32-bit)

Versión básica de SQL SERVER 2005 para aplicaciones Stand-Alone.

Limitaciones

*Soporta hasta 1 GB de memoria RAM
*Un solo Procesardor
*Tamaño máximo de la BD de 4 GB
*SO: Windows Server 2003 SP1, Windows XP SP2,Windows 2000 SP 4, Windows 2000 Server SP 4

Sql Server WorkGroup Edition (Disponible para 32-bit)

Versión para pequeñas organizaciones, no tiene limite de tamaño no de usuarios

Limitaciones

*Soporta hasta 3 GB de memoria RAM
*Hasta dos Procesadores
*SO:Windows Server 2003 SP1,Windows XP SP2 (No Home Edition), Windows 2000 SP 4

Funciones especiales

*Log Shipping
*Full-Text Search
*SQL SERVER AGENT
*Report Builder

Sql Server Estándar Edition (Disponible para 32-bit y 64-bit)

Versión para organizaciones que no necesitan altos niveles de escalabilidad, rendimiento y disponibilidad que ofrece la versión Enterprise

Limitaciones

*Soporta hasta cuatro procesadores
*SO: Windows Server 2003 SP 1, Windows XP SP2(No Home Edition),Windows 2000 SP 4, Windows 2000 Server SP 4

Funciones especiales

*Database mirroring
*failover clustering (dos nodos)
*the Database Tuning Advisor
*Notification Services
*Integration Services with basic transforms
*Hypertext Transfer Protocol (HTTP) endpoints.


Sql Server Enterprise Edition (Disponible para 32-bit y 64 bit)

Esta versión de SQL Server es utilizada para escenarios donde se necesita alta disponibilidad y escalabilidad

Limitaciones

*SO:Windows Server 2003 SP 1,Windows 2000 Server SP 4

Funciones especiales

*Partitioning
*Parallel index operations
*Indexed views
*Online indexing and restoration
*Fast recovery
*Integration Services advanced transforms
*Oracle replication
*the scale-out of report servers
*data-driven subscriptions (for Reporting Services)
*Peer to peer replication
*Snapshot database



Sql Server Developer Edition (Disponible 32-bit y 64-bit)

Es la mima versión que la enterprise pero para ambientes de desarrollo. Puede ser actualizada a enterprise

Sql Server Compact Edition

Versión para Dispositivos móviles

Limitaciones

*Pocket PC 2003 platform
*Windows CE 5.0
*Windows Mobile 5.0

informacion mas completa
http://www.microsoft.com/sqlserver/2005/en/us/compare-features.aspx

Contenido del examen

Installing and Configuring SQL Server 2005

Install SQL Server 2005.
* Verify prerequisites.
* Upgrade from an earlier version of SQL Server.
* Create an instance.

Configure SQL Server 2005 instances and databases.
*Configure log files and data files.
*Configure the SQL Server DatabaseMail subsystem for an instance.
*Choose a recovery model for the database.

Configure SQL Server security.
*Configure server security principals.
*Configure database securables.
*Configure encryption.

Configure linked servers by using SQL Server Management Studio (SSMS).
*Identify the external data source.
*Identify the characteristics of the data source.
*Identify the security model of the data source.

Implementing High Availability and Disaster Recovery

Implement database mirroring.
*Prepare databases for database mirroring.
*Create endpoints.
*Specify database partners.
*Specify a witness server.
*Configure an operating mode.

Implement log shipping.
*Initialize a secondary database.
*Configure log shipping options.
*Configure a log shipping mode.
*Configure monitoring.

Manage database snapshots.
*Create a snapshot.
*Revert a database from a snapshot.


Supporting Data Consumers

Retrieve data to support ad hoc and recurring queries.
*Construct SQL queries to return data.
*Format the results of SQL queries.
*Identify collation details.

Manipulate relational data.
*Insert, update, and delete data.
*Handle exceptions and errors.
*Manage transactions.

Manage XML data.
*Identify the specific structure needed by a consumer.
*Retrieve XML data.
*Modify XML data.
*Convert between XML data and relational data.
*Create an XML index.
*Load an XML schema.

Implement an HTTP endpoint.
*Create an HTTP endpoint.
*Create an HTTP endpoint.

Implement Service Broker components.
*Create services.
*Create queues.
*Create contracts.
*Create conversations.
*Create message types.
*Send messages to a service.
*Route a message to a service.
*Receive messages from a service.

Import and export data from a file.
*Set a database to the bulk-logged recovery model to avoid inflating the transaction log.
*Run the bcp utility.
*Perform a Bulk Insert task.
*Import bulk XML data by using the OPENROWSET function.
*Copy data from one table to another by using the SQL Server 2005 Integration Services (SSIS) *Import and Export Wizard.

Manage replication.
*Distinguish between replication types.
*Configure a publisher, a distributor, and a subscriber.
*Configure replication security.
*Configure conflict resolution settings for merge replication.
*Monitor replication.
*Improve replication performance.
*Plan for, stop, and restart recovery procedures.


Maintaining Databases

Implement and maintain SQL Server Agent jobs.
*Set a job owner.
*Create a job schedule.
*Create job steps.
*Configure job steps.
*Disable a job.
*Create a maintenance job.
*Set up alerts.
*Configure operators.
*Modify a job.
*Manage a job.

Manage databases by using Transact-SQL.
*Manage index fragmentation.
*Manage statistics.
*Shrink files.
*Perform database integrity checks by using DBCC CHECKDB.

Back up a database.
*Perform a full backup.
*Perform a differential backup.
*Perform a transaction log backup.
*Initialize a media set by using the FORMAT option.
*Append or overwrite an existing media set.
*Create a backup device.
*Back up filegroups.

Restore a database.
*Identify which files are needed from the backup strategy.
*Restore a database from a single file and from multiple files.
*Choose an appropriate restore method.

Move a database between servers.
*Choose an appropriate method for moving a database.

Monitoring and Troubleshooting SQL Server Performance

Gather performance and optimization data by using the SQL Server Profiler.
*Start a new trace.
*Save the trace logs.
*Configure SQL Server Profiler trace properties.
*Configure a System Monitor counter log.
*Correlate a SQL Server Profiler trace with System Monitor log data.

Gather performance and optimization data by using the Database Engine Tuning Advisor.
*Build a workload file by using the SQL Server Profiler.
*Tune a workload file by using the Database Engine Tuning Advisor.
*Save recommended indexes.

Monitor and resolve blocks and deadlocks.
*Identify the cause of a block by using the sys.dm_exec_requests system view.
*Terminate an errant process.
*Configure SQL Server Profiler trace properties.
*Identify transaction blocks.

Diagnose and resolve database server errors.
*Connect to a non-responsive server by using the dedicated administrator connection (DAC).
*Review SQL Server startup logs.
*Review error messages in event logs.

Monitor SQL Server Agent job history.
*Identify the cause of a failure.
*Identify outcome details.
*Find out when a job last ran.

Gather performance and optimization data by using DMVs.


Creating and Implementing Database Objects

Implement a table.
*Specify column details.
*Specify the filegroup.
*Assign permissions to a role for tables.
*Specify a partition scheme when creating a table.
*Specify a transaction.

Implement a view.
*Create an indexed view.
*Create an updateable view.
*Assign permissions to a role or schema for a view.

Implement triggers.
*Create a trigger.
*Create DDL triggers for responding to database structure changes.
*Identify recursive triggers.
*Identify nested triggers.
*Identify transaction triggers.

Implement functions.
*Create a function.
*Identify deterministic versus nondeterministic functions.

Implement stored procedures.
*Create a stored procedure.
*Recompile a stored procedure.
*Assign permissions to a role for a stored procedure.

Implement constraints.
*Specify the scope of a constraint.
*Create a new constraint.

Implement indexes.
*Specify the filegroup.
*Specify the index type.
*Specify relational index options.
*Specify columns.
*Specify a partition scheme when creating an index.
*Disable an index.
*Create an online index by using an ONLINE argument.

Create user-defined types.
*Create a Transact-SQL user-defined type.
*Specify details of the data type.
*Create a CLR user-defined type.

Implement a full-text search.
*Create a catalog.
*Create an index.
*Specify a full-text population method

Pegado de <http://www.microsoft.com/learning/en/us/exams/70-431.aspx>