Development

SQL 2008 – Novedades en Integration Services (SSIS 2008)

Mas que todo es un OverView bastante Resumido sobre las Nuevas Features and Kinds de SSIS 2008.

 

Soporta código en lenguaje C# (Menos mal, ya era hora, ya que aburre un poco Visual Basic.NET, jaja Open-mouthed)

 

• Nuevos tipos de datos para hora y fecha

• Mejora del rendimiento y el uso de la caché para las transformaciones Lookup

• Nuevos componentes ADO.NET

• Nuevos objetos: tarea y visor para la clasificación de datos

• Escalabilidad del flujo de trabajo

• Mejoras en la herramienta de importación/exportación

• SuperDump

 

VSTA

SSIS 2005 usaba un componente “obsoleto” para diseñar y ejecutar código llamado VSA

– Diseño de código limitado

– Solo aceptaba Visual Basic

– Conjunto limitado de asseblies referenciables

– Está “muerto”

• El SSIS 2008 usa VSTA

– Actualización directa de las tareas de código y transformaciones

– Diseñador altamente mejorado. Es una parte de VS

– Permite código en C#

– Puede referenciar cualquier assembly .net

 

Introduce los nuevos tipos de datos para fecha y hora que incluye SQL Server 2008

– DT_DBTIME2

– DT_DBTIMESTAMP2

– DT_DBTIMESTAMPOFFSET

• Beneficios de los nuevos tipos de datos

– Soporta una mayor escala para segundos fraccionados (milesimas)

– Soporta precisión definida por el usuario

– Soporta las diferencias horarias entre distintas bandas horarias

 

Lookup:

 

Nueva transformación Lookup

GUI totalmente rediseñado

El tiempo de vida y el intercambio de los datos referenciados están controlados de forma explícita

– Un gestor de conexión los almacena en caché

– Todos los lookups parecidos pueden compartir la misma caché

– Un flujo de datos puede llenar la caché y luego ésta puede ser usada por otros flujos de datos

– La caché se puede llenar en cualquier punto del flujo de datos (antes de ser usada por el lookup)

– La caché se puede guardar en un fichero y ser usada más tarde.

• Obtener los datos más usados una vez a la semana

 

Otras curiosidades:

– Una caché para no coincidentes. No más consultas contra filas que no existen

– Salida para filas no coincidentes, no más salidas de error

– Los ficheros para caché persintente (.caw) tienen el mismo formato que un RawFile

 

Componentes ADO.NET

• Se trata ADO.Net como a un ciudadano de primera clase

– Se renombra. ¿Porque se llamaba DataReader Source Adapter?

– UI específico para el Source Adapter

• Drop down para lista de tablas

• Invoca el diseñador de queries

• “expression-able” para cambios dinámicos

– Un Destination adapter

• UI específico

• ODBC

 

Clasificación de datos

 

• Crea una clasificación de las tablas SQL para el mantenimiento y la exploración de la calidad de los datos

– Se ejecuta como una tarea en SSIS

– Genera un fichero XML de salida

– Tiene una herramienta visual amigable para trabajar con las clasificaciones

– Inclusión de valores

• La información aportada por la clasificación ayuda a identificar problemas potenciales con la calidad de los datos

 

Hay clasificaciones para ayudar a identificar problemas dentro de una columna individual

– La distribución de longitudes de los valores en una columna

– El porcentaje de valores nulos

– La distribución de los valores en la columna

– Estadísticas para columnas numéricas

– Expresiones regulares que encajan con columnas tipo string

 

Hay clasificaciones para ayudar a identificar problemas con las columnas que forman parte

de relaciones

– Candidatos a columna clave

– Dependencias funcionales entre columnas

– Incluir el conjunto de valores de una columna en el conjunto de valores de otra columna

 

WorkFlow escalable

 

El planificador de los hilos de ejecución de las tareas de flujo de datos es nuevo y mejora el

comportamiento anterior

– Es capaz de optimizar largas cadenas de transformaciones “sincronas”

– Multicast y conditional split se benefician

 

Herramienta Importación/Exportación

 

Soporte ADO.Net para origenes y destinos de datos (ODBC)

– Se da soporte a proveedores de datos propios u “obscuros”

• Conversiones de tipos de datos

– Nueva página que muestra los mapeos y posibles incidencias

– Puede insertar transformaciones de conversión de datos dentro de flujos de datos

– Los mapeos por defecto se pueden configurar (a través del Notepad)

Nuevo sistema para la ampliación del número de tablas

– Se hace como una secuencia de tareas de flujo de datos

– Cada uno con 5 pumps (movimientos bruscos???)

 

SuperDump

 

Se basa en Watson

• Provee visibilidad a la actividad de un paquete en ejecución

• El usuario puede ejecutarlo cuando desee. No detiene los paquetes (demasiado tiempo)

