SharePoint y .Net Framework 3.5 + SharePoint SDK Additional Detail!

Aunque parecía lógico, a través del blog de Paul Andrew, uno de los program manager de Windows Workflow Foundation (WF) y que desde febrero de este año es Microsoft Technical Product Manager para SharePoint, se ha confirmado algo que ya se podía intuir: SharePoint soporta .NET Framework 3.5. De hecho, existe en Microsoft TechNet una actualización de febrero de este año (del día 21) sobre los requerimientos HW y SW para SharePoint dónde ya se indica esto:

Microsoft .NET Framework 3.0

Before installing Windows SharePoint Services 3.0, you must install the Microsoft .NET Framework 3.0 and then ensure that ASP.NET 2.0 is enabled.

Note:

You can also use the Microsoft .NET Framework version 3.5. You can download the .NET Framework version 3.5 from the Microsoft Web site (http://go.microsoft.com/fwlink/?LinkId=110508).

To enable ASP.NET v2.0.50727, open the Web service extension in the IIS snap-in on the Microsoft Management Console (MMC). If ASP.NET 2.0 is installed on the computer before IIS is enabled, you must enable ASP.NET 2.0 by running the command aspnet_regiis -i.

Además de esta confirmación, en esta otra entrada Paul Andrew nos comenta que están actualización el SDK de SharePoint añadiendo gran cantidad de información detallada y relativa al modelo de objetos (clases y métodos). De momento esta información adicional sólo está disponible online vía MSDN, si bien según Andrew pronto la añadirán a las versiones descargables de los SDK de SharePoint (WSS 3.0 & MOSS).   

SQL Server 2008: Change Data Capture o CDC

Como os comentaba la semana pasada, estos días estoy “a tope” aprendiendo un montón de características y capacidades de SQL Server 2008. Algunas ya conocidas de la versión anterior (y que yo no conocía), y otras completamente nuevas, útiles y espectaculares. Una de estas nuevas características es el Change Data Capture o simplemente CDC (para los amigos ;)). Esta utilidad permite capturar toda la actividad de inserción, borrado y actualización que se produzca en las tablas de una BD SQL Server 2008. Además, toda la información capturada se podrá consumir de un modo sencillo en formato relacional.

La clave del CDC son un conjunto de tablas de cambio que contienen una serie de columnas que son un reflejo de las estructura de las columnas de la tabla fuente a la que se le está realizando el seguimiento de cambios, así como unos metadatos necesarios para comprender los cambios que se han producido. Empecemos.

Haciendo funcionar el CDC

Para probar el CDC, vamos a seguir los siguientes pasos:

  • Creamos una BD denominada SQL2008CDC.
  • Ejecutamos el procedimiento almacenado (SP) sp_cdc_enable_db, que se encarga de habilitar el CDC en la BD.
  • Creamos una tabla de prueba en la BD.
  • Ejecutamos el SP sp_cdc_table, para habilitar el CDC en la tabla que acabamos de crear.

CREATE DATABASE SQL2008CDC

GO

USE SQL2008CDC

GO

                        EXEC sys.sp_cdc_enable_db

GO

USE SQL2008CDC

GO

CREATE TABLE dbo.Empleado(

                        ID_Empleado int Primary Key NOT NULL,

                        NombreEmpleado nvarchar(100) NOT NULL,

                        EmailEmpleado nvarchar(100) NOT NULL)

GO

                        EXEC sys.sp_cdc_enable_table ‘dbo’, ‘Empleado’, @role_name = NULL,

                                               @supports_net_changes =1;

GO

Si todo ha ido bien, la salida por pantalla que se produce al ejecutar el script anterior debería ser:

image

  • Insertamos un registro en la tabla:

use SQL2008CDC

GO

INSERT INTO dbo.Empleado

                        values (1, N’Juan Carlos González’, N’jcgonzalez@ciin.es’)

GO

  • Actualizamos el registro anterior:

use SQL2008CDC

GO

UPDATE dbo.Empleado

                        SET NombreEmpleado = N’Juan Carlos González Martín’ WHERE ID_Empleado = 1;

GO

  • Para comprobar que ha hecho el CDC, ejecutamos la siguiente sentencia SELECT:

select * from cdc.dbo_Empleado_CT

Esta sentencia nos permite consultar en la tabla de cambios que se ha creado en la BD SQL2008CDC (aparece dentro de System Tables) los cambios que se han producido en la tabla origen (Empleado). De paso, os pongo el correspondiente pantallazo en el que podemos ver dos cosas interesantes :):

  • Por una parte, tenemos que dentro de la carpeta System Tables de nuestra BD aparecen una serie de tablas que el CDC utiliza para hacer toda el seguimiento de cambios que se vaya produciendo.
  • Por otro, el ya conocido soporte de Intellisense que introduce SQL Server 2008.

image

Y el resultado de la ejecución es el siguiente:

image

Como vemos, la salida de ejecutar la sentencia anterior produce un total de 3 filas que identifican el número de operaciones que se han realizado en la tabla origen. La operación es identificado a través del valor que aparece en la columna _$operation:

  • Un valor 1 implica que se ha borrado el registro de la BD.
  • Un valor 2 identifica que se ha realizado un INSERT.
  • Un valor 3 indica que el registro en la tabla es el valor previo a una actualización de un registro en la tabla origen.
  • Un valor 4 indica que el registro en la tabla es el valor posterior a una actualización de un registro en la tabla origen.

¿Dónde se guardan las columnas cuyo cambio de valor estamos capturando? En la tabla cdc_captured_columns:

image

¿Qué más podemos hacer con el CDC?

  • Devolver sólo los registros que han contienen los valores antes y después de un UPDATE:

GO

                        DECLARE @from_lsn binary(10), @to_lsn binary(10);

                                               SET @from_lsn = sys.fn_cdc_get_min_lsn(‘dbo_Empleado’);

                                               SET @to_lsn = sys.fn_cdc_get_max_lsn();

                        SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Empleado(@from_lsn, @to_lsn, ‘all’);

GO

La salida que se obtiene es la siguiente:

image

Lo que estamos haciendo es devolver mediante las funciones fn_cdc_get_min_lsn() y fn_cdc_getmax_lsn() los registros mínimo y máximo que se están guardando en la tabla cdc.lsn_time_mapping. Esta tabla, que se crea en el momento que se activa el CDC, almacena los valores LSN (Log Secuence Number) que se generan como consecuencia de cada transacción que contiene filas de datos en una tabla de cambios, así como el instante de tiempo en el que se produjo la transacción.

  • Limpiar las tablas CDC y deshabilitar el CDC:

use SQL2008CDC

GO

                        DECLARE @end_time datetime;

                        DECLARE @to_lsn binary(10);

                                               SET @end_time = GETDATE();

                        SELECT @to_lsn = sys.fn_cdc_map_time_to_lsn(‘largest less than or equal’,

                                               @end_time);

                        exec sys.sp_cdc_cleanup_change_table @capture_instance = ‘dbo_Empleado’,

                                               @low_water_mark=@to_lsn

GO

  • Deshabilitar el CDC completamente:

–Deshabiltiando el CDC a nivel de tabla

EXECUTE sys.sp_cdc_disable_table

@source_schema = N’dbo’,

@source_name = N’Empleado’,

@capture_instance = N’dbo_Empleado’

–Deshabilitando el CDC a nivel de BD

USE SQL2008CDC

GO

Exec sys.sp_cdc_disable_db

En resumen, CDC facilita un mecanismo que permite capturer cambios en una BD de manera sencilla. Espero que el post os haya resultado interesante.