November 2007 - Artículos - Percy Reyes's Technical Blog

November 2007 - Artículos

Amigos, les dejo algunas fotos del evento realizado en la ciudad de Huánuco este 24 de Noviembre, realizado por la comunidad SQL Server Perú y la Universidad Privada de Huánuco.

PercyReyesJuanMestasDavidGuadalupePercyReyes

DSC08602_DSC08590_

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 4 comment(s)

Amigos, se les hace recordar que el Evento TechNet Summit 2007 Trujillo Edition que se llevará acabo el 1 diciembre 2007, en el auditorio de la Universidad Privadas Alas Peruanas (Sucursal Trujillo). No olvides de asistir, No faltes!, Te esperamos!. Más detalles.

 

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 3 comment(s)
 
What: SQL Server Apocalipsis Event
Motivo: Aniversario de la Escuela Ingeniería de Sistemas de la Universidad Privada de Huánuco - Charlas de SQL Server a Nivel Intermedio y Avanzado.
When: sábado, noviembre 24, 2007 (all day)
Where: Universidad Privada de Huánuco
Auditorio Universidad Huánuco
Huánuco, Huánuco   Perú

Organizan: Comunidad: SQL Server Perú Community y Universidad Privada de Huánuco.

Auspician: Microsoft TechNet -  Región Andina, INETA LatAm,Culminis LatAm

AGENDA

EN LA MAÑANA

08:00 AM - 09:00 AM - Registro de Asistentes y Bienvenida.

09:00 AM - 10:00 AM : Performance Point: Construyendo un Scorecard
Descripción: Hoy en dia existen muchas formas de medir tus objetivos, tenemos metodologias desde Balanced Scorecard hasta Six Sigma. Performance Point nos ayudara en una de sus ramas a construir todo esto. En esta presentacion se mostrará paso a paso la construcción de un tablero de control y el significado que tiene este sobre toda empresa.

Expositor:  Jorge Ojeda García, Ingeniero de Sistemas (UNMSM). MCP, MCAD, MCSD  y MCTS SQL Server 2005.

10:00 AM - 11:00 AM : Tema: Cómo asegurar la información en SQL Server 2005

Descripción: SQL Server 2005 incorpora mejoras significativas en el modelo de seguridad de la plataforma de bases de datos, con el objetivo de proporcionar más opciones a nivel de gestión y de seguridad tanto para los desarrolladores como a los administradores. Incluyendo varias características de seguridad configurables y de gran precisión. Estas características permiten a los administradores implementar una defensa optimizada para los riesgos de seguridad específicos de su entorno.

Expositor: Percy Reyes Paredes (MCTS SQL Server 2005, Microsoft Certified Professional .NET, Culminis Speaker, Orador Regional & Academic INETA Latinoamérica, SQL Server Perú Community Lead).

11:00 AM - 12:00 AM : SQL Server 2005: Endpoints

Descripción: Diseñar un sólido sistema de Seguridad requiere la aplicacion del enfoque en capas. Este proceso es conocido como "Defensa en Profundidad" (Defense in Depth). SQL Server 2005 introduce los Endpoints como la primera barrera de seguridad para todas las conexiones. En esta sesion enfocaremos el aprovechamiento de este mecanismo de seguridad y sus diferentes variantes asi como su uso en el desarrollo de aplicaciones Orientadas a Servicios (SOA)
Expositor: Juan Mestas (Microsoft Andean Speaker, Orador Regional INETA, Culminis Speaker, MCTS Web Applications, MCTS Windows Applications, MCTS SQL 2005, MCAD .Net, MCP, SCJP J2SE, ITIL Foundation Certified)

POR LA TARDE

03:00 PM - 09:00 PM : Desarrollo de Aplicaciones Móviles utilizando Microsoft SQL Server 2005 Compact Edition
Estrategias de Datos sobre Aplicaciones Moviles.

Descripción: Demo Query analizer a la antigua, Microsoft SQL Server 2005 Compact Edition, Demo Administracion desde Desktop, Replicacion de Datos, Demo Replicacion, Consideraciones sobre Sistemas Moviles, demo completa utilizando patrones, Entrega de Disconnected Mobile Data Access Hands-on Lab completamente desarrollado.