• Se genera un log ante caídas

• Se puede programar para que se dispare automáticamente ante una condición de error específica

• Ring Buffers recoge la historia de los eventos, códigos de error y otros estados

• Se vuelca en un fichero de texto

 

Welcome SSIS 2008!!! Wink

http://www.microsoft.com/sqlserver/2008/en/us/integration.aspx

 

hero-static-sql-trusted-dg

Advertisements
Development

SQL Server Management Objects (SMO) y WMI – Parte II

Restauración de una base de datos

 

SMO expone una clase Restore que se puede usar para restaurar una base de datos desde un archivo o desde otro dispositivo de copia de seguridad. En el ejemplo de aplicación, restauro la base de datos de la que recién creamos una copia de seguridad y el proceso es parecido. Observe que no la restauro desde donde se realizó, sino en un nombre de archivo nuevo y con un nuevo nombre lógico. En esencia, esto crea una copia de la base de datos usando métodos de copia de seguridad. Por supuesto, tiene la opción de restaurar la base de datos sobre la existente, pero este proceso resultará práctico.

 

Demo 4: Muestró el método RestoreDB que uso en el ejemplo de aplicación para restaurar la base de datos. El primer paso es crear una instancia de la clase Restore y luego establezco el nombre del archivo de copia de seguridad desde el que realizaré la restauración.

 

public void RestoreDB(string databaseName)

{

            Console.WriteLine("*** Restoring***");

            // Don’t drop it! /// If you do, anyone with the default database of that DB will croak!

            //server.Databases[databaseName].Drop();

            Restore restore = new Restore();

            restore.Devices.Clear();

            string fileName = string.Format("{0}\\{1}.bak", testFolder, databaseName);

            restore.Devices.Add(new BackupDeviceItem(fileName, DeviceType.File));

 

            // Just give it a new name

            string destinationDatabaseName = string.Format("{0}_newly_restored", databaseName);

 

            // Go grab the current database’s logical names for the data and log files

            // For this example, we assume there are 1 for each.

            Database currentDatabase = server.Databases[databaseName];

            string currentLogicalData = currentDatabase.FileGroups[0].Files[0].Name;

            string currentLogicalLog = currentDatabase.LogFiles[0].Name;

 

            // Now relocate the data and log files

            RelocateFile reloData = new RelocateFile(currentLogicalData, string.Format(@"{0}\{1}.mdf", testFolder, destinationDatabaseName));

            RelocateFile reloLog = new RelocateFile(currentLogicalLog, string.Format(@"{0}\{1}_Log.ldf", testFolder, destinationDatabaseName));

            restore.RelocateFiles.Add(reloData);

            restore.RelocateFiles.Add(reloLog);

 

            restore.Database = destinationDatabaseName;

            restore.ReplaceDatabase = true;

            restore.PercentCompleteNotification = 10;

            restore.PercentComplete += new PercentCompleteEventHandler(restore_PercentComplete);

            restore.Complete += new ServerMessageEventHandler(restore_Complete);

            restore.SqlRestore(server);

}

 

Creo un nombre nuevo para la base de datos que restauraré  y obtengo los nombres de los datos lógicos y archivos de registro de las colecciones FileGroups y Files. Estos nombres se necesitan para poder reubicar los archivos físicos de la copia de seguridad a un nombre nuevo (ya que restauro la base de datos a una base de datos nueva e independiente). Luego agrego una instancia de la clase RelocateFile (una para cada archivo que estoy reubicando) a la colección RelocateFiles del objeto de restauración.

Establezco el nombre de la base de datos que se restaurará e indico a SMO que reemplace la base de datos existente, si ya existe alguna, con el mismo nombre. Dado que quiero que ProgressBar muestre el progreso de la operación de restauración, establezco adecuadamente los controladores de eventos PercentComplete y Complete.

 

Comprobación de una copia de seguridad de base de datos

 

No servirá de mucho tener una copia de seguridad de la base de datos si ésta se encuentra dañada. Comprobar una copia de seguridad es una buena idea y puede hacerse fácilmente si se crea una instancia de la clase Restore, se establece DeviceType en su medio apropiado, se agrega el dispositivo y se ejecuta el método SqlVerify. Esto devolverá un valor booleano que indica si la copia de seguridad se ha comprobado o no. El código siguiente muestra cómo realizar esta comprobación:

 

bool verified = restore.SqlVerify(server,out msg);

 

WMI (Windows Management Instrumentation)

 

•Conjunto de clases (no en el sentido clásico de .Net) que permiten:

 

·         oAdministrar

·         oConfigurar

·         oRecibir Eventos

 

•Se clasifican en

 

·         oEspacios de nombres

·         oClases

 

•Poseen herencia

 

Obteniendo la lista de clases WMI disponibles

 

