Sei sulla pagina 1di 14

Ediciones ENI

SQL Server 2008 SQL, Transact SQL


Diseo y creacin de una base de datos Coleccin Recursos Informticos

Extracto del Libro

Transact SQL : el lenguaje procedimental

A. El SQL procedimental
SQL Server es un servidor de base de datos relacional y como tal proporciona todos los elementos para almacenar de forma estructurada los datos, pero tambin las herramientas necesarias para trabajar con los datos mediante SQL. Con Transact SQL tambin es posible definir tratamientos procedimentales directamente en la base de datos. Estos tratamientos podrn ser utilizados por todos los usuarios de la base siempre y cuando posean los privilegios necesarios. Es posible conservar la definicin de estos tratamientos y convertirlos en parametrizables mediante la creacin de funciones y procedimientos. Tambin se pueden establecer tratamientos procedimentales para definir restricciones de integridad complejas. Entonces estaremos hablando de triggers o desencadenadores de base de datos.

1. Gestin de variables de usuario


Una variable es una zona de memoria, caracterizada por un nombre y un tipo, que permite almacenar un valor. Las variables Transact-SQL deben declararse obligatoriamente antes de su utilizacin. A continuacin pueden reemplazar cualquier expresin en las instrucciones SQL.

Declaracin de variables
DECLARE @nombre_variable tipo [,...]

nombre_variable
Editions ENI - All rights reserved

Nombre precedido del carcter @. tipo Tipo de sistema o definido por el usuario.

Asignacin de valores a las variables


SELECT @nombre_variable = expr [,...][FROM...]

SQL, Transact SQL

189

Captulo 4
Ejemplo Modificacin del nombre de los clientes que tienen el mismo apellido que el 954:

2. Variables de sistema
Estas variables son definidas por el sistema y se pueden utilizar slo en lectura. Se distinguen de las variables de usuario por la doble @. @@CONNECTIONS Nmero de conexiones o de intentos de conexin desde el ltimo inicio de SQL Server. @@CPU_BUSY Tiempo dedicado por la unidad central SQL Server desde el ltimo inicio de ste. El resultado se expresa en unidad CPU. Hay que multiplicar por @@TIMETICKS para tener el resultado en microsegundos. @@CURSOR_ROWS Nmero de filas afectadas en el ltimo cursor abierto.

190

SQL Server 2008

Transact SQL : el lenguaje procedimental


@@DATEFIRST Devuelve el valor actual del parmetro SET DATEFIRST. @@DBTS Valor del tipo de datos timestamp actual para la base de datos. @@ERROR ltimo nmero de error generado por el sistema para la conexin del usuario. @@FETCH_STATUS Contiene el estado de un comando de cursor FETCH. @@IDENTITY Guarda el ltimo valor IDENTITY insertado. @@IDLE Tiempo, en milisegundos, durante el cual SQL Server ha estado inactivo desde su ltimo inicio. @@IO_BUSY Tiempo, en milisegundos, dedicado por SQL Server para efectuar operaciones de entrada/salida desde su ltimo inicio. @@LANGID Identificador del idioma utilizado actualmente.
Editions ENI - All rights reserved

@@LANGUAGE Idioma utilizado actualmente. @@LOCK_TIMEOUT Timeout en milisegundos de la sesin en curso.

SQL, Transact SQL

191

Captulo 4
@@MAX_CONNECTIONS Nmero mximo de conexiones simultneas que es posible establecer con SQL Server. @@MAX_PRECISION Devuelve el nivel de precisin utilizado por los tipos de datos decimal y numrico. @@NESTLEVEL Nivel de anidamiento de la instruccin que se esta ejecutando. @@OPTIONS Datos sobre los valores actuales de las opciones SET. @@PACK_RECEIVED Nmero de paquetes entrantes ledos por SQL Server desde su ltimo inicio. @@PACK_SENT Nmero de paquetes salientes escritos por SQL Server desde su ltimo inicio. @@PACKET_ERRORS Nmero de errores que se han producido mientras SQL Server enviaba o reciba paquetes desde su ltimo inicio. @@PROCID Identificador del procedimiento almacenado Transact SQL del tratamiento en curso de ejecucin. @@REMSERVER Devuelve el nombre del servidor contenido en el registro de los nombres de acceso de un servidor remoto.