Expositor: David Guadalupe (Ingeniero de sistemas con amplia experiencia en el Desarrollo de Sistemas a medida utilizando Tecnologías Microsoft)

04:00 PM - 05:00 PM : SQL Server 2008: Mas allá de lo relacional

En la medida en que los datos de sus aplicaciones cambian desde "palabras y números" hacia "vistas y sonidos", nosotros estamos evolucionando nuestra plataforma de base de datos para que vaya mas allá de lo relacional, mas allá de OLAP, para soportar efectivamente todos los tipos de datos digitales del futuro. Estamos enfocados en entregar la mejor plataforma para almacenamiento integrado, así como aplicaciones avanzadas tales como datos espaciales, mientras que facilitamos enormemente la construcción de aplicaciones orientadas hacia datos, sin necesidad de invertir en muchos recursos para saltar la brecha entre datos y estructuras de datos de lenguajes de programación. ¡Vengan y aprendan sobre las mejoras en SQL Server 2008 que lo ayudarán a gestionar todo tipo de datos.

Expositor: Percy Reyes Paredes (MCTS SQL Server 2005, Microsoft Certified Professional .NET, Culminis Speaker, Orador Regional & Academic INETA Latinoamérica, SQL Server Perú Community Lead).

Aunque la audiencia ya está asegurada por alumnos y docentes de dicha universidad, se hace la invitación a todas aquellas personas que vivan en Huánuco y/o tengan la oportunidad de poder ir a este evento puede inscribirse gratuitamente.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 3 comment(s)
What: TechNet Summit 2007 Trujillo Edition
¿Te interesa conocer lo nuevo de Windows Server, SQL Server y Seguridad? Ven y acompáñanos el 1 de diciembre para aprender a mitigar los retos que, día tras día, tienes en tu lugar de trabajo. Continúa tu aprendizaje en este TechNet Summit y conviértete en un experto en tecnología. Recuerda que esto forma parte de tu carrera en MVA y sigue sumando puntos.
When: sábado, diciembre 1, 2007 (all day)
Where: Auditorio Universidad Alas Peruanas
Trujillo, Trujillo   Perú

En este evento tendré el gusto de compartir dos charlas, una de SQL Server 2005 y otra de SQL Server 2008, les esperamos!. Aquí la agenda completa:

08:00 AM - 09:00 AM - Registros de Asistentes y Bienvenida.

09:00 AM - 10:00 AM - Seguridad en SQL Server 2005 - Revisión en Profunidad - (Nivel 300)

En esta sesión revisaremos como SQL Server 2005 trata la temática de seguridad, dividiéndola en una gran cantidad de subtemas. A través de esta sesión, introduciremos conceptos en seguridad nuevos a SQL Server 2005, tales como la separación de usuarios y esquemas. También revisaremos como SQL Server 2005 implementa conceptos actuales de seguridad como encripción, por ejemplo. Adicionalmente, se evaluará la seguridad desde la perspectiva del servidor, de la base de datos y de los objetos de bases de datos, además de algunas otras opciones que se pueden usar en cada nivel para asegurar los datos. Por último, como monitorear la seguridad en SQL Server.

Expositor: Percy Reyes Paredes, MCP, MCTS SQL Server, Culminis Speaker, Orador INETA

10:05 AM - 10:50 AM - Mejoras en administración en Windows Server 2008 - Windows PowerShell - (Nivel 300)

En esta sesión, analizaremos las mejoras en administración en Windows Server 2008 en conjunto con Windows PowerShell. Para empezar, realizaremos una breve introducción a Windows PowerShell, y conversaremo sobre sus capacidades y características. Luego, revisaremos el shell en profundidad, incluyendo sintaxis, sistema de ayuda y algunos cmdlets específicos para Exchange. A continuación, cubriremos como se pueden convertir los scripts actuales desarrollados en Visual Basic para tareas de administración, en scripts eficientes Windows PowerShell. Finalmente, terminaremos por analizar algunas mejoras de administrabilidad en Windows Server 2008 incluyendo nuevos proveedores WMI, otras herramientas de línea de comandos y capacidades de gestión remota.