Se comienza investigando el Espacio de Nombres “root”

 

•Es importante tener en cuenta que hay espacios de nombres contenidos en otros:

 

Public Function Clases() As String()

‘Se comienza buscando desde "root"

Return RecurseNS("root")

EndFunction

Private Function RecurseNS(ByVal root As String) As String()

‘Se obtiene la clase

Dim man As New ManagementClass(New ManagementScope(root), _

New ManagementPath("__namespace"), _

Nothing)

Dim l As New System.Collections.Generic.List(Of String)

‘Luego, cada Espacio dependiente

For Each ns As ManagementObject In man.GetInstances

     Dim s As String = root + "\"+ ns("Name").ToString()

     l.Add(s)

     ‘Y con el espacio obtenido, se hace la búsqueda recursivamente

     l.AddRange(RecurseNS(s))

     Next

Return l.ToArray()

End Function

 

Suscribirse a un evento

 

·         Obtener la clase

·         Crear la consulta

·         Crear un “LISTENER” para el evento

·         Y asociarle un procedimiento a ser ejecutado ante el evento

·         Iniciar el LISTENER.

 

Public Class WMIEvent

   Implements IDisposable

‘Evento que esta clase va a lanzar

Public Event EventRaised(ByVal sender As Object, ByVal e As WMIEventArgs)

‘Listener del evento

Dim WithEvents watcher As ManagementEventWatcher

Sub New(ByVal ns As String, ByVal evento As String)

‘Clase de WMI

Dim mgmt As New Management.ManagementClass(ns)

‘Consulta (todas las propiedades del evento solicitado)

Dim query As New EventQuery( _

"SELECT * FROM "& evento)

Se crea el Listener y lo iniciamos

watcher = New ManagementEventWatcher(mgmt.Scope, query)

watcher.Start()

End Sub

‘Controlador del evento

Private Sub watcher_EventArrived(ByVal sender As Object, _

     ByVal e As System.Management.EventArrivedEventArgs) _

           Handles watcher.EventArrived

‘Lanza el evento propio de esta clase

RaiseEvent EventRaised(Me, New WMIEventArgs(e.NewEvent))

EndSub

 

En resumen

 

SMO facilita la realización de operaciones de administración de bases de datos en código .NET. Aunque todas estas tareas se pueden realizar con T-SQL directamente en una base de datos o mediante SQL Server Management Studio, poder usar SMO ofrece mayor flexibilidad para incluir estos tipos de operaciones en aplicaciones .NET. De hecho, SQL Server Management Studio depende de SMO para la mayor parte de sus tareas de la administración.

 

Tanto con SMO como con WMI se dispone de herramientas muy versátiles para la administración de nuestros SQL Server (s)

Development

SQL Server Management Objects (SMO) y WMI

Los desarrolladores de base de datos no sólo deben consultar y manipular datos, sino que también realizan periódicamente tareas administrativas. SQL Server™ Management Objects (SMO) ofrece a los desarrolladores un sólido conjunto de herramientas para realizar operaciones, tales como la copia de seguridad o la restauración de bases de datos, y la ejecución de comandos de lenguaje de definición de datos (DDL). Mediante el SQL SMO también puede conectar con SQL Server, crear iteraciones en una colección de objetos de base de datos y realizar varias tareas en ellos.

 Hablaré sobre cómo se puede usar SMO para examinar los objetos de una base de datos y para realizar diversas tareas administrativas. En especial, trataré temas como el diseño de proyectos para que usen SMO y cómo conectar con un servidor. También explicaré paso a paso el ejemplo de una aplicación que ejecuta comandos DDL o DML (lenguaje de manipulación de datos) sobre la base de datos. Demostraré cómo usar SMO para realizar y comprobar copias de seguridad y restauraciones de la base de datos y para terminar un overview de Windows Management Instrumentation (WMI)

SQL  Management Objects

Biblioteca de clases manejadas para administrar SQL Server

Se instalan con las Herramientas Cliente de SQL Server 2005

 

EnumRegisteredServers

 

Método compartido que permite obtener la lista de servidores disponibles en la red

Obtiene información del servidor, sin crear una instancia

 

•Nombre

•Modo de autenticación

•Instancia

 

A partir de la instancia de la clase Server, se pueden obtener las bases de datos y sus detalle como la versión de la instancia de SQL Server utilizado al crear la Database, el estad, etc.

 

El servidor expone toda su configuración:

 

•Microsoft.SqlServer.Management.Smo.Server.Configuration.Properties

•Cada una: (Microsoft.SqlServer.Management.Smo.ConfigProperty)

 

oDisplayName

oDescription

oConfigValue

 

Permitiendo Administrar el conjunto de servidores como un todo

 

Ejemplo:

 

Recuperar los valores de las propiedades, establecer un nuevo valor para una o más de ellas y

