Te presento mi nuevo sitio web: "El Futuro de los Datos"

Aunque SQL Server Si!, seguirá activo, iré bajando la frecuencia de publicación.
Si quieres conocer todas las novedades que vaya publicando, te recomiendo que lo visites y te suscribas. Tengo un regalito para mi audiencia:

Tu primer Dashboard en "piloto automático" listo en 30 minutos
Sólo para suscriptores.
.

31 dic. 2008

Libro. Hands-On Microsoft SQL Server 2005 Integration Services

Libro que ayuda a familiarizarse con SQL Server 2005 Integration Services y todos sus componentes.

Son una serie laboratorios con ejemplos didácticos de uso de Integration Services. Tened en cuenta que no esta orientado a ETL en BI, sino que es genérico. A mi modo de ver, le falta que los ejemplos sean un poco más relacionados con casos que se nos presentan en el día a dí­a. Os lo recomiendo si lo que vais buscando es hacer muchas prácticas e ir conociendo el entorno.

30 dic. 2008

Tratamiento de fechas y horas en SQL Server

Introducción.

El tratamiento de fechas en SQL Server es uno de temas que más preguntas generan en los foros y grupos de noticias. SQL Server tiene los tipos de datos datetime y smalldatetime para almacenar datos de fecha y hora.

No hay tipos de datos diferentes de hora y fecha para almacenar sólo horas o sólo fechas. Si sólo se especifica una hora cuando se establece un valor datetime o smalldatetime, el valor predeterminado de la fecha es el 1 de enero de 1900. Si sólo se especifica una fecha, la hora será, de forma predeterminada, 12:00 a.m. (medianoche), es decir, las 00:00.

Nota Importante: En SQL Server 2008 sí que tenemos como novedad tipos de datos para almacenar sólo la fecha y sólo la hora. Por tanto todo lo que contamos a continuación se puede solucionar usando los nuevos tipos de datos.


Tipo de datos Datetime.

Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una precisión de un trescientosavo de segundo, o 3,33 milisegundos.

SQL Server rechaza todos los valores que no puede reconocer como fechas entre 1753 y 9999.


Tipo de datos Smalldatetime.

Datos de fecha y hora desde el 1 de enero de 1900 al 6 de junio de 2079, con precisión de minutos. Entonces si se utiliza un valor smalldatetime los segundos y milisegundos son siempre 0.

Diferencia entre Datetime y Smalldatetime.

SQL Server almacena internamente los valores de tipo de datos datetime como enteros de 4 bytes y los valores smalldatetime como enteros de 2 bytes.


Funciones de fecha y hora (Transact-SQL)

Estas funciones escalares realizan una operación sobre un valor de fecha y hora de entrada, y devuelven un valor de cadena, numérico o de fecha y hora:

DATEADD
DATEDIFF
DATENAME
DATEPART
GETDATE
DAY
MONTH
YEAR


Trabajando con fechas ...

Con algunos pequeños ejemplos trataremos de resolver los mayores problemas para trabajar con estos tipos de datos. Para ello utilizaremos las funciones CAST y CONVERT.

Separando Fecha y Hora.

Declare @Fecha datetime
Set @Fecha = Getdate()
Select Convert(Char(10), @Fecha,112) As SoloFecha, Convert(Char(8), @Fecha, 108) As SoloHora
SoloFecha SoloHora
---------- --------
20010803 07:35:02
(1 row(s) affected)

Otra forma de conseguir el mismo resultado:

Declare @Fecha datetime
Set @Fecha = Getdate()
SELECT Convert(varchar, @Fecha, 3) AS SoloFecha, Convert(varchar, @Fecha, 8)

Operaciones con Fechas (diferencia entre dos fechas).

Obtener diferencia de meses, dias, minutos, etc. entre dos fechas.

Para realizar operaciones entre dos fechas MSSQL tiene la función DATEDIFF. Veamos algunos ejemplos de cómo utilizarla:

declare @FechaIngreso datetime
declare @FechaEgreso datetime

select @FechaIngreso = '19981231 15:15'
select @FechaEgreso = '20021005 10:10'

Select
DATEDIFF(dd, @FechaIngreso, @FechaEgreso) AS Dias,
DATEDIFF(mm, @FechaIngreso, @FechaEgreso) AS Meses,
DATEDIFF(mi, @FechaIngreso, @FechaEgreso) AS Minutos

Para obtener otras diferencias podemos recurrir a la siguiente tabla:

Parte de la fecha Abreviaturas
año aa, aaaa
trimestre tt, t
mes mm, m
día del año da, a
día dd, d
semana sm, ss
hora hh
minuto mi, n
segundo ss, s
milisegundo Ms