Expositor: Nelson Angeles -  Culminis Speaker, Especialista en Servidores

11:10 AM - 12:10 AM - La siguiente versión de SQL Server: Mas allá de lo relacional - (Nivel 200)

En la medida en que los datos de sus aplicaciones cambian desde "palabras y números" hacia "vistas y sonidos", nosotros estamos evolucionando nuestra plataforma de base de datos para que vaya mas allá de lo relacional, mas allá de OLAP, para soportar efectivamente todos los tipos de datos digitales del futuro. Estamos enfocados en entregar la mejor plataforma para almacenamiento integrado, así como aplicaciones avanzadas tales como datos espaciales, mientras que facilitamos enormemente la construcción de aplicaciones orientadas hacia datos, sin necesidad de invertir en muchos recursos para saltar la brecha entre datos y estructuras de datos de lenguajes de programación. ¡Vengan y aprendan sobre las mejoras en SQL Server 2008 que lo ayudarán a gestionar todo tipo de datos.

Expositor: Percy Reyes Paredes, MCP, MCTS SQL Server, Culminis Speaker, Orador INETA

12:15 AM - 13:00 AM - Nuevos elementos en Active Directory para Windows Server 2008. 

Expositor: Nelson Angeles -  Culminis Speaker, Especialista en Servidores

Además pueden ver la publicidad del evento aqui. Este evento es gratuitos, y pueden inscribirse aqui.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 4 comment(s)

Hoy día, asi es, hoy día 9 de octubre se ha liberado el SQL Server 2005 Driver for PHP (October 2007) CTP el cual es una extensión que proporcionará una integración escalable con SQL Server 2005 para aplicaciones PHP.

The SQL Server Driver for PHP (October 2007) Community Technology Preview (CTP) is designed to enable reliable, scalable integration with SQL Server for PHP applications deployed on the Windows platform. The Driver for PHP is a PHP 5 extension that allows the reading and writing of SQL Server data from within PHP scripts. It provides a procedural interface for accessing data in all Editions of SQL Server 2005 and SQL Server 2000 (including Express Edition), and makes use of PHP features, including PHP streams to read and write large objects.

Descarga directa desde aqui: SQL Server 2005 Driver for PHP (October 2007) CTP

Por cierto, yo no programo en PHP, tengo conocimientos, pero no programo día y noche como Gonzalo Perez - MVP ASP .NET (xD!), porque no me gusta :P. Pero en fin, les dejo el recurso, estoy seguro que servirá a muchísima gente que si gusta de PHP. Ah!, es mi deber probar esta extensión ya que tiene que ver con SQL Server, asi que voy a decirle a Gonzalo que me ayude :P. ¿Gonzalo me ayudas? :S.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 4 comment(s)

Un ataque DoS (Denial Of Services Attacks) es un ola coordinada de solicitudes de servicio para mantener ocupados todos los recursos del servidor y causar un "crash" (accidente) u ocasionar rendimientos inaceptables para el resto de solicitudes. La rapidez con la que usted reconocoza los síntomas de un ataque DoS es urgente para mitigar un ataque lo más pronto posible. Estos síntomas pueden manifestarse con un gran número de solicitudes de login contra el servidor, o quizas muchas conexiones originadas de direcciones comunes o un conjunto de direcciones de usuarios de diferentes máquinas, etc.

Sea cual sean lo síntomas, usted puede seguir los siguientes guidelines para mitigar los daños y prevenir que este tipo de ataques se repitan.

  • Reinicie el Servicio de SQL Server: En el caso que ataque sea contra el servicio de SQL Server (más no contra el Host Computer) entonces debe reiniciar el servicio logrando desconectar todas las conexiones actuales de los atacantes, siendo esto suficiente para parar un ataque DoS continuado.
  • Reinicie el Sistema Operativo: En el caso que el ataque sea contra el ordenador que hostea SQL Server, entonces reinicie el servidor para desconectar todas las conexiones DoS. Mientras se reinicie el servidor asegúrese de mantener desconectado el servidor de la red.
  • Bloquee la dirección IP del atacante: Esta medida es aplicable cuando el ataque se ha originado de un IP específico o rango de direcciones IP , en este caso, informe al administrador de red para bloqueer el tráfico originado de estas direcciones IP.
  • Cambie el nombre o dirección IP del servidor: Si el ataque no para a pesar de haber reiniciado el servidor, entonces opte por cambiar el nombre y la dirección IP del servidor. A pesar que esta medida puede interrumpir la funcionalidad de ciertas aplicaciones de base de datos, le ayudará a parar rápidamente el ataque hasta que usted elaboré otras medidas defensivas, como bloquear todo el trafico originado desde internet.

