Social Icons

twitter facebook google plus linkedin

viernes, 29 de junio de 2012

Modelos de cluster: Activo-Pasivo y Activo-Activo

En las organizaciones donde tienen un centro de datos y aplicaciones que requieren alta disponibilidad (HA), nos podemos encontrar con dos tipos de configuraciones de HA:

Activo-Pasivo

En esta configuración existen al menos dos nodos. Uno ofrece el servicio y el otro está a la espera que el nodo 1 deje de funcionar para entregar los servicios que el nodo 1 deja de dar. Cuando el nodo uno está funcionando sin problemas (activo), el segundo nodo está atento (pasivo).

Activo-Activo

Esta configuración, al igual que la anterior, requiere al menos 2 nodos para funcionar. Se diferencia con la primera, en que cada nodo tiene distintos servicios corriendo activamente y en caso de falla, uno de los nodos asume los servicios que prestaba el nodo que falló. Por ejemplo: El servicio de DHCP y File Server están corriendo, activamente, uno en cada nodo, pero pasivamente en el otro nodo. Si el nodo 1 falla, el nodo 2 prestará ambos servicios.

Si yo tuviera que elegir, me quedo con la configuración activo-activo, porque no pierdo los recursos de un servidor que está solo a la espera de que uno falle.  Obviamente todo dependerá del escenario al cual me esté enfrentando.

 

Saludos!

 

 

miércoles, 20 de junio de 2012

Procedimientos Almacenados en SQL Server

Un procedimiento almacenado no es  más que un conjunto de instrucciones T-SQL que puede aceptar varios parámetros de entrada y devolver distintos valores de salida. También puede llamar a otros procedimientos almacenados y, además, incluir una referencia al CLR de .NET.

Usar procedimientos almacenado tiene múltiples ventajas, entre las que destacan:

  • Trafico reducido entre cliente y servidor:  Todas las sentencias se ejecutan en un solo lote de código. Por la red solo viaja el llamado al procedimiento y sus parámetros. No viaja la sentencia completa, porque ya está almacenada en el servidor.

  • Mayor Seguridad: Puede que para ejecutar cierta operación sobre la base de datos se necesiten ciertos privilegios. Para no estar otorgando privilegios sobre la base de daos a los usuarios, se puede especificar que usuario ejecuta las sentencias descritas dentro del procedimiento almacenado. Esto se logra haciendo uso de la clausula EXECUTE AS al momento de crear el procedimiento almacenado.

  • Reutilizar Codigo: Al reutilizar las sentencias y no reescribirlas cada vez que se necesiten, se evitan inconsistencias y se ahorra tiempo.

  • Mantenimiento sencillo:  En el caso de una actualización del modelo de la base de datos  o cualquier modificación de la estructura de esta, no va a ser necesario modificar todas las consultas de la aplicación. Solo se modifican los procedimientos almacenados generando un minimo impacto en la aplicación.

  • Rendimientos mejorados: Una sentencia se compila cada vez que se ejecuta en la base de datos. En cambio, un procedimiento almacenado es compilado una sola vez y se crea un plan de ejecución que se usará cada vez que se hace una llamada al procedimiento almacenado. Se disminuye la carga del servidor.


Para crear un procedimiento almacenado se debe usar la sentencia CREATE PROCEDURE. Por ejemplo:

CREATE PROCEDURE [dbo].[MiProcedimiento]
@genero char(1)
AS
SET NOCOUNT ON
SELECT
[NationalIDNumber],
[OrganizationNode],
[JobTitle],
[MaritalStatus],
[HireDate]
FROM
HumanResources.Employee
WHERE
[Gender] = @genero
GO

En esta porción de código se pueden indicar varias partes:

  1. En la línea 1, se indica que se creará un nuevo procedimiento almacenado y se le otorga un nombre.

  2. Luego vienen los parámetros con sus respectivos tipos de datos.

  3. AS indica que comienzan las instrucciones en t-sql.

  4. SET NOCOUNT ON indica que no se devolverán las filas afectadas. Se puede dejar en OFF si se quiere saber cuantos registros se seleccionaron o cuantos fueron afectados con la operación.

  5. Consulta SQL. Esta consulta trae los nombres de los empleados según el genero.


Para llamar a un procedimiento almacenado, se debe usar la sentencia EXEC. Por ejemplo:


EXEC MiProcedimiento 'M'


Este procedimiento almacenado fue creado en la base de datos AdventureWorks. Pruebalo tu también.

lunes, 18 de junio de 2012