Otro ejemplo de DATEDIFF en donde recuperados los datos de la ultima semana partiendo de la fecha del día:

SELECT TusDatos
FROM TuTabla
WHERE
DATEDIFF(dd, TuFecha, GetDate()) <= 7

Continuando con las operaciones con las fechas, veamos como podemos hacer para sumar, restar, días, minutos, meses, a una fecha, para ello utilizamos la función DATEADD:

select convert(varchar(12), DATEADD(month, -1, getdate()), 106)
as 'un mes atrás'
select convert(varchar(12), DATEADD (week, -1, getdate()), 106)
as 'una semana atrás'
select convert(varchar(12), DATEADD (day, -1, getdate()), 106) as 'ayer'

Sugerencia:

Estos ejemplos que mostramos a continuación devolverían el mismo resultados que las consultas anteriores, pero, si, siempre hay un pero.... hace un tiempo nuestro compañero Fernando Guerrero me sugirió no utilizarlo pues este truco no está soportado oficialmente por SQL Server ni por el estándar ANSI.

select convert(varchar(12), getdate()-7), 106) as 'una semana atrás'
select convert(varchar(12), getdate()-1), 106) as 'Ayer'

Funciona, pero no sabemos hasta cuando.


Ampliar información:

Puede consultar en los B.O.L. (Books OnLine - Libros en Pantalla) cualquiera de las instrucciones citadas anteriormente.

También puede consultar los artículos y ejemplos publicados en http://www.portalsql.com
Allí busque la palabra 'fechas' y obtendrá todos los artículos publicados sobre el tema.

Libro. SQL Server 2000 Programación con ejemplos

Aunque ya tenemos SQL Server 2008, sigo recomendando este libro como punto de partida de la programación Transact SQL.

Libro escrito por Carlos Eduardo Rojas y Fernando G. Guerrero, dos gurús de SQL Server, que nos transmiten a base de ejemplos sus experiencias y conocimientos sobre este producto. Contiene unos 500 ejemplos prácticos. En fin, para cualquiera que leyera habitualmente el foro de SQL Server en esa época, sobran las palabras.

Este libro no debe faltar en la biblioteca de un desarrollador.

Nota: este libro ha sido traducido al castellano y ya está disponble en España. Lo podeis encontrar en Diaz de Santos.
Para ampliar la información sobre el libro y ver capítulos de ejemplo: www.sqlserverbyexample.com

29 dic. 2008

¿Qué son los Cubos SQL?

Cuando alguien utiliza el término "Cubos SQL" en un buscador, suele estar buscando información sobre OLAP y bases de datos multidimensionales, y posiblemente, iniciándose en este mundillo del OLAP, Data Warehouse y Business Intelligence. Si ese es tu caso estás en uno de los muchos sitios donde encontrarás información sobre el tema.

Puedes revisar las diversas entradas del blog sobre este tema. Te recomiendo que revises las diversas etiquetas que hay en la parte de derecha sobre BI, BI General, Business Intelligence, Analysis Services, SSAS, y cualquier otra que consideres interesante. También tienes las etiquetas asignadas a este post justo aquí abajo al finalizar esta entrada.

26 dic. 2008

Libro. SQL Server 2005 Integration Services

El libro de Kirk Haselden, Microsoft SQL Server 2005 Integration Services, es un estupendo libro de referencia. Vale tanto para su lectura completa, como para tenerlo como manual de referencia y consulta, para cada vez que nos surja una duda sobre el producto.

El libro comienza con una introducción y poco a poco va profundizando de una forma fácil de entender en las funcionalidades principales y en los componentes que tenemos disponibles. Trata temas tan variados como la seguridad en los paquetes, creación y despliegue de paquetes, creación de transformaciones personalizadas, migración desde DTS, y un largo etcétera.

Indice

  • Part I. Getting Started
  • Part II. Integration Services Basic Concepts
  • Part III. Control Flow Services
  • Part IV. Management Services
  • Part V. The Data Flow Task
  • Part VI. Programmin Integration Services

24 dic. 2008

¿Qué es Business Intelligence?

Muy a menudo nos encontramos con este término, cada vez con mayor frecuencia. Aunque aún sigue habiendo mucha gente que no acaba de tener claro qué significa. Espero con este post, aportar mi granito de arena, al entendimiento de este concepto.

Os recomiendo que veáis esta serie de tres videos, todos ellos de menos de 10 minutos, que espero que os ayuden a aclarar estos conceptos y os animo a que apliquéis Business Intelligence en vuestras empresas, sobre todo en un momento de crisis como el actual

Business Intelligence, herramienta fundamental para momentos de crisis - Parte 1

Business Intelligence, herramienta fundamental para momentos de crisis - Parte 2

Business Intelligence, herramienta fundamental para momentos de crisis - Parte 3