Espero que estas recomendaciones le ayuden a actuar de una mejor manera para prevenir o en todo caso parar este tipo de ataques.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | con no comments

Ya hace algún tiempito en el site de Microsoft existen algunos papers de SQL Server 2008 que podrían ir revisando y los cuales les comparto. A leer se ha dicho!. Espero que lo disfruten!. Les dejo la lista:

SQL Server 2008 - Whitepapers

Toda la lista de papers pueden encontrarla aqui: http://www.microsoft.com/sql/2008/learning/whitepapers.mspx.

SQL Server 2008 - CLINICS

Aqui se viene lo mejor, Microsoft ha hecho disponible algunos clinics GRATUITOS de SQL Server 2008, donde se muestran algunas de la interesantes características. De verdad que esto si está bueno!.

Ya sabes, no te quedes, renuévate con SQL Server 2008, ya no hay pretextos.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 4 comment(s)

El mundo sabe que una Base de Datos es una colección de Datos con un mínimo de redundancia las cuales pueden ser compartidos por diferentes sistemas de aplicaciones. Para llegar a obtener esta "colección de datos no con un mínimo de redundancia" se debe seguir una metodología para el Diseño de Base de Datos. Bien, en este post voy hablarles acerca de los pasos preliminares, objetivos, cuestiones, problemas comunes que puedan surgir en el proceso de diseño de una base de datos, y explicar porque este es un proceso iterativo (para que nunca lo olvidemos).

Todos sabemos que esta metodología se divide en tres fases (diseño conceptual, diseño lógico y diseño físico) que ayudarán a obtener un conjunto de esquemas relacionales que faciliten la recuperación de la información. El Diseño de Base de Datos es un proceso iterativo, por lo que es díficil trazar una linea recta entre las actividades de diseño preliminar y detallado, sin embargo, el diseño preliminar de la base de datos tiene como objetivo elaborar un esquema contra la cual los desarrolladores puedes empezar a escribir código, sin centrarse en la parte interna, física del esquema. El diseño detallado puede hacerse luego con o ningún impacto fuerte en el código.

El Diseño físico de la Base de Datos tiene que ver con el almacenamiento físico de la data, el cual tiene como punto de inicio el modelo lógico de la data en tercera forma normal. Existen pasos preliminares al proceso de Diseño de Base de Datos, las cuales debemos de analizar para convertir el modelo logico en un modelo físico de datos:

  • Convertir las entidades en archivos, es decir, en tablas.
  • Convertir la relationshisps a Foreing Keys.
  • Convertir atributos a elementos de datos, es decir, campos.
  • Si fuera necesario, habrá desnormalizar la data, agregar nuevos Keys, o definir relaciones jerárquicas en lugar de arrastrar Primary Keys por todos lados.

Antes de empezar con el Diseño de Base de Datos, aparte de haber llevado acabo un análisis de requerimientos del negocio, debió haberse determinado los objetivos:

  • ¿Cuál es el problema que se necesita resolver?
  • ¿Cómo se resolverá el problema?
  • ¿Existen métodos alternativos para resolver el problema?
  • ¿Cuáles serán los productos finales del proyecto? ... reportes?, Working Maps?, etc.
  • ¿Con qué frecuencia se generarán los productos?
  • ¿Quienes usarán los productos finales?, es decir, ¿Quiénes conforman las audiencia prevista para los productos finales? : Técnicos?, Administradores?, Planificadores?, Público en General? .. Quiénes?...
  • ¿Hay o habrán otros usos de la información?, Si hubieran otros usos, entonces ¿Cuáles serán los requerimientos específicos?