Delete, Truncate y Drop

Delete From, Truncate Table y Drop Table  son sentencias de SQL que sirven para borrar. Existen en todos los motores de base de datos, pero los tres hacen borrados distintos.

Delete From

Esta sentencia DML se utiliza para eliminar registros según condición, o simplemente, borra todos los registros de la tabla.  No es autocommit, registra todo en el log de transacciones y no altera la estructura de la tabla. Tiene a ser un poco ineficiente al registrar todo. Veamos este ejemplo:

A una tabla con 14 registros, le di la siguiente instrucción:

DELETE FROM Tabla1

Ocurrió lo esperado: Eliminó todos los registros de la tabla y no modificó su estructura. Además, registró todo en el log de transacciones y realizó el commit una vez que ejecutó todos los delete

 

[caption id="attachment_1364" align="alignnone" width="233"]Log transaccional de DELETE FROM Log transaccional de DELETE FROM[/caption]

Tomar en cuenta que todo lo que está dentro del cuadrado rojo corresponde a la eliminación de cada uno de los registros de la tabla. Hay una porción destacada en amarillo. Es ahí cuando realiza el commit.

Cuando se elimina un registro en una tabla que tiene un campo como identity el contador nunca más vuelve a usar el registro identity que se eliminó. Por ejemplo:


Numero color
1 blanco
2 rojo
3 azul

y ejecutamos lo siguiente:

DELETE FROM Tabla WHERE Numero = 2

Va a eliminar el segundo registro y al insertar un campo en la base de datos, quedaría así:

Numero color
1 blanco
3 azul
4 amarillo

Al manipular los datos de la tabla, está sujeto a las restricciones de las claves foráneas.

 

Truncate

Truncate Table, sentencia DDL,  elimina todos los registros de la tabla. A diferencia de Delete From, no escribe en el log de transacciones, por lo que no es posible hacer un rollback.  La otra diferencia que tiene con Delete From, es que no ofrece un borrado selectivo y no se le puede pasar un trigget con ON DELETE.
Ejemplo de la imagen:

[caption id="attachment_1365" align="alignnone" width="300"]Ejemplo de Truncate Table Ejemplo de Truncate Table[/caption]

Como se puede ver en la imagen, no registra todos los datos que elimina. Lo único que hace es un deallocate.

 

Al borrar los datos de un tabla que tiene una columna como identity, el contador vuelve a cero. Veamos el ejemplo:


Numero color
1 blanco
2 rojo
3 azul

y ejecutamos lo siguiente:

TRUNCATE TABLE Tabla

La tabla quedará vacía y al insertar un registro quedará así:

Numero color
1 verde

Al eliminar registros con esta sentencia, está sujeto a las restricciones de las claves foráneas.

 

Drop

Sentencia DDL, que se utiliza para modificar la estructura de una tabla, por ejemplo al eliminar una columna de una tabla, o bien, eliminar la tabla completa.  Al eliminar la tabla completa, lo primero que hace es hacer un borrado de los registros con DELETE, hace un commit y al final borra la tabla.  El registro es bastante grande, así que me disculparán por no poner un ejemplo.

Espero que esto les haya servido de ayuda.

viernes, 8 de junio de 2012

Limitar la memoria en SQL Server

SQL Server (al igual de Exchange) son campeones en comerse toda la ram del equipo. Al parecer son servicios hambrientos e insaciables, ya que son capaces de usar toda la memoria física. No importa cuanta memoria tengas, siempre ocupará toda.

Hay una forma de limitar la cantidad de memoria (y es recomendable hacerlo para que el sistema operativo pueda hacer sus otras funciones). Limitar la cantiad de memoria máxima que usa SQL Server no es una tarea compleja. Para esto abriremos el Management Studio e iremos a las propiedades de la instancia:

[caption id="attachment_1358" align="alignnone" width="168" caption="Propiedades de la Instancia"]Propiedades de la Instancia[/caption]

Se debiera abrir una ventana como esta:

[caption id="attachment_1359" align="alignnone" width="300" caption="Propiedades de la instancia"]Propiedades de la instancia[/caption]

Ir a la opcion de "Memoria" tal como aparece en la imagen y mostrará lo interesante:

[caption id="attachment_1360" align="alignnone" width="300" caption="Propiedades uso de memoria"]Propiedades uso de memoria[/caption]

Prestemos atención en el numero: 2147483647  Este número no indica la cantidad de memoria que tenemos, sino que indica la cantidad de memoria, en MB, que puede llegar a ocupar SQL Server. Como excede a lo que tenemos, siempre va a intentar llegar a los más posible y es por esto que siempre ocupa toda la memoria.