192

SQL Server 2008

Transact SQL : el lenguaje procedimental


@@ROWCOUNT Nmero de filas afectadas por la ltima instruccin. @@SERVERNAME Nombre del servidor SQL local. @@SERVICENAME Nombre del servicio en curso de ejecucin. @@SPID Nmero de identificacin del proceso actual sobre el servidor. @@TEXTSIZE Longitud mxima, en bytes, de los datos de texto o imagen devueltos por una instruccin SELECT. @@TIMETICKS Nmero de milisegundos por pulsacin. @@TOTAL_ERRORS Nmero de errores encontrados por SQL Server al leer o escribir datos desde su ltimo inicio. @@TOTAL_READ
Editions ENI - All rights reserved

Nmero de lecturas de datos del disco efectuadas por SQL Server desde su ltimo inicio. @@TOTAL_WRITE Nmero de veces que se han escrito datos en el disco efectuadas por SQL Server desde su ltimo inicio. @@TRANCOUNT Nmero de transacciones actualmente activas para el usuario actual.

SQL, Transact SQL

193

Captulo 4
@@VERSION Fecha, nmero de versin y tipo de procesador de la versin actual de SQL Server.

3. Las transacciones
Gestin de las transacciones
Lo primero que hay que tener en cuenta es el bloqueo de los datos. Cuando SQL Server lee o modifica datos, bloquea las filas que est manipulando. Este bloqueo dura el mismo tiempo que la ejecucin de la instruccin o la transaccin. Segn el tipo de bloqueo, ser posible o no que otras transacciones accedan simultneamente a la misma informacin. Una transaccin es un conjunto de instrucciones de manipulacin de datos que se ejecutan en una misma unidad de trabajo. La validacin de una transaccin asegura que todas las instrucciones que forman parte de sta terminan correctamente. La anulacin de la transaccin asegurar la anulacin del conjunto de las instrucciones. Slo las instrucciones del DML (SELECT, INSERT, UPDATE, DELETE) son tenidas en cuenta en una transaccin. Se excluyen todas las instrucciones que manipulan objetos (CREATE, ALTER, DROP, SELECT INTO, GRANT, REVOKE, LOAD, DUMP...). Las transacciones sern tiles para asegurar la integridad y la coherencia de los datos en modificaciones mltiples, para mejorar el rendimiento, para probar los efectos de una modificacin, para gestionar los bloqueos. Una transaccin se caracteriza por la palabra clave ACID (Atomicity Consistency Isolation Durability) es decir atomicidad, coherencia, aislamiento y durabilidad.

- Atomicidad: una transaccin representa una unidad indivisible de trabajo para el


servidor.

- Consistencia: al fin de la transaccin, la informacin presente en la base de


datos debe ser consistente con las reglas de estructuracin de los datos que se hayan definido.

194

SQL Server 2008

Ediciones ENI

SQL Server 2008


Administracin de una base de datos con SQL Server Management Studio

Coleccin Recursos Informticos

Extracto del Libro

Captulo 8

A. Presentacin
La replicacin es una poderosa funcionalidad de SQL Server que permite distribuir datos y ejecutar los procedimientos almacenados sobre varios servidores de la empresa. La tecnologa de replicacin ha evolucionado considerablemente y ahora permite copiar, trasladar los datos a diferentes lugares y sincronizarlos automticamente. La replicacin puede establecerse entre las bases de datos residentes sobre el mismo servidor o sobre servidores diferentes. Los servidores pueden estar sobre una red local (LAN) o global (WAN) o sobre Internet. SQL Server distingue dos grandes categorias de replicacin :

- la replicacin de servidor a servidor, - la replicacin de servidor a clientes.