Además hay que en tener en cuenta las siguientes cuestiones:

  • ¿Qué medios de almacenamiento se deben de utilizar?, esto incluye saber ¿Cuan grande debe ser la Base de Datos?, ¿Cómo va creciendo con el tiempo la Base de Datos?
  • ¿Cuáles deben ser la velocidades de acceso?
  • ¿La data debe ser particionado por ubicación o tema?
  • La Base de Datos será Distribuido? o Centralizado?, Si fuera distribuido, sobre que sitios o hosts se ubicarán o asignará la data?.
  • ¿Quién es el responsable para hacer que la data se ajusten a los standares?

Durante este proceso de Diseño de la Base de Datos puede surgir algunos problemas comunes  de Diseño, como por ejemplo:

  1. Se tiene una tabla con gran número de campos que no están relacionados con el objeto.
  2. Pueden existir campos que son intencionalmente blancos a la izquierda en algunos registros porque ellos no son aplicables para esos registros.
  3. Se obtienen un gran número de tablas las cuales contienen los mismos campos.

Siendo el diseño de la Base de Datos un proceso iterativo, entonces para solucionar los problemas anteriores será necesario redefinir el diseño(cuantas veces sea necesario), intentando responder a las siguientes preguntas(y otras que podrían surgir más adelante):

  • ¿Existen campos que usted ha olvidado?, es decir, existe información que usted no ha incluido hasta el momento?
  • ¿Eligió un primary key para cada tabla?, si es así, este es fácil de escribir y recordar?
  • ¿Está usted repetidamente ingresando información duplicada en una de sus tablas?
  • ¿Tiene usted tablas con muchos campos, número limitado de registros, y muchos campos vaciosn en registros individuales?

En fin, luego de haber seguido estos pasos, y teniendo en cuenta lo dicho, estoy seguro que les ayudará a obtener un buen diseño de la Base de Datos.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 4 comment(s)

Hace más de un año había escrito en este blog sobre esta herramienta: SQL Service Manager 2005, y he decidido hacer un cross a Geeks para compartirlo con más personas (En ese entonces aún no tenía un blog en Geeks :P). Entonces empecemos...

Si hay algo que se debe extrañar de SQL Server 2000, es precisamente, el SQL Service Manager, mediante el cual podíamos iniciar, pausar y parar los servicios de SQL Server de manera directa sin estar molestándonos en hacerlo desde el SQL Configuration Manager o desde el administrador de servicios de Windows... ahora, si no sabes a que me refiero pues es esto que aparece en el lado derecho inferior de la pantalla.

El detalle es que esta utilidad no viene con el SQL Server 2005, sino que tienes que instalarlo adicionalmente, y la buena noticia es que existe una herramienta que nos ayuda en esto. Jasper Smith no tuvo la mejor idea que desarrollar una utilidad equivalente para SQL Server 2005, esto es el Service Manager 2005.

Te dejo la liga de esta excelente herramienta:: Download SQL2005 Service Manager (1.0.0.8). Más información de esta utilidad puede leerlo en el site del autor: http://www.sqldbatips.com/showarticle.asp?ID=46 Espero que les sea útil.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 8 comment(s)

Con la llegada de SQL Server 2008, algunos de los nuevos tipos de datos que ya son (o serán) novedades tenemos a los siguientes: HIERARCHY ID (para almacenar valores de nodos en un jerarquía), FILESTREAM (para almacenar data de tipo grande, documentos, imágenes), tipos para almacenar datos espaciales como GEOGRAPHY, GEOMETRY, así como los tipos de datos TIME (3 a 5 bytes de tamaño) y DATE (3bytes), DATETIME2 (6 a 8 bytes), DATETIMEOFFSET (8 a 10 bytes), entre otros más.

En este post vamos a hablar acerca de los tipos de datos para manejar fechas y tiempo, es decir, los 4 últimos arriba mencionados. Los otros tipos de datos serán motivos de otro post!.