establecer el cambio en cada uno de los servidores que se desee

 

Principios básicos de SMO

 

SMO es una biblioteca de objetos de Microsoft® .NET que permite administrar uno o más servidores de bases de datos. Está diseñado para funcionar con las nuevas características que presentó SQL Server 2005, pero también conecta con bases de datos de SQL Server 2000 con compatibilidad para sus respectivas características heredadas. Sin embargo, algunas de las clases, las propiedades y los métodos de SMO sólo funcionan con SQL Server 2005 para admitir características nuevas como, por ejemplo, SQL Service Broker y Snapshots Isolation (aislamiento de instantáneas).

Aunque SQL Distributed Management Objects basado en COM (SQL-DMO) se sigue incluyendo con SQL Server 2005, no se actualizó para que incluya el acceso directo a las características más recientes de SQL Server 2005, como se hizo con SMO. Al diseñar una aplicación .NET que administre una base de datos de SQL Server, es recomendable elegir SQL SMO frente al uso de la interoperabilidad COM con DMO. También debe considerar la actualización de las aplicaciones que ahora usan DMO para que, en su lugar, usen SMO.

Puede instalar SMO durante la instalación de Microsoft® SQL Server 2005 si activa la opción para instalar las herramientas cliente. A continuación, al crear un proyecto que usará SMO, haga referencia primero a los ensamblados apropiados. Los dos archivos DLL a los que debe hacer referencia son Microsoft.SqlServer.Smo.dll y Microsoft.SqlServer.ConnectionInfo.dll. El primero contiene las clases principales de SMO (tal como Database, Server, Backup y Restore) mientras que el segundo contiene la biblioteca de clases que ayudan a administrar las conexiones con los objetos de SQL Server. En muchos casos, también deberá hacer referencia a Microsoft.SqlServer.SqlEnum.dll, que contiene en su mayor parte útiles enumeraciones y a Microsoft.SqlServer.SmoEnum.dll, que ofrece la clase Urn para el acceso mediante programación a direcciones del Nombre de recursos uniforme (URN) que identifican de manera exclusiva a los objetos de Microsoft SQL Server.

Listado de los servidores

 

Con SMO puede recuperar una lista de instalaciones disponibles de SQL Server en una red. Puede especificar argumentos que controlen si se debe buscar SQL Server en la red o sólo buscar de forma local. La clase SmoApplication expone un método estático llamado EnumAvailableSqlServers. Cuando se pasa un valor booleano true, el método sólo buscará los servidores locales y los devolverá a todos. Si se pasa un valor false a este método, hará que busque todos los servidores disponibles en la red. El código siguiente obtiene una lista de instancias de SQL Server disponibles en la red y las devuelve en una DataTable de ADO.NET:

 

DataTable dtServer = SmoApplication.EnumAvailableSqlServers(false);

       

StringBuilder sbServer = new StringBuilder(250);

 

foreach (DataRow row in dtServer.Rows)