En el caso de replicacin de servidor a servidor, la replicacin permite una mayor integracin o aproximacin de los datos entre varios servidores de base de datos. El objetivo de este tipo de replicacin es efectuar un intercambio de informacin entre servidores de base de datos. Los usuarios que trabajan sobre las bases de datos que participan en la replicacin pueden, de esta manera, consultar datos de mayor calidad. La replicacin de servidor a cliente afecta principalmente a los usuarios desconectados de la red de la empresa que desean trabajar con todo o parte de los datos de la empresa. Los usuarios trabajan con una aplicacin especfica y utilizan SQL Server como servidor de base de datos local. Cuando el usuario se conecta a la red, la sincronizacin de los datos entre su puesto y la instancia SQL Server central la realiza el mecanismo de replicacin de SQL Server. La gestin de la replicacin se ha simplicado para permitir un establecimiento y un mantenimiento ms fciles. Para las soluciones ms complejas y que necesiten una integracin completa a un progama, SQL Server ofrece API RMO (Replication Management Object). Esta API permite manipular mediante programacin todos los elementos de la replicacin. API RMO est disponible para los lenguajes que se basan en el framework.Net. El concepto de esquema que permite un agrupamiento lgico de los objetos en la base de datos es tomado en cuenta por la replicacin con la posibilidad de realizar cambios de esquemas.

B. Las necesidades para la replicacin


La replicacin es una tecnologa compleja y no puede existir una solucin nica para cubrir todas las necesidades. SQL Server ofrece diferentes tecnologas de replicacin que se pueden adaptar y combinar para responder lo ms fielmente posible a las necesidades de las aplicaciones. Cada tecnologa tiene ventajas e inconvenientes. Los tres criterios principales para seleccionar una tecnologa de replicacin son:

- la coherencia de los datos replicados, - la autonoma de los sitios, 342 SQL Server 2008

Replicacin - el particionamiento de datos para evitar conflictos.


No es posible optimizar los tres criterios al mismo tiempo, de manera que una solucin que favorezca la coherencia de los datos deber poca autonoma a los sitios para averiguar en todo momento el conjunto de modificaciones que tienen lugar sobre los datos.

1. Coherencia de los datos replicados


Existen dos tipos principales de coherencia:

- la homogeneidad de las transacciones, - la convergencia de los datos.


La coherencia de las operaciones distribuidas, como la replicacin, es mucho ms complicada de mantener en comparacin con la coherencia de las transacciones locales, por lo que es suficiente con respetar el test ACAD (Atomicidad, Coherencia, Aislamiento y Durabilidad). La homogeneidad de las transacciones en la replicacin obliga a que los datos sean idnticos en todos los sites que participan en la replicacin, como si la transaccin fuera a ejecutarse sobre todos los sites. La convergencia de los datos significa que todos los sites que participan en las replicaciones deben tener el mismo juego de datos, que no es necesariamente el que se obtendra si todas las replicaciones se hubieran desarrollado sobre el mismo servidor.

a. Coherencia de las transacciones


En todos los casos, los sites contienen un juego de valores idntico a aquel sobre el que han hecho o se podan haber hecho todas las operaciones de modificacin.

Coherencia transaccional inmediata


Con esta coherencia, todos los sitios que participan en la replicacin tienen la garanta de ver siempre los mismos valores en el mismo momento. Para asegurar la coherencia transaccional, SQL Server dispone de un protocolo de validacin en dos fases con todos los sitios participantes. Las modificaciones se efectan en todos los sitios o en ninguno. Esta solucin est muy limitada en la realidad, ya que los problemas de red prohben toda validacin de una transaccin mientras el servidor no se conecte de nuevo a la red.

Editions ENI - All rights reserved

Administracin de una base de datos

343

Captulo 8

En el ejemplo anterior, el cliente efecta una transaccin sobre el servidor al que est conectado. Esta transaccin slo se validar si se ha ejecutado con xito en todos los servidores que participan en la replicacin.

Coherencia transaccional latente


La coherencia latente de las transacciones garantiza que todos los participantes obtendrn los mismos valores que los contenidos en el site de publicacin en un momento dado. Puede transcurrir un perodo de tiempo entre el instante en que se efecta la transaccin en el servidor de publicacin y el instante en que las modificaciones se reflejan en los otros sitios.

344

SQL Server 2008

Replicacin
En este ejemplo, el cliente enva una transaccin al servidor y esta se ejecuta de manera local inmediatamente. Despus, de forma peridica, los servidores que participan en la replicacin repiten localmente el conjunto de transacciones efectuadas sobre el servidor principal.

b. Convergencia de los datos