DATETIME es un tipo de dato compuesto que almacena fecha y tiempo. La novedad es que en SQL Server 2008, el tipo de dato DATETIME se ha separado en dos: DATE y TIME, con esto no quiero decir que DATETIME se haya eliminado, este sigue siendo necesario para otros escenarios, pocos pero en fin. Esta noticia es muy buena ya que por ejemplo, siempre, casi siempre... sólo necesitabamos almacenar la fecha, más no el tiempo, y el único tipo de dato que podiamos usar era DATETIME, el cual "amablemente" guardaba algo más: el tiempo, aunque no lo necesitemos, pues no habia solución. DATETIME aparte de ser un tipo de dato cuyo tamaño es 8 bytes (realmente bastante), es pesado pudiendo originarse problemas de performance general.

Particularmente casi nunca uso DATETIME, prefieron usar con mucho criterio SMALLDATETIME, Porqué?, pues su tamaño es 4 bytes, y para lo que necesito está bien, puedo manejar fechas entre el rango de 1900 y 1979. Obviamente, SMALLDATETIME también almacena la hora, cosa que no se necesita en la mayoria de aplicaciones. De manera semejante sucedía cuando queriamos trabajar sólo con la hora, no había forma de separar la hora de la fecha. Ejemplo:

-- creando un tipo de datos DATE, y asignándole un valor 
DECLARE @FechaTiempo DATETIME
SET @FechaTiempo= GETDATE()
SELECT @FechaTiempo AS FechaTiempo
Resultado:

FechaTiempo
-----------------------
2007-11-03 16:25:53.653

(1 row(s) affected)

Con los tipos de datos DATE y TIME, este problema se soluciona. DATE para almacenar sólo fechas, y TIME para tiempo.

Para asignar valor a un tipo de dato DATETIME usábamos la función del sistema GETDATE(). GETDATE() devuelve un valor de tipo DATETIME. ¿Y cómo asignamos valor a estos nuevos tipos de datos DATE y TIME?, curiosamente la solución es usar GETDATE(). Asi es, pues fíjate que internamente el Database Engine de SQL Server 2008 al detectar que el valor devuelto por GETDATE() será asignado a un tipo DATE o TIME, este filtra sólo la fecha o sólo el tiempo. Veamos un ejemplo:

-- creando un tipo de datos TIEMPO, y asignándole un valor 
DECLARE @Tiempo TIME
SET @Tiempo= GETDATE()
SELECT @Tiempo AS Tiempo
 
-- creando un tipo de datos DATE, y asignándole un valor 
DECLARE @Fecha DATE
SET @Fecha= GETDATE()
SELECT @Fecha AS Fecha
Resultados:

Tiempo
----------------
16:26:22.2800000

(1 row(s) affected)

Fecha
----------
2007-11-03

(1 row(s) affected)

Otro de los tipos para manejar fecha y tiempo son DATETIME2 y DATETIMEOFFSET, a los cuales yo me refiero como extensiones del tipo DATETIME. DATETIME2 es un DATETIME con más precisión y un mayor rangos de años, y con DATETIMEOFFSET se tendrá la posibilidad de manejar fecha y tiempo relacionados a una zona horaria en particular. Cool! :D.

-- creando un tipo de datos DATETIME2, y asignándole un valor 
DECLARE @FechaTiempo2 DATETIME2
SET @FechaTiempo2= GETDATE()
SELECT @FechaTiempo2 AS FechaTiempo2
 
-- creando un tipo de datos DATETIMEOFFSET, y asignándole un valor 
DECLARE @FechaTiempoOFFSET DATETIMEOFFSET
SET @FechaTiempoOFFSET= GETDATE()
SELECT @FechaTiempoOFFSET AS FechaTiempoOFFSET

Resultados:

FechaTiempo2
---------------------------
2007-11-03 16:26:47.8270000

(1 row(s) affected)

FechaTiempoOFFSET
----------------------------------
2007-11-03 16:26:47.8270000 +00:00

(1 row(s) affected)

Finalmente puedo decir que la gente de SQL Server creo que está escuchando mis oraciones, hace tiempo que venía necesitando estos tipos de datos, rogando que existan tipos de datos separados para manejar fecha y tiempo.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 8 comment(s)