Ese numero hay que reemplazarlo por el limite que queremos que tenga SQL Server. En mi caso quiero que solo use 2GB.

[caption id="attachment_1361" align="alignnone" width="300" caption="Limite de memoria"]Limite de memoria[/caption]

Le damos Ok y listo.

 

jueves, 7 de junio de 2012

¿Qué es mejor: select count(*), select count(1) o select count('nombre_columna')?

Constantemente se escuchan discusiones sobre qué método es mejor para saber la cantidad de registros que tiene una tabla. Todos tienen su forma favorita, porque es más eficiente, más rápido y, en definitiva, es mejor.

En lo personal no tengo preferidas, porque en SQL Server (y en Oracle: http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1156159920245 ) son exactamente lo mismo.

Mostraré el resultado de cada plan de ejecución estimado para cada caso y verán que son exactamente iguales.

select count(*)

[caption id="attachment_1352" align="alignnone" width="300" caption="select count(*)"]select count(*)[/caption]

select count(1)

[caption id="attachment_1351" align="alignnone" width="300" caption="select count(1)"]select count(1)[/caption]

select count('nombre_columna')

[caption id="attachment_1350" align="alignnone" width="300" caption="select count('nombre_columna')"]select count('nombre_columna')[/caption]

 

Conclusión: Solo es cosa de gustos :)

miércoles, 6 de junio de 2012

Data Viewer en Integration Services

Jugando con SSIS conocí esta herramienta que permite ver los datos que "van pasando" por el proceso de extracción,transformación y carga. Esto es muy util para hacer una verificación a la vista de los datos.

Historia de SQL Server en casi 3 minutos

Un interesante recorrido desde los inicios de SQL Server en este video. Es un video previo al lanzamiento de la última versión, pero nunca está de más conocer como nace esta plataforma de datos.

lunes, 4 de junio de 2012

Error al instalar Powerpivot

Al instalar Powerpivot para Excel 2010 puede que nos de un error parecido a este:

[caption id="attachment_1339" align="alignnone" width="300" caption="Error al instalar PowerPivot"]Error al instalar PowerPivot[/caption]

Este error sucede cuando no se tiene instalado el paquete de Visual Studio 2010 Tools for Office Runtime  Este lo pueden descargar desde: http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=20479 Se instala y problema solucionado.

 

sábado, 2 de junio de 2012

Informacion sobre los objetos de la base de datos en SQL Server

En SQL Server existe un procedimiento almacenado de sistema que permite entregar información sobre cualquier objeto que exista dentro de la base de datos. En Oracle y MySQL existe una instrucción similar  y se llama describe. En SQL Server (y creo que Sybase) se llama sp_help.

A este procedimiento almacenado se le puede o no pasar un parámetro y de esto dependerá del resultado que necesitamos tener. Por ejemplo, si le entregamos como parámentro un tipo de datos, entregará la información del tipo de datos. Si no le pasamos un parámetro, obtendremos una visión general de todos los objetos de la base de datos. Si le entregamos el nombre de una tabla como parámetro, entregará la información de las columnas y así. Obviamente, le podemos pasar como parámetro el nombre de un procedimiento almacenado.

Es más, en base a esto último, podemos ver la información de sp_help:

[caption id="attachment_1336" align="alignnone" width="300" caption="Informacion procedimiento almacenado sp_help"]Informacion procedimiento almacenado sp_help[/caption]

Es demasiada la información que nos entrega, por eso les dejo el link a la documentación oficial:

http://msdn.microsoft.com/es-es/library/ms187335.aspx

 

viernes, 1 de junio de 2012

Nuevo juguete desde China: Contador de Frecuencias

Hoy iba llegando a almorzar a mi departamento y la conserje dice: "Hey, chiquillo, te llegó algo". Yo me sorprendí. Pensé que el contador de frecuencias tomaría más tiempo, pero no fue así.

Al momento de abrirlo, es bien chino su aspecto. Se nota que no es de la mejor calidad, pero cumple su objetivo: Da la frecuencia del dispositivo que transmite.

Lo que me sorprendió, es que el dispositivo reveló que literalmente somos invadidos por las ondas de radio de distintas frecuencias.

 

[caption id="attachment_1330" align="alignnone" width="225" caption="Contador de Frecuencias"]Contador de Frecuencias[/caption]

Un videito funcionando. Lo grabé al revés.