Con este proceso, todos los sitios acaban obteniendo el mismo juego de datos, lo que no habra sido posible si todas las modificaciones se hubieran realizado sobre un nico servidor. Todos los sites evolucionan libre e independientemente, unos de otros. La convergencia de los datos se establece con ayuda de la replicacin de fusin que tiende a llevar a todos los sitios que participan a gestionar el mismo juego de datos.

Todos los servidores son accessibles en lectura/escritura y las transacciones se ejecutan localmente. Entonces el proceso de replicacin realiza las transacciones sobre los otros servidores teniendo en cuenta las modificaciones que han podido intervenir localmente.
Editions ENI - All rights reserved

2. Autonoma de los sitios


La autonoma de los sites se mide por el impacto que tiene una operacin efectuada sobre un site en el resto de sites. La autonoma es perfecta cuando un site puede evolucionar totalmente de manera libre e independiente. El site autnomo no se preocupa por las operaciones que pueden intervenir en los otros sites. Por ejemplo, cuando la replicacin garantiza la convergencia de los datos, la autonoma de los sites est en su mximo, ya que cada servidor SQL puede evolucionar libremente en relacin a los otros sites. A la inversa, la coherencia transaccional inmediata impone una autonoma casi nula de los sites que participan en ella, ya que una transaccin debe ser aprobada por todo el mundo antes de ser validada. Si un solo servidor no puede, entonces la transaccin no se valida en ninguno.

Administracin de una base de datos

345

Captulo 8 3. Particionamiento de los datos


Es posible repartir los datos sobre varios sites con el objetivo de que cada site trabaje con su propio juego de datos, estrictamente distinto de los dems. De esta manera, las transacciones que intervienen sobre cada site slo ponen en juego los datos del site y la coherencia global se conserva. Si, por ejemplo, cada agencia tiene un archivo de clientes sobre una zona geogrfica bien determinada, un cliente slo puede ser gestionado por una nica agencia y toda fuente de conflicto queda excluida. El particionamiento de los datos permite evitar todo conflicto de datos, lo que es preferible, ya que la resolucin de los conflictos es un proceso pesado que demanda mucho tiempo de mquina. Cuanto ms numerosos son los conflictos, ms difcil es gestionar la situacin. El particionamiento de los datos permite funcionar con una coherencia de datos latente ya que cada site slo modifica su propio juego de datos. La aplicacin de esta coherencia es menos laboriosa que la coherencia transaccional inmediata que se basa en un proceso de validacin en dos fases. Este tipo de particionamiento no se debe confundir con el particionamiento de tablas. En el marco de la replicacin, se define una particin lgica, mientras que en el marco de una tabla particionada, se define una particin fsica de la tabla. Ejemplos:

Ejemplo de particionamiento horizontal

346

SQL Server 2008

Replicacin
Las entradas a espectculos se venden en varios puntos de venta. Para que el mismo asiento no se venda dos veces, la operacin ms sencilla de ejecutar consiste en asignar a cada punto de venta un nmero de asientos. Por lo tanto, la sala se particiona en funcin de los puntos de venta. Como consecuencia, cada punto de venta gestiona de manera autnoma los asientos que tiene asignados. Por el contrario, cada punto de venta puede saber qu asientos an no han sido vendidos por los otros puntos de venta. Aqu la coherencia transaccional latente es suficiente.

Ejemplo de particionamiento vertical Cada punto de venta de una cadena de tiendas de reparacin de automviles gestiona su propio stock de mercancas y por medio de la informtica conoce el stock de los puntos de venta ms prximos. El conocimiento de este stock se utilizar cuando falte una pieza y sea necesario satisfacer al cliente lo ms rpido posible. Aqu la coherencia transaccional inmediata no es necesaria ya que lo que se necesita es un conocimiento general del stock de la tienda ms cercana (accesible nicamente en modo lectura).
Editions ENI - All rights reserved

4. Tipos de replicacin
Existen tres tipos de replicacin proporcionados por SQL Server:

- Captura instantnea, - Transaccional: captura instantnea y actualizacin inmediata de los suscriptores, - Fusin.
Cada uno de los tipos de replicacin responde a una necesidad bien concreta. Siguiendo el mtodo seleccionado bien convergen los datos, o bien se garantiza la coherencia de las transacciones.

Administracin de una base de datos

347