23 dic. 2008

Business Intelligence, herramienta fundamental para momentos de crisis - Parte 3

Business Intelligence, herramienta fundamental ante la crisis. Toma ventaja contra el resto de competidores. Conoce en esta serie de tres videos cómo estar un paso por delante y salir de la crisis el primero. Tercer y último video de la serie.

Business Intelligence, herramienta fundamental para momentos de crisis - Parte 2

Business Intelligence, herramienta fundamental ante la crisis. Toma ventaja contra el resto de competidores. Conoce en esta serie de tres videos cómo estar un paso por delante y salir de la crisis el primero. Segundo video de una serie de tres.

Business Intelligence, herramienta fundamental para momentos de crisis - Parte 1

Business Intelligence, herramienta fundamental ante la crisis. Toma ventaja contra el resto de competidores. Conoce en esta serie de tres videos cómo estar un paso por delante y salir de la crisis el primero. Primer video de una serie de tres.

 

22 dic. 2008

Cómo Reducir Log de Transacciones de SQL Server

Soluciones rápidas al problema.

Hacer Backup del Log de Transacciones ( Transaction Log ) y reducir el fichero.

  1. Ejecuta dos o tres veces la instrucción CHECKPOINT. Esto asegurará que todas las páginas de memoria se han escrito en el fichero de datos.
  2. Luego haz un BACKUP LOG WITH TRUNCATE_ONLY para que trunque el registro de transacciones.
  3. Posteriormente ejecutas DBCC SHRINKFILE indicando el nombre del fichero del log a reducir.

    (En la ayuda puedes ampliar información sobre estos dos mandatos).

Eliminar el fichero para que se genere de Nuevo (Esta solución es demasiado drástica, emplearla solo si falla la anterior):

  1. Pon la base de datos en modo "single user".
  2. Ejecuta CHECKPOINT dos o tres veces. Esto asegurará que todas las páginas de memoria se han escrito en el fichero de datos.
  3. Asegúrate de que no hay conexiones abiertas a la base de datos, con lo que no puede haber transacciones a medio ejecutar.
  4. Utiliza sp_detach_db para desconectar dicha base de datos.
  5. Elimina el fichero de log.
  6. Utiliza sp_attach_db para reconectar la base de datos. SQL Server creará un nuevo fichero de log.

    ¡¡¡ IMPORTANTE !!!
    Si no ejecutas el proceso completamente y en este orden, podrías tener problemas de consistencia de información en el fichero de datos.
    Por ejemplo, si apagas el equipo sin más, SQL Server no ha tenido tiempo de volcar las páginas de datos de la memoria al disco. Al reiniciar SQL Server, el problema será corregido utilizando la información contenida en el registro de transacciones, pero si este no está presente, el archivo de datos se dará por bueno, y podría ser realmente inconsistente.

    Otro detalle importante a tener en cuenta es que el log no se limpia nunca completamente, ya que siempre hay operaciones internas que SQL Server necesita mantener en él.

 

Causas habituales del crecimiento del Log de Transacciones ( Transaction Log ).

Si el log ha crecido mucho es porque SQL Server lo ha necesitado. Esto es debido a una de las siguientes causas:

  • Eso es lo que normalmente sucede y se debería ajustar la estrategia de backup para hacer copias del log más a menudo.
  • Si el crecimiento del log se debe a una ejecución (insert, update, delete) que afecta a un gran número de registros, bien por haber lanzado un proceso de actualización masiva o porque alguien ha ejecutado una consulta mal formada, que habría que detectarla (y darle un tirón de orejas al que la haya enviado).

Las copias completas de la base de datos no truncan el registro de transacciones. Utiliza una estrategia de copia de seguridad que mezcle copias completas de la base de datos con copias del registro de transacciones.

Puedes detectar las consultas enviadas a SQL Server con el Profiler.

No debes borrar el registro de transacciones manualmente salvo causa de fuerza mayor. Lo que debes hacer es diseñar una estrategia de copia de seguridad que sea acorde con el volumen de transacciones que tiene tu sistema.

 

Problemas habituales que impiden reducir el tamaño del Log de Transacciones ( Transaction Log ).

Los pasos para truncar el Transaction log pueden no ser tan obvios como pueda parecer:

El registro de transacciones está compuesto por al menos dos registros virtuales (VLF = Virtual Log Files). El truncado del registro de transacciones se realiza VLF a VLF. Si sólo tienes dos registros virtuales y te ocupan todo el fichero no podrás truncarlo, aunque dudo que cada VLF llegue a ocupar mucho espacio. (Para ampliar información sobre este punto, consulta en la ayuda 'Trucar el Registro de transacciones', encontrarás información detallada y un gráfico muy explicativo).