Uno de los modos de transacciones que se conocen, aparte de las transacciones auto-commit y las explícitas, son las Transacciones Implícitas que son aquellas iniciadas por SQL Server en el caso de que no exista alguna transacción. Las transacciones implícitas no llegan a realizar un COMMIT o ROLLBACK automáticamente, siendo necesario finalizarlo explicitamente. Esto es útil cuando deseamos iniciar automáticamente las transacciones e ir administrando y evaluando la confirmación o cancelación de las mismas. Por defecto, SQL Server maneja las transacciones en modo auto-commit, es decir, en este modo SQL server inicia y termina automáticamente una transacción cuando esta no ha sido definida por el desarrollador.

En fin, una transacción implícita cuando no existen transacciones se inician con las siguientes sentencias: ALTER TABLE, CREATE, DROP, GRANT, REVOKE, OPEN, FECTH, INSERT, UPDATE, DELETE, SELECT, TRUNCATE TABLE. Para usar las transacciones implícitas debe ajustarse la conexión para que trabaje en este modo.

SET IMPLICIT_TRANSACTIONS ON;

Otra manera de ajustar a modo implícito, sería activar la opción ANSI_DEFAULTS, con esto el modo de transacción implícita también se activará. Así:

SET ANSI_DEFAULTS ON

Vamos a ejecutar el siguiente código y checkear si la transacción es iniciada.

CREATE TABLE [Customers](
 [CustomerID] [nchar](5) NOT NULL,
 [CompanyName] [nvarchar](40) NOT NULL,
 [ContactName] [nvarchar](30) NULL,
 [ContactTitle] [nvarchar](30) NULL,
 [Address] [nvarchar](60) NULL,
 [City] [nvarchar](15) NULL,
 [Region] [nvarchar](15) NULL,
 [PostalCode] [nvarchar](10) NULL,
 [Country] [nvarchar](15) NULL,
 [Phone] [nvarchar](24) NULL,
 [Fax] [nvarchar](24) NULL,
 CONSTRAINT [PK_Customers] PRIMARY KEY CLUSTERED ([CustomerID])
)

Ahora se necesita evaluar si alguna transacción activa asociada a la conexión actual, para esto consultaremos el valor de @@TRANCOUNT.

SELECT @@TRANCOUNT AS [TranCount];

Vemos que el resultado indicará que hay una transacción iniciada. Bien, hasa ahora aún no hemos cerrado la transacción anterior, entonces el siguiente código se ejecutará dentro de dicha transacción.

INSERT INTO [Customers]
VALUES
(
 'APRPS',
 'HILARION-Abastos',
 'Percy Reyes',
 'Sales Representative',
 'Obere Str. 57',
 'Berlin',
 NULL,
 '12209',
 'Germany',
 '030-0074321',
 '030-0076545'
)

Ejecute el siguiente código para comprobar que el número de transacciones sigue siendo 1.

SELECT @@TRANCOUNT AS [TranCount];

Finalmente hacemos un ROLLBACK TRAN (ó un COMMIT TRAN), y pasamos a evaluar el valor de @@TRANCOUNT (como se a venido haciendo) para comprobar que el número de transacciones activas ahora es cero.

ROLLBACK TRAN
GO
SELECT @@TRANCOUNT AS [TranCount];

Entonces, como hemos hecho un ROLLBACK TRAN, no debe existir la tabla Customers que se pretendió crear al inicio. Para comprobarlo puede hacer un simple SELECT a la tabla, y SQL Server Engine le devolverá un error indicándole que no existe dicha tabla.

Por último, la volver a modo auto-commit, haga lo siguiente:

SET IMPLICIT_TRANSACTIONS OFF;
 

Cuando estemos trabajando con transacciones implícitas podría darse el caso de que en algún momento olvidemos de hacer el COMMIT TRAN correspondiente originando más adelante transacciones grandes, y posiblemente provocando bloqueos con otras conexiones, o teniedo ROLLBACKs indeseados debido a conexiones cerradas. Se recomienda no olvidar realizar el COMMIT TRAN o ROLLBACK TRAN cuando trabaje en este modo.

If you like this post then follow @percyreyes on twitter.

Publicado por Percy Reyes | 6 comment(s)