{

     sbServer.Append(row["Server"].ToString());

     if (row["Instance"] != null && row["Instance"].ToString().Length > 0)

     {

          sbServer.Append(@"\");

          sbServer.Append(row["Instance"].ToString());

          sbServer.Append(Environment.NewLine);

     }

}

MessageBox.Show(sbServer.ToString());

 

Conexión a un servidor

 

 Al generar una aplicación con SMO, uno de los primeros pasos suele ser conectarse a una instancia de SQL Server. No hay nada extraordinario aquí; establecer una conexión requiere que se pase el nombre del SQL Server (y su nombre de instancia si existen varias instancias) y las credenciales de inicio de sesión. Si desea conectar con autenticación de Windows ®, puede especificarlo con SMO.

 

Creé una clase llamada SMOHelper en el ejemplo de la aplicación para ayudar con algunas rutinas comunes que usará mi aplicación. Se puede usar una instancia de la clase SMOHelper para interactuar con un SQL Server individual. Tiene un constructor que acepta que la información necesaria para conectarse a un servidor mediante autenticación de Windows o de SQL Server.

 

Demo 1: Muestro el constructor SMOHelper que adquiere y configura las propiedades de clase adecuadas, que usarán los métodos de esta clase para realizar operaciones con la base de datos.

 

public SMOHelper(string serverAndInstanceName, string userName, string password, bool useWindowsAuthentication)

{

    this.server = new Server();

    if (serverAndInstanceName.Contains(@"\"))

    {

         int slashPos = serverAndInstanceName.IndexOf(‘\\’);

         this.serverName = serverAndInstanceName.Substring(0, slashPos);

         this.instance = serverAndInstanceName.Substring(slashPos + 1);

    }

    else

    {

         serverName = serverAndInstanceName;

         instance = string.Empty;

    }

    this.userName = userName;

    this.password = password;

    this.useWindowsAuthentication = useWindowsAuthentication;

}

 

Las conexiones a un servidor se realizan al crear una instancia de la clase Server y establecer las propiedades de la clase ConnectionContext.

 

Demo 2: Establece la conexión según el tipo de autenticación que seleccionó el usuario en el formulario. Aunque puede llamar explícitamente al método Connect de ConnectionContext, esto no es realmente necesario, ya que SMO obtiene y libera conexiones de un grupo.

 

public void Connect()

{

    server.ConnectionContext.ServerInstance = ServerAndInstanceName;

    if (this.useWindowsAuthentication)

    {

        server.ConnectionContext.LoginSecure = useWindowsAuthentication;

    }

    else

    {

        server.ConnectionContext.LoginSecure = this.useWindowsAuthentication;

        server.ConnectionContext.Login = this.userName;

        server.ConnectionContext.Password = this.password;

    }

    server.ConnectionContext.Connect();

}

 

Listado de bases de datos

 

Una vez conectado al servidor, se puede recuperar la lista de bases de datos de ese servidor a través de la propiedad Databases del objeto Server. En el ejemplo de aplicación, usé el enlace de datos para enlazar la lista de bases de datos del servidor a un control de cuadro combinado. Creé iteraciones a través de DatabaseCollection y un List<string> para que contenga los nombres de las bases de datos. A continuación, esta lista se vincula al control del cuadro combinado donde el usuario puede seleccionar una base de datos y realizar una acción sobre ella. El fragmento de código siguiente pasa por las bases de datos y genera la lista de cadenas de nombre

 

public List<string> GetDatabaseNameList()

        {

            List<string> dbList = new List<string>();

            foreach (Database db in server.Databases)

                dbList.Add(db.Name);

            return dbList;

        }

En el fragmento de código anterior, sólo quería una lista de nombres de base de datos, así que sólo creé un List<string>. Sin embargo, el control de cuadro combinado se podría haber enlazado igual de fácil a una lista de clases personalizadas (tal como List<MyDatabase>) que ajusta los objetos funcionalmente enriquecidos que normalmente se devuelven de muchos métodos de SMO.

 

Copia de seguridad de una base de datos

 

Una de las tareas más comunes para la que los desarrolladores usan SMO es para hacer copias de seguridad de una base de datos. SMO facilita bastante la tarea de hacer una copia de seguridad de la base de datos con su clase Backup

La clase Backup de SMO expone algunos eventos que pueden usarse como ayuda para seguir el progreso de una copia de seguridad.

 

Demo 3: Copia de seguridad de una base de datos con SMO

 

 public void BackupDatabase(string databaseName)

 {

      Console.WriteLine("*** Backing up ***");

      Backup backup = new Backup();

      backup.Action = BackupActionType.Database;

      backup.Database = databaseName;

      backup.Devices.Clear();

      backup.Incremental = false;

      backup.Initialize = true;

      backup.LogTruncation = BackupTruncateLogType.Truncate;

      string fileName = string.Format("{0}\\{1}.bak", testFolder, databaseName);

      BackupDeviceItem backupItemDevice = new BackupDeviceItem(fileName, DeviceType.File);

      backup.Devices.Add(backupItemDevice);

      backup.PercentCompleteNotification = 10;

      backup.PercentComplete += new PercentCompleteEventHandler(backup_PercentComplete);

      backup.Complete += new ServerMessageEventHandler(backup_Complete);

      backup.SqlBackup(server);

}

 

En BackupDatabase, primero creo una instancia de la clase Backup. A continuación, establecí la propiedad Action al valor de enumeración de BackupActionType.Database (también se pueden hacer copias de seguridad de registros y archivos). Evidentemente, luego establecí el nombre de la base de datos de la que se debe crear la copia de seguridad y algunas otras propiedades. Puesto que quiero realizar una copia de seguridad completa de la base de datos, indico a la copia de seguridad que no deseo una copia de seguridad incremental. Para ello, establezco la propiedad Incremental en false.

Al realizar una copia de seguridad de una base de datos, es necesario especificar la ubicación de la ruta de acceso al archivo y el nombre de archivo donde desea crear el archivo de copia de seguridad. En mi código, pongo todas las copias de seguridad en la misma carpeta para simplificarlo (consulte la variable testFolder). Cuando elijo dónde crear el archivo de copia de seguridad, creo un BackupDeviceItem y lo agrego a la lista Devices de la clase Backup. Opté por guardar la copia de seguridad como un archivo, pero también puede guardarse en otros destinos como LogicalDevice o Tape.

Agregué un controlador de eventos al evento PercentComplete para que el proceso de copia de seguridad notifique al formulario que lo llama y a su control ProgressBar. Este evento se produce en un intervalo definido por la propiedad PercentCompleteNotification. En el ejemplo de aplicación, esto es lo que hace que el control ProgressBar muestre el progreso. También agregué un controlador de eventos al evento Complete para que se pueda notificar al formulario cuando se haya finalizado la copia de seguridad.

Por último, ejecuto el método SqlBackup, que es lo que en realidad realiza la tarea de copia de seguridad de la base de datos. Tenga presente que hacer una copia de seguridad de una base de datos puede tardar más de lo previsto en función de varios factores como, por ejemplo, el tamaño de la base de datos y su contenido. 

Development

Analysis Services (SSAS 2005) Parte I

Microsoft SQL Server 2005 Analysis Services (SSAS) ofrece funciones de procesamiento analítico en línea (OLAP) y minería de datos mediante una combinación de tecnologías de servidor y cliente, reforzadas por el uso de un entorno de desarrollo y administración especializado al que se une un modelo de objetos bien definido para diseñar, crear, implementar y mantener aplicaciones de Business Intelligence.

Un usuario que desee recuperar información directamente de un origen de datos, como una base de datos de ERP (Enterprise Resource Planning), se enfrenta a varios retos importantes:

ü  Con frecuencia, resulta difícil comprender el contenido de estos orígenes de datos, ya que están diseñados desde la perspectiva de los sistemas y los programadores, en lugar de los usuarios finales.

ü  La información interesante para el usuario se distribuye generalmente en varios orígenes de datos heterogéneos. Aunque sólo se manejen distintas bases de datos relacionales, el usuario debe comprender los detalles de cada una, como el dialecto de SQL que se utiliza. Además, los orígenes de datos pueden ser de tipos muy distintos, ya que no sólo incluyen bases de datos relacionales, sino también archivos y servicios Web.

ü  Mientras que muchos orígenes de datos están concebidos para contener una gran cantidad de detalles de los niveles de transacción, con frecuencia las consultas que admiten la toma de decisiones corporativas precisan información agregada y de resumen. Al aumentar el volumen de datos, el tiempo necesario para recuperar los valores de resumen para un análisis de un usuario final interactivo puede ser prohibitivo.

Por lo general, las reglas de negocios no están encapsuladas en los orígenes de datos. Los usuarios deben realizar su propia interpretación de los mismos.

Cuando se utilizan otros orígenes de datos, como los servicios Web, el usuario se enfrenta a otro gran obstáculo para determinar cómo se realizan las llamadas remotas correctas y cómo se procesa el XML devuelto para combinarlo con los demás datos.

La función de un modelo UDM (Unified Dimensional Model) es aproximar los orígenes de datos al usuario. Un UDM se genera a partir de uno o varios orígenes de datos físicos. El usuario emite consultas en el UDM mediante diversas herramientas de cliente, como Microsoft Excel.

SSAS_01

Existen ventajas para el usuario final aún cuando el modelo UDM sólo se genere como una fina capa sobre el origen de datos: un modelo de datos más sencillo y más fácil de comprender, el aislamiento de orígenes de datos de servidor heterogéneos y un rendimiento mejorado para las consultas de tipo de resumen. En algunos escenarios, un modelo UDM simple se puede generar automáticamente. Una mayor inversión en la generación del modelo UDM puede generar ventajas adicionales por la gran cantidad de metadatos que puede proporcionar el modelo.

El modelo UDM proporciona las siguientes ventajas:

ü  Mejora notablemente el modelo del usuario.

ü  Proporciona consultas de alto rendimiento que admiten un análisis interactivo, incluso con grandes volúmenes de datos.

ü  Captura las reglas de negocio del modelo para proporcionar un análisis mejorado.

ü  Admite "cerrar el ciclo", lo que permite que los usuarios actúen según los datos que ven.

 

Obtener acceso a los orígenes de datos mediante un UDM

Por contraste, en el siguiente diagrama se muestra un ejemplo de cómo vería la generación de una consulta un usuario que obtiene acceso a un modelo UDM simple generado sobre estos orígenes de datos.

SSAS_02

La interfaz de diseño que se muestra en este ejemplo está disponible en las herramientas de desarrollo incluidas en Microsoft SQL Server 2005. Con todo, se podría usar cualquier interfaz compatible con el modelo UDM, incluidas herramientas cliente como Office Excel u Office Web Components (OWC), o una de las muchas herramientas de análisis y creación de informes

El modelo UDM también agrupa los atributos de cada entidad comercial en "dimensiones" independientes, como Product o Employee. El cliente puede consultar Product Color, Subcategory y Category en este ejemplo sin necesidad de realizar explícitamente combinaciones entre las diversas tablas implicadas.

Las columnas que representan valores de transacciones, o medidas, se presentan a continuación como "medidas". Por ejemplo, los usuarios suelen estar interesados en agregar columnas como importe de ventas o cuota de venta. Este método de presentación de datos como "medidas" y "dimensiones" se denomina modelado dimensional.

En el lado derecho del diagrama se muestran los elementos incluidos en la consulta actual. El usuario no tiene que especificar los detalles necesarios para obtener acceso a los dos orígenes de datos distintos ni realizar las combinaciones correctas entre las distintas tablas.

El modelo define el uso del formato predeterminado más sencillo: por ejemplo, el uso de símbolos de moneda. También pueden definirse formatos más complejos, incluido el formato condicional, como mostrar un valor en rojo si se encuentra por debajo de determinado umbral.

El mismo modelo admite diversas consultas. Por ejemplo, los resultados se pueden desglosar por empleado con sólo arrastrar un atributo de la dimensión Employee.

 

Ampliar el modelo básico

En el ejemplo anterior se demuestra cómo incluso un modelo UDM básico puede simplificar significativamente la exploración básica de datos. Sin embargo, existen otros retos que tener en cuenta al proporcionar a los usuarios acceso a datos. Por ejemplo:

ü  Un modelo UDM que admite diversos tipos de consultas de distintos usuarios podría alcanzar un gran tamaño. ¿Cómo se puede asegurar que un usuario que trabaja en determinada tarea no se vea inundado de información irrelevante?

ü  ¿Cómo se solucionan los requisitos de los usuarios corporativos, que desean ver los informes en su lengua materna?

ü  ¿Cómo se simplifica la consulta de preguntas comunes sobre aspectos temporales? Por ejemplo, puede que un usuario desee mostrar ventas comparadas con el mismo período del año pasado.

En esta sección se proporcionan algunas respuestas a estas preguntas para mostrar cómo el modelo UDM admite la ampliación del modelo básico para habilitar una exploración de datos más avanzada.

Jerarquías

Aunque la consolidación de todos los atributos de una entidad en una dimensión simplifica en gran medida el modelo al usuario, existen relaciones entre los atributos que no se pueden expresar en una lista simple. El modelo UDM permite definir estas jerarquías porque los usuarios a menudo desean realizar análisis en función de ellas. Por ejemplo, después de ver los totales por Category, el usuario podría obtener más detalles en SubCategory y, desde ahí, más detalles en el nivel SKU inferior. Cada jerarquía es una secuencia de atributos que puede utilizarse para simplificar los escenarios de aumento o reducción de detalles en las consultas.

El siguiente diagrama es un ejemplo de cómo podrían aparecer jerarquías en una interfaz que se muestra al usuario final. El modelo contiene varias jerarquías diferentes en las que se pueden organizar los productos. La consulta que se muestra a continuación, responde a esta pregunta: “mostrar ventas y Cantidfad de Ordenes por categoría de producto y desglosar en subcategorías”.

Para definir la consulta, se arrastró la jerarquía “Products Categories” hasta la cuadrícula. Para ver los datos detallados, el usuario hace doble clic en la categoría “Bike” para expandir las subcategorías

SSAS_03

El modelo UDM controla los detalles sobre cómo moverse por los niveles de una jerarquía.

Categorización

Los usuarios aplican de forma natural categorizaciones a los datos. Por ejemplo, un usuario podría decir "estos atributos son datos personales de los empleados" o "este atributo es una dirección de correo electrónico". El modelo UDM proporciona dos mecanismos destinados específicamente a ofrecer un valor adicional con estas categorizaciones:

Las dimensiones, los atributos y demás objetos pueden colocarse en categorías semánticamente significativas, lo que permite utilizar el objeto de manera más inteligente en una herramienta de cliente. Por ejemplo, puede marcarse un atributo como dirección URL. El informe que contiene este atributo podría luego permitir la exploración con los valores de la dirección URL

Las medidas, las jerarquías y demás objetos se pueden agrupar en carpetas que tengan sentido para el usuario. Esta agrupación permite que la herramienta de informes muestre grandes cantidades de atributos de manera manejable. Por ejemplo, puede crearse un grupo de atributos denominado "Customer Demographics".

 

Development

WCF – Security

Sabemos que los sistemas distribuidos requieren un alto nivel de seguridad. Así que expondré un Resumen Detallado sobre Seguridad en WCF.

WCF contiene numerosas ventajas de seguridad que no sólo nos permitirán transmitir mensajes de manera confiable, sino que también otorgarán un acceso seguro a los recursos disponibles.

Windows Communication Foundation provee:

·         Transferencia de mensajes seguros

·         Acceso seguro a los recursos

·         Distintos protocolos de comunicación

·         Seguridad en los mensajes.

§  Transport Security.

§  SOAP Security

 

Entonces WCF facilita las siguientes tareas:

 

Intercambio de mensajes seguros entre las entidades.

Acceso seguro a los distintos recursos por parte de las entidades

Credenciales e identidad

Una credencial provee identidad a una entidad

l  Hay distintos tipos de credenciales:

Ø  Usuario / Password.

Ø  Certificados X.509.

Ø  Credenciales Kerberos.

Ø  SAML (Security Access Markup Language).

l  WCF representa las credenciales como tokens cuando se realiza la comunicación.

Autenticación

El proceso de autenticación permite a un cliente o a un servicio comprobar la autenticidad de una entidad.

l  Tipos de autenticación en WCF:

Ø  Anónima.

Ø  Certificada.

Ø  Username.

Ø  Windows.

 

Autorización

Determina los niveles de acceso a recursos

l  La autorización puede ser del tipo:

Ø  “User-Based”

§  Los permisos son otorgados a la entidad.

Ø  “Role-Based”

§  Los permisos son otorgados a un grupo de entidades.

Integridad en los mensajes y confidencialidad

La integridad asegura que los mensajes serán capaces de resistir ataques. A través de la comunicación, es probable que los mensajes enviados/recibidos sean forzados y se intente violar su contenido.

Para prevenir esto, los mensajes son firmados y encriptados usando las credenciales del emisor. El destinatario puede confiar plenamente en el mensaje recibido, ya que si el mensaje fue forzado, éste no será verificado.

La confidencialidad evita que el contenido de los mensajes sea visible para cualquiera, salvo que sea el destinatario especificado. El cuerpo de los mensajes es encriptado con las credenciales del destinatario, y desencriptado una vez que se reciben.

Si los mensajes viajaran a través de intermediarios, esto no pondría en riesgo su integridad, ya que los intermediarios no podrían ver el contenido de éstos.

La integridad y la confidencialidad de los mensajes son ventajas que se encuentran habilitadas por default en la mayoría de los bindings estándar.

Especificando el tipo de seguridad

La propiedad SecurityMode es la que determina el tipo de seguridad para aplicar.

Para habilitar estas opciones de seguridad, primero se deberá seleccionar el binding apropiado.

Muchos de los bindings estándar cuentan con la propiedad SecurityMode, lo que permitirá configurar el tipo de seguridad.

El binding BasicProfile no tiene seguridad por default. El resto de los bindings estándar cuenta con seguridad Windows predeterminada.

Binding_Security

Aquí se detallan los posibles valores aceptados por la propiedad SecurityMode.

None: seguridad deshabilitada.

HttpAuthentication: transporte de seguridad HTTP. El esquema de autenticación es controlado por el HttpAuthentication.Scheme.

BasicSecurityProfileMutualCertificate: perfil básico de seguridad SOAP con certificados utilizados para la autenticación, tanto en el cliente como en el servidor.

Https: transporte de seguridad HTTPS. Este modelo de seguridad provee integridad en los mensajes, confiabilidad y autenticación en el servidor. No existe autenticación en el cliente.

HttpsWithClientCertificate: transporte de seguridad HTTPS con certificados X.509 del lado del cliente. Este modelo de seguridad provee integridad en los mensajes y confidencialidad.

HttpAuthenticationOverHttps: autenticación HTTP sobre transporte HTTPS. Este modelo de seguridad provee integridad en los mensajes, confiabilidad y autenticación en el servidor.

BasicSecurityProfileCertificateOverHttps: perfil de seguridad básico, seguridad SOAP con certificados sobre transporte HTTPS.

BasicSecurityProfileUsernameOverHttps: perfil de seguridad básico con autenticación del tipo “UserName” sobre transporte HTTPS.

WSSecurityOverHttp: WS-Security. Seguridad SOAP sobre TCP. Este modelo de seguridad provee integridad en los mensajes, confiabilidad y autenticación.

TcpWithWindowsSecurity: seguridad Windows sobre TCP. Este modelo de seguridad provee integridad en los mensajes y confiabilidad.

TcpWithSsl: seguridad SSL sobre TCP. Este modelo de seguridad provee integridad en los mensajes, confiabilidad y autenticación en el servidor. No existe autenticación en el cliente.

WSSecurityOverTcp: seguridad WS-Security SOAP sobre TCP. Este modelo de seguridad provee integridad en los mensajes, confiabilidad y autenticación.

Especificando el modo de seguridad en un archivo de configuración

Cuando se especifica un binding en un archivo de configuración, el modo de seguridad es configurado utilizando el atributo SecurityMode del elemento <binding>.

<bindings>

  <wsProfileBinding>

    <binding configurationNam="MyBinding"

     securityMode="WSSecurityOverHttp">

      <wsSecurity authenticationMode="Certificate" />

    </binding>

  </wsProfileBinding>

</bindings>

También es posible especificar el modo de Seguridad en el Código, pero particularmente yo prefiero hacerlo en un Archivo de Configuración.