Al ejecutar una instrucción DBCC SHRINKFILE solo se le indica a SQL Server que se quiere reducir el tamaño físico del fichero de LOG. Si el último VLF está al final del log, aunque el resto del fichero esté vacío, no se podrá truncar el fichero, ya que SQL Server sólo puede reducirlo recortando por el final.

Supongamos que hay una estrategia de copia de seguridad que incluye copias completas y copias del log. En este caso son las copias del log las únicas que truncan el registro de transacciones, por lo que si se ha ejecutado o no DBCC SHRINKFILE, el registro no se truncará lógicamente hasta que se haga una copia de seguridad del log (o se ejecute BACKUP LOG TuBase WITH TRUNCATE_ONLY).

Sin embargo si el último VLF no está completo, no se podrá truncar, por lo que se tendrá que forzar su llenado. Al ejecutar DBCC LOGINFO(TuBase) se obtendrá una lista de VLF, si te fijas en la columna Status, 2 significa que no está activo o que al menos no es reutilizable. Envía alguna actualizaciones nulas (UPDATE TuTabla SET Campo1 = Campo1, por ejemplo) y vuelve a ejecutar el comando DBCC LOGINFO hasta que veas que hay algún otro VLF con status 2.

Ahora si que se puede ejecutar el BACKUP LOG para truncar el LOG y tras esto SQL
Server podrá recortar el fichero físicamente eliminando uno o más VLFs.

 

Enlaces con información de Microsoft sobre el tema.

INF: Cómo reducir el registro de transacciones de SQL Server

A consultar en los Books On Line y ampliar información:

DBCC SHRINKFILE
DBCC SHRINKDATABASE
DBCC LOGINFO
BACKUP LOG
sp_attach_db
sp_detach_db

16 dic. 2008

SQL Server - Plataforma y Componentes

SQL Server es más que un simple gestor de bases de datos relacionales, incluye otros servicios que dan valor añadido al producto. He aqui una introducción a todos ellos. Saca todo el rendimiento a tu servidor SQL.

 

Con este video comienzo una nueva serie que iré publicando en diversas plataformas y sitios, entre ellas Youtube.

2 dic. 2008

Learn Microsoft Business Intelligence

Acabo de encontrar este interesante sitio, cuyo objetivo es ofrecer videos gratuitos y foros de discusión sobre la plataforma Microsoft Business Intelligence, incluyendo: SQL Server Integration Services, SQL Server Analysis Services, SQL Server Reporting Services, PerformancePoint Server, ProClarity, SharePoint, y Excel.

Es necesario registrarse, pero dicho registro es gratuito. Ten en cuenta que el sitio es independiente, no pertenece a Microsoft.

Por el momento hay ya publicados 25 videos que os recomiendo. Esperemos que sigan creciendo.

Para acceder al sitio pincha aquí.

1 dic. 2008

Libro. Expert SQL Server 2005 Integration Services

Voy a comenzar una serie de recomendaciones de libros, ya específicos de los diversos componentes que ofrece SQL Server: Integration Services, Analysis Services, Reporting Services.

Expert SQL Server 2005 Integration Services es un libro que no debe faltar en tu biblioteca particular. Sus autores son Brian Knight y Eric Veerman, dos excelentes profesionales y prestigiosos experto en Integration Services. En este libro se hace uso de Integration Services orientándolo a la realización de procesos ETL para carga de Datawarehouses, con múltiples ejemplos para poner en práctica toda la teoría que se explica en él.

Indice:

  • Chapter1. Getting started
  • Chapter 2. Extending scripts in SSIS
    • Script tasks and custom libraries
    • Building a austom assembly
    • Making connections configurable and dynamics
    • Raising error events
    • Encrypting data throught script components
    • Data profiling
  • Chapter 3. Data extraction
    • Package connections and Data Flow sources
    • Incremental data extractions
    • Tracking data lineage identifiers
  • Chapter 4. Dimension ETL in SSIS
    • Dimension ETL: overview, the basics, the challenge
    • SSIS Slowly Changing Dimension wizard
    • Creating a custom slowly changing package
  • Chapter 5. Fact Table ETL
    • Fact Table: overview, ETL,
    • Fact Table ETL chalenge
    • Fact Table ETL basics
    • Fact Table ETL concepts
  • Chapter 6. Processing Analysis Services objects with SSIS
  • Chapter 7. Package reliability
  • Chapter 8. Deployment
  • Chapter 9. Managing SSIS
  • Chapter 10. Handling heterogeneus and unusual data
  • Chapter 11. Migrating from DTS to SSIS
  • Chapter 12. Scaling SSIS

Para ampliar información en Amazon sobre dicho libro, incluyendo comentarios de los lectores, pincha aquí.

Google