Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este...

76
dotNetManía nº17 julio/agosto 2005 • 6,00 (España) Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System dotNetManía www.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

Transcript of Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este...

Page 1: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotNetManíanº

17 ju

lio/a

gosto

200

5 •

6,00

€(E

spañ

a)Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET Framework • Windows Server System

dotNetManíawww.dotnetmania.com Dedicada a los profesionales de la plataforma .NET

Page 2: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento
Page 3: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

En realidad yo creo que esto debió ocu-rrir hace un par de años, en el 2003. Cuántasveces los responsables de Microsoft habránoído la misma pregunta: “¿...y no es muchocinco años entre versiones?”. Por fin, la fechade lanzamiento de SQL Server 2005 y VisualStudio 2005 será la semana del 7 de noviem-bre, según anunció Paul Flessner en el pasa-do Tech-Ed 2005 de Orlando.

Los problemas de seguridad de SQLServer 2000 por culpa de nuevos tipos de ata-ques no contemplados –virus slammer–, quehicieron que los desarrolladores de Yukontuvieran que arremangarse para sacar nuevosservice packs de SQL Server 2000; los inevita-bles retrasos que sufren proyectos de este cali-bre; que la integración con una tecnología queaún no estaba desarrollada (CLR) fue más difí-cil de lo esperado y, quien sabe, si algunos pro-blemas con el desarrollo de WinFS, han hecho,pienso yo, que este SQL Server sea 2005 y no2003. Por supuesto esto no es más que unasuposición mía... Y además de qué sirve; por-que lo que es realmente importante es que eldesarrollo de SQL Server 2005 prácticamen-te ha finalizado y que trae muchas novedadesy promete, ya lo creo que promete.

Bienvenido al número 17 de julio/agostode 2005 de dotNetManía.

Éste es un monográfico de SQL Server2005, con el que incluimos –sólo a suscripto-res y hasta agotar existencias–, un DVD conla versión CTP de Abril de SQL Server de2005. Recientemente acaba de salir la que posi-blemente sea la última CTP (o la penúltima,como las copas), pero la versión que entrega-

mos –gracias al esfuerzo de Microsoft Ibérica–incluye toda la funcionalidad que tendrá la ver-sión final, con los cambios de depuración quese precisen y que se integra perfectamente conla Beta 2 edición Standard que distribuimos elmes pasado. Con esto tiene el entorno de prue-ba e incluso de producción necesario paracomenzar a trabajar con las versiones 2005.

La intención de este monográfico es dar-le, además del software, la información nece-saria para asimilar los cambios más importan-tes de la nueva versión. Tenemos dos años pordelante (se dice que la próxima versión será en2007) para ahondar en muchos aspectos queno tienen cabida en un solo número. Aún asíhemos ampliado la revista en 16 páginas.

Se han involucrado muchas personas ycompañías en la confección de un númerocomo éste. Por un lado, mi agradecimiento aPaul Flessner y César Galindo-Legaria deMicrosoft Corporation por responder a nues-tras preguntas; y al personal de prensa deMicrosoft Ibérica que nos han ayudado has-ta el último momento. Por otro, a las empre-sas Alhambra-Eidos y Solid QualityLearning quienes han aportado contenidosde gran calidad con algunos de los mejoresconsultores del país en SQL Server, y al restode colaboradores, por supuesto, que han esta-do pendientes de que todo estuviera a puntodesde hace tiempo; y especialmente quieroagradecer públicamente el esfuerzo a MarinoPosadas, quien ha trabajado incondicional-mente desde el principio y los resultados pue-de comprobarlos usted mismo.

Espero que le guste.do

tNet

Man

ía<<

3

7-NdotNetManía

Dedicada a los profesionales de la plataforma .NET

Vol. II •Número 17 • Julio/Agosto 2005Precio: 6€ (España)

EditorPaco Marín

([email protected])

AdministraciónPilar Pérez

([email protected])

Asesor TécnicoMarino Posadas

([email protected])

RedactoresAntonio Quirós, Dino Esposito, Guillermo

'guille' Som, Jorge Serrano, José ManuelAlarcón, Luis Miguel Blanco, MiguelKatrib (Grupo Weboo) y Pedro Pozo.

Colaboradores habitualesÁngel Esteban, Braulio Díez, Eladio

Rincón, Erich Bühler, Fernando Nogueras,Jorge Crespo Cano, José Miguel Torres,Miguel Egea, Octavio Hernández, PabloAbbate, Pepe Hevia, Rodrigo Corral y

Salvador Ramos.

Además colaboran en este númeroFernando Bocigas y Fernando Guerrero

Edición y Suscripciones.netalia

c/ Robledal, 13528529 Rivas-Vaciamadrid (Madrid)

Tf. (34) 91 666 74 77Fax (34) 91 499 13 64

PublicidadMediadev

Sophie Mancini ([email protected])Tf. 93 426 22 57 - 670 99 74 64

Fax. 93 423 11 40

ImprimeGráficas Vallehermoso

www.graficasvallehermoso.com

ISSN1698-5451

Depósito LegalM-3.075-2004

<<

dnm.editorial

Page 4: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

17dnm.sumario

dnm

.sum

ario

Una nueva generación de sistemas de gestión de la información 10-12Presentación de Fernando Bocigas, de Microsoft Ibérica del lanzamiento de SQL Server 2005 queserá, sin ninguna duda, uno de los más importantes de Microsoft hasta la fecha.

SQL Server 2005: Mirando hacia el desarrollador 13-14Si en este monográfico se muestra SQL Server 2005 desde distintas perspectivas, desde este artículose opina sobre cómo esta nueva versión del producto atiende más que nunca las necesidades que tienenlos desarrolladores de soluciones de software.

Entrevista a Paul Flessner 15-17Paul Flessner es Vicepresidente Senior de Aplicaciones de Servidor en Microsoft Corporation, dondedirige un equipo que aglutina la producción de Microsoft Windows Server System, conjunto deaplicaciones que incluye Exchange Server, SQL Server, BizTalk Server, Content ManagementServer, Host Integration Server y Commerce Server.

Consiguiendo alta disponibilidad con SQL Server 2005 18-23Durante las próximas líneas vamos a dar un vuelo sobre las posibilidades que tenemos en el mercadopara construir sistemas de alta disponibilidad. Lo más complejo de estos sistemas muchas veces no sonlos conceptos, que pueden ser adquiridos con bastante agilidad si el lector tiene ya una experiencia sobreWindows Server y SQL Server como la disponibilidad.

Integración del CLR con SQL Server 2005 24-31De todo el conjunto de novedades que se incluyen con SQL Server 2005, la que probablemente llamela atención de forma más poderosa a la comunidad de programadores, sea la capacidad de escribir elcódigo de ciertos objetos del motor de datos utilizando alguno de los lenguajes de la plataforma .NET.

Entrevista a César Galindo-Legaria 32-35César Galindo-Legaria es el responsable de la Optimización de Consultas, del grupo de RelationalEngine en el equipo de desarrollo de SQL Server 2005 en Microsoft Corporation.

Business Intelligence en SQL Server 2005 36-38Un breve vistazo por todas las novedades que ha incorporado SQL Server 2005 para el desarrollode proyectos de Business Intelligence. Se han producido cambios sustanciales en los Servicios deTransformación de Datos (DTS) y en los Analysis Services (AS), y se han incorporado nuevasherramientas de desarrollo, basadas en Visual Studio .NET.

Soporte XML en SQL Server 2005 40-43SQL Server 2005 incorpora novedades en el soporte XML desde el lado del cliente (ADO.NET2.0) y desde el lado del servidor (FOR XML, tipo de datos nativo, OPENXML). En este artículoveremos las posibilidades XML que tenemos en SQL Server 2000.

SQL Server 2005 Mobile Edition 44-46Microsoft SQL Server 2005 Mobile Edition es la evolución de Microsoft SQL Server CE Edition2.0. Microsoft SQL Server 2005 Mobile Edition pretende ser una plataforma de almacenamientode datos para soluciones móviles integradas bajo un marco de desarrollo rápido, flexible, fácil y escalable.

Transact-SQL 2005.Más productivo que nunca 48-54Este es un artículo complicado de escribir. No por los contenidos, sino por el cómo abordar algo tanamplio como Transact-SQL. Este componente de SQL Server es el pilar fundamental en el que sebasan el resto de los componentes, pues es el lenguaje de programación con el que se le dice al core deSQL Server lo que debe de hacer.

Proporcionando escalabilidad a SQL Server 2005 con Service Broker 55-59Este artículo hace una introducción al nuevo Service Broker con el que SQL Server 2005 dota almotor relacional de capacidades nativas de gestión de colas, permitiendo crear aplicaciones de basesde datos escalables, seguras y confiables, basadas en procesos asíncronos.

Introducción a SMO 60-62El concepto de programabilidad del servidor se ha extendido notablemente, permitiéndonos manejarmediante código .NET casi cualquier característica de SQL Server 2005. Es el modelo SMO.

SQL Server 2005 Express Edition.El menor de la familia 64-66Dicen que las mejores cosas de la vida son gratis. SQL Server 2005 Express también lo es. Se tratadel sucesor de MSDE y del hermano menor de las ediciones de SQL Server 2005. Pero no por elloestá exento de interés ya que tiene el mismo motor de base de datos que sus hermanos mayores.

dnm.comunidad.net 68-69GUSE.Net, Grupo de Usuarios del SurEste

dnm.todotnet.qa 70-72SQL Server 2005

dnm.biblioteca.net 73Microsoft SQL Server 2005 New FeaturesA First Look at Microsoft SQL Server 2005 for Developers

dnm.desvan 74

Page 5: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento
Page 6: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotN

etM

anía

<<

6

dnm.noticias<<

Microsoft Tech-Ed 2005 Orlandon

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

s.n

oti

cia

sTech-Ed es el mayor evento formativo para profesionales IT y desarrolladoresque Microsoft organiza por todo el mundo. En Orlando, entre le 5 y el 10de junio se celebró el primero y más importante de todos.

Éste esun año en elque los desa-rrolladorese s p e r a m o sv e r s i o n e s

importantes como Visual Studio2005 y SQL Sever 2005, pero queademás debemos estar pendientesde todo lo que acontece alrededordel desarrollo de Longhorn, de losnuevos API y subsistemas de pro-gramación. Por tanto, eventos deeste tipo son fundamentales, puesen ellos no sólo se aprende sobrelas tecnologías actuales y futurasy se obtienen recursos, sino quetambién son una fuente de infor-mación sobre los roadmaps de

productos y tecnologías.En Orlando, la keynote de Paul

Flessner, vicepresidente de aplica-ciones de servidor, fue la principalfuente de esta información. Si deseaver la transcripción completa y losPPT, puede hacerlo en la dirección:http://www.microsoft.com/presspass/exec/flessner/06-07Tech-Ed05.mspx o ensus notas del Tech-Ed 2005 enhttp://www.microsoft.com/press-p a s s / m i s c / 0 6 - 0 7 f l e s s n e r -teched05.mspx.

Aquí haremos un resumen delo más importante de lo queFlessner dijo (además puede leerla entrevista que le hemos reali-zado en este mismo número y quenos respondió justo después determinar este Tech-Ed).

Microsoft pone fechas de salida deVisual Studio 2005, SQL Server 2005y BizTalk Server 2006

Paul Flessner anunció elmomento para el que se está pre-parando el lancimiento de SQLServer™ 2005, Visual Studio®2005 y BizTalk® Server 2006 yanunció que estos productosserán formalmente lanzadosdurante la semana del 7 denoviembre. ¡Se acabaron losrumores, pues!

Nada sorpresivo, la verdad,salvo que se haya incluido en estepaquete a BizTalk Server2006 ade-lantando su fecha de salida. Sinembargo, han tenido en cuenta laimportancia de la integración conVisual Studio 2005 y SQL Serer2005 para este adelanto.

Primeros benchmarks de SQLServer 2005

Durante esta keynote, Flessnerofreció también los primerosbenchmarks para SQL Server2005. Como César Galindo-Legaria nos recuerda en su entre-vista, no está permitido publicarestos benchmarks hasta que nofalten menos de 6 meses para susalida. Y ya están aquí estos pri-meros resultados de TPC(Transaction Processing PerformanceCouncil).

El primer benchmark TPC-C para Microsoft WindowsServer 2003 Datacenter Edition64-bit está realizado en un HP

Integrity Superdome 64P conMicrosoft SQL Server 2005Enterprise Edition 64bit y repor-ta 1.082.203 tpmC (TransaccionesPor Minuto) con un coste de 5,38$por tmpC, situándole en el pri-mer puesto en las bases de datosbajo Windows. Este resultado esun 38% más alto que SQL Server200 con un 7% de mayor rendi-miento y un 35% menos en cos-te por transacción que Oracle 10gsobre este mismo equipo bajoHP-UX (8,33$ por tpmC y con1.008.144 tpmC).

En los benchmarks TPC-H,SQL Server 2005 ha subido elrendimiento hasta un 162% másalto que SQL Server 2000 y un38% más que los mejores resulta-dos de Oracle en un procesadorservidor Intel Itanium 2 con uncoste que es un 20% menor porconsulta. En otro resultado másde benchmark TPC-H, NECreportó un resultado de 20.261QphH (queries por hora) y uncoste de 76,00$ por QphH en unNEC Express 5800/1320Xe(32SMP), mejorando cerca de 4veces el mejor rendimiento deSQL Server 2000. Más informa-ción sobre estos resultados enhttp://www.tpc.org.

Uno de los Track Cabanas (Foto: Eladio Rincón)

Paul Flessner

Page 7: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dnm.noticias

dnm.noticias

dotN

etM

anía

<<

7

Borland Ibérica ha celebrado antemás de 700 asistentes la segunda ediciónde su macro evento Borland Day. En estaocasión, y con la presencia del CEO dela compañía Dale Fuller, ha mostradoa todos los profesionales involucrados suvisión sobre la optimización de los pro-cesos, o cómo transformar el desarrollode software en un proceso gestionado ydisciplinado alineando equipos huma-nos y tecnologías.

La segunda edición del Borland Dayha ofrecido una serie de ponencias ytracks con un repaso al papel queBorland está desempeñando en la evo-lución del ciclo de vida de las aplicacio-nes (ALM), al diseño e implementaciónde su plataforma Borland Core SDP, y ala adquisición de la compañía líder en lametodología de procesos CMM(Teraquest).

El evento ha ofrecido de forma simul-tánea tracks en otras tantas salas dondese han repasado las distintas solucionespara plataformas J2EE, novedades deIDE, este año especialmente enfocado aDelphi, y todo lo que tiene que ver conel desarrollo y experiencia en CMM, através de la visión, entre otros, de JacobOkyne, Vicepresidente Borland /Teraquestpara la región de EMEA.

Como partners estratégicos, BorlandDay ha contado con los líderes másimportantes del sector: Accenture, BeaSystems, HP, Mercury Interactive,Microsoft, Oracle y Telefónica Móvilesque han mostrado a lo largo de la jor-nada la integración de sus productos conla soluciones Borland.

Borland Day 2005

WSE 3.0 CTP de junio

Primera CTP pública de SQL Server 2005

Microsoft ha anunciado también laCTP (Community Technology Preview) dejunio de SQL Server 2005 que es la pri-mera pública y que puede descargarsede http://www.microsoft.com/sql/downlo-ads. Esta CTP es en realidad una prere-lease y posiblemente sea la última antesde la versión RTM (Release ToManufacturing), aunque Flessner no des-carta alguna CTP más.

Cambios en la línea de productos de SQLServer 2005

Para incrementar las capacidadesde los clientes y socios para utilizarcapacidades de negocio en profundi-dad, Microsoft extenderá SQL Server2005 Reporting Services de las edi-ciones Standard y Enterprise a todaslas versiones de SQL Server 2005,incluyendo las ediciones Express yWorkgroup. Además, SQL Server2005 Report Builder estará disponi-ble con las ediciones Workgroup,Standard y Enterprise.

Asistente para la migración desde Oracle

Para migrar desde Oracle a la nue-va plataforma de SQL Server 2005,

Microsoft ha publicado el “SQL ServerMigration Assistant”. Este asistente parala migración está disponible gratuita-mente en: http://www.microsoft.com/sql/migration

Iniciativa RFID

Finalmente, Flessner anunció unainiciativa para ofrecer una infraes-tructura de servidor escalable de latecnología inalámbrica RFID, permi-tiendo a los clientes y socios conectarfácilmente aplicaciones de líneas denegocio con sensores y dispositivosRFID. La infraestructura está empe-zando a construirse usando la tecno-logía de Microsoft .NET y WindowsServer System y está diseñada paraconectar dispositivos, capturar e inter-pretar datos, gestionar eventos denegocio e integrar sistemas y proce-sos más fácilmente que nunca.

Tech-Ed 2005 Europe

Cuando tenga este ejemplar en susmanos ya se habrá celebrado el Tech-Ed 2005 Europe que este año vuelvea celebrarse en Ámsterdam. Allí esta-remos, cómo no, y en el próximonúmero le contaremos todo lo acon-tecido.

Web Services Enhancements 3.0 forMicrosoft® .NET (WSE) edición CTPes un add-on para Microsoft VisualStudio® 2005 y Microsoft .NETFramework 2.0 que permite a los desa-rrolladores construir servicios Web segu-ros basados en las últimas especificacio-nes de protocolo para servicios Web.

WSE 3.0 puede ser instalada enparalelo al WSE 2.0 SP3.WSE 2.0 SP3es compatible sólo sobre .NETFramework 1.1.

Esta versión de WSE 3.0 está cons-truida para los desarrolladores que usenVisual Studio 2005 y .NET Framework2.0 Beta 2.

La próxima CTP será en julio,mientras que en agosto aparecerá labeta 1 y la RTM para finales de año,según Mark Fussell autor del artícu-lo de MSDN “What's New in WebServices Enhancements (WSE) 3.0” yque puede leer en: http://msdn.micro-soft.com/webservices/default.aspx?pull=/library/en-us/dnwse/html/newwse3.asp.

Puede descargar esta versión en:http://www.microsoft.com/downloads/details.aspx?FamilyID=7591dfd2-e1b7-4624-9d5b-29c211d149fe&display-lang=en (busque “WSE 3.0” enwww.microsoft.com y le guiará hastaaquí).

Dale Fuller

Page 8: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotN

etM

anía

<<

8

dnm.noticias<<

dnm.noticias

Estos servicios gratuitos consistirán en:

• Consultoría orientada a la mejora deprocesos. Implementación de solu-ciones de workflow basadas en com-ponentes open source. Esto per-mite automatizar procesos denegocio, optimizando el uso derecursos.

• Consultoría en gestión de proyectos.Implementación de una oficina degestión de proyectos, implantaciónde una plataforma basada en siste-mas open source para la gestión deproyectos y ayuda a que los pro-yectos se terminen a tiempo y den-tro del presupuesto.

Dotnetsolidario llega a unacuerdo con Nevant

Infragistics lanza NetAdvantage 2005Volumen 2

Infragistics, uno de los fabrican-tes más importantes de herramientaspara desarrolladores de la plataformaNET y Java, ha presentado la nuevaversión de su suite NetAdvantage2005 Volumen 2, un completo con-

junto de herramientas para construir rápi-damente la capa de presentación de sus apli-caciones para Windows Forms, ASP.NET,Tablet PC y aplicaciones COM. EnNetAdvantage 2005 Volumen 2 se añadennuevas características a los Windows FormsTree, Grid, Chart y TabbedMDIManager asícomo los ASP.NET Grid y Chart.

“Con NetAdvantage 2005 Volumen 2,continuamos añadiendo las característicasclave que los clientes nos piden, a la vezque incrementamos la calidad.NetAdvantage 2005 aporta el frameworky las herramientas de desarrollo que losequipos necesitan para construir y desple-gar rápidamente aplicaciones .NET con

un aspecto fantástico y con un interfaz deusuario consistente como sus organizacio-nes desean”, ha dicho Steve Dadoly,Director de Desarrollo de Infragistics.

Asimismo, Infragistics ha anunciadosus planes para el lanzamiento deInfragistics NetAdvantage 2005 Beta 3for Visual Studio 2005 Beta 2. Esta edi-ción aprovechará las ventajas de las nuevascaracterísticas de facilidades de uso enVisual Studio 2005 Beta 2, permitiendo alos desarrolladores crear aplicaciones con-sistentes con la apariencia de Microsoft ala vez que escribe menos código que el quenecesitaría usando Microsoft .NETFramework 1.1. El lanzamiento de la Beta3 de NetAdvantage 2005 se espera paraestos meses de julio y agosto y contendráaquellas características que existan enNetAdvantage 2005 Volumen 2.

Más información: http://www.infra-gistics.com

“Nosotros hemosseleccionado una sec-

ción representativa de la comunidad decreación de ayudas para asegurar queDoc-To-Help 2005 incluye todas lasherramientas que un autor de ayudasque trabaja con Word o HTML puedanecesitar”, ha dicho Zuñí Wong,Managing Director de ComponentOne.“Esta version de Doc-To-Help ha sidodesarrollada con las demandas de laindustria en mente, y esperamos ansio-sos los comentarios que recogeremosdurante el período de Beta test”.

Como esta beta no necesita un editorpropietario, permitirá a los autores de ayu-das usar su editor favorito, tales comoMicrosoft FrontPage o MacromediaDreamweaver para crear contenidoHTML y configurar sus sistemas de ayu-da. Los usuarios de Doc-To-Help pue-

den usar D2HML (Doc-To-Help MarkupLanguage), el cual consiste en unas clasesde estilo para diseñar sistemas de ayudaen ficheros HTML. Puesto que Doc-To-Help requiere sólo estos estilos para trans-formar los ficheros HTML a sistemas deayuda interactivos, el fichero HTML ori-ginal permanece limpio y preparado paracualquier otro uso.

Otras herramientas de creación deayudas permiten a los autores usar sueditor preferido, pero los ficheros debenser importados por la configuración delsistema de ayudas. Adicionalmente, losusuarios de otras herramientas de cre-ación de ayudas podrán convertir susficheros de proyectos a los proyectosDoc-To-Help basado en HTML conun solo clic.

Para más información: www.compo-nentone.com/doctohelpbeta.

ComponentOne anuncia el lanzamientodel programa beta de Doc-To-Help 2005Doc-To-Help 2005 añade más flexibilidad a esta popular herramienta permitiendo a losusuarios usar HTML desde cualquier editor para sus contenidos fuente, convertir proyectosde ayuda de RoboHelp® y otros proyectos de ayuda HTML y generar NetHelp™, unexplorador independiente basado en el sistema de ayudas HTML.

Nevant es una empresa especializadaen la gestión de procesos y metodologíasen organizaciones basadas en elconocimiento, para ofrecer a las ONGservicios gratuitos de consultoría deprocesos y gestión de proyectos.

J-Integra Espresso es una nue-va y potente solución middleware quepermite una interoperatividad de altorendimiento, bi-direccional y seguray escalable entre aplicacionesMicrosoft .NET, Java y CORBA.

Mientras que los actuales pro-ductos J-Integra impementan losprotocolos estándar de Microsoft enJava puro, J-Integra Espresso imple-menta una versión en .NET purodel estándar protocolo binarioRMI/IIOP prensente en todos losentornos J2EE y J2SE.

J-Integra Espresso está actual-mente disponible como beta paraclientes "cualificados". Si está intere-sado en participar en este programabeta, puede inscribirse en http://j-inte-gra.intrinsyc.com/beta.

Intrinsyc Software anunciasu programa beta para J-Integra EspressoJ-Integra Espresso es un nuevo conjuntode herramientas de desarrollo ycomponentes runtime de alto rendi-miento que une las tecnologías Java,CORBA y Microsoft .NET

Page 9: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento
Page 10: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Una nueva generación de sistemas de gestión de la información

Desearía en primer lugar señalar que supone una gran satisfacción para mí, como res-ponsable de negocio de SQL Server,el poder anticipar a los lectores de dotNetManíalas mejoras introducidas en la próxima y esperada versión de esta emblemática basede datos de Microsoft,conocida hasta ahora con el nombre en código de Yukon, y dela que recientemente hemos hecho pública una CTP (Community Technology Preview)del producto, con la firme intención de lanzar la versión final del mismo durante elsegundo semestre de este año.

<< será, sin nin-guna duda, uno de los más importantes de Microsofthasta la fecha, pues ya han pasado cinco años des-de que apareció en el mercado SQL Server 2000para revolucionar las bases de datos como no sehabía creído posible hasta el momento, y desde eseentonces, la compañía ha desempeñado un intensotrabajo y ha realizado un esfuerzo continuado eninvestigación e innovación para tratar de conseguirque SQL Server 2005 suponga un giro radical ysorprenda de nuevo a los usuarios.

La llegada de SQL Server 2005, que se produciráal mismo tiempo que la de la próxima versión de VisualStudio .NET “Whidbey”, y posteriormente la deWindows “Longhorn”, serán los cimientos sobre losque se asentarán las bases de la tecnología de los pró-ximos años, y determinarán un punto de inflexión enla manera de trabajar de los profesionales de las tec-nologías de la información de todo el mundo.

Dado que el sector ha cambiado mucho desdeque Microsoft lanzó SQL Server 2000, la nuevaversión de nuestra solución de base de datos y aná-lisis se ha rediseñado para responder perfectamen-te a las necesidades de cada uno de los diferentessegmentos de nuestros clientes, y proporcionarlesasí un valor y funcionalidad sin precedentes, lo querepresenta un gran paso hacia delante para sopor-tar los sistemas empresariales más exigentes.

La oferta de Microsoft en cuanto a bases de datoscrece y mejora con la nueva familia de productosSQL Server 2005, con la que aumentamos el alcan-ce de nuestras soluciones de gestión de datos paraofrecer más opciones a los clientes. Hemos incre-mentado la funcionalidad en las ediciones Standardy Enterprise y ampliado la plataforma con las edicio-nes Workgroup y Express. Ahora estamos mejor equi-pados para ofrecer soluciones que respondan a losrequerimientos tecnológicos y presupuestarios denuestros clientes. Nuestro objetivo es que la gestióny el análisis de datos al nivel de las grandes corpo-

Fernando Bocigas

dnm.servidores.sql

El lanzamiento de SQL Server 2005

Fernando BocigasEs Ingeniero Técnico Superior de

Telecomunicaciones por laUniversidad Politécnica de

Madrid.Fernando Bócigas esel Responsable de Negocio de

SQL Server en Microsoft Ibérica desde 2004.

Fernando Bocigas, Responsable de Negocio de SQL Server en Microsoft Ibérica

Page 11: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

raciones sean accesibles para unaamplia gama de clientes a un preciorazonable, a la vez que eliminamos lacomplejidad de nuestros sistemas debases de datos, y todo a un menor cos-te total de propiedad.

Microsoft SQL Server 2005 se haconcebido para ofrecer al usuario unaexperiencia más rica, mediante mejo-ras sustanciales en aspectos crucialescomo la escalabilidad, la disponibili-dad, la seguridad y la gestionabilidad.Además, se han contemplado otrosaspectos tan relevantes para las orga-nizaciones en el competitivo entornoempresarial actual como el businessintelligence, que se ha potenciado con-siderablemente en esta versión, y unaintegración más completa con lasherramientas de desarrollo, es decir,con Visual Studio .NET.

Hoy en día, las empresas seencuentran con una gran proliferaciónde datos y sistemas en toda la organi-zación, y con la necesidad de que tan-to sus empleados, como sus clientes ysus partners tengan acceso continuo yen tiempo real a los mismos y puedantomar las decisiones mejores y másinformadas, a la vez que cumplan conel requisito de controlar los costes sinrenunciar por ello a la fiabilidad, segu-ridad o disponibilidad de las aplica-ciones. SQL Server 2005 da respues-ta a estos retos de la información a losque se enfrentan las organizaciones enlas tres áreas principales: la gestión dela información empresarial, la pro-ductividad de los desarrolladores y elbusiness intelligence.

Las mejoras en la gestión de losdatos empresariales introducidas enSQL Server 2005 permiten que lainformación y los sistemas que laadministran estén siempre disponiblespara los usuarios. Tanto éstos, comolos profesionales de TI de toda laorganización, se beneficiarán de lareducción del tiempo de inactividadde las aplicaciones, de una mayor esca-labilidad y rendimiento y de unosestrictos controles de seguridad.

Por otra parte, SQL Server 2005ayudará a incrementar la productivi-dad de los desarrolladores eliminan-do uno de los obstáculos principalescon el que éstos se encontraban hasta

dotN

etM

anía

<<

11

dnm.servidores.sql<<

Business Intelligence

Servicios de AnálisisCon SQL Server 2005, los Servicios de Análisis (Analysis Services) se mueven en el entorno del análi-sis en tiempo real. Desde mejoras en la escalabilidad hasta una integración profunda con MicrosoftOffice, SQL Server 2005 amplía el concepto de business intelligence a todos los niveles de su negocio.

Integration ServicesLos Integration Services son un conjunto de herramientas gráficas y objetos programables que pue-den usarse para extraer, transformar y cargar datos (ETL) desde fuentes muy diversas y llevarlas aun destino único o múltiples destinos. Data Transformation Services (DTS) para Microsoft SQL Server2005 introduce un rediseño completo para proporcionar una plataforma ETL integral.

Data MiningSQL Server 2005 introduce cuatro nuevos algoritmos de Data Mining, así como herramientas y asis-tentes mejorados, haciendo que el data mining sea más accesible a negocios de cualquier tamaño.

Servicios de ReportingServicios de Reporting permite a los negocios integrar de forma sencilla datos desde fuentes hete-rogéneas y data warehouses en informes ricos, interactivos y gestionables, que pueden locali-zarse y consultarse en intranets, extranets y en Internet.

Soporte de Servicios de Análisis en ClusterEsta funcionalidad mejora la disponibilidad de los Servicios de Análisis con soporte para clusterscon conmutación de nodos, soporte mejorado para múltiples instancias y soporte para backupy recuperación de objetos y datos de Servicios de Análisis.

Indicadores de Rendimiento PrincipalesLos Indicadores de Rendimiento Principales (Key Performance Indicators, KPI) permiten definir métri-cas de negocio en formato gráfico, adaptables, para ayudar a generar y hacer el seguimiento deentornos de prueba corporativos.

Escalabilidad y RendimientoSe ha mejorado la escalabilidad y el rendimiento de los Servicios de Análisis de SQL Server 2005 pormedio de características como el proceso de partición paralelo, creación de particiones ROLAP yHOLAP remotas, cubos particionados distribuidos, cálculos persistentes y cache proactivo.

Cubo en un solo clicCuando se crea un cubo en un proyecto de Data Warehouse, el asistente para creación de Cubosincluye una opción para habilitar la detección de cubos y sugerencias con un solo clic. Esta tec-nología de cubos en un solo clic de SQL Server 2005 examina las relaciones en una vista delorigen de datos y aporta sugerencias.

Mejoras en la ArquitecturaSQL Server 2005 introduce una nueva arquitectura de Servicios de Transformación de Datos (DTS)llamada Integration Services. La arquitectura consiste en dos motores:

• El Runtime de Transformación de Datos (DTR). Este motor ejecuta paquetes DTS, tareas DTS,hace seguimiento de la ejecución del paquete y proporciona servicios para las tareas.

• El Pipeline de Transformación de Datos (DTP). El motor DTP extrae datos de las fuentes,aplica las transformaciones contra las columnas de datos y carga los datos en los sistemasde almacenamiento.

Integración con los informes de Office SystemLos reports emitidos por el servidor de reports pueden ejecutarse en el contexto de SharePoint PortalServer y aplicaciones Office, como Word y Excel. Los usuarios de SharePoint pueden utilizar lasfuncionalidades de SharePoint para suscribirse a informes, crear nuevas versiones de los informes ydistribuirlos. Los usuarios pueden también abrir reports en Word o Excel para ver versiones enHTML de los mismos. Los usuarios de SQL Server y Servicios de Análisis pueden definir reportsbasados en consultas contra bases de datos relacionales y multidimensionales. Las consultas defini-das con el Query Builder pueden procesarse utilizando las posibilidades de proceso de datos incor-porado al servidor de informes.

Page 12: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

ahora, y que no era otro que la falta de herramien-tas integradas para la depuración y el desarrollo debases de datos. SQL Server 2005 incluye mejorasen las herramientas de desarrollo e integración conel entorno de desarrollo de Visual Studio; compa-tibilidad de lenguajes ampliada para seleccionarentre una serie de lenguajes conocidos para desa-rrollar aplicaciones de bases de datos, y admitiráXML y servicios Web.

Por último, en lo referente a las nuevas funcio-nalidades de business intelligence, éstas se han poten-ciado considerablemente y SQL Server 2005 ofre-ce una plataforma completa con análisis integrado,que incluye OLAP, extracción de datos, ETL, fun-

cionalidad de generación de informes y almacena-miento de datos. Además, también aporta mejorasen la toma de decisiones en todos los niveles de laorganización, mayor seguridad y disponibilidad paraque los usuarios tengan un acceso ininterrumpidoa los informes y aplicaciones de business intelligen-ce; y mejores capacidades de análisis en toda laempresa.

Esperamos que todas estas mejoras contribuyana que el nuevo SQL Server 2005 se convierta en elsoftware de análisis y administración de datos delfuturo que tanto nuestros clientes, como desarro-lladores y partners desean, ya que esta solución esuna muestra evidente del continuo compromiso deMicrosoft por ofrecer una nueva generación de tec-nologías que ayuden a incrementar la productivi-dad y competitividad de todos los usuarios y orga-nizaciones.

dotN

etM

anía

<<

12

dnm.servidores.sql<<

Licencias

Licencia por procesadorUna licencia para cada procesador en un servidor corriendoSQL Server.

Servidor más CAL de dispositivoUna licencia para cada servidor corriendo SQL Server, másuna Licencia de Acceso de Cliente (CAL) para cada dispositivocliente.

Servidor más CALs de usuarioUna licencia para servidor corriendo SQL Server, más unaCAL para cada usuario con acceso al servidor.

Con SQL Server 2005, los clientes podránaprovechar el licenciamiento para procesadoresmulticore, que les permite licenciar el producto porprocesador, frente a las ofertas de la competenciaque licencian por core. Este nuevo modelo poten-cia el rendimiento informático y la funcionalidad ypermite a las empresas obtener el máximo valorde su inversión en tecnología.A diferencia de susprincipales competidores, Microsoft también lide-ra el sector en alta disponibilidad, al ser el primerfabricante de bases de datos que permite a los clien-tes utilizar servidores passive failover con SQLServer 2005 sin requerir licencias adicionales, conlo que pueden crear entornos de alta disponibili-dad a bajo coste.

][

Una versión diseñada para cada tipo de cliente

SQL Server 2005 Enterprise EditionEs una completa plataforma de gestión y análisis de datos para aplicaciones de negocio de misión crítica de grandes empresas. Estaedición ofrecerá partición de datos, alta disponibilidad avanzada con capacidades de database mirroring, analíticas complejas e integra-ción, generación de informes ad hoc con Report Builder, un snapshot de base de datos, y operaciones online y paralelas completas.Microsoft también continuará ofreciendo SQL Server 2005 Developer Edition para desarrolladores que quieren construir y testaraplicaciones basadas en SQL Server.

SQL Server 2005 Standard EditionEsta edición está pensada para las medianas empresas e infraestructuras que requieren sistemas altamente disponibles. Proporcionaráfuncionalidades que antes sólo estaban incluida en SQL Server 2000 Enterprise Edition, tales como alta disponibilidad con databa-se mirroring y clustering y soporte integrado de 64-bit tanto para sistemas x64 como Itanium, lo que les proporcionará más flexibilidadpara crecer antes de invertir en la edición Enterprise. Soporta hasta 4 procesadores, base de datos de tamaño ilimitado y sistema dememoria ilimitado. También incluye SQL Server Integration Services, SQL Server Analysis Services y SQL Server Reporting Services.

SQL Server 2005 Workgroup EditionEs el producto más novedoso disponible tanto para SQL Server 2000 como SQL Server 2005, y proporciona una solución debase de datos asequible, fácil de usar y sencilla de gestionar diseñada específicamente para las pequeñas y medianas organiza-ciones. Soporta hasta dos procesadores, bases de datos de tamaño ilimitado y 2Gb de memoria.

SQL Server 2005 Express EditionEs una versión gratuita y redistribuible del motor de base de datos de SQL Server 2005, diseñada para construir sencillas apli-caciones de base de datos, que sustituye a Microsoft Data Engine (MSDE) para SQL Server 2000. Se puede descargar gratuita-mente de la Web e incluye una herramienta gráfica de gestión; controles y un asistente de report; replicación, un cliente SQLService Broker, encriptación de base de datos nativa; soporte XML y Common Language Runtime (CLR).

Page 13: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotN

etM

anía

<<

13

SQL Server 2005Mirando hacia el desarrollador

Si en este monográfico se muestra SQL Server 2005 desde distintas perspectivas,des-de este artículo se opina sobre cómo esta nueva versión del producto atiende másque nunca las necesidades que tienen los desarrolladores de soluciones de software.Y son muchas.Y creo que nuestro amigo Yukon no las decepcionará.

aquella época en que era técnico yante un producto como éste se lanzaba de lleno aprobarlo, destriparlo y sacarle todo el jugo posi-ble. Ahora me toca estar en otra onda y pensar enlos productos con otra perspectiva. Sin embargo,el polifacético Yukon abona sobradamente el terre-no de la reflexión, ya que rompe muchos moldesy hace evolucionar el concepto de base de datoshacia derroteros bastante interesantes.

En general, el mundo de las bases de datos haevolucionado impulsado por numerosos factores;entre ellos podemos destacar las necesidades de mejo-res sistemas de almacenamiento y acceso rápido a losdatos, las necesidades de seguridad transaccional, lasdemandas de una administración más rápida y segu-ra, la tipología de los datos que se almacenan, elmodelo centralizado o distribuido de gestión de losdatos, las mejoras en SQL, el lenguaje de acceso adatos, etc. Sin embargo, rara vez se ha dado un movi-miento claro a fin de mejorar los recursos que lasbases de datos proporciona a los desarrolladores desoftware para mejor usar sus recursos. Y la prueba latenemos ahí palpable; lenguajes como PL/SQL deOracle o Transact SQL de SQL Server son un buenejemplo de este tipo de situación. Ambos permitenrealizar funciones básicas, pero no admiten ni la másleve comparación con cualquier lenguaje serio y for-malmente bien construido. Es como remontarse a laprehistoria del desarrollo cuando tenemos lenguajessofisticados para resolver el resto de las cuestionescon las que cada día nos enfrentamos.

Con SQL Server 2005, Microsoft se ha propuestonumerosos objetivos. Y por algo ha tardado 5 años

en generar esta nueva versión, periodo éste bastanteinusual en lo que se refiere a actualizaciones de pro-ductos de software. No voy a entrar aquí en el aná-lisis de todos estos objetivos ni en la valoración de siha sido mucho o poco tiempo de espera. SQL Serveres una tecnología madura y su evolución está res-pondiendo a dichos parámetros de madurez. Medetendré, pues, sólo en aquellos aspectos que con-tribuyen a mejorar la cara con la que un desarrolla-dor de software conmuta entre su apreciado VisualStudio y ese árido SQL Server 2000 al que hasta aho-ra estábamos acostumbrados, es decir, que me con-centraré en aquello que mejorará la productividaddel desarrollador.

Veamos a continuación un somero análisis deestos aspectos para que nos ayuden a comprender laprofundidad del cambio a que me refiero:

• SQL Server 2005 permite escribir funciones, pro-cedimientos y triggers usando C# o Visual Basic.NET. Ahora el CLR está albergado en el motor de

Antonio Quirós

dnm.opinion

<< Uno echa de menos

Antonio Quirós es redactor de dotNetManía.

Co-fundador de las revistasclippeRManía, FOXManía yAlgoritmo.Actualmente es Director de Operaciones en

Alhambra-Eidos

… ahora existe una auténtica yproductiva integración entre Visual

Studio y SQL Server

Page 14: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

la base de datos y el desarrollador tiene a su dispo-sición la librería de clases del .NET Framework paramodernizar la escritura de aquellos obsoletos pro-cedimientos almacenados, funciones o triggers. ¿Osimagináis trabajar con objetos dentro de un proce-dimiento? La modernidad llega a las bases de datosal fin. Ya está bien de conmutar entre el futuro y laprehistoria cuando pasamos de escribir lógica denegocio o de presentación desde Visual Studio a escri-bir lógica de datos desde SQL Server.

• Mejora de Transact SQL por si, a pesar de todo,quieres seguir usándolo.

• Servicios Web integrados en la capa de datos.Ahora podemos escribir servicios Web que songestionados por el propio SQL Server que se con-vierte así en un servidor HTTP lo que permiteprescindir de Internet Information Server en oca-siones. Esto, junto con el soporte extendido paraXML constituyen a SQL Server en una herra-mienta altamente autónoma para crear y gestio-nar servicios Web que usan datos almacenados enla base de datos y devuelven código XML apro-vechable por las distintas aplicaciones.

• Tipos de datos definidos por el usuario que pue-den ser empleados en la definición de columnasde una tabla. Así, pues, ahora podemos comple-mentar los tradicionales int, char, etc., con nues-tros propios tipos creados según las necesidadesque nuestras aplicaciones presenten.

• Un nuevo modelo de objetos (SMO - SQLManagement Objects) que sustituye al antiguoDMO. Este nuevo modelo de objetos contiene lafuncionalidad de la base de datos pero susceptible deser manejada programáticamente de manera simpleal estar estructurada como un assembly de .NETFramework. Contamos, además, con otro nuevomodelo denominado AMO (Analisys ManagementeObjects) específicamente diseñado como librería deobjetos para Analysis Services.

• Un entorno de desarrollo común. Ahora todo eldesarrollo de la lógica de datos está integrado den-tro de Visual Studio 2005, lo que quiere decir quedesde dicho entorno podemos desarrollar y, ¡ojo!,depurar, por ejemplo un script de SQL conte-niendo tratamientos sobre objetos de bases dedatos, procedimientos almacenados, etc. Se aca-bó conmutar continuamente entre Visual Studioy SQL Server para escribir distintos tipos de códi-go; ahora Visual Studio es una pieza más de losservicios que SQL Server presta a los desarrolla-dores de software.

• Más soporte para Business Inteligence. Ahora dis-ponemos del Business Inteligence DevelopmentStudio, un entorno basado en Visual Studio parael desarrollo de soluciones que integran trata-miento del motor de datos con Analisys Servicesy Reporting Services. Un lujo para el hasta ahoraárido mundo de los servicios OLAP.

• Y, para finalizar, una de las mejores cosas: SQLServer Express. Una versión específica que per-mite a los desarrolladores crear aplicaciones parasus clientes que no tengan un SQL Server de pago.Esta versión es distribuible de forma gratuita y tie-ne algunas limitaciones como que por ejemplosólo puede ser usada en un CPU con 1GB de RAMy 4GB como máximo de tamaño de la base dedatos. Sin embargo, para muchos desarrolladoresde aplicaciones para pequeños entornos será unamagnífica solución con un mucho mayor nivel deintegración y acceso del que tenía MSDE y, des-de luego, con un entorno infinitamente más robus-to, rápido, seguro y fiable del que podían ofrecerlas aplicaciones desarrolladas para Access.

En resumen, podemos decir que ahora existe unaauténtica y productiva integración entre Visual Studioy SQL Server. Ello contribuirá sin duda a una mayorcomodidad y rapidez en el desarrollo de soluciones.Nuestra productividad como desarrolladores nos lo agra-decerá. Con su última política a este respecto Microsoftha abierto una nueva línea frente a otros productos desu competencia. Está claro que el abordaje del mercadocorporativo incluye hacer que los desarrolladores de apli-caciones prefieran el motor de datos de Microsoft a otrocualquiera. La integración entre Visual Studio y SQLServer es la puerta que abre este camino.

¿Os imagináis trabajar con objetos dentro de un procedimiento? La modernidad

llega a las bases de datos al fin

<<dnm.opinion

14

<<do

tNet

Man

ía

Page 15: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotN

etM

anía

<<

15

Entrevista a Paul FlessnerPaul Flessner es Vicepresidente Senior de Aplicaciones de Servidor en Microsoft,dondedirige un equipo que aglutina la producción de Microsoft Windows Server System,conjunto de aplicaciones que incluye Exchange Server,SQL Server,BizTalk Server,ContentManagement Server, Host Integration Server y Commerce Server. Paul ha sido el alma delas transformación de las herramientas de servidor independientes de Microsoft enel conjunto de servidores integrado que se presenta hoy día.Aunque su nivel de ocu-pación es altísimo y no fue posible la comunicación presencial con él, sí pudimos rea-lizar un e-Interview, que presentamos a continuación.

de Aplicaciones de Servidoren Microsoft tienes que tratar con los equipos de desa-rrollo de muchos productos distintos. ¿Cuánta gentedepende de ti y cuál es el canal usual de comunicacióncon ellos? ¿Hablas con los grupos personalmente?

Somos un equipo e intentamos comunicarnoscara a cara siempre que es posible. Al mismo tiem-po, hacemos una actualización semanal en la que lescomunico vía e-mail cuál es la situación en el momen-to, y dónde queremos ir. El equipo depende de mí,pero al mismo tiempo, yo dependo de ellos. Paraconstruir con éxito un producto como SQL Servertenemos que tener muchos expertos que nos den susdistintas visiones del producto. Por ejemplo, yo nosoy el experto principal en Business Intelligence, asíque acudo a Bill Baker, el Manager General de BI,para que me ayude con ideas directoras acerca decómo piensa que debe desarrollarse el producto.Tiene que ser una relación de toma y daca, o sino,haríamos algo que no se ajusta a las necesidades denuestros clientes.

Dinos algo acerca de las expectativas de futuro detu departamento. Por un lado, ¿cuál será lo próximoen ver la luz? Y, además, ¿hasta qué punto dependeun producto de otro distinto a la hora de su distri-bución comercial?

En este momento, nuestra prioridad fundamen-tal es la salida de SQL Server 2005. Hemos estadotrabajando con la ayuda de nuestros partners, paradesarrollar una plataforma de datos completa, queles provea de las características empresariales de ges-tión de datos que necesitan, pero a un precio efecti-vo más competitivo.

Una de las grandes ventajas de utilizar productosMicrosoft, es que están construidos para integrarseentre sí. Comenzamos la planificación de los pro-ductos mucho antes de hablar públicamente sobreellos. Y durante la fase de planificación, evaluamos

Marino Posadas

dnm.directo.entrevistas

Marino Posadas esasesor técnico y

redactor dedotNetManía, MVP de

C# y formador deAlhambra-Eidos

<< Como Vicepresidente Senior

Paul Flessner

Page 16: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotN

etM

anía

<<

16

dnm.directo.entrevistas<<

cómo se comportará ese producto con el resto. Porejemplo, empezamos a desarrollar SQL Server 2005al mismo tiempo que se estaba desarrollandoWindows Server 2003. Haciéndolo así, podíamosidentificar fácilmente los puntos de integración deambos productos. Ese es el beneficio real de utilizaruna plataforma integrada, que somos nosotros losque realizamos la integración, no tiene que hacerloel cliente.

¿Crees que la salida en paralelo de Visual Studio2005 y SQL Server 2005 será bueno o malo para SQLServer?

Pensamos que la integración de Visual Studio2005 y SQL Server 2005, será un elemento diferen-ciador para ambos productos y un área de beneficiosignificativo para el cliente. Microsoft se encuentraen una posición única porque es la única compañíaque suministra una oferta completa de plataforma,

incluyendo bases de datos y herramientas de desa-rrollo integradas. Decidimos realizar una inversiónen la integración completa de ambos productos, por-que pensamos que los beneficios a largo plazo de unaproductividad de desarrollo mejorada, capacidadesde misión crítica, y mejoras de la perspectiva de nego-cio para nuestros clientes.

¿No crees que una distancia de cinco años entre lasdos últimas versiones de SQL Server es demasiado?¿Esperáis que los usuarios adopten todo ese conjuntode novedades ofertadas de forma inmediata?

Creo que no esperábamos que el ciclo de desa-rrollo de ese producto durase cinco años, pero nocreo que el ciclo de desarrollo extendido sea undetrimento. Nuestros clientes elogiaron las mejo-ras incluidas en SQL Server 2000, y esto ha creci-do más en los últimos años respecto a su acepta-ción original. Ellos nos han dicho que esto es debi-do a que resulta fiable, escalable, de fácil adminis-tración y con buena relación precio/prestaciones.Dicho esto, hay muchos clientes deseando poderutilizar SQL Server 2005. Más de 400.000 clien-tes y partners han tenido la oportunidad de com-probar las nuevas características y hemos recibidoun más que interesante feedback por su parte.Tenemos la seguridad de que estarán satisfechoscon la nueva funcionalidad, y que pensarán que laespera ha merecido la pena.

Y ya que hablamos de eso, ¿cuál sería tu consejopara los usuarios potenciales, desde el punto de vis-ta de la curva de aprendizaje?

En Octubre de 2004, presentamos la primeraCommunity Technology Preview para SQL Server2005. Estas CTP permiten a los clientes, evaluarlas características de los productos de forma gra-dual. A aquellos que estén interesados en apren-der más sobre SQL Server 2005, les animamos aprobar estas CTP. Hemos presentado la última deestas CTP el 8 de Junio en el Tech-Ed de Orlando,y está disponible para descarga en la direcciónwww.microsoft.com/sql/downloads. Y todavía habráalguna otra disponible antes de la aparición finaldel producto.

Y si no estás preparado para comenzar la fase detesteo, también ofrecemos guías, borradores y web-casts en www.microsoft.com/sql, que están diseñadospara educar a la gente acerca de la nueva funcionali-dad de suministra SQL Server 2005. También exis-te información comparativa respecto a otras bases dedatos. Continuaremos actualizando estos recursos amedida que nos aproximemos al lanzamiento final,que será el 7 de Noviembre de 2005.

Los usuarios, al menos aquí, pueden aceptar nor-malmente la existencia de bugs en aplicaciones dedesarrollo o producción, pero, muy raramente en ser-vidores. ¿Ha sido esa la razón principal del retrasoen la salida? ¿Los planes de testeo?

Pensamos que la integración de Visual Studio 2005y SQL Server 2005, será un elemento

diferenciador para ambos productos y un área de beneficio significativo para el cliente

Page 17: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

No hay una única razón para justificar el hechodel retraso en la salida de SQL Server 2005, pero loque es más importante para nosotros es sacar un pro-ducto con la alta calidad que requieren nuestros clien-tes. Por ejemplo, en esta versión hemos cambiadototalmente nuestra visión de la seguridad, convirtién-dolo en una prioridad absoluta. Nos hemos asegura-do de que SQL Server 2005 cumplirá con todas expec-tativas de nuestros clientes en ese sentido.

Otro punto importante tiene que ver conLonghorn. Ahora, todo parece apuntar en esa direc-ción. ¿Podrá SQL Server 2005 ser transferido aLonghorn de forma transparente?

Durante el ciclo de vida de SQL Server 2005hemos trabajado en estrecha colaboración con el equi-po de desarrollo de Longhorn Server, de la misma for-ma en que lo hizo el equipo de Windows Server 2003con nosotros, durante su ciclo de desarrollo. Lo hemoshecho así para garantizar que muchas de las mejorasincluidas en SQL Server 2005 puedan ser utilizadasen Longhorn y viceversa. Ese trabajo hará que la tran-sición para nuestros clientes sea muy sencilla.

¿Podrías subrayar dos o tres razones técnicas paraconvencer a nuestros lectores de las ventajas de lamigración a SQL Server 2005? Me refiero a caracte-rísticas funcionales, no a aspectos comerciales…

Hay muchas más de 3 características que creemosque serán de interés para nuestros clientes, perocomenzaré por aquellas que han sido más largamen-te solicitadas por ellos. Hemos mejorado notablementelas capacidades de administración con SQL ServerManagement Studio. Esto ofrece tremendas posibili-dades de administración para SQL Server y tambiénincluye a Business Intelligence Development Studio; ensegundo lugar, nos hemos centrado en la seguridad, yel producto ofrecerá encriptación nativa de datos comocaracterística avanzada de seguridad; otra novedadmuy bien acogida por nuestros clientes, ha sido la repli-cación de datos en espejo (Database Mirroring). Estopermitirá la creación de soluciones de alta disponibi-lidad, con rápida tolerancia a fallos, y redirección auto-mática de cliente.

Esperamos que nuestros clientes estén impre-sionados con las nuevas posibilidades de SQL Server2005. Y desde aquí, animamos a todos aquellos quequieran revisar la lista de todas las novedades dis-ponibles, a que lo hagan desde la direcciónhttp://www.microsoft.com/sql/2005/productinfo/sql2005features.asp.

Finalmente, ¿consideras que SQL Server 2005 esel primero de toda una nueva generación de servido-res de datos?

Completamente, pero no sólo por las mejorastecnológicas que hemos incluido en SQL Server2005. Cuando nos planteamos la construcción deSQL Server queríamos conseguir un sistema debases de datos que fuera fácil de usar, fácil de mane-jar y con una buena relación precio/prestaciones.Diez años más tarde, hemos cambiado significati-vamente el panorama, suministrando una gestiónde datos a nivel corporativo mucho más accesible yasequible. Como resultado, SQL Server ha crecidoexponencialmente, mientras otros sólo intentansuministrar promesas parecidas. Esperamos queSQL Server tenga un impacto significativo en laindustria porque aporta capacidades de gestión dedatos de muy alto nivel, desarrollo integrado, yherramientas de gestión y de inteligencia de nego-cio, y todo ello a un TCO (Costo Total de Propiedad)mucho más bajo que otras plataformas de base dedatos.

dotN

etM

anía

<<

17

dnm.directo.entrevistas<<

...en esta versión hemos cambiadototalmente nuestra visión de la

seguridad, convirtiéndolo en una prioridad absoluta.Nos hemos

asegurado de que SQL Server 2005cumplirá con todas expectativas de

nuestros clientes en ese sentido

Paul Flessner en el “2004 Worldwide Partner Conference”

Page 18: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Consiguiendo alta disponibilidad con SQL Server 2005

Durante las próximas líneas vamos a dar un vuelo sobre las posibilidades que tenemosen el mercado para construir sistemas de alta disponibilidad.Lo más complejo de estossistemas muchas veces no son los conceptos, que pueden ser adquiridos con bastan-te agilidad si el lector tiene ya una experiencia sobre Windows Server y SQL Servercomo la disponibilidad (sé que suena un poco a paradoja pero es así).

<< acceso a un cluster, es decir, a un sistemaque nos proporcione Alta disponibilidad (HA de HighAvailability en adelante) necesitamos tener el hardwareque lo soporte, o sea, un hardware que está pensado fun-damentalmente para ser muy robusto, fabricado gene-ralmente por los más afamados constructores de hard-ware y con un coste, por tanto, adecuado al nivel de cali-dad que ofrece (vamos, carísimo).

Hablando con propiedad, no solamente con un clus-ter podemos conseguir HA, puede conseguirse con téc-nicas como el trasvase de registros o Log Shipping, que yatenemos en SQL 2000, también mediante replicaciónde bases de datos, y en SQL 2005 con otra técnica nue-va llamada Database Mirroring, sin embargo, en lo quenos vamos a centrar en este artículo va a ser en lo quenormalmente conocemos como HA y que realmentees un subconjunto de esto que es como supongo todosustedes esperan la técnica de clustering.

Nos vamos a centrar en cómo conseguir con las–relativamente– nuevas técnicas de máquinas virtua-les, instalar y configurar un cluster y simular por tan-to con un hardware mucho más asequible este entor-no. Posteriormente instalaremos, sobre ese entorno“clusterizado”, SQL Server 2005 y testearemos sufuncionamiento.

Esto nos será de gran utilidad para poder realizarnuestros test en un entorno mucho menos compro-metido si somos ingenieros de sistemas, y a probaradecuadamente nuestro software si somos arquitec-tos de software. Realmente un sistema en cluster debe

pasar desapercibido para el desarrollador, y así lo eshabitualmente, sin embargo hay casos en los que noes así, o no tiene por qué serlo, en cualquier caso, pare-ce mucho más responsable por nuestra parte, probarnuestros sistemas en un entorno lo más parecido a losentornos reales que se pueda y en este sentido pare-ce muy adecuado poder probar las aplicaciones en uncluster, aunque éste sea virtual.

Un detalle que me gustaría dejar claro es que ésteartículo no pretende ser una guía de instalación de clus-ter, sino un conjunto de ideas que nos permitan mon-tarlo en máquinas virtuales para poder realizar las prue-bas que estimemos oportunas. Si quiere tener una guíapaso a paso sobre cómo instalar un cluster de formadetallada, puede usar el artículo de TechNet al que daacceso este link. http://www.microsoft.com/latam/technet/articulos/200004/art05.

Para tener acceso a la HCL (Hardware CompatibilityList) lo mejor que podemos hacer es buscar en la propiaweb de Microsoft la lista de los productos soportados enesa HCL. En el momento de escribir este artículo la lis-ta estaba en esta dirección http://www.microsoft.com/windows/catalog/server/default.aspx?subID=22&xslt=categoryProduct&pgn=8b712458-b91c-4a7d-8695-23e9cd3ae95b.

Como dato añadido, si alguien está interesado enprofundizar en el tema de clustering hay un docu-mento en la Web de Microsoft http://www.micro-soft.com/windowsserver2003/techinfo/overview/cluster-geo.mspx, en el que habla de cluster geográficamente

Miguel Egea

dnm.servidores.sql

Para poder tener

Miguel EgeaEs Ingeniero Técnico en

Informática y trabaja comoconsultor en Sinergia Tecnológica.

Es MVP en SQL Server ymantiene el site PortalSQL.com y

es mentor asociado de SolidQuality Learning

Page 19: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dispersos, basados en técnicas de mirror de discos jun-to con las tecnologías de clustering.

Primeros pasosLa “clusterización” no es un servicio propio de SQL

Server, sino del sistema operativo, de Windows Server2003 Enterprise Edition y anteriormente de Windows 2000Advanced Server. Hay otras versiones de estos productosque también admiten clustering, pero éstas son las máscomunes. Tenemos, por tanto, que acudir a las caracte-rísticas de Windows Server 2003 para tener una idea másclara de qué es y qué puede aportarnos en cuanto a HAse refiere el servicio de clustering. El servicio se llamaServer Cluster en Windows Server 2003 y es la versiónmadura y avanzada del MSCS de Windows 2000 (enton-ces se llamaba parecido: Microsoft Cluster Service).

Para crear nuestro artículo usaremos Virtual Server2005, servidores de máquinas virtuales hay varios, sinembargo la percepción que me ha causado VS2005 esfrancamente inmejorable. Una interfaz Web para elacceso a las máquinas virtuales y un rendimiento fran-camente muy, muy bueno. El aspecto es el que podéisver en la figura 1, tomado mientras comenzaba con esteartículo, instalando desde el principio un Windows Server2003 Enterprise Edition. En mi día a día siempre habíausado bien Virtual PC 2004, bien VmWare como herra-mienta de máquinas virtuales, y la verdad es que me hadejado gratamente sorprendido.

Creando el cluster con Virtual Server2005

En la propia ayuda de la máquina virtual, buscan-do la palabra clustering, tenemos una pequeña lista deinstrucciones y pasos a seguir para configurar nuestroservicio de cluster.

Elementos necesarios

En nuestra instalación de cluster vamos a haceruna instalación lo más parecida posible a una ins-

talación real, pero intentando ahorrar esfuerzos almáximo.

El primer paso que llevaremos a cabo será la ins-talación de un Windows 2003 Enterprise Server en elservidor de máquinas virtuales.

Usaremos tres máquinas virtuales, una de ellas noshará de Domain Controler y las otras dos serán las quenos doten de HA, es decir, ahí “clusterizaremos” (per-donad la palabra) el servicio.

En nuestro caso vamos a crear un dominio llama-do SESAMO y nuestros nodos se llamarán EPI y BLAS,estos nombres son un pequeño tributo a mi infancia,pero también a un proyecto en el que tuve la oportu-nidad de participar hace unos años y del que guardoun muy grato recuerdo.

Aunque se puede caer en la tentación de copiar ypegar las máquinas virtuales, es conveniente saber queel identificador de instalación queda registrado y esonos dará problemas en nuestro directorio activo, nopodremos hacer login y algunas cosas así. Es ciertoque hay comandos que permiten resetear una instala-ción hasta casi el final del proceso pero son bastanteagresivos (hablo de comandos como sysprep), sinembargo si buscamos en la Web de SysInternals pode-mos encontrar una utilidad llamada NewSID(http://www.sysinternals.com/ntw2k/source/newsid.shtml),que nos va a permitir cambiar solamente el SID y elnombre de la máquina.

De lo que acabamos de ver quizá alguien puedapensar que la mejor forma, por tanto, es copiar y pegarel disco virtual y después usar NewSID, es cierto quees una alternativa, sin embargo, Virtual Server nosofrece una funcionalidad llamada discos hijos que nosva a permitir crear a partir de un disco el resto sim-plemente de la diferencia que hay entre ambos.Ahorramos así tanto espacio físico como tiempo.

Para hacerlo tenemos que detener nuestra máqui-na virtual, marcar el disco (el fichero que lo contiene)como de sólo lectura y, a partir de ese disco, crear tan-tos discos de diferencias como necesitamos (tres eneste caso). En cada uno de esos discos tendremos queejecutar NewSID para limpiar el nombre y el identi-

dotN

etM

anía

<<

19

dnm.servidores.sql<<

Figura 1

La “clusterización” no es un serviciopropio de SQL Server, sino del sistemaoperativo, de Windows Server 2003

Enterprise Edition y anteriormente deWindows 2000 Advanced Server

Page 20: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

ficador de la instalación; es conveniente realizar estaoperación después de activada la copia de Windows.Cada máquina virtual apuntará al disco de diferenciasque corresponda.

Posteriormente, promocionaremos una de las tresmáquinas, la que hará de DC a controlador de dominiode un nuevo bosque, y lo llamaremos SESAMO. En lasiguiente figura puede verse uno de los pasos de cons-trucción del nuevo controlador de dominio.

Los nodos del cluster al dominio

Ahora comenzaremos a unir las máquinas del clus-ter al dominio, los detalles de Active Directory quedanmuy lejos de este artículo, sin embargo, como pince-lada para unir las máquinas al dominio simplementehay que entrar en la pestaña de propiedades de lamáquina y aparecen las opciones; hay que configurarla red para que el servidor de DNS resuelva los nom-bre (es importante este punto) pero en nuestro casoes tan sencillo como hacer que el servidor de DNSsea el controlador de dominio recién promocionado.Ya sabéis que para conseguir esto basta con especifi-car su dirección IP en “DNS preferido”.

En la figura 3 puede verse cómo se une cada unode los nodos al dominio.

La segunda tarjeta de red

Una de las necesidades que tenemos que cubrir esla de que los elementos que compongan el cluster ten-gan un mecanismo fiable y rápido de mandarse seña-les para poder comprobar si los demás están “vivos”.Esta señal se llama heartbeat, es decir, latido. Esto loconseguiremos instalando en nuestra máquina virtualdos tarjetas de red (virtuales también).

Para hacer esta operación, lo primero que hare-mos será detener nuestra máquina virtual, y despuésentrar en su administración para poder añadir la nue-va tarjeta.

Una vez añadida esta nueva tarjeta, podremos entrara configurarla. Para nuestro ensayo utilizaremos tresmáquinas virtuales que ejercerán de máquinas reales ynecesitaremos además dos direcciones virtuales (simu-laremos un entorno activo/activo). Necesitaremos, portanto, cinco direcciones IP que usaremos para cada unade las máquinas, más las dos virtuales y necesitaremosdos más para el heartbeat (es decir, para que los dos nodosdel cluster que vamos a mostrar se vean). Utilizaremoslas direcciones 192.168.1.X para las máquinas donde Xirá desde 0 hasta 4 y utilizaremos las direcciones192.168.100.X para el heartbeat.

En nuestro caso hemos sustituido X por el valor 2para el servidor BLAS y el valor 3 para nuestro servi-dor EPI, hemos dejado el 1 reservado para nuestroDomain Controler. Por otra parte, hemos renombra-do las redes (botón derecho, “renombrar”) para de unsimple vistazo tener claro la tarjeta de red que esta-mos usando.

Virtual Server ofrece la posibilidad de crear redesvirtuales. En nuestro caso no es necesario aunque esuna opción. Para el ejemplo, hemos usado siempretarjetas de red conectadas a la tarjeta física del equi-po anfitrión, en este caso llamado “Fast Ethernet VIAPCI 10_100Mb”.

El almacenamiento compartido

No puede montarse un cluster sin almacena-miento compartido. En los servidores físicos (no

dotN

etM

anía

<<

20

dnm.servidores.sql<<

Figura 2

Figura 3

Figura 4

Page 21: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

virtuales como estamos usando paranuestras pruebas), este almacena-miento suele ser o bien disco SCSI quepueden ser compartidos, o bien cabi-nas de discos completas de distintosfabricantes.

Para instalar el primero añadiremosun adaptador SCSI para clusteringseleccionando para ello la opción ade-cuada dentro de cada una de las máqui-nas virtuales.

Es conveniente que cada una de lasmáquinas tenga un SCSI adapter ID dife-rente, así pues a una de ellas le asigna-remos el 7 y a la otra el número 6.

Después, crearemos un disco vir-tual llamado quórum; para este discono necesitamos gran espacio, será ellugar común para comunicar el clus-ter y no tiene que tener un tamañogrande, aunque vale con menos, ennuestro ejemplo le hemos dado 1GB.Posteriormente y siguiendo el mismoproceso instalaremos un nuevo discoque será donde residirá al final nues-tro Server SQL.

Continuaremos agregando los dis-cos a nuestro almacenamiento, el pro-pio sistema ya tiene como parámetroque son compartidos, por lo que nospermitirá arrancar de nuevo ambasmáquinas virtuales sin problemas de usode los discos.

Usaremos el administrador de dis-cos para formatear el disco duro y asig-narles unidad como puede verse en lasiguiente figura:

Instalando Server Cluster

Para instalar el servicio de cluster nohay que hacer nada especial, basta con iral menú herramientas administrativas yabrir la aplicación “Cluster Adminis-trator”. El “Cluster Administrator” es laaplicación que nos va a servir para mon-tar nuestro cluster.

Al abrirla nos ofrecerá tres opcio-nes: en la primera de ellas podemoscrear un nuevo cluster, en la segundapodemos añadir nodos a un cluster yaexistente y en la tercera podemosconectarnos a un cluster para admi-nistrarlo.

Hay literatura que recomienda queel segundo nodo esté apagado cuandose comience con esta operación.

Comenzaremos con la opción“Crear Cluster”. En esta opción nosaparecerá un asistente que nos guiaráen todo el proceso de creación delcluster. Nos irá solicitando una direc-ción IP nueva –ésta será la nuevadirección virtualde cluster–, des-pués chequearánuestro sistemapara comprobar sitenemos todos losrecursos necesa-rios (doble tarjetade red, almacena-miento comparti-do para quórum yrecursos...) y des-pués nos pedirá unnombre de usua-rio y una contra-seña, que deberáser el usuario quelevante los servi-cios del cluster.Nosotros, parasimplicidad hemoselegido un admi-nistrador del do-minio, pero esto,en general, no esbuena idea de caraa la seguridad, esdecir, si os tocamontar un clusteren producciónconsultad la documentación deWindows y seguid las recomendacio-nes de seguridad al respecto.

Hay que asegurarse no dejar comopuede sugerir el sistema por defecto elquórum como “localquorum”, si se haceasí, al no poder ser compartido nopodrán añadirse nuevos nodos al clus-ter. Al acabar la configuración del siste-ma la respuesta será algo parecido a lafigura anterior.

Cuando el asistente termina nos mues-tra toda la información de cómo ha que-dado montado nuestro cluster. En nues-tro csao la información es la siguiente:

Terminado este proceso, unas cuan-tas comprobaciones son necesarias, porejemplo, mover el único cluster group

dotN

etM

anía

<<

21

dnm.servidores.sql<<

Figura 5

Figura 6

Figura 7

Cluster name:BARRIOSESAMO.sesamo.local

Cluster IP address:192.168.1.10\255.255.255.0

Cluster network:lanExterna - Private and Public

Intel 21140-Based PCI Fast Ethernet Adapter (Generic)Primary Address: 192.168.1.2 \ 255.255.255.0

Cluster service account credentials:Name: ClusterUsrPassword: ***************Domain: sesamo.local

Cluster node membership:EPI

Resource configuration:Local Quorum - NOT managedDisk E: - Managed - QuorumMajority Node Set - NOT managed

Network configuration:

lanExterna - Private and PublicIntel 21140-Based PCI Fast Ethernet Adapter (Generic)Primary Address: 192.168.1.2 \ 255.255.255.0

HeartBeat - Private and PublicIntel 21140-Based PCI Fast Ethernet Adapter (Generic)Primary Address: 192.168.100.1 \ 255.255.255.0

Page 22: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

que tenemos de nodo (a través de la opción “MoveGroup” del “Cluster Administrator”) y ver que el sis-tema queda confiable.

Para añadir el segundo nodo, lo arrancaremos ydesde el primero podemos usar el menú “Open” del“Cluster Administrator” y ahí seleccionar la opción“Add Nodes to Cluster”. Ahí elegiremos nuestrosegundo nodo (BLAS) y el asistente se encargará dehacerlo formar parte del sistema. Aseguraos eso sí deque la configuración es idéntica, doble tarjeta de red,discos compartidos,…

Añadiendo nuevos discos al sistema

Para poder instalar nuevos servicios, será necesa-rio que dotemos al cluster de nuevos discos, en ellos,como comentábamos antes, será donde instalemosnuestro SQL Server 2005.

Si en lugar de una máquina virtual esto se hace enun entorno real, no olvidéis seguir las recomendacio-nes sobre tipo de almacenamiento y ficheros a intro-ducir. Se trata de maximizar el ancho de banda quesea capaz de proporcionar una cabina de discos y deminimizar los tiempos de espera de IO debidos a escri-turas, por lo que lo más conveniente es situar los fiche-ros de log en discos en RAID 1+0 o 0+1. Los fiche-ros de datos ya será una cuestión de economía; lo queimporta son las lecturas, que éstas sean rápidas, porlo que un RAID 5 puede ser suficiente.

En cualquier caso y volviendo a nuestra máquinavirtual, añadiremos un nuevo disco con tamaño fijo através del menú de Virtual Server asegurándonos queel disco sea un disco de longitud fija.

A continuación entraremos en la configuración dela máquina a la que le vamos a instalar el nodo y leañadiremos un nuevo dispositivo SCSI compartidopara cluster y con el mismo SCSI ID que le determi-namos en la primera configuración (en nuestro casoal nodo EPI le pusimos el ID 6 y al nodo BLAS el ID6 también).

Añadiremos a continuación nuestro disco en el nue-vo bus SCSI y arrancaremos nuestra máquina (apagan-do posteriormente el otro nodo para repetir los pasos).Al entrar, no veremos cambios, hay que acceder al admi-nistrador de discos (para los que no lo encontréis, botónderecho sobre “My Computer”, y luego “Manage”). Alentrar inmediatamente nos aparece el asistente para con-figurar el disco. Seguiremos las opciones por defecto ydespués lo particionaremos y formatearemos para queesté listo para ser usado.

Repetiremos los pasos de configuración en el segun-do nodo, añadiendo tanto el nuevo dispositivo SCSIcomo el disco compartido en nuestro segundo nodo (tie-ne que estar apagado para que Virtual Server nos per-mita hacer cambios en la configuración).

En este instante, una vez arrancadas ambas máqui-nas estamos en disposición de configurar una aplica-ción (así se llama en el entorno de cluster) en el queal final vivirá SQL Server. Hay que meter el discocomo recurso de cluster, esto implica un nombre vir-tual, una dirección IP virtual y el disco recién creado,para que la rutina de instalación de SQL detecte elrecurso y se instale en esta unidad. Para conseguiresto nos situaremos en el “Cluster Administrator”,botón derecho encima del nombre de nuestro clus-ter, “Configurar nueva aplicación” y seguimos lospasos del asistente, añadiendo como recurso el discoque acabamos de crear y formatear.

El resultado después del asistente será algo comoqueda en el siguiente gráfico.

Hecho esto, estamos en disposición de comenzar lainstalación de nuestro SQL 2005 en cluster. Tendremosque asegurarnos que ambos nodos están arrancados yfuncionando antes de comenzar la instalación de SQLServer (aseguraos de poner online el grupo).

Instalando SQL Server 2005 en cluster

Después, la tarea es bastante sencilla. Para la ins-talación hemos usado la versión Beta 2 de SQL Server

dotN

etM

anía

<<

22

dnm.servidores.sql<<

Figura 8

Figura 9

Page 23: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

2005, aunque a fecha de la escritura delartículo ya tenemos la CTP de junio,pero hemos preferido instalarlo conBeta 2 ya que es potencialmente a la quemayor acceso ha habido.

Al ejecutar la instalación los prime-ros pasos son exactamente iguales en unentorno de cluster que en un entornono “clusterizado”. Cuando llega elmomento en que el programa de insta-lación nos solicita los componentes ainstalar es cuando tenemos que especi-ficar que se instale como un servidor vir-tual, para nuestro caso vamos a haceresa operación tanto para el motor rela-cional como para el motor de OLAP.En la figura no aparece seleccionadoReporting Services; esto es debido a queno hemos instalado los servicios de IISen las máquinas virtuales.

En el siguiente paso del asistente nosaparecerá si queremos instalar en la ins-tancia por defecto o con nombre de ins-tancia, en nuestro caso elegiremos insta-lar con nombre de instancia, no es nece-sario pero si al final acabásemos instalan-do un cluster en activo-activo queda bas-tante más elegante que ambos servidorestengan instancias con nombre que si unoes la instancia por defecto y el otro tieneun nombre de instancia.

A continuación nos solicita el nom-bre de nuestro servidor virtual, siguien-do la línea de Barrio Sésamo vamos anombrarlo Triqui, así tenemos prácti-camente entero el barrio.

El siguientepaso es uno de losmás importantesen esto del clus-tering. Ahí nos vaa solicitar ladirección IP vir-tual, es decir, através de la cual accederán a nuestro ser-vidor virtual todos los clientes y que podráestar activa en un nodo o en el otro resul-tando de esta forma transparente a losusuarios si se están conectando a nuestroservidor EPI o a nuestro servidor BLAS. Eneste caso hemos elegido una configura-ción de direcciones IP muy redondeadas(vamos a elegir la 192.168.1.50 comodirección virtual), en los entornos de pro-ducción esto puede depender de la polí-tica de red, evidentemente es transapa-rente, solamente necesita tener una direc-ción IP fija para ser accedido, sin necesi-dad de que esa dirección cumpla otrorequisito (bueno tiene que estar libre porrazones obvias).

A continuación nos solicita los nodosen los que va a poder residir nuestro ser-vicio, en nuestro ejemplo sólo hay dosnodos, uno de ellos es obligatorio, y elotro aparece seleccionado por defecto, enun entorno con muchos nodos podemosdecidir que un servicio no pueda residiren un servidor, esto dependerá de la con-figuración que deseemos, del número dealmacenamientos disponibles etc.

En la figura puede verse cómohemos configurado la lanPublica paraque sea el método de acceso, y no vamosa configura la red de heartbeat que paranuestro caso será privada entre ambosservidores (en entornos de producciónalgunas veces se trata de un cable cru-

zado de una a otra máquina para garan-tizar la disponibilidad).

Una vez pasado este proceso, el ins-talador de SQL Server aparece ligera-mente distinto que en una instalación queno vaya contra un cluster, ya que en la par-te superior permite elegir el nodo y vercómo va el progreso de la instalación encada uno de los nodos.

Acabado el asistente tendremos nues-tro servidor SQL Server 2005 instaladoen HA, un cluster recien instalado. Yapodremos empezar con las pruebas. En elcaso de los desarrolladores puros, nues-tras aplicaciones deberían superar almenos las siguientes:

1. Que se mueva el servidor de nodo enmedio de una transacción.

2. Que se mueva el servidor de nodo enun momento de inactividad.Todas estas operaciones, que suponen

cortes en el servicio deberíamos ser capa-ces de que pasasen inadvertidas al usuario(no a las aplicaciones naturalmente) y debe-ríamos recoger en un log todos esos datos.Notificar al Event Viewer es una opciónbastante adecuada, sin embargo, los usua-rios de aplicaciones no están consultandoel Event Viewer habitualmente, así quepodrían establecerse mecanismos adicio-nales de control sobre las aplicaciones.

ConclusionesGracias a las tecnologías de máquinas

virtuales tenemos un mecanismo asequi-ble de probar tecnologías realmente com-plicadas de probar debido al gran costeeconómico que suponen.

La parte más compleja de todo el asun-to, más que en el propio SQL Server, estáen el sistema operativo, en la instalación yconfiguración de dispositivos de hardwa-re y en conocer unos cuantos conceptos.

Además SQL 2005 mantiene la sen-cillez de instalación en entornos “cluste-rizados” de su antecesor SQL 2000 sim-plificando además la instalación de AnalisysServices en este tipo de estructuras.

dotN

etM

anía

<<

23

dnm.servidores.sql<<

Figura 10

Figura 11

Figura 12

La parte más compleja de todo el asunto,más que en el propio SQL Server, está

en el sistema operativo

Page 24: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Integración del CLR con SQL Server 2005Ejecutando código administrado desde el núcleo del motor de datos

De todo el conjunto de novedades que se incluyen con SQL Server 2005, la queprobablemente llame la atención de forma más poderosa a la comunidad de pro-gramadores, sea la capacidad de escribir el código de ciertos objetos del motorde datos utilizando alguno de los lenguajes de la plataforma .NET Framework(Visual Basic .NET,C#,etc.), aspecto éste bautizado con el nombre de “Integracióndel CLR con SQL Server 2005”.

<<

Una de las primeras cuestiones que deberíamos pre-guntarnos sería “¿En qué consiste o qué debemos enten-der por integración del CLR en SQL Server 2005?”. Ladefinición que podemos dar acerca de este nuevo aspec-to de nuestro conocido gestor de datos sería la siguien-te: “se trata de aquella característica de SQL Server porla cual, el CLR (Common Language Runtime), es decir, elmotor de ejecución de la plataforma .NET Framework,se encuentra albergado dentro de la maquinaría del ser-vidor de datos como un elemento más, permitiendo queSQL Server pueda beneficiarse de toda la potencia quebrinda la tecnología .NET al desarrollador”.

¿Qué beneficios aporta esta integración?El objetivo principal de incorporar el CLR a la arqui-

tectura de SQL Server, consiste en dotar al programa-dor de aplicaciones de bases de datos de un conjunto deherramientas que potencien su trabajo, entre las cualesse encuentra la posibilidad de emplear cualquiera de loslenguajes de la plataforma .NET, para escribir los siguien-tes objetos del motor de datos: procedimientos almace-nados, funciones definidas por el usuario, tipos defini-dos por el usuario, agregados y triggers.

Los mencionados objetos, hasta este momento, sólose podían crear utilizando Transact-SQL (T-SQL), o enel caso de procedimientos almacenados, mediante el APIde programación de procedimientos almacenados exten-didos. Sin embargo, a partir de ahora, podemos ampliar

su potencia gracias a la rica jerarquía de clases que ofre-ce .NET Framework para su programación; con ella, esposible desarrollar aspectos antes impensables debido alas limitaciones de T-SQL, y obtener así las ventajas dela ejecución bajo el entorno de código administrado(managed code) de .NET.

Por otro lado, esta capacidad de integración sig-nifica que a partir de ahora, podemos escribir códigoadministrado para SQL Server utilizando VisualStudio .NET, el mismo entorno de desarrollo queempleamos para el resto de aplicaciones habituales deesta plataforma, incrementando nuestra productivi-dad gracias a la multitud de asistentes y ayudas parala programación, sobradamente conocidas por todoslos usuarios de esta herramienta.

La seguridad es otro de los apartados favorecidos porla integración, ya que elementos como la Seguridad deAcceso al Código (CAS, Code Access Security), la seguridad anivel de tipos, etc., harán que nuestro código administra-do se ejecute de modo más seguro en SQL Server.

Con respecto a las versiones de los productos uti-lizadas para elaborar este artículo, se han utilizadoSQL Server 2005 Beta 2 y Visual Studio 2005 Beta 2,los cuales aparecerán en sus correspondientes versio-nes definitivas a primeros de noviembre.

Objetos administrados de base de datosComo ya hemos apuntado anteriormente, la inte-

gración con el CLR permite escribir los conocidosprocedimientos almacenados, funciones, triggers, etc.,propios de T-SQL, empleando cualquiera de los len-

Luis Miguel Blanco

dnm.servidores.sql

¿Qué es la integración del CLR en SQLServer 2005?

Luis Miguel Blancoes redactor de dotNetManía. Es

consultor en Alhambra-Eidos.Haescrito varios libros y decenas de

artículos sobre la plataforma.NET (lalibreriadigital.com)

Page 25: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

guajes de la plataforma .NET. Dentro de este con-texto de desarrollo y ejecución, a estos elementos seles denomina Objetos Administrados de Base de Datos oManaged Database Objects; para abreviar, nosotrosemplearemos a partir de ahora las siglas MDBO parareferirnos a estos objetos.

Dependiendo de la naturaleza de cada uno de estosobjetos su implementación varía, así pues, los procedi-mientos almacenados, funciones y triggers se escriben comométodos compartidos (Shared o static, según el lengua-je utilizado), mientras que los agregados y tipos definidospor el usuario se escriben como clases o estructuras.

Acceso a datos desde objetos MDBOEn un alto porcentaje de ocasiones, cuando escri-

bamos el código de un MDBO, este objeto necesita-rá acceder también a la información de la base de datosen la que se encuentra alojado.

Para facilitar nuestro trabajo en este sentido, elCLR proporciona al programador un proveedor dedatos (in-process data provider), que se ejecuta integra-do junto al código de nuestros objetos MDBO, den-tro del proceso de SQL Server.

El conjunto de tipos que conforman este provee-dor integrado de datos se encuentra en el espacio denombres System.Data.SqlServer, que se halla dentrodel ensamblado Sqlaccess.dll. Entre las clases con-tenidas por este proveedor de datos podemos men-cionar las siguientes:

• SqlCommand. Permite la creación y ejecución desentencias DDL y DML en la base de datos.

• SqlDataReader. Proporciona capacidades denavegación de sólo lectura y avance por las filas deun conjunto de resultados, obtenido a partir deuna consulta contra la base de datos.

• SqlPipe. Es el objeto encargado de enviar a la apli-cación cliente el resultado de la ejecución de unMDBO, en forma de conjunto de resultados, cade-na de caracteres, etc.

• SqlContext. Representa el entorno o contexto den-tro del cual se ejecutan los objetos MDBO.Proporciona objetos preconstruidos del proveedor dedatos integrado, tales como Connection, Command, Pipe,etc., que aportan una mayor agilidad en la ejecución.Por ejemplo, si desde un MDBO necesitamos ejecu-tar un comando contra la base de datos en la que seencuentra instalado, no es necesario crear primera-mente una conexión y luego un comando; llamare-mos directamente al método SqlContext.

GetCommand(), con el que obtendremos un objetoCommand, cuya propiedad Connection ya está configu-rada para conectar con la base de datos en curso.

Como podrá comprobar el lector, el uso de estosobjetos resultará muy familiar para aquellos programa-dores que ya hayan trabajado con el modelo de clases de

ADO.NET, lo que facilitará la curva de aprendizaje conel proveedor de datos integrado de SQL Server.

Para una descripción en profundidad de todas las cla-ses pertenecientes al espacio de nombres System.Data.SqlServer, recomendamos al lector la consulta de la docu-mentación de SQL Server 2005.

Creación de un procedimiento almacena-do MDBO

Evidentemente, no todo en este artículo va a serteoría y conceptos sobre la integración entre el CLRy SQL Server 2005. Durante los siguientes apartadostambién vamos a abordar, como es natural, la vertientepráctica en la creación de objetos MDBO; y lo vamosa hacer comenzando por los procedimientos almace-nados, uno de los objetos más sobradamente conoci-dos y utilizados habitualmente en T-SQL.

Antes de comenzar, es necesario puntualizar queel código de los ejemplos de este artículo está desa-rrollado en VB.NET, estando disponible para su des-carga en la dirección www.dotnetmania.com.

En primer lugar abriremos Visual Studio 2005 yseleccionaremos la opción de menú “File + New +Project”. En el cuadro de diálogo “New Project”, den-tro del panel de tipos de proyecto, haremos clic sobreel nuevo tipo “Database”; como plantilla elegiremos“SQL Server Project”, la cual dispone por defecto detodos los ajustes necesarios para crear objetos MDBO.El nombre del proyecto será ProcAlmacConsulta comovemos en la figura 1.

dotN

etM

anía

<<

25

dnm.servidores.sql<<

Figura 1

El CLR proporciona al programador un proveedor de datos integrado junto al código

de nuestros objetos MDBO, dentro del proceso de SQL Server 2005

Page 26: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Una vez aceptado el cuadro de diálogo de creaciónde proyecto, la primera acción a realizar será estableceruna conexión con un origen de datos, para lo cual, y demodo automático, Visual Studio mostrará el cuadro dediálogo de conexión a una base de datos, en el que intro-duciremos los valores necesarios para conectar con nues-tro servidor SQL Server local, y utilizar la base de datosNorthwind, empleando seguridad integrada de Windows,como vemos en la figura 2.

A continuación, mediante la opción de menú “Add+ New Item…”, abriremos el cuadro de diálogo paraañadir un objeto MDBO de tipo “Stored Procedure”,al que llamaremos spProductosOrdenNombre, comovemos en la figura 3.

Al aceptar esta ventana, se creará una nueva clasecon el nombre StoredProcedures, que tendrá un méto-do con el nombre spProductosOrdenNombre. Llegados aeste punto, debemos comentar algunas característicasdel lenguaje referentes a esta clase:

• La clase está definida con la palabra clave Partial.Esta es una novedad incluida en los lenguajes dela plataforma .NET, que nos permite repartir losmiembros de una misma clase en varios archivosde código. Hasta la presente versión de .NET, el

código de una clase tenía que escribirse en un úni-co archivo.

• El método se define como Shared o compartido,para que SQL Server pueda ejecutarlo directa-mente sin tener que instanciar un objeto.

• A nivel de método se aplica el atributo SqlProcedure,que proporciona información a SQL Server acercadel tipo de objeto de base de datos que vamos a cre-ar. De esta manera, en función del tipo de objeto aescribir, existen diferentes atributos que deberemosaplicar: SqlFunction, SqlUserDefinedType, etc.

Seguidamente escribiremos el método de la for-ma mostrada en el fuente 1.

En el código que acabamos de ver, utilizamos elobjeto SqlContext para obtener una instancia de unobjeto SqlCommand, que emplearemos para ejecutaruna consulta contra la base de datos. Observemosque, gracias al diseño de las clases del proveedor dedatos integrado, no es necesario crear un objetoConnection, ya que por defecto se asume que vamosa trabajar con la base de datos que hemos especifica-do al crear el proyecto; por lo tanto, dicha conexiónya se encuentra incluida en aquellos objetos que lonecesiten, como es el caso del comando.

Asignaremos al comando el texto de la consultay la ejecutaremos, obteniendo el conjunto de resul-tados como un objeto SqlDataReader; hasta ahora nadanuevo para todo aquel que haya programado conADO.NET. A partir de aquí es donde entramos enla parte más interesante, ya que necesitamos devol-ver el objeto SqlDataReader de alguna manera al clien-te que ejecuta el procedimiento almacenado; esto lo

dotN

etM

anía

<<

26

dnm.servidores.sql<<

Figura 2

Figura 3

Imports SystemImports System.DataImports System.Data.SqlImports System.Data.SqlServerImports System.Data.SqlTypes

Partial Public Class StoredProcedures<SqlProcedure()> _Public Shared Sub spProductosOrdenNombre()

Dim oCommand As SqlCommandDim oDataReader As SqlDataReaderDim oPipe As SqlPipe

oCommand = SqlContext.GetCommand()oCommand.CommandType = CommandType.TextoCommand.CommandText = _

"SELECT ProductID, ProductName, QuantityPerUnit " & _"FROM Products ORDER BY ProductName"

oDataReader = oCommand.ExecuteReader()

oPipe = SqlContext.GetPipe()oPipe.Send(oDataReader)oPipe.Send("Resultados enviados al cliente")

End SubEnd Class

Fuente 1

Page 27: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

conseguiremos utilizando un objetoSqlPipe, que obtenemos también deSqlContext.

La clase SqlPipe dispone del métodoSend(), que será el empleado para enviarresultados al cliente. Gracias a las distin-tas sobrecargas de este método, es posi-ble devolver información de diferente tipo;en este caso lo usamos para retornar unobjeto SqlDataReader, y a continuaciónuna cadena de caracteres.

Compilación,despliegue y eje-cución de un objeto MDBO

Terminada la escritura del objetovamos a proceder a ejecutarlo para pro-bar su funcionamiento.

En primer lugar, mediante la opciónde menú “Build + Build Solution” com-pilaremos el código, obteniendo el ensam-blado ProcAlmacConsulta.dll en el direc-torio bin del proyecto. A continuación, laopción “Build + Deploy Solution” des-plegará-instalará el ensamblado genera-do dentro de SQL Server.

Si queremos verificar que la instala-ción del objeto ha tenido éxito, abriremosSQL Server Management Studio y reali-zaremos las siguientes acciones: en la ven-tana “Object Explorer” nos situaremossobre la base de datos Northwind, expan-diremos el nodo “Programmability”, ydentro de este, los nodos “Assemblies” y“Stored Procedures”, que mostrarán res-pectivamente, el ensamblado y procedi-miento almacenado que hemos creadodesde Visual Studio, como vemos en lafigura 4.

Para ejecutar nuestro procedimientoalmacenado desde Visual Studio pulsare-mos [F5], o el botón “Start” de la barra deherramientas, obteniendo el resultado enla ventana “Output”, como vemos en lafigura 5, en la que también señalamos cadauno de los elementos devueltos por elobjeto SqlPipe. En el caso de que esta ven-tana no muestre la información deseada,debemos seleccionar, de su lista desple-gable “Show output from”, el valor“Database Output” (figura 5).

Lo que realmente hace Visual Studiocuando ponemos en funcionamiento elproyecto es ejecutar el archivo de scriptTest.sql, que contiene la instrucción execspProductosOrdenNombre. Este archivo estásituado en la carpeta TestScripts del pro-yecto, y es creado automáticamente cuan-do desarrollamos proyectos de tipo SQLServer. Según el elemento de nuestro pro-yecto que deseemos probar al ejecutar elproyecto, deberemos escribir la/s ins-trucción/es adecuadas en este archivo.

También podemos ejecutar esteprocedimiento almacenado desde SQLServer Management Studio, escribien-do la instrucción antes mencionada enuna nueva ventana de consultas, encuya parte inferior, las pestañas“Results” y “Messages”, mostrarán res-pectivamente los datos devueltos porel procedimiento y la cadena enviadacon el objeto SqlPipe.

Agregar y registrar manual-mente un ensamblado y sucontenido en SQL Server

Aunque como acabamos de ver, elmedio más sencillo y directo de instalarun ensamblado .NET en SQL Server2005 es desde el IDE de Visual Studio2005, quizá nos encontremos en algúnmomento con la necesidad de realizaresta operación, pero no dispongamos delmencionado entorno de desarrollo. ¿Qué

hacemos entonces, nosquedamos sin instalar elensamblado?.

No se preocupe el lec-tor, ya que es perfecta-mente posible agregarmanualmente el ensam-blado y registrar su conte-nido en el servidor dedatos, puesto que la nuevaversión de SQL Serverincorpora los comandosapropiados a tal efecto.

Vamos a comprobaresta característica de la inte-

gración con el CLR, eliminando primera-mente desde SQL Server ManagementStudio los elementos creados en el aparta-do anterior. Para ello, en el nodo “StoredProcedures” haremos clic derecho sobre elprocedimiento almacenado creado ante-riormente, y seleccionando la opción demenú “Delete” lo eliminaremos de la basede datos. A continuación, en el nodo“Assemblies”, procederemos exactamenteigual con el ensamblado.

Posteriormente, para añadir unensamblado manualmente a la base dedatos, deberemos utilizar la instrucciónCREATE ASSEMBLY, proporcionando la rutaen la que reside el archivo del ensambla-do, y especificando el conjunto de permi-sos de seguridad que otorgamos al mis-mo, como vemos en el siguiente fuente:

CREATE ASSEMBLY ProcAlmacConsultaFROM 'C:\EnsambladosCLR\ProcAlmacConsulta.dll'WITH PERMISSION_SET = SAFE

dotN

etM

anía

<<

27

dnm.servidores.sql<<

Figura 4

Figura 5

VS 2005 proporciona una nueva plantilla para proyectosde SQL Server, y dentro de estos, plantillas para cada

uno de los objetos de datos administrados.

Page 28: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

La cláusula WITH PERMISSION_SET será la que emple-emos para establecer el grupo de permisos asignadosal ensamblado; dispone de tres valores que describi-mos seguidamente:

• SAFE. Representa el nivel con mayor grado deseguridad, ya que restringe el acceso del ensam-blado a recursos tales como el registro, sistema dearchivos, redes, etc. En el caso de no especificarningún valor de seguridad para el ensamblado, setomará por defecto este nivel.

• EXTERNAL_ACCESS. Cuando establecemoseste tipo de permisos, el ensamblado puede acce-der a recursos como archivos, el registro, varia-bles de entorno, etc.

• UNSAFE. El ensamblado tiene pleno acceso atodos los recursos. Al ser la opción menos res-trictiva ha de emplearse con sumo cuidado.

Depuración de objetos MDBO desdeVisual Studio

Al igual que ocurre durante el desarrollo de otrostipos de aplicaciones, la creación de objetos administra-dos para SQL Server es una labor que no está exenta deerrores. Es por ello que Visual Studio nos proporcionatambién la capacidad de depurar este tipo de código,aunque se trata de una característica que no está activa-da por defecto.

Para habilitar la depuración en un proyecto de tipoSQL Server debemos seguir estos pasos: abrir la venta-na “Server explorer”, expandir el nodo “DataConnections”, hacer clic derecho sobre la conexión dedatos que hayamos establecido para el proyecto, y final-mente, seleccionar la opción de menú “Allow SQL/CLRDebugging”. Aparecerá una ventana con el siguientemensaje: “SQL/CLR debugging will cause all managerthreads on the Server to be stopped. Do you want tocontinue?”, a la que deberemos responder afirmativa-mente, con lo que ya tendremos disponible la depura-ción del código en nuestro proyecto.

Personalizando el conjunto de resultadosa devolver

En el anterior ejemplo hemos podido ver que la cla-se SqlPipe es la encargada, dentro de un procedimientoalmacenado, de devolver la información resultante alcliente en forma de objeto SqlDataReader. Aunque este

modo de trabajo será el adecuado en muchas ocasiones,es posible que nos encontremos con requerimientos adi-cionales a la hora de enviar la información.

Supongamos que vamos a crear un procedimientoalmacenado MDBO con una consulta sobre la tablaEmployees, y por un lado debemos traducir los valoresdel campo TitleOfCourtesy, mientras que por otra par-te tenemos que devolver FirstName y LastName como unúnico campo. Daremos el nombre spEmpleadosFormatoa este nuevo procedimiento almacenado.

En este caso no podemos retornar directamenteel objeto SqlDataReader producto de ejecutar el coman-do, lo que debemos hacer es construir nuestra propiaestructura de almacenamiento de datos, recorrer elSqlDataReader para manipular los campos necesarios,y devolver estos datos transformados utilizando elobjeto SqlPipe.

Todo lo anterior lo conseguiremos definiendo unmodelo de registro y campos personalizados. Para elregistro utilizaremos la clase SqlDataRecord, mientrasque para los campos emplearemos la clase SqlMetaData;en estos últimos crearemos un objeto por campo, y losañadiremos todos a un array, que posteriormente pasa-remos al constructor de SqlDataRecord.

Antes de iniciar la manipulación de datos, indica-remos el comienzo del envío de resultados llamandoal método SqlPipe.SendResultsStart(), cada vez queenviemos un registro personalizado llamaremos aSqlPipe.SendResultsRow(), y cuando hayamos termi-nado de procesar todos los registros ejecutaremosSqlPipe.SendResultsEnd(). Vea el fuente 2, que con-tiene el código necesario.

Los datos obtenidos al ejecutar el anterior proce-dimiento los podemos ver en la figura 6.

Desarrollo de un tipo definido por elusuario MDBO

A continuación vamos a abordar una característi-ca, que si bien ya se encuentra presente en T-SQL, seve potenciada gracias a la integración del CLR; nosreferimos a la creación de tipos de datos propios (UserDefined Type) para SQL Server, usando código admi-nistrado.

dotN

etM

anía

<<

28

dnm.servidores.sql<<

Todo proyecto VS de SQL Server se encuentraligado a una base de datos sobre la que se desplegará el ensamblado resultante

Figura 6

TituloCortesia NombreEmpleado-------------- --------------Señorita Nancy DavolioDoctor Andrew FullerSeñorita Janet LeverlingSeñora Margaret PeacocSeñor Steven BuchananSeñor Michael SuyamaSeñor Robert KingSeñorita Laura CallahanSeñorita Anne Dodsworth

Page 29: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Los tipos de usuario MDBO nospermiten extender los tipos de datosnativos de SQL Server, y entre suscaracterísticas podemos destacar lassiguientes:

• Se deben codificar como una claseo estructura.

• Permiten la creación de tipos de datoscomplejos sin la necesidad de estarbasados en un tipo nativo de SQL

Server; en este sentido aportan mayorflexibilidad que los tipos de usuariotradicionales de T-SQL.

• En función de lo expresado en elanterior punto, estos tipos se eje-cutan, manipulan y almacenancomo objetos reales, lo cual permi-te al código cliente que los utiliza,llamar a sus métodos y manipularsus propiedades.

Pedido,un nuevo tipo de datospara SQL Server

Partiendo de las anteriores premi-sas, nuestro siguiente ejemplo va a con-sistir en realizar el desarrollo de Pedido,un nuevo tipo de dato MDBO. Este tipoestará basado en el supuesto de unaempresa de transportes, que distribuyepedidos de material a diversos puntosdel país. Por cada pedido necesita regis-trar la descripción del material, y la dis-tancia recorrida en kilómetros hasta elpunto de destino, para poder calcular,en base a una tarifa de desplazamientos,el importe a facturar al cliente por elenvío del pedido.

En primer lugar, crearemos enVisual Studio un nuevo proyecto detipo SQL Server Project, con el nom-bre TiposUsr. Acto seguido tendremosque establecer la referencia con la basede datos asociada al proyecto; comoya creamos una conexión haciaNorthwind en el anterior proyecto,Visual Studio nos ofrece una caja dediálogo con las bases de datos dispo-nibles. En nuestro caso volveremos aelegir la misma, aunque siempre pode-mos pulsar el botón “Add Reference”,y abrir la ventana de selección paraestablecer referencia con base de datosdiferente. Ver la figura 7.

A continuación, agregaremos al pro-yecto un elemento de tipo “User-Defined Type” al que llamaremosPedido. El entorno de desarrollo crearáentonces una clase con ese mismo nom-bre y el esqueleto básico de la misma, a

dotN

etM

anía

<<

29

dnm.servidores.sql<<

Partial Public Class StoredProcedures<SqlProcedure()> _Public Shared Sub spEmpleadosFormato ()

Dim oCommand As SqlCommandDim oDataReader As SqlDataReaderDim oPipe As SqlPipeDim aMetadatos(1) As SqlMetaDataDim oRegistro As SqlDataRecordDim sTitCortesia As StringDim sNombre As String

' crear comando, ejecutarlo y obtener DataReaderoCommand = SqlContext.GetCommand()oCommand.CommandType = CommandType.TextoCommand.CommandText = "SELECT TitleOfCourtesy, FirstName, LastName " & _

"FROM Employees"oDataReader = oCommand.ExecuteReader()

' definir metadatos y registro para devolver datos resultantesaMetadatos(0) = New SqlMetaData("TituloCortesia", SqlDbType.NVarChar, 15)aMetadatos(1) = New SqlMetaData("NombreEmpleado", SqlDbType.NVarChar, 40)oRegistro = New SqlDataRecord(aMetadatos)

oPipe = SqlContext.GetPipe()

' indicamos que va a comenzar el envío de resultadosoPipe.SendResultsStart(oRegistro, False)While oDataReader.Read()

' obtener valores de campos y modificarlossTitCortesia = oDataReader.GetString(0)Select Case sTitCortesia

Case "Ms."sTitCortesia = "Señorita"

Case "Dr."sTitCortesia = "Doctor"

Case "Mrs."sTitCortesia = "Señora"

Case "Mr."sTitCortesia = "Señor"

End Select

sNombre = oDataReader.GetString(1) & " " & oDataReader.GetString(2)

' pasar valores modificados a registrooRegistro.SetString(0, sTitCortesia)oRegistro.SetString(1, sNombre)

' enviar registro al clienteoPipe.SendResultsRow(oRegistro)

End While' aquí termina el envío de resultadosoPipe.SendResultsEnd()

End SubEnd Class

Fuente 2

Figura 7

Page 30: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

la que deberemos añadir nuestro pro-pio código para completar su funciona-lidad. El código al completo podemosverlo en el fuente 3.

De todo el código necesario paracrear el tipo Pedido destacaremos lossiguientes aspectos:

• Aplicamos a nivel de clase los atribu-tos Serializabley SqlUserDefinedType,para controlar el modo de serializacióndel tipo.

• Implementamos el interfaz INullable,y por consiguiente, las propiedadesIsNull y Null, para que la clase dis-ponga de la capacidad de manejarvalores nulos.

• Al igual que las clases nativas de laplataforma .NET soportan la con-versión a/desde cadenas, en nues-tra clase creamos los métodosToString() y Parse(), en los quedesarrollamos la lógica necesariapara disponer también de estacaracterística.

Finalizada la escritura de esta cla-se, la compilaremos e instalaremos enSQL Server. Para trabajar con estenuevo tipo de dato, iniciaremos SQLServer Management Studio y nossituaremos sobre la base de datosNorthwind; seguidamente abriremosuna nueva ventana de consultas, en laque ejecutaremos las instruccionesmostradas en el fuente 4.

Observe el lector que en los ejem-plos del anterior código, al declararuna variable de tipo Pedido, el accesoa sus miembros se realiza usando lasintaxis habitual del operador punto(.), con excepción del métodoParse(), para el que utilizamos el ope-rador dos puntos (::). Esto se debe aque Parse() es un método calificadocomo Shared, y dadas las característi-cas de este tipo de métodos, tendre-mos que emplear el mencionado ope-rador cuando los invoquemos desdeSQL Server.

Siguiendo con el método Parse(),dado que es posible que la cadena quele pasamos como parámetro no tengael formato esperado, por ejemplo:Pedido::Parse('Grabadoras DVD-abc-

65'), creamos una excepción con unmensaje personalizado, de forma quecuando se produzca un error por este

dotN

etM

anía

<<

30

dnm.servidores.sql<<

<Serializable()> _<SqlUserDefinedType(Format.SerializedDataWithMetadata, MaxByteSize:=512)> _Public Class Pedido

Implements INullablePrivate bIsNull As BooleanPrivate sDescripcion As StringPrivate nDistancia As IntegerPrivate nTarifa As Integer

Public Property Descripcion() As StringGet

Return sDescripcionEnd GetSet(ByVal value As String)

sDescripcion = valueEnd Set

End Property

Public Property Distancia() As IntegerGet

Return nDistanciaEnd GetSet(ByVal value As Integer)

nDistancia = valueEnd Set

End Property

Public Property Tarifa() As IntegerGet

Return nTarifaEnd GetSet(ByVal value As Integer)

nTarifa = valueEnd Set

End Property

Public ReadOnly Property IsNull() As Boolean Implements INullable.IsNullGet

Return bIsNullEnd Get

End Property

Public Shared ReadOnly Property Null() As PedidoGet

Dim oPedido As Pedido = New Pedido()Return oPedido

End GetEnd Property

Public Overrides Function ToString() As StringDim sResultado As StringIf Me.IsNull Then

sResultado = "NULL"Else

sResultado = sDescripcion & "-" & CType(nDistancia, String) & "-" & _CType(nTarifa, String)

End If

Return sResultadoEnd Function

Public Shared Function Parse(ByVal s As SqlString) As PedidoDim oPedido As PedidoDim aElementos() As StringTry

If s.IsNull ThenReturn Pedido.Null

ElseoPedido = New Pedido()aElementos = s.ToString().Split("-"c)

Fuente 3 (sigue...)

Page 31: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

motivo, podamos identificarlo ade-cuadamente. Ver la figura 8.

Por último, cuando utilizamos Pedidocomo campo de una tabla, dado que setrata de un tipo complejo, una consultadel estilo "SELECT * FROM MisPedidos"daría error, por lo que hemos de ser másprecisos, indicando a qué propiedad ométodo del objeto contenido en el cam-po queremos acceder, mediante la sinta-xis NombreCampo.Miembro.

Algunas reflexiones sobre laintegración del CLR comoconclusión

A lo largo del presente artículo hemosrepasado algunos de los principales aspec-tos de la integración del CLR en el nue-vo SQL Server 2005. Ahora bien, el con-junto de características aquí expuestas, nose traducen en que esta nueva funcionali-dad de SQL Server sea el remedio quevaya a solucionar todos nuestros proble-

mas de diseño y rendimientoa la hora de desarrollar apli-caciones de gestión de datos.

La integración del CLRes una excelente característi-ca que mejora enormementeel gestor de datos, peroTransact-SQL sigue existien-do, y ambos elementos ocu-pan un sitio necesario en SQLServer; en ningún momentose pretende que la posibilidadde escribir código adminis-trado en una base de datos seasu sustituto.

A la hora de plantear eluso de una u otra caracte-rística, debemos sopesar lasventajas e inconvenientes decada una dentro del escena-rio de ejecución bajo el cualvan a trabajar, y elegir la queproporcione un rendimien-to más eficaz.

Dentro del modelo dedesarrollo basado en n-capas,la integración del CLR difu-mina el límite existente entrela capa de datos y la capa delógica de negocio, ya que ahorapodemos integrar, si así lo queremos, unagran parte de la lógica de proceso en elinterior del almacén de datos.

Cuanto más código de negocio tras-lademos a la capa de datos, dicho códigotendrá un acceso más veloz a los datos, lo

cual quiere decir que se mejorará la velo-cidad de proceso de nuestro código. Noobstante, esto puede ser un arma de doblefilo, ya que situar demasiado código en lacapa de datos, puede penalizar seriamen-te el rendimiento y las posibilidades deextensibilidad de nuestro diseño.

Por todo ello, debemos hacer un usoracional de la integración, realizando unanálisis de nuestros requerimientos, yaplicándola en aquellas situaciones queresulte conveniente.

dotN

etM

anía

<<

31

dnm.servidores.sql<<

/* crear objeto de tipo Pedido, asignar valoresy llamar a sus métodos */DECLARE @oP PedidoSET @oP.Descripcion = 'Tarjetas Sintonizadoras TV'SET @oP.Distancia = 214SET @oP.Tarifa = 87SELECT @oP.ImporteFacturar()SELECT @oP.ToString()

/* crear objeto a partir de una cadena medianteel método compartido Parse */DECLARE @oP PedidoSET @oP = Pedido::Parse('Grabadoras DVD-384-65')SELECT @oP.Descripcion AS DESCRIPCION,@oP.Distancia AS DISTANCIA,@oP.Tarifa AS TARIFA,@oP.ImporteFacturar() AS IMPORTE

/* crear tabla con un campo de tipo Pedido y añadir filas, hemos de utilizar una variable del mismo tipo para almacenar los valores a insertar en dicho campo*/CREATE TABLE MisPedidos (IDPedido int NOT NULL,DatoPedido Pedido NULL)

DECLARE @oPedido Pedido

SET @oPedido.Descripcion = 'Monitores TFT 17'SET @oPedido.Distancia = 125SET @oPedido.Tarifa = 6INSERT INTO MisPedidos VALUES (1,@oPedido)

SET @oPedido.Descripcion = 'Micros P.III'SET @oPedido.Distancia = 95SET @oPedido.Tarifa = 4INSERT INTO MisPedidos VALUES (2,@oPedido)

/* consulta simple contra la tabla */SELECT IDPedido,DatoPedido.Descripcion AS DESCRIPCION,DatoPedido.Distancia AS DISTANCIA,DatoPedido.Tarifa AS TARIFA,DatoPedido.ImporteFacturar() AS IMPORTEFROM MisPedidos

/* obtener el campo Pedido de una de las filas de la tabla y llamar a un método del tipo */DECLARE @oPed Pedido

SELECT @oPed = DatoPedidoFROM MisPedidosWHERE IDPedido = 1

SELECT @oPed.ImporteFacturar() AS RESULTADO

Fuente 4

oPedido.sDescripcion = aElementos(0)oPedido.nDistancia = CType(aElementos(1), Integer)oPedido.nTarifa = CType(aElementos(2), Integer)Return oPedido

End IfCatch ex As Exception

Throw New Exception("Error al convertir")End Try

End Function

Public Function ImporteFacturar() As IntegerDim nResultado As IntegernResultado = nDistancia * nTarifaReturn nResultado

End FunctionEnd Class

(...continuación) Fuente 3

Figura 8

La clase SqlPipe dispone del méto-do Send(), que permite devolver

resultados de distinto tipo al cliente

Page 32: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Entrevista a César Galindo-Legaria

César Galindo-Legaria es el responsable de la Optimización de Consultas, del grupode Relational Engine en el equipo de desarrollo de SQL Server 2005 en Microsoft Corp.Tuvimos la ocasión de charlar con él con ocasión de su visita a España como ponentedel SQLU Summit celebrado recientemente en Madrid.

es un producto muy grande y además hantranscurrido 5 años desde la versión anterior. ¿Cuál estu papel en el equipo de desarrollo de SQL-Server 2005?

SQL Server es un producto grande y es un equi-po grande, en total trabajamos como unas 800 perso-nas. Tiene muchos componentes diferentes: hay com-ponentes de OLAP, de Data Transformation, herra-mientas, interfaces de usuario... Yo trabajo en el gru-po Relational Engine, que es de procesamiento básicode consultas SQL y almacenamiento de datos. Dentrode este grupo, yo soy el manager de optimización deconsultas del usuario.

O sea, que esos planes de ejecución que vemoscuando montamos una query…

Sí, esos son los que mi equipo genera. Y perso-nalmente he trabajado en ese grupo de desarrollo

durante 10 años, desde antes de la versión de SQLServer 7.0.

Luego siempre has estado vinculado al área dedatos y consultas…

Sí, datos, consultas, planes de ejecución eficien-te…, etc.

¿Cómo es que el producto ha sufrido tantos retra-sos (si es que los ha sufrido de verdad)? ¿O han sido másbien cambios de dirección en la política o el contenidodel producto? Cinco años parece mucho tiempo…

Cinco años es muchísimo tiempo. Hubo varioselementos ahí: Uno son los retrasos. Nosotros habí-amos planeado para 3 años, pero los planes no se ajus-taron a la realidad; Otro son los imprevistos, por ejem-plo, algunos problemas de seguridad con SQL Server2000, en el que hubo que efectuar revisiones de segu-

Marino Posadas

dnm.directo.entrevistas

Marino Posadas esasesor técnico y

redactor dedotNetManía, MVP de

C# y formador deAlhambra-Eidos

<< SQL Server 2005

César Galindo-Legaria

Page 33: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

ridad, comprobaciones de código, agre-gar características nuevas, etc.

O sea, que a vosotros os afectó aquelfamoso parón de dos o tres meses quehubo cuando todos os tuvisteis que estu-diar el “Writing Secure Code” deHoward y LeBlanc?

Efectivamente (risas)… y ahí hubopersonas y equipos de desarrollo que yaestaban preocupadas desde hacía un añode que esto podía pasar y estuvimos vien-do qué podíamos hacer, cómo respon-der, qué cambios hay que hacer en el pro-ceso de desarrollo, y demás. Después vinoel virus slammer y eso supuso incluso lanecesidad de hacer cambios en el desa-rrollo de SQL Server 2000, cambios paralos service packs…

Asentemos primero lo que ya está enproducción con los service pack y luego yaseguiremos con los nuevos desarrollos…

Eso es; y luego hay una tercera parte:es la integración tan cercana con el CLRy con Whidbey y el hecho de que estába-mos tomando una dependencia de unatecnología que estaba todavía desarro-llándose. Esa parte ha sido difícil de mane-jar para los dos lados, porque teníamosuna dependencia mutua. Coordinar laentrega de código y de betas… No pen-sábamos que fuese a ser tan complicadacomo ha resultado. Pero lo que tenemosclaro es que después de SQL Server 2005viene SQL Server 2007, estamos hacien-do los ajustes necesarios para que esto seaasí. Ahí aprendimos varias lecciones prác-ticas sobre cómo abordar estos problemas.

¿Quizá porque la salida de LonghornServer se espera para 2007? No olvide-mos que se trata de una versión de ser-vidor y su integración con otros servi-dores es fundamental…

El calendario de release de los otrosservidores es importante, pero estamostomando una actitud conservadora res-pecto a tomar dependencias mutuas conrespecto a tecnologías que no estén yahechas. Así que quizá sea bueno que sal-gan más o menos en la misma fecha peroque no haya dependencia entre los dos.Que cualquier dependencia sea con tec-nología que ya esté ciclo de producción.

A propósito de ciclos de producción,la creciente popularización de MSFcomo marco de trabajo para controlarel ciclo de vida de las aplicaciones, y suinclusión como parte del MOC(Microsoft Official Curriculum), ha gene-rado más de una vez preguntas acercade la utilización que de éste marco hace

la propia Microsoft. ¿Vosotros seguís lasnormas establecidas por MSF?

No. En los grupos más grandes dedesarrollo en Microsoft (Windows, Officey SQL-Server), estamos tomando tiem-po y analizando activamente los procesosque necesitamos seguir para que la cons-trucción del software sea más predecible,en cuanto a tiempos, calidad y defectos. Ytambién que el producto mismo sea másrobusto. Para ello existen comités de tipogeneral y grupos de trabajo más locales,llamados engineer excellence, que estudianqué es lo que ha fallado, qué es lo que hafuncionado y qué ajustes se pueden hacer.Después hacen reuniones de consolida-ción para extraer pautas a seguir por todoslos grupos en general y ver las diferenciasoperativas de cada grupo.

De hecho, en el último año de desa-rrollo con Yukon, hemos estado usan-do algunas de las conclusiones a las quese han llegado, y en la transición entreYukon y la siguiente versión, utilizare-mos plenamente todas estas propuestas.

Es imperativo que la programación sevea como una forma más de ingenieríaen la que existen normativas bien clarasy establecidas de cómo deben de hacer-se las cosas.

He leído que los retrasos deLonghorn eran debidos a los retrasosde SQL Server ¿Esto es cierto?

Paco Marín: O al revés, yo he leí-do que Longhorn se estaba retrasandopor el retraso de WinFS y éste por el deSQL Server 2005 y por eso, incluso sedijo que la primera versión de Longhornsaldría sin WinFS ¿Es cierta alguna delas dos afirmaciones?

Dependiendo de a quien le pregun-téis yo creo que obtendréis diferentes ver-siones, echándose la culpa unos a otros.

...lo que tenemos claro es que después de SQL Server 2005viene SQL Server 2007, estamos haciendo los ajustes

necesarios para que esto sea así

dotN

etM

anía

<<

33

dnm.directo.entrevistas<<

César Galindo-Legaria y Marino Posadas

Page 34: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Lo que sí es objetivo es que varias partesde Longhorn tenían dependencia nues-tra; la misma dependencia estrecha queteníamos nosotros con Whidbey. Son gru-pos grandes, de tecnologías complejas, yhacer que la tecnología funcione bienentre sí iba a llevar esfuerzos y en ciertomomento hubo que cambiar los planesahí… Hay cuestiones básicas a conside-rar, como cuáles con los servicios de unsistema operativo que pueden dependerde código administrado y cuáles no, y todoello ha conllevado retrasos porque se tra-ta de una tecnología muy novedosa y muyinterrelacionada.

En 2001, hablando con TonyGoodhew sobre las BB.DD. orientadasa objetos, él mencionaba que la tecnolo-gía no parecía interesante en ese momen-to. Tres años más tarde, Andrew Conrad,del equipo de desarrollo de Object Spaces,indicaba justamente lo contrario. ¿Cómoestá la situación en este momento?

Pues puede decirse que hay unmovimiento a favor de esta última línea.Una de las motivaciones de eso es subirel nivel de abstracción de forma quepermita la gestión de datos de manerasencilla, más rápida, etc. Pero sí es unatecnología que tendrá el impactocomercial que algunos piensan, sólo eltiempo podrá decirlo. Es un área impor-tante para SQL Server, aunque no estémuy claro en este momento la formaque vaya a tomar como producto defi-nitivo. Hace 10 años estaba ObjectStore, y otras que no llegaron a cuajar,quizá por el estado de la tecnología enese momento.

Paco Marín: ¿Es cierto que la deci-sión sobre la integración de SQL Server

con el CLR está tomada desde el año 1999¡antes que saliera SQL Server 2000!?

No sé exactamente la fecha, pero escierto que esto estaba presente desde elprincipio de la planificación de Yukon.Lo que ha pasado es que ha supuestomás esfuerzo de lo previsto.

WinFS es un sistema de almacena-miento para Longhorn. Las tecnologí-as del nuevo sistema parecen estar tanclaras, que hemos visto como dos de susAPI principales (Avalon e Indigo), van apoder intalarse “hacia atrás”, enWindows XP y Windows 2003 y ya exis-ten versiones beta que lo permiten, perono hemos oido nada de la posibilidad dehacer lo mismo con WinFS. ¿Sabes porqué es esto?

Pues no sé realmente el caminoque esto va a seguir. En realidadWinFS y SQL Server son caminosindependientes. SQL Server está basa-do en un modelo relacional mientrasque WinFs tiene componentes queestán mucho más arriba, y es mejor

seguir considerándolos como inde-pendientes.

¿Tú crees que la curva de aprendi-zaje para SQL Server 2005 va a ser para“tener que ponerse las pilas”?

Hay nuevas características del pro-ducto que van a requerir bastante tra-bajo. Una de ellas será la integracióncon el CLR, otra será integración acti-va de XML, y probablemente algunasotras más pequeñas, pero estas dos sonlas más grandes, desde el punto del vis-ta del engine. Luego, Reporting Servicesy otras herramientas han cambiado yotras son nuevas, pero desde mi puntode vista, del engine, los cambios mayo-res son los citados.

¿Y crees que el gran público utiliza-rá desde el principio los editores deBusiness Intelligence, que hemos podidover en la Beta 2?

Ahí lo que no estoy seguro es cuálesson los modelos que los usuarios ya tie-nen y esperan incorporar con más facili-dad a sus sistemas. Y qué tanto corres-ponde a las nuevas interfaces y herra-mientas y qué parte es heredada de siste-mas anteriores. Ahí veo yo la dependen-cia. Respecto a Reporting Services, sinembargo, el asunto estaba claro.

¿Crees que la integración de XMLrealmente es muy importante para elpúblico? y, ahora que sé a qué te dedi-cas, la existencia de un nuevo tipo dedatos os tiene que haber afectado bas-tante en vuestro trabajo ¿no?

La implementación de la integra-ción de XML llevó bastante tiempo y apesar de ser una primera versión fun-ciona bastante bien. Es muy claro quecomo formato de intercambio de datos

dotN

etM

anía

<<

34

dnm.directo.entrevistas<<

...varias partes de Longhorn tenían dependencia nuestra;la misma dependencia estrecha que teníamos

nosotros con Whidbey. Son grupos grandes, de tecnologías complejas, y hacer que la tecnología

funcione bien entre sí iba a llevar esfuerzos y en ciertomomento hubo que cambiar los planes ahí…

Page 35: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

1 En la fecha de impresión de este número, ya sabemos que la fecha de lanzamiento será el 7 de noviembre de 2005.2 En el artículo de Eladio Rincón "Soporte XML en SQL Server 2005" puede leer acerca de comentarios de Michael Rys (Program Manager de XML en el equipo deSQL Server) sobre rendimiento en el pasado Tech-Ed 2005 de Orlando

3 Los nuevos datos de TPCH y TPCC ya comenzaron a salir y sí son buenos. En cuanto los tengamos, los publicaremos.

no hay duda que está ahí, tan claro comoque almacenar XML como un nuevotipo de datos y servirlo desde ahí era unanecesidad. La integración se refiere mása consultas y transformación de XMLdentro de la base de datos. Hay que vercómo se recibe comercialmente y cómose desarrolla, porque parte de la tecno-logía está ahí, tal vez no al 100% perosí lo suficiente para que se empiecen ahacer cosas. El rendimiento de las basesde datos relacionales se da cuando máso menos se entiende el hecho de quehaya regularidad en las estructuras.Cuando empezamos a manejar datosmenos estructurados y esquema abier-to y queremos buscar en cualquiera delos niveles…, todas estas operaciones síse pueden implementar y sí se puedenoptimizar, pero a mí me parece que lanaturaleza del esquema abierto tiene uncosto a la hora de la eficacia. Qué es loque va a pasar, a fin de cuentas, no estámuy claro para mí.

Por cierto, cómo se almacenará elXML, ¿en texto, en binario?

En binario, en un formato propio.De hecho otras bases de datos asocia-das a XML, como Tamino de SoftwareAG que almacenan en binario. Es unacuestión de rendimiento, asociada conel streaming1.

¿Se puede anticipar ya una fechade salida? ¿Y, sobre todo, están SQLServer o Visual Studio 2005 condi-cionados mutuamente de cara a suaparición oficial?

Ambos saldrán en los últimos mesesdel año2.

Siempre que sale un producto deeste tipo, Microsoft hace un gran esfuer-

zo por convencer a los usuarios poten-ciales de la necesidad y las ventajas dela migración. Desde un punto de vistano comercial, ¿cuáles serían esas venta-jas en tu opinión?

Yo creo que hay tres partes en estapregunta: Una es toda la funcionalidadnueva que hay en SQL Server y den-tro de esa funcionalidad nueva haycosas en OLAP, hay cosas en DataMining, hay cosas en el relational engi-ne como la integración con CLR yXML, hay database mirroring, haysnapshot… Hay muchas características

nuevas que creo que son valiosas parael desarrollo; otra, los cambios en SQLServer para un mejor soporte (ésta fueuna de las tareas donde invertimos bas-tante). Toda la información que haycuando algo va mal se guarda en unastablas virtuales, no necesariamente parael usuario final, pero sí para el inge-niero de soporte; y la tercera parte, elrendimiento y la escalabilidad.

Nosotros hace ya que no publicamosdatos mientras la competencia sí por-que según las normas no pueden publi-carse antes de 6 meses de anticipacióna la disponibilidad; en los próximosmeses publicaremos nuestros númerosy espero que sean buenos3.

Paco Marín. Lo cual quiere decirque aún quedan más de 6 meses paraque salga al mercado (la entrevista serealizó a finales de abril, por tanto, debíaser en noviembre o diciembre).

Bueno ahí, ahí estamos (risas).Paco Marín. ¿Las ediciones que se

entregarán a partir de ahora hasta lapuesta a la venta serán CTP o quedaalguna beta más?

No. La CTP 15 está planeada paraprincipios de junio y no habrá unaúltima CTP 16 como se esperaba, sinoque iremos directamente a la versiónRTM (Release To Manufacturing), quees la versión final a falta de todo lonecesario para ponerla a la venta). Apartir de la beta 2, las CTP están fun-cionando bastante bien.

Paco Marín. Existen rumores deque la CTP que tú llamas 14, la de abrilpara el público, llevará todas las fun-cionalidades y sólo queda depurar elcódigo en las siguientes releases. ¿Quéhay de cierto en esto?

Básicamente es así. Tal vez hayaalgunos ajustes pendientes, pero, encuanto a funcionalidad, la CTP de abrilya está completa.

dotN

etM

anía

<<

35

dnm.directo.entrevistas<<

La CTP 15 está planeada para principios de junio y no habrá una última CTP 16 como se esperaba, sino que iremos directamente a la versión RTM.A partir de la

beta 2, las CTP están funcionando bastante bien

Page 36: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Business Intelligence en SQL Server 2005

Vamos a echar un breve vistazo por todas las novedades que ha incorporadoSQL Server 2005 para el desarrollo de proyectos de Business Intelligence. Se hanproducido cambios sustanciales en los Servicios de Transformación de Datos (DTS)y en los Analysis Services (AS), y se han incorporado nuevas herramientas de desa-rrollo, basadas en Visual Studio .NET.

<< anterior nos encontrábamos con herra-mientas para el desarrollo de proyectos de BusinessIntelligence (BI), pero es en esta nueva versión (SQLServer 2005) cuando tenemos a nuestra disposiciónuna herramienta con gran cantidad de mejoras encada uno de los servicios que tenemos disponibles,en su funcionalidad, y en las nuevas herramientasde desarrollo.

Como todos sabemos se ha producido en esta ver-sión del producto un cambio sustancial; esto incluyetambién importantes cambios en los servicios y herra-mientas que nos ofrece para BI.

Estos son, básicamente, los componentes que nosproporciona SQL Server 2005 en ámbito del BI, yque trataremos en detalle más adelante:

• SQL Server Reporting Services (SSRS).• SQL Server Integration Services (SSIS).• SQL Server Analysis Services (SSAS).• Business Intelligence Development Studio (BIDS)

Algunos son nuevos, otros se han mejorado, otroshan sufrido grandes cambios, incluso los hay que hansido rediseñados en su totalidad y codificados de nue-vo. Vamos a ir presentando cada uno de ellos, indi-cando cuál es su equivalente en SQL Server 2000, ysu finalidad.

SQL Server Reporting ServicesComenzaremos con la herramienta que nos pro-

porciona para reporting empresarial, SQL ServerReporting Services, que aunque es una herramienta dis-ponible en SQL Server 2000 desde hace un tiempo,realmente se ha diseñado para la versión 2005, aun-

que debido a la gran aceptación que tuvo por parte delos usuarios, Microsoft decidió anticipar su salida,sacando una versión para SQL Server 2000 sin cos-tes de licencia adicionales.

Por el tema tratado en este artículo, no podemospasar por alto una herramienta como esta, que nos vaa permitir desplegar informes por toda nuestra orga-nización, ofreciéndonos posibilidades de integracióncon otros productos como Sharepoint, para la inclu-sión de informes en nuestra intranet.

Pero como ya se han publicado algunos artículossobre ella en esta revista, y los cambios que ha sufri-do han sido mínimos, debido a las razones antes cita-das, nos vamos a limitar a nombrarla sin más.

Como puede comprobar el lector en la interfazgráfica todo resulta muy familiar, si ya conoce la ver-sión anterior.

Salvador Ramos

dnm.servidores.sql

Ya en la versión

Salvador Ramoscolabora habitualmente con

dotNetManía. Es Microsoft SQLServer MVP y responsable del

sitio HelpDNA.net.Trabaja comodirector de informática de la red

de estaciones de servicio Andamur

Figura 1

Page 37: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

SQL Server Integration Services (SSIS)

SQL Server Integration Services (SSIS) es la herra-mienta ETL (Extract, Transformation and Loading) quenos proporciona el producto. Es la evolución de losServicios de Transformación de Datos (DTS). Esta nue-va herramienta ha sido rediseñada y desarrollada des-de cero, utilizando la plataforma .NET. Va a tener dis-ponible toda la funcionalidad que ya tenían los DTS,y va a incorporar gran cantidad de mejoras, aportan-do una buena cantidad de componentes para ETL yuna nueva interfaz para el desarrollo de proyectosmucho más completa, basada en .NET. También hasido mejorado su rendimiento y escalabilidad.

Como ya sabe el lector, para el almacenamiento yejecución de paquetes DTS, se utilizaba el propio ser-vicio de SQL Server; en la nueva versión, en cambio,hay un servicio totalmente independiente, que debeestar ejecutándose para poder almacenar y ejecutar lospaquetes.

Business Intelligence DevelopmentStudio

Para el diseño de paquetes, tenemos el BusinessIntelligence Development Studio, en el cual tenemos dife-rentes tipos de proyectos (reporting, análisis, y trans-formación –integración– de datos). Es importante des-tacar que en todos ellos dispondremos de un depura-dor, que tanto añoramos en la versión anterior, y quenos permitirá hacer un seguimiento exhaustivo de laejecución de nuestros proyectos.

Por supuesto también se han incluido diversos asis-tentes que nos facilitan las labores, siguiendo la líneade la versión anterior, y mejorando las posibilidadesque nos ofrecen.

Vamos a ver una primera imagen del nuevo entor-no de desarrollo que sustituye al anterior diseñadorde paquetes, el BIDS trabajando con un proyecto detransformación, –o, mejor dicho, ahora según el nom-

bre asignado en la última CTP, con un proyecto deintegración–, y comentar algunas de sus novedadesmás destacables.

Como puede comprobar el lector, el nuevo entor-no es muy diferente, no tiene nada que ver con eldiseñador de paquetes, incluido en el EnterpriseManager, que nos ofrecía la versión anterior. Una delas primeras diferencias destacables es que ya no estáorientado a diseñar un paquete, sino a soluciones yproyectos, y en éstos podremos incluir los paquetesque deseemos. Otra novedad destacable que nosencontramos es la separación entre el flujo de con-trol y el flujo de datos.

También puede apreciar que hay un montón denuevos elementos disponibles en el toolbox, tantopara el control de flujo de ejecución, como para elflujo de datos, y que éstos son componentes .NET.Ahora muchas de las tareas que antes implicaban undesarrollo basado en ActiveX o en una gran canti-dad de código en Transact-SQL se simplifican, redu-ciéndose a la inclusión del componente correspon-diente para dicho proceso y a la configuración desus propiedades.

dotN

etM

anía

<<

37

dnm.servidores.sql<<

Figura 2

Figura 3

Figura 4

Page 38: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Por último es conveniente indicar que hay unaherramienta para la migración de nuestros paquetesdesarrollados con SQL Server 2000 a la versión 2005,y que también dispone de la posibilidad de ejecutarpaquetes de dicha versión.

Analsysis Services (SSAS)Nos vamos a centrar a hora en los Analsysis Services

(SSAS), que nos proporcionan dos funcionalidadesbásicas: OLAP y Data Mining.

Antes de nada, es importante comentar que laherramienta de desarrollo también será el BusinessIntelligence Development Studio (BIDS), mucho máspotente para el desarrollo que el antiguo AnalysisManager, y que incluye un potente depurador descripts MDX. Allí podremos abrir un proyecto deAnalysis Services.

Ya centrándonos en el modelado, vamos a comen-tar algunas de las novedades de la versión 2005:

Tenemos los Data Source Views, que proveen unacapa de abstracción entre las bases de datos y loscubos, pudiendo contener tablas de diferentes DataSources, además de permitirnos trabajar de formadesconectada.

En cuanto a la construcción de los cubos tambiéntenemos notables mejoras, ya que tenemos un asis-tente llamado Intellicube que nos va a facilitar las tare-as y nos va a ir guiando paso a paso y haciéndonossugerencias.

El repositorio ha dejado de estar almacenado enuna base de datos Access (aunque podía migrarse auna base de datos de SQL Server) y ahora estosmetadatos se encuentran almacenados en XML.Otra característica destacable es que disponemos deherramientas para el despliegue de nuestros pro-yectos, cuando antes sólo teníamos mecanismoscomo el backup/restore de las bases de datos multi-dimensionales.

Otra novedad muy destacable en cuanto a la arqui-tectura es que ya no va a existir la diferencia actualen cuanto a fuentes de datos. Gracias al UnifiedDimensional Model (UDM) que combina las mejorescaracterísticas de los modelos de datos relacional ymultidimensional, ofreciendo grandes ventajas a lasaplicaciones analíticas.

Como puede apreciar el lector, hay una gran can-tidad de cambios, que harían que este artículo seextendiese mucho más. Pero hay que ceñirse a cier-tas limitaciones, por lo que no voy a seguir descri-biendo otras muchas mejoras, que siguen siendo muyimportantes y a su vez interesantes de conocer, porlo que dejaré esta tarea en manos del lector, y me voya limitar simplemente a citarlas: Proactive caching, Key

Performance Indicators (KPI) framework, translations,MDX scripts, XMLA (XML for Analysis), nuevos tiposde dimensiones, posibilidad de que un cubo conten-ga varias tablas de hechos, mejoras en la seguridad,en el lenguaje MDX, en rendimiento, en escalabili-dad, y un largo etcétera...

Como muestra valga esta pantalla, donde el lec-tor puede comprobar los grandes cambios que se hanproducido en el entorno de desarrollo, y quedan pal-pables algunas de las novedades citadas anteriormente.

Con respecto a las novedades en Data Mining,voy a citar las dos más destacables:

Disponemos de nuevos algoritmos de minería dedatos, pasando de dos que había en la versión 2000 aocho en esta nueva versión.

Disponemos de un potente lenguaje DMX (nolo debe confundir el lector con el lenguaje MDXcitado anteriormente), que nos va a facilitar lastareas típicas de creación de modelos de mineríade datos, entrenamiento y predicciones sobre elmodelo.

ConclusiónNos encontramos ante una nueva versión de

SQL Server, donde se han producido una gran can-tidad de cambios muy importantes, aún así, me atre-vería a decir, que en lo que respecta a BusinessIntelligence, ha sido una de las partes que más ha evo-lucionado el producto, incluyendo unos servicioscon una seguridad, disponibilidad, funcionalidad yescalabilidad muy superior, y unas nuevas herra-mientas para el desarrollo de proyectos mucho máspotentes y productivas.

dotN

etM

anía

<<

38

dnm.servidores.sql<<

Figura 5

Todas las pantallas mostradas en este artículo pertenecen a la Beta 2 de SQL Server 2005. Entre los cambios en la última CTPquiero destacar que ya no aparece nada referente a Data Transformation Services, sino que aparece como Integration Services,quees el nuevo nombre que le han asignado a este servicio.

Page 39: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento
Page 40: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Soporte XML en SQL Server 2005

SQL Server 2005 incorpora novedades en el soporte XML desde el lado del cliente(ADO.NET 2.0) y desde el lado del servidor (FOR XML, tipo de datos nativo,OPENXML). En este artículo veremos las posibilidades XML que tenemos en SQLServer 2000 y presentaremos las novedades en SQL Server 2005.

<<Antes de ver las novedades que aporta SQL Server

2005, debemos conocer cuales son las posibilidades enSQL Server 2000. SQL Server 2000 aporta funcionali-dades XML divididas en dos grupos: posibilidad de repre-sentar datos relacionales en formato XML y la posibili-dad de representar datos XML en formato relacional.

El soporte XML actual en SQL Server 2000 ofre-ce un “puente” entre el mundo relacional y el mun-do XML; los datos se almacenan en formato relacio-nal, y tenemos la posibilidad de representar/modifi-car en formato XML.

Representación de datos relacionales enformato XML

Para representar datos relacionales en formatoXML debemos añadir a la sentencia T-SQL la cláu-sula FOR XML. Ésta debe usarse con uno de los siguien-tes sufijos:

• RAW: Devuelve cada fila del resultado como ele-mento XML.

• AUTO: Devuelve cada tabla de la consulta comoelementos independientes.

• EXPLICIT. Permite personalizar de manera explí-cita el formato del XML resultante.

No es el propósito de este artículo analizar cada unode los métodos, pero debemos quedarnos con la idea deque dada una sentencia T-SQL que devuelve datos enformato tabular, la cláusula FOR XML convierte el resulta-do en formato XML; tradicionalmente se devuelve unXML a una aplicación cliente, y ésta, con hojas de esti-lo y/o validando el XML contra un esquema (XSD), pre-

senta los datos y/o realiza modificaciones en el XMLusando XPath y/o API específicas para manipular XML.

Usando FOR XML es importante el orden de lascolumnas que aparecen en la SELECT y el orden de lascolumnas en la ordenación; como ejercicio podéiscambiar el orden de las columnas y veréis cuán dife-rente es el XML resultante.

Representación de datos XML en forma-to relacional

El caso contrario es: dado un XML, convertirlo enformato relacional para poder “trabajarlo” con T-SQL.La aplicación cliente ha hecho ciertas modificaciones enel XML recibido (creado, por ejemplo, con FOR XML), yahora hay que reflejar los cambios del XML en la basede datos. Para ello tenemos la función OPENXML que par-tiendo de una cadena de caracteres que representa unXML, lo convierte en formato tabular. Una vez con-vertido el XML a formato tabular, podemos operar con

Eladio Rincón

dnm.servidores.sql

Soporte XML en SQL Server 2000

Eladio RincónEs colaborador habitual de

dotNetManía. Es MVP en SQLServer y uno de los fundadoresdel grupo de usuarios de SQL

Server en España GUSE.Eladioes mentor asociado de Solid

Quality Learning

SQL Server 2005 aporta el nuevo tipo dedatos XML. Éste nuevo tipo de datos pue-de formar parte de columnas de una tabla,ser una variable, o incluso ser argumento

de un procedimiento almacenado

Page 41: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

el resultado utilizando tablas derivadas, joins, etc. Parausar la función OPENXMLnecesitaremos hacer uso del pro-cedimiento almacenado de sistema sp_xml_preparedocu-ment que hace uso del parser MSXML para representaren memoria una cadena. Una vez en memoria, la cade-na es usada por OPENXML; después de usar OPENXML habráque quitar de memoria la referencia al XML consp_xml_removedocument.

Mejoras de funcionalidades XML existen-tes en SQL Server 2000 en 2005

Las mejoras en FOR XML vienen enfocadas princi-palmente en facilitar la compleja tarea de “personali-zación” los XML generados con FOR XML EXPLICIT.Algunas de las mejoras son las siguientes:

• Posibilidad de definir el elemento raíz del docu-mento XML.

• Crear consultas FOR XML como tablas derivadas…del orden SELECT columna1, (SELECT … FOR XMLAUTO), columna2 … FOR XML, eliminando parte dela complejidad que suponía el uso de FOR XMLEXPLICIT.

• Soporte para columnas nulas con la palabra claveXSINIL. Actualmente si un atributo es nulo, no semuestra el atributo.

• Convertir el resultado de FOR XML a tipo de datosXML nativo de manera que el resultado pueda sermodificado/formateado con consultas XQuery;para ello usaremos la opción TYPE. Más adelanteveremos ejemplos de las funcionalidades que apor-ta XQuery.

• Modo PATH. Quizás la mejor novedad. Permite uti-lizar el formato X-Path para poder indicar la estruc-tura del resultado. Mirad el ejemplo siguiente:

Resultado:

Fijaros cómo se definen en las columnas de la sen-tencia SELECT los elementos (o atributos) necesariospara definir la estructura del documento XML hacien-do uso de extensiones X-Path.

XML nativo en SQL Server 2005

SQL Server 2005 aporta el nuevo tipo de datos XML.Éste nuevo tipo de datos puede formar parte de colum-nas de una tabla, ser una variable, o incluso ser argu-mento de un procedimiento almacenado. Como prime-ra apreciación, debemos quitarnos la idea de que por elhecho de que el XML se represente como una cadenade caracteres, internamente vaya ser guardado como unacopia exacta del documento XML; SQL Server 2005 loguardará internamente en formato binario (ver entre-vista a César Galindo, del equipo de desarrollo de SQLServer 2005 en este mismo número), siendo su accesomás efectivo y teniendo la posibilidad de definir la estruc-tura de los datos de manera más eficiente; como ejerci-cio proponemos jugar con los comandos DBCC para verla estructura interna de una columna de tipo XML.

El tipo de datos XML puede tener como argu-mento la referencia a un esquema XML. Digamosque podemos obligar a que una columna (variable,argumento, ...), esté validada contra un esquemaXML, o por el contrario definirlo “limpio” (sin vali-dar contra ningún esquema XML). Aunque no seavalidado contra un esquema, el dato deberá estar bienformado (well formed, http://www.w3.org/TR/REC-xml/#sec-well-formed). Como ejemplo, vamos a cre-ar una tabla que contenga dos columnas XML unade ellas validada contra un esquema XML. Para ello,primero usaremos la sentencia CREATE XML SCHEMAque define el esquema de un documento XML quese ajusta al siguiente formato:

En la definición del esquema XML definimos lasetiquetas XML necesarias en el documento, el tipo dedatos soportado e incluso el número de ocurrenciasque debe tener:

dotN

etM

anía

<<

41

dnm.servidores.sql<<

SELECT'Articulo XML' AS 'NombreArticulo','20050510' AS 'Fecha/Revision',CAST ('20050620' AS SMALLDATETIME)AS 'Fecha/Publicacion','Eladio' AS 'Autor/@Nombre','Rincon' AS 'Autor/@Apellido'FOR XML PATH ('Articulo')

<Articulo><NombreArticulo>Articulo XML</NombreArticulo><Fecha>

<Revision>20050510</Revision><Publicacion>2005-06-20T00:00:00</Publicacion>

</Fecha><Autor Nombre="Eladio" Apellido="Rincon" />

</Articulo>

'<articulo><nombre>…</nombre><autor>…</autor></articulo>'

CREATE XML SCHEMA COLLECTION schema1ASN'<?xml version="1.0" ?>

<xsd:schematargetNamespace="http://schemas.mi_base.com/schema1"xmlns="http://schemas. mi_base.com/schema1" elementFormDefault="qualified"attributeFormDefault="unqualified"xmlns:xsd="http://www.w3.org/2001/XMLSchema" ><xsd:element name="articulo">

<xsd:complexType><xsd:sequence>

<xsd:element name="nombre" type="xsd:string" minOccurs="1" maxOccurs="1"/>

<xsd:element name="autor" type="xsd:string" minOccurs="1" maxOccurs="1"/>

</xsd:sequence></xsd:complexType>

</xsd:element></xsd:schema>'

Page 42: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Y a continuación crearemos una tabla con los dostipos de datos XML:

Donde la columna v1 será validada contra el esque-ma XML schema1, y la columna v2 no será validada. Acontinuación insertaremos algunas filas:

Fijaros que para la columna v1, hemos definido enel dato XML el esquema contra el que será validado(xmlsn="http://schemas.mi_base.com/schema1").

En caso de que el dato XML no defina cuál es elesquema contra el que se valide, o no cumpla las res-tricciones del esquema, la operación generará una excep-ción y no se insertaría la fila en la tabla. Al igual que lasrestricciones que se definen con las columnas de unatabla (check, foreign key, primary key, unique y not null) ayu-dan al optimizador de consultas a conocer la mejor mane-ra de la distribución de los datos de una tabla, obligar aque una columna XML se ciña a un esquema XML, tam-bién ayuda al optimizador en el momento de generarplanes de ejecución para consultas sobre el dato XML(consultas XQuery).

Indexación de columnas XMLAl igual que las columnas “tradicionales” se pue-

den indexar, las columnas XML también se puedenindexar; las columnas XML pueden tener dos tiposde índices: primario y secundario. Por diseño, un índi-ce secundario no puede existir si no hay un índice pri-mario porque el método de indexación del índicesecundario se basa en el índice primario; a su vez, unacolumna XML no se podrá indexar si la clave prima-

ria no es un índice agrupado (clustered). Para crear elíndice XML añadiremos a la tabla creada una colum-na integer que será clave primaria, y después creare-mos el índice XML:

Una vez creado el índice XML primario, podre-mos crear índices XML secundarios. Aquí tendremostres tipos de índices XML secundarios:

• PATH: Beneficiará consultas XQuery que usanXPATH, por ejemplo, /articulo[autor=" JoséAntonio"].

• PROPERTY: Cuando se accede a propiedades del pri-mer elemento de un nodo XML, por ejemplo,/articulo/@fechaPublicacion.

• VALUE: Cuando la consulta XQuery hace referenciaa cualquier elemento del nodo, por ejemplo,//autor="José Antonio". Este caso devolvería todoslos elementos cuyo autor sea José Antonio, inde-pendientemente de que sea hijo de artículo u otroelemento.

Según comentarios de Michael Rys (ProgramManager de XML en el equipo de SQL Server) en sussesiones de Tech-Ed Orlando 2005, dependiendo de lostipos de consultas XQuery, las mejoras de rendimientousando índices primarios XML pueden ser de hasta un200%; además, usando un índice secundario XML lamejora sería de hasta un 50% más. Evidentemente, aligual que en los índices “normales”, deberemos tener encuenta el coste que suponen los índices, y deberemoselegir los índices acorde al tipo de consultas XQuery quese vayan a realizar en nuestro sistema.

XQueryXQuery es el lenguaje utilizado para realizar con-

sultas sobre instancias XML. De la misma maneraque Transact-SQL se utiliza para realizar consultassobre tablas de la base de datos, XQuery se utilizapara consultar sobre datos de instancias XML nati-vas; es un lenguaje estandarizado por los fabricantesy sus especificaciones se pueden consultar en W3C(http://www.w3.org/XML/Query). El tipo de datosnativo XML tiene los siguientes métodos:

• query() para realizar consultas sobre una ins-tancia XML. El valor devuelto no se ajusta a

dotN

etM

anía

<<

42

dnm.servidores.sql<<

CREATE TABLE dbo.t1 ( v1 xml (schema1), v2 xml

)

INSERT INTO dbo.t1 ( v1, v2 ) select '<?xml version="1.0" ?><articulo xmlns="http://schemas.mi_base.com/schema1"><nombre>XML</nombre><autor>Eladio</autor></articulo>','<articulo nombre="XML"><autor>Eladio</autor></articulo>'GOINSERT INTO dbo.t1 ( v1, v2 ) select '<?xml version="1.0" ?><articulo xmlns="http://schemas.mi_base.com/schema1"><nombre>SMO</nombre><autor>Marino</autor></articulo>','<articulo nombre="SMO"><autor>Marino</autor></articulo>'

ALTER TABLE dbo.t1ADD id INT IDENTITY PRIMARY KEYGOCREATE PRIMARY XML INDEX

p_xml_index ON dbo.t1 (v1)

CREATE XML INDEX Path_p_xml_index ON dbo.t1(v1)USING XML INDEX p_xml_index FOR PATH

Page 43: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

ningún esquema, pero sí está bien formado, porejemplo:

Devuelve como resultado:

• value() para recuperar valores de la instanciaXML.

• exist() para comprobar si una consulta devuelveun resultado no vacio. Por ejemplo:

Devuelve:

• modify() para hacer modificaciones. Podremosusar las funciones XQuery insert, delete y repla-ce value of. Veamos un ejemplo: reemplazar elatributo XML por “Intro. XML” en la columnav2 de la tabla dbo.t1.

• nodes() para devolver cada elemento XML comofilas separadas de un elemento raíz. Por ejem-plo, en:

Devolverá:

ConclusionesSQL Server 2005 acerca más si cabe XML a la base

de datos. Sin embargo, deberemos ser lo más objeti-vos posible a la hora de decidir su utilización en losdistintos escenarios que se nos planteen. El uso deXML en nuestros sistemas es una cuestión con la queafloran ciertos prejuicios antes siquiera de conocer elescenario: administradores de base de datos frente adesarrolladores expertos en XML, que al poder repre-sentar datos de una forma más integrada con la basede datos ven todo un abanico nuevo de posibilidades.Como referencia, tenéis una serie de artículos publi-cados en MSDN que nos ayudarán a identificar cadaescenario y que podéis ver en la tabla adjunta.

dotN

etM

anía

<<

43

dnm.servidores.sql<<

select v1.query ('declare namespace my="http://schemas.mi_base.com/schema1";/my:articulo/my:autor')from dbo.t1

<my:autor xmlns:my="http://schemas.mi_base.com/schema1">Eladio

</my:autor><my:autor xmlns:my="http://schemas.mi_base.com/schema1">

Marino</my:autor>

select v2from dbo.t1where v2.exist ( '/articulo[@nombre="SMO"]') = 1

<articulo nombre="SMO"><autor>Marino</autor>

</articulo>

update dbo.t1set v2.modify ('

replace value of (/articulo/@nombre)[1]with "Intro. XML" ')

where v2.exist ( '/articulo[@nombre="XML"]') = 1cambia

DECLARE @x xml SET @x='<doc>

<fila>1</fila><fila>2</fila><fila>3</fila>

</doc>'SELECT c.query('.') AS resultFROM @x.nodes('/doc/fila') as T(c)

<fila>1</fila><fila>2</fila><fila>3</fila>

Atículos relacionados

XML Best Practices for Microsoft SQL Server 2005http://msdn.microsoft.com/sql/2005/2005articles/default.aspx?pull=/library/en-us/dnsql90/html/sql25xmlbp.asp

XML Support in Microsoft SQL Server 2005http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql90/html/sql2k5xml.asp

What's New in FOR XML in Microsoft SQL Server 2005http://msdn.microsoft.com/sql/2005/2005articles/default.aspx?pull=/library/en-us/dnsql90/html/forxml2k5.asp

XML Options in Microsoft SQL Server 2005http://msdn.microsoft.com/sql/2005/2005articles/default.aspx?pull=/library/en-us/dnsql90/html/sql2k5xmloptions.asp

Page 44: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

SQL Server 2005 Mobile Edition

Microsoft SQL Server 2005 Mobile Edition es la evolución de Microsoft SQLServer CE Edition 2.0. Microsoft SQL Server 2005 Mobile Edition pretende seruna plataforma de almacenamiento de datos para soluciones móviles integra-das bajo un marco de desarrollo rápido, flexible, fácil y escalable.

<< más destacadas de SQL Server 2005Mobile Edition (SQL Mobile en adelante), son enprimer lugar la optimización del procesador de con-sultas y la utilización de transacciones. SQL Mobilees una base de datos relacional, con lo que la integri-dad de dominio, valor y referencial están presentes.SQL Mobile puede ser instalado independientemen-te de la plataforma de desarrollo utilizada, tanto paraaplicaciones .NET Compact Framework como paraaplicaciones eVC++ (nativas). Tanto para una comopara la otra se integran herramientas de acceso a datosque permitirán la creación, modificación y selecciónde datos desde nuestras aplicaciones.

La evolución de SQL Server CE 2.0La característica más visible es la integración de SQL

Mobile en lo que conocemos en Microsoft SQL Server2005 como SQL Server Management Studio. Éstaposibilita la creación de una base de datos SQL Mobilebajo interfaz Windows sin necesidad de tener que acce-der a aplicaciones de terceros. Asimismo, también estáintegrado en Visual Studio .NET 2005, con lo que lasposibilidades son variadas. De esta manera, no sólo podre-mos crear y modificar las bases de datos desde las apli-caciones anteriormente mencionadas, sino que caracte-rísticas como el Plan de ejecución gráfica, los asistentespara subscriptores de replicación y de configuración Web,e incluso del servicio de transformación de datos (DTS)(ahora Integration Services), el cual permite transformacio-nes tanto a/desde Microsoft Access como a/desde Oracle(entre otros), y una herramienta de implantación delfichero de la base de datos .sdf, estarán disponibles demanera sencilla.

SQL Mobile lleva el control de estadística para laoptimización de consultas automáticamente, creandoplanes de consulta beneficiando de esta manera almotor de almacenamiento.

Otra de las novedades destacadas que encontra-mos es la posibilidad de abrir la base de datos pordos usuarios, permitiendo el bloqueo a nivel de regis-tro, a nivel de página y a nivel de aislamiento paramantener la integridad referencial en todo momen-to; posibilidad no operativa en versiones anteriores.Se mantienen la capacidad de replicación (como subs-criptor) así como el acceso remoto a datos (RDA),para una total integración con su hermano mayor,SQL Server 2005.

El motor de almacenamiento, totalmente opti-mizado para dispositivos móviles, ha sido escrito denuevo, posibilitando que cada una de las aplicacio-nes utilice un espacio de memoria compartidacomún (pool).

José Miguel Torres

dnm.laboratorio

Las características

José Miguel Torrescolabora habitualmente con

dotNetManía. Es técnicosuperior en desarrollo de

aplicaciones informáticas ytrabaja como arquitecto de

software en el departamento detecnologías de la

información de MRW

El motor de almacenamiento, totalmenteoptimizado para dispositivos móviles, hasido escrito de nuevo, posibilitando quecada una de las aplicaciones utilice un

espacio de memoria compartida común

Page 45: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

SQL Mobile reutiliza espaciosvacios en página permitiendo así el Auto-Shrink de la base de datos.

SQL Mobile, requiere el sistemaoperativo Windows CE 4.3 o superiory dispositivos PPC 2003. De este modo,también se ha capacitado a SQL Mobilepara funcionar sobre Tablet PC, asícomo futuras versiones de MicrosoftWindows Smartphone. De esta mane-ra podrá soportar un mayor número dedispositivos independientemente de laplataforma operativa, es decir, nuestrabase de datos SQL Mobile, funcionarátanto para Tablet PC, como para PocketPC o Windows Smartphone, indistin-tamente.

Para los que tenemos numerosasbases de datos en SQL Server CE 1.0 y2.0, es interesante saber que Microsoftadjunta una herramienta de actualiza-ción llamada upgrade.exe como semuestra:

upgrade.exe

/s "\dirOrigen\BDDorigen.sdf"

/sp "pwdOrigen"

/d "\dirDestino\BDDdestino.sdf"

/dp "pwdDestino" /e /q

En la tabla 1 podrán encontrar todaslas posibilidades de upgrade.exe.

Manos a la obra

Cuando creamos la base de datosy a diferencia de SQL Server, ésta sealmacena en un único archivo conextensión .sdf. La capacidad máximaestá limitada a 4 Gb, algo trivialteniendo en cuenta las capacidades dealmacenamiento de los dispositivosmóviles actuales. La base de datos,como dije antes, puede ser accedida

desde cualquier tipo de dispositivomóvil así como con el SQL ServerManagement Studio desde nuestro PCde desarrollo.

Antes de empezar a crear la pri-mera base de datos en SQL Mobiletengamos en cuenta ciertas limitacio-nes además de la del tamaño de archi-vo. En los libros por pantalla de SQLServer 2005 pueden encontrar laslimitaciones de todos los objetos deSQL Mobile, desde el tamaño de pági-na y su incremento en Kb, pasandopor número de sesiones máximas, has-ta índices por páginas. Asimismo seríainteresante conocer los diferentestipos de datos que utiliza SQL Mobile,sobretodo en contextos de utilizaciónde replicación por SQL Server, paraevitar errores de conversión.

SQL Mobile utiliza bases de datostemporales siempre y cuando se espe-cifique de manera explícita. El tamañode ésta dependerá del tipo de opera-ción que ejecutemos. Aunque en unmarco de desarrollo, digamos, con-vencional como puede ser la de crea-ción de una aplicación escritorio, lasbases de datos temporales son “trans-parentes” en la mayoría de casos, en unmarco de desarrollo móvil el espaciode almacenamiento sea ROM o RAM

es muy limitado, así que cuandodecidamos utilizar la base dedatos temporal, pensemos que enoperaciones de UPDATE o DELETEde muchas filas o en operacionesde SORT sobre columnas no inde-xadas, puede crear una base dedatos temporal grande ya quesólo existe una sola base de datostemporal para todas las base dedatos. La base de datos temporaltambién almacenará informaciónen el caso de que una de las bases

de datos se acerque, según el creci-miento de la misma, al límite ante-riormente especificado.

Ahora sí, veamos un ejemplo de cre-ación de una base de datos. Para ello uti-lizaremos el SQL Server ManagementStudio. Una vez nos conectemos a SQLMobile, deberemos indicarle que quere-mos la creación de una nueva base dedatos (figura1).

Como información básica indica-remos la localización del fichero de la

base de datos en nuestro PC de desa-rrollo, así como el nombre de la mis-ma. Seleccionaremos en las propieda-des de la base de datos la informaciónsobre la cultura, la utilización o no deque la base de datos esté encriptada,así como su contraseña (figura 1).

Para la mayoría que hemos utili-zado alguna interfaz de administra-ción para nuestro gestor de base dedatos, no nos supondrá ningún pro-blema la creación de tablas, vistas, ysus respectivos atributos. Como pue-

dotN

etM

anía

<<

45

dnm.laboratorio<<

Parámetro Descripción

/s El path de origen de la base de datos.

/sp La password de la base de datos de origen.

/d El path de destino de la base de datos.

/dp La password de la base de datos de destino.

/e Si se especifica, la base de datos de destino será encriptada.

/q Instalación silenciosa, sin ningún interfaz gráfico

/? Muestra los posibles parámetros

Tabla 1. Parámetro de upgrade.exe

Figura 1.Conexión a SQL Mobile y creaciónde una nueva base de datos.

Figura 2.Object Explorer de SQL Server Management Studio.

Page 46: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

den observar en la figura 3, la crea-ción de una tabla es sencillamenterápida y flexible.

ConsultasCon SQL Mobile, podemos reali-

zar consultas desde el SQL ServerManagement Studio utilizando la mayo-ría de operaciones que se pueden utili-zar en SQL Server como el plan de eje-cución estimado (figura 4).

Aunque la sintaxis de consulta y modi-ficación basada en el lenguaje SQL esextensa, lamentablemente no podemos uti-lizar Transact-SQL en SQL Mobile, per-mitiendo sólo una consulta simple porcomando, eso sí, SQL Mobile soporta laejecución parametrizada de consultas. Dela misma manera, tampoco podemos eje-cutar scripts, ya que SQL Mobile no poseelo que en SQL Server es conocido comoSQL Manager Objects (SMO), que no esmás que la evolución de SQL DMO enlas versiones anteriores (vea el artículodedicado a SMO en este mismo número).

De todas formas, desde el SQLServer Management Studio o desde el

SQL Query Analyzer del SQL Mobilepodemos crear/modificar o consultartablas, modificar o crear índices, com-pactar o reparar la base de datos, veri-ficar accesos remotos RDA y aplica-ciones replicadas… En definitiva, todolo que SQL Mobile permite.

MultiusuarioUna de las nuevas características

de SQL Mobile es el acceso multiu-suario. Para los que hemos desarro-llado con SQL Server CE 1.0 o 2.0,las propiedades de concurrencia y blo-queo son nuevas en esta versión ycomo tal debemos tenerlas presentes.Con SQL Mobile, podemos tener másde una aplicación accediendo a la basede datos realizando varias operacio-nes sobre la base de datos e inclusocon la misma tabla, o tener variasconexiones desde una sola aplicación.Es aquí donde el bloqueo y la consi-deración de concurrencia entran enescena. La cantidad de conexionesabiertas está restringida a 256, siem-pre y cuando los recursos del sistemalo permitan.

La posibilidad de abrir una base dedatos de forma exclusiva está permi-tida. En este caso el acceso multiu-suario queda inhabilitado permitien-do sólo la conexión que de formaexplícita requirió la exclusividad.

Aunque la capacidad multiusuarioestá implantada, no existe ningún tipode implantación de rol a nivel de segu-ridad y acceso. Todas las conexionesutilizan la misma autenticación y auto-rización, que de forma predetermina-da, ofrece SQL Mobile.

A nivel de concurrencia, existen dostipos de bloqueo, el optimista y el pesi-mista. En una transacción dentro deSQL Mobile y con un nivel de concu-rrencia pesimista, SQL Mobile blo-quea los recursos de la base de datoshasta que la transacción haya finaliza-do. En un control optimista, intentasolucionar los conflictos de acceso arecursos, no dejando inopera-tiva la base de datos. El bloqueopesimista viene implementadoen SQL Mobile, sin embargoel bloqueo optimista no. Estosignifica que aunque el bloqueo

optimista no este implementado (perosi soportado), a nivel programáticodebemos realizar las operaciones quepermitan la integridad y disponibili-dad de los datos. Como resultado dela utilización de un bloqueo optimis-ta nos podemos encontrar con lectu-ras fantasmas de registros, pérdidas dedatos actualizados, lecturas “sucias” deregistros (Dirty Read). Aunque noexplicaremos, por su extensión, todoslos casos, queda evidente que laimplantación de acceso multiusuariopermite una flexibilidad que en ver-siones anteriores nos limitaba, pero elprecio de su utilización es el exhausti-vo control por parte de las aplicacio-nes del acceso a la base de datos.

Podemos utilizar transaccionesdesde SQL, así como desde códigoadministrado o código nativo. Lastransacciones son atómicas, durables,aislables y consistentes (ACID). Sinembardo, las transacciones no son dis-tribuidas, y condicionan la utilizaciónde cursores dentro su propio contex-to en sentencias SQL.

El manejo de transacciones en SQLMobile, por defecto, es de forma auto-mática, aunque podemos hacerlo deforma explícita. Cuando SQL Mobilelo hace automáticamente, realiza elautocommit él mismo.

ConclusiónHemos introducido de una manera

rápida las principales características dela nueva versión de SQL Mobile. Comotal, ofrece una serie de nuevas funcio-nalidades que deberemos tener en cuen-ta para el desarrollo de nuestras aplica-ciones; de las cuales destaco la integra-ción tanto con Visual Studio .NETcomo con SQL Server ManagementStudio además de las posibilidades mul-tiusuario que, aunque ofrecen unamayor flexibilidad, debere-mos entender y replantear-nos el escenario deimplementación.

dotN

etM

anía

<<

46

dnm.laboratorio<<

Figura 4. Plan de ejecución estimado desdeSQL Server Management Studio.

Figura 3. Edición de una tabla.

Más enlaces

http://www.microsoft.com/sql/ce/mobility/beta1.asp

http://www.microsoft.com/sql/ce/default.asp

http://www.desarrollomobile.net/dotNetMania/SQLMobile2005

Page 47: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento
Page 48: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Transact-SQL 2005 Más productivo que nunca

Este es un artículo complicado de escribir. No por los contenidos, sino por elcómo abordar algo tan amplio como Transact-SQL. Este componente de SQLServer es el pilar fundamental en el que se basan el resto de los componen-tes, pues es el lenguaje de programación con el que se le dice al core de SQLServer lo que debe de hacer.

<< que T-SQL es el conjunto de instruccio-nes que todos los subsistemas de SQL emplean paraorquestar sus acciones. Esto quiere decir que cualquiernovedad en cualquier subsistema, por descontado, gene-ra nuevas instrucciones SQL y mejora las antiguas.

Así que, bueno, antes de empezar a contar nada, voya intentar delimitar lo que vamos a tratar en este artícu-lo, ya que T-SQL abarca muchos subsistemas, y no hayespacio para todos… Haremos lo siguiente: introducirélas novedades más relevantes de T-SQL desde la pers-pectiva del desarrollador; el soporte integrado y nativode XML; el nuevo motor de ejecución integrado de.NET y las nuevas herramientas y opciones interesan-tes relacionadas con el desarrollo sobre T-SQL. Conesto imagino que conseguiré daros una idea (¡y desbor-daros!) con las novedades que hay en la mayor revisiónde SQL Server de todos los tiempos. Y el resto de T-SQL, seguro que lo averiguaréis usando las herramien-tas de administración del nuevo SQL ServerManagement Studio. Valor… ¡y al toro!

Las novedades del T-SQLSon muchas. Y repartidas a muchos niveles. Y van

desde nuevas instrucciones del lenguaje SQL a la inte-gración nativa con estándares abiertos como HTTP,SOAP, XML…etc, pasando por la integración con elmotor de ejecución y los tipos del CLR de .NET. Comoya vino siendo habitual desde las primeras versiones deSQL Server; las primeras novedades siempre vienen enforma de nuevas instrucciones del lenguaje para abordarlos grandes grupos de sentencias SQL: bloques DDL

(lenguaje de definición de datos), DCL (lenguaje de control dedatos) y DML (lenguaje de manipulación de datos). Que seadecuan a las novedades de ejecución del motor de la basede datos. Y aunque la mayoría están basadas en los están-dares ANSI, es con T-SQL con lo que saca un mayorprovecho a estas sentencias, como es lógico.

Obviamente, cualquier cambio en un tipo de datohace que todas las sentencias se vean afectadas. Y eso eslo que ha ocurrido en SQL Server 2005. Aparecen nue-vos tipos de datos…

Las novedades en DDL

Todas las novedades del lenguaje DDL se recogenagrupando todas las sentencias en varios grupos, que

Pepe Hevia

dnm.servidores.sql

Y el problema es

Pepe Heviacolabora habitualmente con

dotNetManía. Es arquitecto desoftware senior en Alhambra-

Eidos.Tiene las certificaciones deMCAD,MCSD.NET y MCT en

.NET Framework.Ha escritovarios libros sobre la plataforma

.NET (lalibreriadigital.com)

Las novedades de TSQL son muchas y repartidas en muchos niveles.Van

desde nuevas instrucciones del lenguaje hasta integración nativa con estándares

abiertos, pasando por la integración con .NET Framework

Page 49: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

corresponden a los diferentes subsistemas de SQL Server.Entre esos grupos, las novedades vienen de la mano de:la integración de .NET Framework en la plataforma, elnuevo Service Broker, el nuevo sistema de indexación ysu capacidad de particionamiento, los sinónimos, las ges-tión de eventos de los Triggers y, como no, de la seguri-dad. El resto de las novedades, son, en realidad, mejorasa lo que ya conocemos: ampliaciones de las instruccio-nes de gestión de bases de datos, de la creación de tablase índices… etc.

Pero vamos por partes, como las integrales. En DDL,y la creación de nuevas bases de datos, las novedadescomienzan con los tipos de datos. En las versiones ante-riores de SQL Server, existía una amplia variedad detipos, lo que proporciona ventajas e inconvenientes. Elinconveniente venía de la mano de los tipos varchar, ima-ge, text y binary. Varchar almacena cadenas de caracte-res de un máximo de casi 8Kb; text era utilizado parasubsanar la limitación de los varchar de almacenar carac-teres, llegando hasta la friolera de 2GB; image propor-ciona un campo BLOB para almacenar imágenes funda-mentalmente; binary por la contra, es realmente el cam-po base de los dos anteriores. Luego, entonces, por quédistinguirlos. Qué ha cambiado… que los nuevos tiposde datos resultado de optimizar lo ya existente han sidolos nuevos varchar(max), nvarchar(max) y varbinary(max).Bajo esta denominación tengo el orgullo de presentaroslos tipos que reemplazan a los anteriores: Varchar yNVarchar proporcionan un nuevo sistema de almacena-miento capaz de almacenar hasta 231 bytes, con la dife-rencia de ser uno ASCII estándar y el otro un sistema dealmacenamiento de caracteres UNICODE; Varbinaryahora queda con el rol de almacenar cualquier tipo deinformación BLOB (imágenes, sonidos, objetos…etc). Conla ventaja añadida de que podemos limitar el tamañomáximo de la información que necesitamos guardar.Ahora, un detalle… Si especificamos un valor n, éste esta-rá limitado a un máximo de 8Kb. Si especificamos el valormax, indicaremos al sistema el tamaño máximo de alma-cenamiento (de nuevo, 231 bytes). En todos los casos,por supuesto, variable. Ni que decir tiene que en la sen-tencia Update existen nuevas extensiones que permitiránal desarrollador poder trabajar con estos nuevos tipos dedatos, e incluso optimizar su uso con la nueva cláusulaWRITE. Aunque luego lo comentaremos con más detalle,no puedo evitar hacer mención a ello ahora. Dentro delos nuevos tipos de datos aparecen dos nuevas estrellas:XML y .NET. Podremos definir columnas que de porsí son documentos XML instanciables y analizables ytipos de datos puros de .NET Framework… es decir,objetos. Pero lo dejamos por ahora…

Otra novedad más interesante: los sinónimos. Esteconcepto que ya existía en otras bases de datos, per-mite al desarrollador el poder definir alias que apun-tan a otros objetos del sistema. La idea, encapsularnombres de objetos o tipos avanzados de datos, quepueden estar en constante cambio. Por ejemplo,

podremos integrar un ensamblado dentro de la listade procedimientos almacenados de SQL. En lugar deacceder a su nombre empleando el espacio de nom-bres, podemos crear un sinónimo que nos simplifi-que la tarea. Otra estimada utilidad de este concep-to es el de poder apuntar a objetos de diferentes esque-mas. Por ejemplo, si trabajamos desde la base de datosA y queremos acceder a una tabla de la base de datosB, necesitamos indicar toda la ruta hasta dicho obje-to si queremos realizar trabajos distribuidos (servi-dor.basedatos.esquema.objeto). Con los sinónimos podrí-amos crear un “objeto virtual” en la base de datos Ade forma que –al igual que las vistas– apuntara a unobjeto de la base de datos B, sin tener que preocu-parnos a partir de este momento de cómo acceder ala base de datos B. Miremos como queda el ejemplodel código fuente 1:

Para acabar con este punto acerca de las novedadesde DML –y aunque hay muchas más en forma de revi-siones– no puedo dejar de comentar que aparece algoque hacía falta: los triggers DDL. Esta potente utilidadnos permitirá capturar con “eventos” de base de datoshechos tales como la modificación del esquema de la basede datos, así como acciones personalizadas. Esto es, quepodremos actuar cuando alguien intente crear una nue-va tabla en la base de datos, y podremos aprobar dichacreación o no en base a lógica de negocio. Lo dicho, unaauténtica utilidad.

Las novedades en DML

Dentro de este apartado, simplemente comentar lasnuevas cláusulas que nos pueden ser útiles a la hora de

dotN

etM

anía

<<

49

dnm.servidores.sql<<

--Crear el sinónimoUSE BaseDatosAGOCREATE SYNONIM ProductosBFOR BaseDatosB.dbo.Productos

--Usar el sinónimo…USE BaseDatosAGOSELECT IdProducto,Nombre,PrecioFROM ProductosB

Fuente 1

CREATE TRIGGER controlEsquemaON MiBDD FOR CREATE_TABLEAS

INSERT INTO RegistroOperaciones VALUES(EVENTDATA())GO

CREATE TABLE TmpCalculos ( /* campos de la tabla */ )

Fuente 2

Page 50: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

recabar información o bien actualizarla. Una de las nove-dades es la posibilidad de crear CTE o Common TableExpressions (Expresiones Comunes de Tablas). Esto que sue-na tan fashion es algo entre las funciones de SQL Servery las cláusulas WITH conocidas de VB. Nos permiten podercrear expresiones calculadas sobre tablas que podemosreutilizar en consultas de más alto nivel. Una especie devistas temporales. Pero no sólo son un filtro para encap-sular vistas sencillas, sino que permiten en toda su poten-cia la posibilidad de crear consultas recursivas, maestro-detalle e incluso consultas jerárquicas… ¡impresionan-te! Algo sencillo quedaría de la forma como se ve en elcódigo fuente 3.

Y si os fijáis en la figura 1, una consulta CTE jerár-quica que muestra una relación jerárquica entre losempleados de la base de datos AdventureWorks (que reem-plaza a la ya más que veterana y omnipresente Northwind).

La cosa queda en que podemos realizar subquerysdentro de la cláusula WITH que actúan de detalle, maes-tro y la query principal, de orquestadora (figura 2).

Otras dos novedades muy interesantes, pero un pococomplejas, son las nuevas cláusulas-operadores relacio-nales APPLY y PIVOT/UNPIVOT. Ambas pertenecen al gru-po de optimizaciones realizadas a nivel de consultas cru-zadas entre tablas, conocidas más comúnmente como

JOINS. PIVOT nos permitirá convertir filas en columnas(extremadamente útiles para informes de sumarización)en lo que UNPIVOThace el trabajo contrario, es decir, con-vertir columnas en filas. La utilidad de usar PIVOT estri-ba en la posibilidad que nos brinda de crear esquemasabiertos, esto es, que en lugar de definir tablas con nume-rosas columnas de propiedades –todas por defecto aNULL, porque puede que no tengamos todos los datos–,se dividen las propiedades/atributos en múltiples filas, ysólo aquellos de los cuales tenemos datos consistentes(ver figura 3, queda muy claro).

APPLY es el encargado de permitir el JOIN de tablascon resultados obtenidos de funciones tabulares. Parapoder delimitar quién de ellos tiene la potestad de con-trolar los NULL en el caso de no encontrarse equiva-lencias, es por lo que podremos usar diversos modifica-dores (CROSS APPLY o OUTER APPLY).

Nuevo sistema de control de errores:TRY-CATCH

¡Impresionante! No sólo hemos visto la evoluciónde los lenguajes .NET para adquirir ese maravilloso sis-tema de control de excepciones que es el bloque try-catch, sino que además se nos regala esa estructura enT-SQL. Mucho mejor que estar continuamente jugan-do con la variable @@ERROR y la función RAISERROR trasevaluar el valor de error con un sencillo IF, podemosjugar ya con un bloque de código del estilo a lo que pode-mos ver en el código fuente 4.

Y con el conjunto de funciones que nos permiti-rán conocer en todo momento la información de laexcepción producida: ERROR_NUMBER(), ERROR_SEVE-RITY(), ERROR_MESSAGE(). Lo dicho, que ya podemos

dotN

etM

anía

<<

50

dnm.servidores.sql<<

USE AdventureWorks;GOWITH DirReps(ManagerID, DirectReports) AS (

SELECT ManagerID, COUNT(*) FROM HumanResources.Employee AS eWHERE ManagerID IS NOT NULLGROUP BY ManagerID

)SELECT ManagerID, DirectReports FROM DirReps ORDER BY ManagerID;GO

Fuente 3

Figura 1.Captura de pantalla de una consulta CTE jerárquica

Figura 2. Esquema de las consultas recursivas

Figura 3.Utilización de PIVOT

Page 51: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

escribir un código más estructurado que nunca, ya queademás estos bloques pueden estar anidados. Nos qui-tamos de encima así, las eternas estructuras IF anida-das de control de errores -que tantos errores nos hanproducido… seguro-.

MARS.Una optimización necesaria

Antes que pensar en implantaciones extraterrestres,MARS representa las siglas de Multiple Active Result Sets.Esto quiere decir que se pueden mantener activas variasinstruccione/BATCH en el la misma conexión, sin tenerla necesidad de cancelar un BATCH en ejecución antesde poder procesar el siguiente. Algo parecido a algo muytípico como cuando alguien, por ejemplo, está leyendodatos de una tabla y emplea otro comando para actuali-zar datos de otras tablas en base a los valores de la pri-mera. Hasta que el SQL no libera el cursor de la primeraconsulta, el planificador no le permite continuar con lasiguiente. Esta nueva tecnología permitirá al desarrolla-dor ejecutar múltiples bloques T-SQL en la misma cone-xión, sin tener que preocuparse de si ya existen o no tran-sacciones pendientes de finalización, que le forzaban ainstanciar nuevos objetos Connection. De un modo inte-ligente SQL irá planificando las peticiones MARS ydevolviendo múltiples resultados si es menester de losprocesos establecidos. Lógicamente, sólo las últimas ver-siones de los clientes SQL (ODBC, OLEDB o los pro-veedores gestionados SqlClient) podrán gozar de estascaracterísticas.

XML.Un nuevo tipo de datos

De XML creo que hay que hablar poco en estos días.Ya sabemos todas las ventajas que nos ha aportado XMLa nivel de “pegamento” entre capas en arquitecturas desoftware (flexibilidad, adaptación, reutilización, transpa-rencia, y un largo etcétera). Ventajas incluso a nivel deestándares como el de los servicios Web y su SOAP,WDSL, etc. Y sobre todo, su ventaja a la hora de apor-tar una estructura autodefinida en los modelos de datos.La sencillez que proporciona a la hora de estructurar deforma tabular, estructuras de información. Y, como no,resultados de bases de datos.

XML no es una novedad en SQL Server. Por lomenos no, en cuanto a su integración con muchas de lasfunciones y sentencias de T-SQL. Recordemos que lainstrucción SELECT de la versión 2000 ya era capaz dedevolver resultsets en perfecto XML, con la directiva FORXML AUTO. Pero esa integración era casi más una capa deservicio de datos, que una característica más de SQLServer. Es por eso que en SQL Server 2005, se ha subi-do al siguiente escalón: integrar XML en la arquitectu-ra del propio sistema de tipos de SQL Server. De tal for-ma que podamos contar con columnas que ya almace-nan de forma nativa XML, sin necesidad de lógica adi-cional. Vea el artículo de Eladio Rincón en este mismomonográfico dedicado específicamente a XML.

Qué nos ofrece este nuevo nivel de integración: Tipode dato XML nativo en las tablas, integración de esque-mas en el modelo de objetos de la base de datos, el poten-te lenguaje XQuery de consultas XSQL y la integracióndel motor XPath para manejo avanzado de consultasXML, la potencia de las consultas XMLSQL y sus resul-tados en XML y las mejoras de las sentencias que ya esta-ban en el ajo en la versión anterior: FOR XML y OPENXML.Rápidamente…

XML:Un nuevo tipo de dato y la integración de losEsquemas como Objetos en la base de datos.

Es una pasada. XML integrado en la definición denuevas tablas como un tipo de datos más, a la altura delINTEGER o el VARCHAR. Pero con muchas ventajas asocia-das. No es simplemente un campo de tipo VARCHAR renom-brado. Los tipos de datos XML tienen como responsa-bilidad el garantizar que los documentos XML están bienformados –o sintácticamente correctos–… pero más allá,validarlos –es decir, comprobar que la semántica del docu-mento XML coincide con la establecida en un docu-mento de esquema o XSD–. Ahora, hay que aclarar queel esquema XSD no es necesario, dándonos la posibili-dad y la potencia de crear columnas XML que disponende esquemas dinámicos, flexibles y adaptables a los cam-bios. Y que además, podemos guardar documentos com-pletos, o sólo fragmentos de los mismos. A aquellos XMLcon XSD les llamaremos Typed XML y a los que nodependen de un esquema, Untyped XML.

dotN

etM

anía

<<

51

dnm.servidores.sql<<

BEGIN TRY-- lista de instrucciones que queremos controlar

END TRYBEGIN CATCH

-- lista de instrucciones del manejador de posiblesexcepcionesEND CATCH

Fuente 4

El lenguaje T-SQL tiene nuevas instrucciones, optimizaciones que se

demandaban desde las versiones anteriores y nuevos manipuladores de excepciones, que lo hacen más robusto y productivo que nunca

Page 52: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Cuando hablo de un nuevo tipo dedatos, también me refiero a la inhe-rente capacidad que tienen la mayo-ría de los tipos de datos de SQL: lacapacidad de ser indexado… ¡SÍ!, ace-lerando en mucho los procesos sobredichos tipos de datos. Y además, seproporcionan todas las herramientaspara poder acceder a sus valores. Eneste caso, podemos contar con lasexpresiones XQuery embebidas en elpropio lenguaje T-SQL. Una mara-villa. Un ejemplo sería algo del esti-lo a lo que podemos ver en el códigofuente 5.

El acceso a los datos XML

Es aquí donde nos metemos de lle-no ya en el proceso de los documentosXML y donde T-SQL echa ya el resto.XQuery embebido en las propias sen-tencias T-SQL. Esto dota al lenguaje deuna facilidad de proceso de los docu-mentos XML sin precedencia (sóloequiparable a la potencia que nos pro-porcionaría el propio API XML de.NET, mediante el uso de lenguajes deprogramación). Este lenguaje XQUERYhay que decir que es un estándar de fac-to, ya que está basado en el DRAFT 4del W3C y tiene su base en XPATH. Lamayor diferencia entre ambos es que

XQUERY tiene extensiones que per-miten la manipulación de los datos, enlo que XPATH es de consulta. Muchade la funcionalidad viene de las exten-siones del tipo de dato XML: query,exists, value y muchos otros. Dondequery es la que nos permite poder eje-cutar sentencias XQUERY.

Habría mucho que contar acerca deestos dos monstruos, pero dejaremosesto para futuros artículos. Por ahora,abriremos boca con un ejemplo comoel de los fuentes 6 (y su pantalla en lafigura 4) y 7.

Ni qué decir tiene que parte de lasoptimizaciones que proporciona SQLServer 2005 para el proceso de este tipode información, se apoyan en los índi-ces. Podremos crear índices en colum-nas XMLy los índices podrán ser devarios tipos: basados en atributos, valo-res y en estructuras XPath.

Otra de las grandes utilidades delnuevo soporte de XML en T-SQL es lautilización de las consultas SQL basa-das en la gramática SQLXML, por lacual podremos embeber SQL dentro dedocumentos XML. Esto proporciona-rá un nivel más abstracto de interaccióncon el SQL Server 2005 a la par queproporciona una herramienta muyvaliosa a todos aquellos arquitectos quemodelan sus capas de servicios con ser-vicios Web o con otras plataformas no

dotN

etM

anía

<<

52

dnm.servidores.sql<<

CREATE XML SCHEMA COLLECTION FacturaSchemaColASN'<?xml version="1.0" encoding="UTF-16"?><xsd:schema

targetNamespace="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"

xmlns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions"

...xmlns:xsd="http://www.w3.org/2001/XMLSchema" ><xsd:complexType name="FacturaCT" mixed="true" >

<!-definicion de las reglas del esquema de la factura --></xsd:complexType>

</xsd:schema>GO

CREATE TABLE Pedidos(id INT PRIMARY KEY,factura XML(FacturaSchemaCol)...

)

Fuente 5

SELECT CatalogDescription.query('declare namespace p1="(…)/adventure-works/ProductModelDescription";

<Product ProductModelID="{ (/p1:ProductDescription/@ProductModelID)[1] }">{/p1:ProductDescription/p1:Specifications/Weight}

</Product>') as ResultFROM Production.ProductModelWHERE CatalogDescription.exist('

declare namespace p1="(…)/adventure-works/ProductModelDescription";/p1:ProductDescription

') = 1

--nota: los (…) indican que se ha obviado la ruta al esquema. Ejemplo extraído de loslibros en línea de SQL Server 2005

Fuente 6

select Factura.query('for $elem in /Factura/DatosPersonales

return<Nombre>{ sql:column("Nombre") }</Nombre> '

) from Pedidos

Fuente 7

Figura 4. La ejecución del código fuente 6.XQuery en acción

Page 53: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Microsoft. Sin controladores complicados, simple-mente envíame el documento XML con lo que tengoque hacer, y yo te diré “sí, cariño”. Un ejemplo de esteconcepto, en el fuente 8.

Todo esto, unido a la integración con los estánda-res HTTP, SOAP y WSDL convierten SQL en unauténtico .NET Server. Y sus funciones perfectamenteencapsuladas en servicios Web, lo dotan de la poten-cia necesaria para formar una pieza robusta más den-tro de las arquitecturas empresariales.

El CLR y .NET Framework.Una alternati-va,no el reemplazo.

En el artículo de Luis Miguel Blanco de estemonográfico de SQL Server 2005 ya habréis leídoacerca de la integración de éste y el .NET Framework.Obviamente, en este punto tengo que comentarlo porsu implicación en las mejoras que esto proporciona alpropio lenguaje T-SQL. Ni qué decir tiene que lasposibilidades que nos brinda una tecnología tan ampliacomo .NET a nivel de servidor son ilimitadas, puessupera barreras que el propio T-SQL tenía a nivel delógica de negocio. Un lenguaje diseñado para traba-jar de un modo sencillo con complejos conceptos rela-cionales, no está orientado a soluciones que requie-ren de cierta lógica más estructurada o integrada (comola OOP o el acceso a servicios externos al propio con-cepto de base de datos).

En el nuevo T-SQL, .NET Framework se con-vierte en un tipo de objeto más de la base de datos, detal forma que nos permite poder crear funciones deusuario, procedimientos almacenados… incluso ¡tiposde datos! Y esto dota al SQL de un nuevo nivel deproceso y representación de información. Que tendráclaramente ventajas en conceptos como servicios decapa de datos, integración y lógica de negocio. Pero,la cuestión es ¿.NET es un reemplazo de T-SQL? Larespuesta es no. .NET actuará como una opción mása la hora de abordar un problema. Y proporcionarávalor añadido al propio T-SQL, que seguirá siendo ellenguaje por excelencia de la base de datos.

Pero como eso se discutirá más adelante en otrosartículos, me limitaré a poneros algunos ejemplos deesta integración y las ventajas que eso aporta.

Para empezar, la integración de .NET aporta nue-vos tipos de datos (UDT o User Defined Types).Modelados a partir de clases y objetos, podemos decirque se aporta la filosofía OOP al esquema de las tablasde la BD. Haciendo aún más transparente los con-ceptos de estructuración de la información. Cadacolumna podrá ser de un tipo definido como claseen un ensamblado, permitiendo así el acceso al mis-mo empleando sus propiedades y/o métodos comosi de un registro se tratase. Extremadamente intere-sante el temita. Eso sí, deberemos tener en cuenta,que las clases deberán cumplir un mínimo de requi-sitos. Pero eso ya verá con Visual Studio 2005. En elfuente 9 os pongo el ejemplo en el que se agregacomo tipo una clase de tipo punto y su implicaciónen operaciones DML.

dotN

etM

anía

<<

53

dnm.servidores.sql<<

XML está integrado en todos losrecovecos del sistema. Podremoscrear tipos de datos, hacer uso defunciones y procedimientos del sis-tema, e incluso crear índices sobreesos tipos de datos… Tan sencillo

como manejar un VARCHAR

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"><sql:query client-side-xml="0">SELECT *FROM VistaFacturacionFOR XML AUTO

</sql:query></ROOT>

Fuente 8

CREATE ASSEMBLY Point FROM 'c:\tipos\Punto.dll'

GO

CREATE TYPE TipoPuntoEXTERNAL NAME Punto.TipoPuntoCGO

CREATE TABLE Puntos(

idPunto INT NOT NULL IDENTITY(1,1),ElPunto TipoPunto

)

SELECT ElPunto.m_x, ElPunto.m_y FROM Puntos

go

UPDATE Puntos SET ElPunto.SetXY(20, 30)WHERE ElPunto.m_x = 0

DECLARE @Pnt TipoPuntoSET @Pnt = (SELECT Pnt FROM Puntos

WHERE ID = 2)

SELECT @Pnt.ToString() AS Pnt GO

Fuente 9

Page 54: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Esta es una de las funcionalidadesdel CLR. Las demás, casi salen por sen-tido común: aplicación en la creaciónde procedimientos almacenados, fun-ciones definidas por el usuario… y¡¡¡tachaaán!!!... ¡Triggers! Lo que estáclaro es que la potencia está asegurada,y las aplicaciones... las que se nos pasepor la imaginación –siempre respetan-do los requisitos del usuario, claro–.

Y además, para finalizar casi ya, esimportante tener en cuenta que todoesto funciona en un entorno optimi-zado como es el CLR integrado en elnúcleo de SQL Server y con todas suscapacidades de ejecución como el JIT,pools, etc., y la importantísima segu-ridad. Reforzada, eso sí, con los pro-pios mecanismos del motor de SQL.Casi nada.

Con buena herramienta…bien se trabaja

Para finalizar ya con esta parte delespecial de T-SQL 2005, no puedoirme sin comentar nada acerca de lasherramientas con las que contará undesarrollador de datos para trabajar conesta capa, con la sencillez y comodidada la que Microsoft siempre nos tieneacostumbrados. Para esto, hablar de laque será la consola por excelencia: ElSQL Server Management Studio oSSMS cariñosamente. Esta consolaintegra todo lo necesario para un DBA.Entre muchas de sus funciones, muyintegrada está la capacidad de poderejecutar Querys SQL a diferencia delas versiones anteriores en las que paracosas avanzadas contábamos con elAnalizador de consultas. Ahora todoeso pasó, y contaremos con muchasopciones que iremos descubriendocuanta más experiencia tengamos conlas nuevas herramientas.

Desde SSMS podremosejecutar cualquier tipo dequery genérica, siendo res-ponsabilidad nuestra elconectarnos contra un ori-gen de datos, o bien podre-mos emplear el ObjectExplorer para que la con-sola habilite esas conexio-nes por nosotros. A partirde ese momento, y con unrico juego de colores yextensiones –tales como elarrastrar y soltar–, podre-mos diseñar nuestras queryscon mucha más productividad que enversiones anteriores.

Una novedad –además de integrarel analizador en la consola de adminis-

tración– es la de los visores de datos, quereaccionan al tipo de dato mostrado trasejecutar una consulta. En el caso de sali-das XML, por ejemplo, cada fila apare-cerá adornada con hipervínculos que nosmostrarán el contenido visualmente for-mateado del documento XML almace-nado. Una preciosidad.

Además de todo lo visto, es impor-tante añadir también la integración exis-tente con el nuevo Visual Studio .NET

2005. Integrado en un solo entorno dedesarrollo, aparecerán múltiples herra-

mientas para la gestión,desarrollo y depuración (sí,sí..., depuración) de objetosSQL de la base de datos…tanto a nivel de T-SQLcomo a nivel de CLR.Dispondremos pues de lasplantillas de soluciones debases de datos, permitién-donos abarcar el desarrollode la capa de datos como unapieza más de la arquitecturade una solución.

Lo dicho, que comopodemos ver Microsoft nossigue sorprendiendo a cadapaso que da. Hemos vistosólo una parte de las nove-dades que nos ofrecen enla mayor revisión de SQLde la historia. Y esto con-firma aún más la apuestade MS por sus arquitectu-ras .NET Servers. SQLServer 2005 nos ofrecemuchas novedades entodos sus sistemas, pero lo

que está claro, es que su nuevo T-SQLes más productivo que nunca.

dotN

etM

anía

<<

54

dnm.servidores.sql<<

El CLR y .NET Framework nos permite dotar a T-SQL de un valor añadido ilimitado. Pero no es un

reemplazo, sino una característica más que nos ayudará a ofrecer mejores soluciones

Figura 5. SSMS en accion

Figura 6.Toolbars de SSMS

Figura 6.Toolbars de SSMS

Page 55: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotN

etM

anía

<<

55

Proporcionando escalabilidad a SQL Server 2005 con Service Broker

Este artículo hace una introducción al nuevo Service Broker con el que SQLServer 2005 dota al motor relacional de capacidades nativas de gestión decolas, permitiendo crear aplicaciones de bases de datos escalables, seguras yconfiables, basadas en procesos asíncronos.

<<La gestión asíncrona de mensajes no es nueva en

la industria informática. Prácticamente desde el prin-cipio de la computación, los ordenadores se diseña-ron para gestionar colas de peticiones, precisamenteporque esto refleja muy fielmente los procesos realesque las empresas implementan en sus negocios.

Empecemos por el principio. Pepa acaba de mon-tar su propia empresa de gestión de seguros y andafeliz con su nueva oficina, su mesa de despacho y suresplandeciente teléfono. Tiene un sistema infor-matizado que le conecta a las diferentes compañíasde seguros y cuando un cliente le llama es capaz deconectarse en línea y proceder con la gestión inme-diatamente.

Todo va de maravilla siempre y cuando los clien-tes entiendan que sólo pueden llamar cuando ella estádesocupada, de modo que pueda ir atendiendo uno auno en secuencia. Digamos que esto es como tenerSQL Server en modo de usuario único, atendiendopeticiones desde una sola conexión.

Sin embargo, algunos clientes se quejan a Pepa deque cuando llaman, sólo consiguen una línea ocupada,y que esto les obliga a acudir a otros gestores de la com-petencia. Pepa analiza el problema y decide que debeinstalar más de una línea de teléfono de modo que pue-da ver cuándo alguien le está llamando y poder pasarasí de una llamada a otra cuando sea necesario.

Dicho y hecho, ahora Pepa puede pasar de una lla-mada a otra compartiendo su tiempo entre varias lla-madas simultáneas, y procesando varios asuntos al mis-

mo tiempo (al fin y al cabo su condición femenina lepermite efectuar diferentes tareas a la vez).

Esto sería algo similar a una instancia de SQL Serveradmitiendo varias conexiones simultáneas, donde el sis-tema asignaría hilos de ejecución independientes a cadaproceso, permitiendo una ejecución en paralelo de laspeticiones de dichas conexiones.

Sin embargo, incluso con las mejores dotes tele-fónicas e informáticas de Pepa, aún hay clientes queno llegan a conectarse y deben dejar un mensaje en elcontestador. El problema es que estos mensajes nosuelen tener toda la información necesaria para pro-ceder con el asunto que solicitan y en muchos casosno son útiles en absoluto.

Pensemos que SQL Server permite recibir peti-ciones de consultas por email, que serían procesadasfuera de línea mediante el procedimiento sp_pro-cessmail. Sin embargo, los mensajes recibidos nosiempre contienen una consulta válida, y esto haceque el sistema no resulte muy eficaz realmente.

Entonces a Pepa se le ocurre una idea. Contrata unsecretario que reciba las llamadas y se encargue exclusi-vamente de rellenar un formulario con los datos nece-sarios para poder procesar la petición, e instruye al secre-tario para que ponga todos los formularios rellenos enuna bandeja de entrada. De este modo, los clientes notienen que esperar mientras Pepa procesa las peticionesde otros clientes, ya que ha separado por completo losprocesos de relleno del formulario del proceso de eje-cutar la petición. Acaba de inventar el proceso asíncro-no de peticiones de seguro, mediante la gestión de colas,además de que estas peticiones se atienen a un formato

Fernando Guerrero

dnm.servidores.sql

Mensajes y procesos de negocio

Fernando Guerreroes MVP en SQL Server, y un

ponente habitual en la mayoríade las conferencias

internacionales de este campo.Viaja permanente alrededor del

mundo como consultor, profesory director ejecutivo de Solid

Quality Learning.

Page 56: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotN

etM

anía

<<

56

dnm.servidores.sql<<

estricto que le permite garantizar que nohabrá peticiones ambiguas. Así que estácontentísima, como podréis imaginar. Labandeja de entrada va creciendo confor-me llegan nuevas peticiones, y ella las vaprocesando durante el día a su ritmo.

El problema es que el secretario sele queja de que hay veces que no da abas-to con las llamadas. Pepa se acaba de darde bruces de nuevo con un problema deescalabilidad. Sin embargo, se da cuen-ta de que podría disponer de otros secre-tarios a diferentes horas del día parapoder atender esos picos de llamadas,por lo que configura la centralita tele-fónica de modo que las nuevas llamadasentrantes se dirijan automáticamente alprimer secretario que esté disponible.De este modo los formularios puedenrellenarse en paralelo, y van apilándoseen la bandeja de entrada a lo largo deldía. Pepa acaba de inventar el escaladodel servicio de relleno de formulariosde entrada.

Como todo en esta vida, nada salegratis, y todas las soluciones traen de lamano problemas inesperados. El servi-cio escalable de relleno de formulariosfunciona tan eficientemente, que cadadía hay más clientes que llaman a laempresa de Pepa para solicitar seguros.Pepa no tiene problemas contratandonuevos secretarios, pero la bandeja deentrada va creciendo y creciendo y noda abasto para poder procesar todas estaspeticiones durante el día.

Piensa y piensa hasta que se le ocu-rre contratar a un amigo, profesional deseguros como ella, para que le eche unamano en procesar esta siempre crecien-te bandeja de entrada. Y se da cuenta deque con la ayuda adecuada, consigue que

la bandeja de entrada se mantenga enniveles aceptables, y que entre los dospueden perfectamente procesar todaslas peticiones del día.

Como Pepa es una persona ambicio-sa y las peticiones no paran de llegar, seda cuenta inmediatamente de que pue-de contratar otros agentes de seguros quecolaboren en el proceso de esta bandejade entrada. Acaba de aplicar una solu-ción de escalabilidad al procesado de soli-citudes, del mismo modo que logró esca-lar el relleno de formularios.

Claro que el negocio no para de cre-cer y ya no es posible procesar todas laspeticiones en la misma oficina, por loque llega a acuerdos de colaboración conotras oficinas a las que reenvía ciertaspeticiones para su proceso. Dicho entérminos informáticos, está “enrutan-do” las peticiones a otros procesos.

Haciendo estudios de eficiencia y re-ingeniería de procesos, detecta que estosmismos principios se pueden aplicar a

la subdivisión de ciertos procesos demodo que pueda obtener beneficios delprocesado asíncrono de peticiones, y dela flexibilidad que la gestión de colas leproporciona.

Desde el punto de vista del usuario,la transacción de negocio comienza enel momento en que envía la petición ala empresa de Pepa, y finaliza cuandorecibe una respuesta final del resultadode su petición. Esto puede llevar algúntiempo, y no sería adecuado implemen-tar este proceso completo como unaúnica transacción física a nivel de basede datos. Sin embargo, podría ser imple-mentada como un conjunto de transac-ciones físicas que formaran parte de lamisma transacción lógica.

Este método de trabajo existe hacebastante tiempo en los grandes ordena-dores corporativos, y Microsoft lo intro-dujo en el entorno Windows con el OptionPack de NT4, mediante el servicioMSMQ (Microsoft Message Queue).

Este servicio es compatible funcio-nalmente con los servicios de gestión decolas de los grandes ordenadores corpo-rativos, como MQSeries, y hasta permitíaconectividad con los mismos mediante elMicrosoft Host Integration Server.

Sin embargo, la utilización de estossistemas de colas requiere un diseño dis-tinto de las aplicaciones y esto ha hechoque no todos los programadores hayanencaminado la arquitectura de sus apli-caciones por esta ruta.

Quizá se haya sobreestimado la difi-cultad de programación que estos siste-mas conllevan, pero la realidad es queno ha tenido el alcance que debiera entrela comunidad de programadores.

La llegada de .NET facilita la utili-zación de estos servicios mediante elespacio de nombre System.Messagingdiseñado para ofrecer soporte median-te código gestionado para los serviciosde MSMQ.

Sin embargo, esto está muy lejos delalcance típico de un programador debases de datos. Si trabajar con .NETpara un programador de Transact-SQLle supone un serio problema, intentarlidiar con MSMQ ya está fuera de lugarcompletamente.

¿Y qué pinta SQL Server entoda esta discusión?

Para muchos programadores de apli-caciones basadas en plataformas deMicrosoft, la única razón por la cual secrearon sistemas de colas en sus aplica-ciones fue para escalar peticiones a SQLServer.

Además, en muchos de estos casos,se seleccionó que las colas se imple-mentaran físicamente como tablas enuna instancia de SQL Server.

Así que si tenemos que todo el pro-ceso, desde la implementación física delas colas hasta los procesos de negocioque requieren de estos servicios, se rela-cionan directamente con SQL Server,¿para qué involucrar a un servicio exter-no como MSMQ en este trabajo?

...al desarrollar SQL Server 2005 se decidió dotar al motor relacional de capacidades nativas de

gestión de colas, de modo que estas aplicaciones pudieran beneficiarse de la escalabilidad y prestaciones que este sistema proporciona

Page 57: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Por esta razón, al desarrollar SQLServer 2005 se decidió dotar al motorrelacional de capacidades nativas de ges-tión de colas, de modo que estas aplica-ciones pudieran beneficiarse de la esca-labilidad y prestaciones que este siste-ma proporciona. Este sistema se deno-mina Service Broker, y no es un serviciode Windows independiente del serviciode SQL Server, sino que forma partedel motor relacional mismo.

Service Broker permite crear aplica-ciones de bases de datos escalables, segu-ras y confiables, basadas en procesosasíncronos, tanto en sistemas de una solainstancia de SQL Server, como en com-plejos sistemas distribuidos con múlti-ples instancias de SQL Server geográ-ficamente dispersas.

Service Broker se basa en la creaciónde servicios independientes, que inte-ractúan entre sí mediante mensajes,transmitidos asíncronamente mediantecolas, y formateados de acuerdo a con-tratos preestablecidos. Ojo, al hablaraquí de servicios no nos estamos refi-riendo a servicios de Windows, sino ainstancias de procesos que se encargande procesar mensajes gestionados porService Broker. Estos servicios podríanser activados automáticamente porService Broker, si así se prefiere.

Los mensajes sonenviados entre serviciosmediante TCP/IP, porlo que la arquitecturaestá diseñada nativa-mente para soportarentornos distribuidos.

¿A que suena muyparecido a MSMQ?Naturalmente. ServiceBroker es una evolucióndel paradigma defini-do por MSMQ, pero

diseñado para optimizar las aplicacio-nes de bases de datos.

Una vez que SQL Server 2005implementa un sistema como este,¿por qué no utilizarlo para otrosmenesteres? De hecho, la notificaciónde eventos, así como la notificaciónde cambios en los resultados de lasconsultas (nueva posibilidad deADO.NET 2.0) se implementanmediante Service Broker.

Por supuesto Service Broker utiliza lasnuevas características de seguridad deSLQ Server 2005, como encriptación demensajes, seguridad basada en certifica-dos y claves simétricas, para que el pro-ceso de mensajes sea tan seguro comorequieren los entornos en los que se uti-lizan este tipo de aplicaciones.

¿Y qué pasa con las aplicacio-nes que ya tengo escritas?

Me alegra que me haga esta pregunta:Si tienes aplicaciones que siguen la

recomendación de interactuar con labase de datos mediante procedimientosalmacenados, estás de enhorabuena. Eneste caso te estás conectando a la basede datos mediante interfaces bien defi-nidos, y no debes cambiarlos, para noromper tu aplicación.

Mantén estos interfaces, mante-niendo los mismos nombres de tus pro-cedimientos y los mismos parámetros,pero traslada la lógica de estos procedi-mientos (su implementación) a otrosprocedimientos que vas a invocar comoservicios de Service Broker.

Tus procedimientos originales reci-birán las peticiones de tu aplicaciónmediante los parámetros de entrada, ylos enviarán a unas colas creadas a talefecto. Estos procedimientos de entra-da no harán nada más.

Tras esto, los nuevos procedimientosque has creado para albergar la lógica queya tenían implementada, leerán peticio-nes de estas colas y ejecutarán las accio-nes correspondientes, enviando los resul-tados a una o varias colas de salida.

Deberán crear otros procedimien-tos que sirvan como servicios de reco-gida de resultados, y que comuniquenel estado de estos procesos a la aplica-ción de cliente.

¿La ventaja de este proceso? Tu apli-cación de cliente se mantiene más omenos intacta. Y los cambios introdu-cidos en la base de datos se implemen-tan mediante instrucciones Transact-SQL que se encargan de gestionar elproceso de los mensajes disponibles enlas colas de procesos.

¿Otra ventaja fundamental? Puedesperfectamente implementar los serviciosde proceso mediante aplicaciones exter-nas a SQL Server, incluso como serviciosWindows, ejecutándose en máquinasremotas, escalando muy rápidamente elsistema, sin cambiar drásticamente elmodo en que se diseñó originalmente laaplicación de cliente.

Hay un cambio fundamental en laaplicación de cliente: debe consultar elestado de las peticiones enviadas, ya queestas peticiones se procesan asíncrona-mente. Pero esta consulta no es nece-sario efectuarla inmediatamente tras elenvío de la petición.

Objetos de Service BrokerService Broker utiliza diferentes tipos

de objetos, y cada uno de ellos propor-ciona una funcionalidad muy específi-ca. Describir en detalle cada uno deestos objetos sería demasiado largo paraun artículo de introducción como éste,

dotN

etM

anía

<<

57

dnm.servidores.sql<<

Service Broker es una evolución del paradigma definido por MSMQ, pero diseñado para optimizar

las aplicaciones de bases de datos

Page 58: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

pero al menos es interesante entender el cometidode cada uno de ellos.

MESSAGE TYPE

Esta es la definición de un tipo de mensaje, don-de especificamos si se trata de un mensaje binario oXML, y en ese caso, si se trata de un mensaje XMLtyped (con un formato específico definido por unesquema conocido) o no.

El tipo de mensaje se define mediante una ins-trucción como esta (para mensajes XML con estruc-tura válida):

CONTRACT

Un contrato define qué tipo de mensaje puedeenviar y recibir cada servicio. Por ejemplo:

QUEUE

Las colas son los objetos que almacenan los men-sajes y a los cuales acceden los servicios para leer yenviar dichos mensajes. Estas colas pueden especifi-car un servicio de activación automática cuando lle-gan mensajes nuevos, aunque esto no es necesaria-mente lo más común. Un ejemplo de creación de unacola podría ser este:

En el que definimos su nombre, ExpenseQueue, laactivamos y además definimos que puede lanzar has-ta 5 instancias del servicio expense_procedure paraleer mensajes de esta cola, y que la ejecución de esteservicio (un procedimiento almacenado en este caso)se va a efectuar bajo las credenciales de el usuarioExpenseUser.

SERVICE

Un servicio de Service Broker es el nombre que sele da a una tarea o conjunto de tareas. Por ejemplo:

Este servicio, Expenses, se crea en una cola deter-minada, ExpenseQueue, y permite dos contratos dis-tintos: ExpenseSubmissions y ExpensesProcessing.

Diálogos y Conversaciones

Todos los mensajes enviados por Service Brokerforman parte de una conversación. Un diálogo es unacomunicación entre dos servicios, o más precisamenteuna corriente persistente y confiable de mensajesentre dos servicios distintos.

Por ejemplo, este sería el modo de comenzar unaconversación:

En este ejemplo, establecemos este diálogo entredos servicios, ExpenseClient y Expenses, utilizando uncontrato determinado.

El valor del puntero @dialog_handlenos servirá lue-go para enviar y recibir mensajes como parte de estaconversación.

Las conversaciones se pueden agrupar en grupos deconversaciones, las cuales típicamente agrupan dife-rentes conversaciones dentro de una misma transac-ción, lo cual es muy útil para complejos entornos dis-tribuidos.

Enviar Mensajes

Como hemos dicho antes, los mensajes se envíancomo parte de una conversación, con un tipo de men-saje válido para el contrato declarado para dicha con-versación, como en este ejemplo:

En este caso, el contenido de la variable

@ExpenseReport, podría ser un texto XML o cualquierdato binario que el servicio de destino sea capaz de pro-cesar.

dotN

etM

anía

<<

58

dnm.servidores.sql<<

CREATE MESSAGE TYPE[//Adventure-Works.com/Gastos/EnviarGastos]VALIDATION = WELL_FORMED_XML;

CREATE CONTRACT[//Adventure-Works.com/Expenses/ExpenseSubmission]( [//Adventure-Works.com/Expenses/SubmitExpense]

SENT BY INITIATOR,[//Adventure-Works.com/Expenses/ExpenseApprovedOrDenied]

SENT BY TARGET,[//Adventure-Works.com/Expenses/ExpenseReimbursed]

SENT BY TARGET) ;

CREATE QUEUE ExpenseQueueWITH STATUS=ON,ACTIVATION (

PROCEDURE_NAME = expense_procedure,MAX_QUEUE_READERS = 5,EXECUTE AS 'ExpenseUser' ) ;

CREATE SERVICE [//Adventure-Works.com/Expenses] ON QUEUE ExpenseQueue([//Adventure-Works.com/Expenses/ExpenseSubmission],[//Adventure-Works.com/Expenses/ExpenseProcessing]) ;

DECLARE @dialog_handle UNIQUEIDENTIFIER ;

BEGIN DIALOG CONVERSATION @dialog_handleFROM SERVICE [//Adventure-Works.com/ExpenseClient]TO SERVICE '//Adventure-Works.com/Expenses'ON CONTRACT [//Adventure-Works.com/Expenses/ExpenseSubmission] ;

SEND ON CONVERSATION @dialog_handleMESSAGE TYPE [//Adventure-Works.com/Expenses/

SubmitExpense](@ExpenseReport) ;

Page 59: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Recibir Mensajes

Los mensajes los leemos de las colasmediante la instrucción RECEIVE, quedevuelve un conjunto de registros. Dealgún modo la instrucción RECEIVE sobreuna cola se comporta como una instruc-ción SELECT sobre una tabla (de hecho algoasí sucede), pero extrayendo los mensajesde la cola para su procesado.

En este caso estamos recuperandosólo el primer mensaje de la colaExpenseQueue relativa a la conversacióndefinida por el puntero @conversa-tion_handle.

Usos típicos de Service BrokerPodemos pensar en muchas apli-

caciones prácticas para Service Broker,pero estas son algunas de las másimportantes:

Gestión asíncrona de disparadores

La ejecución de disparadores (trig-gers) supone siempre una sobrecargapara cualquier aplicación. Esta sobre-carga será mayor o menor en funciónde la complejidad de este disparador. Sinembargo, si este disparador pudieraenviar un mensaje a un servicio deService Broker para su proceso asíncro-no, el disparador podría devolver con-trol a la aplicación inmediatamente,mejorando sensiblemente el tiempo derespuesta.

Esto supone una mejora sustancialen la concurrencia de la aplicación, yaque la transacción finalizará más rápi-damente, liberando los bloqueos quepudiera mantener, y dejando así vía librea otros procesos para que pudieran uti-lizar estos recursos.

Proceso asíncrono de colas

En muchos casos, las aplicacionesdeben ser diseñadas de tal modo que seaninsensibles a problemas de comunicacióndebidos a fallos de comunicaciones, pro-blemas de falta de energía eléctrica, fallos

de servidores y demás interrupciones deservicio. Implementando estas aplicacio-nes alrededor de servicios de ServiceBroker, cada vez que un mensaje debe serprocesado y esto no es posible por algu-no de estos problemas, la transacción físi-ca que se encarga de procesar este men-saje tendría que cancelarse, llevando elmensaje de vuelta a la cola, y el servicio

podría intentar procesarlo denuevo más adelante.

La gran ventaja de este sis-tema es que este proceso seefectuaría automáticamente sinnecesidad de una programa-

ción específica, ya que la infraestructu-ra la proporciona Service Broker.

Recopilación de datos

Aplicaciones que deben recopilardatos desde diferentes fuentes, puedenaprovecharse de la naturaleza asíncro-na de Service Broker, ya que no es nece-sario que origen y destino de los datosestén disponibles simultáneamente. Estetipo de aplicaciones pueden conectarseal origen de datos y enviar los datoscomo mensajes a un servicio de ServiceBroker para su proceso posterior. ServiceBroker podría crear tantas instancias deestos servicios como fuera necesario paraprocesar estos datos e irlos enviando asu destino final.

De hecho, algo similar ha sidoimplementado en SQL Server 2000 porDTS y por replicación, para incorporarsistemas de colas en la importación dedatos y en la replicación.

Procesos distribuidos

Supongamos que un sistema depedidos debe coordinar piezas y com-ponentes de diferentes proveedores, loscuales es más que probable que no esténen línea al mismo tiempo. Este tipo deprocesos sería un excelente candidatopara ser gestionado por Service Broker,ya que el sistema podría aceptar pedi-dos, independientemente de cómo seprocesan estos pedidos. El sistema defi-niría servicios que se encargarían de pro-cesar las peticiones individuales a cadauno de los proveedores, pero todas estaspeticiones formarían parte de la mismatransacción lógica.

Consolidación de datos

Todos estamos acostumbrados autilizar páginas Web para encontrarinformación. Si la información a mos-trar se obtiene de diferentes fuentes,sería posible enviar peticiones en para-lelo a esas fuentes, utilizando ServiceBroker, de modo que el tiempo de res-puesta global se minimizara, incre-mentando el rendimiento de la apli-cación desde el punto de vista delusuario.

Proceso por lotes para grandes aplica-ciones

Este quizá sea el escenario más tra-dicionalmente aceptado para ser imple-mentado con Service Broker, especial-mente en sistemas bancarios. Las apli-caciones de cliente ejecutándose encomputadoras distribuidas, envían peti-ciones a una cola, donde esperan serprocesadas más tarde. Otros ordenado-res podrían ejecutar servicios a interva-los regulares que se encarguen de pro-cesar estas peticiones.

No estamos hablando aquí del típi-co proceso nocturno por lotes, sino dela posibilidad de procesar colas entiempo prácticamente real, ya que cadacapa de estos sistemas podría escalar-se para darle mayor capacidad bajodemanda.

ConclusionesEstamos seguros de que Service

Broker cambiará la forma en quemuchos programadores diseñan apli-caciones de bases de datos con SQLServer 2005.

La posibilidad de diseñar procesosasíncronos, que permitan flexibilizarel proceso de cada etapa dentro de losprocesos de negocio, dará una mayoragilidad y escalabilidad a las aplica-ciones de bases de datos, incremen-tando notablemente la satisfacción delos usuarios.

Esto no es una afirmación de unexperto en marketing, sino la opiniónpersonal de un arquitecto de sistemasde bases de datos que, tras llevar añoslidiando con este tipo de problemas, veen esta nueva tecnología unas posibili-dades extraordinarias.

dotN

etM

anía

<<

59

dnm.servidores.sql<<

RECEIVE TOP 1 *FROM ExpenseQueueWHERE conversation_handle = @conversation_handle ;

Page 60: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

Introducción a SMO En versiones anteriores de SQL Server, se suministraba un mecanismo de automati-zación del servidor, basado en una librería de tipos COM (SQL-DMO), para permitirel acceso mediante programa a características de funcionamiento del servidor y susobjetos dependientes.En esta versión,el concepto de programabilidad del servidor seha extendido notablemente,permitiéndonos manejar mediante código .NET casi cual-quier característica de SQL Server 2005. Es el modelo SMO.

de nomenclatura a SMO ya nos sugie-re las nuevas posibilidades: Objetos para gestión del siste-ma. De todo el sistema: y esto incluye a versiones ante-riores de SQL Server (7 y 2000). Paralelamente a estaslibrerías, Microsoft incluye también la librería para lagestión de Réplicas de Bases de Datos (RMO, o ReplicationManagement Objects), aunque ésta no sea el objetivoprincipal de este artículo.

Aunque el conjunto de librerías vinculadas a SMOincluye otros elementos, dos de ellas forman la partetroncal del sistema:

• microsoft.sqlserver.smo.dll (librería principal).• microsoft.sqlserver.smo.connectioninfo.dll

(datos de conexión).

En concreto, la primera suministra un paquetefuncional muy variado, con mención especial a lossiguientes apartados:

• Servicios Generales de SMO.• Instanciación optimizada.• Ejecución diferida.• Funcionalidad WMI (Windows Management

Instrumentation).• Scripting avanzado.• Configuración de opciones del Servidor.

La segunda librería suministra servicios de informa-ción y configuración de conexiones. Genéricamentehablando, podríamos dividir conceptualmente la amplí-sima jerarquía de clases de SMO en dos tipos: clases deinstancia y clases de soporte de utilidades.

Las primeras, representan los objetos principalesque encontramos en el servidor: Server, DataBase(s),Schema(s), StoreProcedure(s), Table(s), View(s), Column(s),

etc. En la segunda categoría encontramos clases deltipo: Backup, Restore, Scripter y Transfer (para transfe-rencias de datos entre instancias de SQL Server a tra-vés de canales DTS).

Programación con SMOLa programación con SMO desde Visual Studio 2005

(usamos la Beta 2 para este artículo), permite comenzarel trabajo desde cualquier aplicación (Consola, Windowso Web) siempre que hagamos referencia a las libreríascitadas más arriba. En la figura 1 puede verse.

La ventana de “Referencias” mostrando las distintaslibrerías programables que SQL Server 2005 pone a dis-posición del desarrollador. Note el lector que en la colum-na Runtime se especifica la versión del Framework nece-saria para su funcionamiento (2.0.50215). Esto respon-

Marino Posadas

dnm.directo.entrevistas

Marino Posadas esasesor técnico y

redactor dedotNetManía, MVP de

C# y formador deAlhambra-Eidos

<< De hecho, el cambio

Figura 1. Referencia a las librerías principales de SMO desde V.Studio 2005

Page 61: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

de a la pregunta de si dichas librerías serí-an utilizables desde Visual Studio .NET2003. Las librerías son instaladas en elGAC (Global Assembly Cache) por la opciónde instalación de herramientas de clientede SQL Server 2005.

Una vez adjuntas las librerías bási-cas, las sentencias de referencia nos danacceso al nutrido conjunto de clases deSMO. Pongamos un primer ejemplobásico de utilización de SMO paraconectarnos a una instancia de SLQServer 2005 y obtener informacióndiversa del servidor.

Los dos fragmentos interesantesde código son la referencia a las libre-rías (ver fuente 1), y las 5 líneas decódigo que incluimos en el construc-tor de la clase del formulario, para ins-tanciar un objeto de la claseServerConnection y leer propiedadesdel servidor (ver fuente 2).

Lo que produce la siguiente salida enejecución:

Es curioso que la única referenciapara el acceso sea el propio nombre dela instancia de SQL Server, asumién-dose en este caso las credenciales de con-fianza y la desactivación de MARS(Multiple Active Result Sets) (vea la sec-ción TodotNet Q&A de Dino Espositoen este mismo número).

Más potente y apropiada para estastareas resulta la clase Server. Nos presen-

ta todas las características del propio ser-vidor y además, las de las bases de datosmanejadas por él, junto a todos sus obje-tos relacionados: Tablas, Columnas, etc.

En el siguiente ejemplo, utilizamosesta clase, no sólo para leer informaciónsimilar a la anterior, sino para acceder aestructuras de metadatos de la base dedatos predeterminada, recuperando nom-bres de tablas y columnas en sendas sola-pas de un control TabControl. El códigofuente utilizado es el del fuente 3.

Como puede apreciar el lector, lamisma clase servidor es capaz de acce-der a información del sistema, como lamemoria instalada (vía WMI, en estecaso), a la información propia de confi-guración, y también a la de las bases dedatos que gestiona, incluyendo diversosniveles de profundidad jerárquica. El

código, por otro lado, no puede ser mássimple. La esperada salida del progra-ma se muestra en la figura 3.

Pero aquí no terminan (casi no hacenmás que comenzar), las posibilidades deSMO. También es posible crear objetos,recuperar datos, y –en suma– gestionarcualquier cosa que una aplicación de ges-tión pueda necesitar de un servidor.

Creación de objetos en el ser-vidor

El proceso de creación de objetoscomplejos, tales como tablas de bases dedatos, sigue una dinámica similar a laque .NET ya nos tiene acostumbrados.Todos los objetos se articulan en formade colecciones, algunos de cuyos miem-

dotN

etM

anía

<<

61

dnm.directo.entrevistas<<

using Microsoft.SqlServer.Management.Smo;using Microsoft.SqlServer.Management.Common;

//Código de acceso al Servidor SQL-Server 2005ServerConnection SC = new ServerConnection(@"MARINO-XP-PRINC\SQL05CTP");this.richTextBox1.Text = "Cadena de Conexión: " + SC.ConnectionString + "\n";this.richTextBox1.Text += "Nombre del servidor: " + SC.TrueName + "\n";this.richTextBox1.Text += "Protocolo de red: " + SC.NetworkProtocol.ToString() + "\n";this.richTextBox1.Text += "Número de Versión: " + SC.ServerVersion.BuildNumber.ToString() + "\n";this.richTextBox1.Text += "Perfil de usuario: " + SC.UserProfile.ToString() + "\n";

Figura 2. Salida en ejecución del fuente anterior

Server Servidor = new Server(@"MARINO-XP-PRINC\SQL05CTP");this.richTextBox1.Text += "Nombre del servidor: " + Servidor.Name + "\n";this.richTextBox1.Text += "Estado del servidor: " + Servidor.State.ToString()+ "\n";this.richTextBox1.Text += "Lenguaje por defecto: " +

Servidor.Configuration.DefaultLanguage.Description + "\n";this.richTextBox1.Text += "Plataforma: " + Servidor.Information.Platform + "\n";this.richTextBox1.Text += "BB.DD: " + Servidor.Databases[0].Name.ToString() + "\n";this.richTextBox1.Text += "Plataforma: " + Servidor.Information.Platform + "\n";this.richTextBox1.Text += "Memoria: " + Servidor.Information.PhysicalMemory + " Mb. \n";this.richTextBox1.Text += "Versión: " + Servidor.Information.VersionString + "\n";this.richTextBox1.Text += "Perfil de usuario: " +

Servidor.ConnectionContext.UserProfile.ToString() + "\n";

foreach (Database db in Servidor.Databases){

this.richTextBox1.Text += db.Name + ':' + db.Size + "K \n";}

foreach (Table t in Servidor.Databases[0].Tables){

this.richTextBox2.Text += t.Name +"\n";}

foreach (Column c in Servidor.Databases[0].Tables[0].Columns){

this .richTextBox3.Text += c.Name + "\n";}

Fuente 2

Fuente 1

Fuente 3

Figura 3. Información extendidamediante la clase Server

Page 62: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

bros, son –a su vez– otras colecciones. El código fuen-te, sólo tiene que ir creando los objetos de más bajonivel (columnas), para ir añadiéndoles a las coleccio-nes de tablas, que, por su parte, serán finalmente aña-didas a las bases de datos. Puede ver un ejemplo sen-cillo en el fuente 4.

Como puede verse, operamos de forma escalonada.Primero, una referencia a la base de datos. A partir deahí la creación del objeto Table, indicando su nombre.Como cada tabla del servidor puede pertenecer a un sche-ma o al predeterminado dbo, asignamos el esquemacorrespondiente, perfilamos las características de com-portamiento del campo identidad, añadimos los objetoscolumn a la colección (Columns), y cuando todo está lis-to, lanzamos el método Create(), que se encarga de lacreación física de los objetos en el servidor, como pode-mos ver en la ventana de administración de SQL ServerManagement Studio de la figura 4.

Sólo una puntualización: si la conexión está operan-do en el modo predeterminado, la sentencia de creaciónse envía inmediatamente al servidor. Si –por el contra-rio– hubiéramos preferido operar en modo CaptureSQL,las sentencias se almacenarían para un uso posterior.

Por otro lado, las clases manejadas hasta aquí dispo-nen de mecanismos de modificación y borrado de obje-tos, cuya sintaxis sigue reglas de coherencia mnemotéc-

nica con las sentencias T-SQL asociadas en el servidor(Alter(), para modificar, Drop() para borrar, etc.).

Pero, como apuntamos más arriba, no es ésta la úni-ca funcionalidad posible, y dentro del apartado de“Utilidades” encontramos clases que pueden ser de extre-ma utilizada para los administradores de bases de datos.Un buen ejemplo de esto está en las capacidades de copiade seguridad y restauración, que se exponen mediantelas clases Backup y Restore, respectivamente.

Concluimos, pues, esta breve introducción a SMOcon un par de ejemplos de estas capacidades.

Como vemos, sigue la misma línea de sencillezque el código anterior. Se crea un objetoCopiaSeguridad y se asigna su origen, tipo de almace-namiento, ubicación física y acción a realizar.Finalmente, el método SqlBackup() genera las órde-nes y produce la copia.

Para la restauración el proceso, es muy similar:

Como se ve, el mecanismo inicial es similar, siendoel método Add() del objeto Restore el encargado de car-gar la copia en el sistema. Para más seguridad, añadimosun pequeño control de verificación que el objeto Restorepermite mediante SqlVerify() sobre el servidor corres-pondiente. Todo puro .NET Framework.

ConclusiónEstamos ante un subsistema de gran potencia a la

hora de manipular las bases de datos. Nos permite acce-der a cualquier recurso del servidor (también a los pro-pios datos) desde un programa .NET realizado en cual-quiera de los 3 modelos (Consola, Windows o Web),capacitando para la creación de soluciones .NET de altorendimiento, que incluyan mecanismos de manteni-miento del servidor sin recurrir a SQL ServerManagement Studio, de forma clara y sencilla.

dotN

etM

anía

<<

62

dnm.directo.entrevistas<<

//Creación de objetos en el servidor Database BBDDAdventureWorks = Servidor.Databases["AdventureWorks"];Table Descuentos = new Table(BBDDAdventureWorks, "Descuentos");Descuentos.Schema = "Sales";Column IDDescuento = new Column(Descuentos,"IDDescuento", DataType.Int);Column Concepto = new Column(Descuentos, "Concepto", DataType.NVarChar(40));

//Asignación de propiedades específicas de columnasIDDescuento.Identity = true;Concepto.DefaultSchema = "Sales.Descuentos";//Construcción de la jerarquía de objetos y creación final.Descuentos.Columns.Add(IDDescuento);Descuentos.Columns.Add(Concepto);Descuentos.Create();

Fuente 4

Figura 4

//Asumimos que disponemos de un objeto Server (Servidor)Backup CopiaSeguridad = new Backup();CopiaSeguridad.DataBase = "AdventureWorks";CopiaSeguridad.DeviceType = DeviceType.File;CopiaSeguridad.Devices.Add(@"C:\Backups\CopiaAW.bak");CopiaSeguridad.Action = BackupActionType.Database;CopiaSeguridad.SqlBackup(Servidor);

Fuente 5

//Asumimos que disponemos de un objeto Server (Servidor)Restore CopiaSeg = new Restore();CopiaSeg.DeviceType = DeviceType.File;CopiaSeg.Devices.Add(@"C:\Backups\CopiaAW.bak");bool Verificación = CopiaSeg.Sqlverify(Servidor);if (Verificación == true)

MessageBox.Show("Restauración correcta");else MessageBox.Show("La copia no es operativa");

Fuente 6

Page 63: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento
Page 64: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

SQL Server 2005 Express EditionEl menor de la familia

Dicen que las mejores cosas de la vida son gratis. SQL Server 2005 Expresstambién lo es. Se trata del sucesor de MSDE y del hermano menor de las edi-ciones de SQL Server 2005. Pero no por ello está exento de interés ya quetiene el mismo motor de base de datos que sus hermanos mayores.

<< debemos aclarar es que esta ediciónExpress, no se trata de una versión demo ni de unaversión de pruebas con fecha de caducidad, se tra-ta de un completo sistema de base de datos, inclu-so tiene el mismo motor de base datos que las otrasediciones superiores. Además es totalmente gra-tuita y podemos distribuirla junto con nuestros desa-rrollos.

Pero por supuesto tiene sus limitaciones, queestán a nivel de sistemas, ya que esta versión sólose ejecuta en máquinas con un hardware limitado,no permitiéndonos la escalabilidad o el alto rendi-miento que nos permiten las ediciones superioresde este mismo producto. Aunque sí que nos resul-tará muy sencillo escalar bases de datos SQL Server2005 Express a SQL Server 2005 Workgroup,Standard o Enterprise ya que se trata del mismomotor de base de datos.

Este producto está dirigido a desarrolladores noprofesionales o estudiantes que gracias a esta edicióngratuita pueden utilizar y conocer las característicasde SQL Server. Por tanto en la mayoría de los casospuede ser muy útil ya que se trata de un completo sis-tema de base de datos, pero para entornos de pro-ducción se recomienda una de las ediciones superio-res de SQL Server.

CaracterísticasSQL Server 2005 Express puede considerarse el

sucesor de MSDE, aunque con mejoras como unamayor sencillez para su gestión y un mejor rendi-miento.

Este producto tiene el mismo motor de base dedatos que toda la familia SQL Server 2005, con todaslas ventajas que eso implica, y que por supuesto utilizael mismo lenguaje Transact-SQL. Podemos crear losmismos procedimientos almacenados, triggers, views ydemás funcionalidades de SQL Server. Incluso pode-mos utilizar esa nueva característica tan esperada portodos en SQL Server 2005, la de programar nuestrosprocedimientos almacenados con C#.

Otra nueva característica es la movilidad de lasbases de datos de un servidor a otro con XCOPY. Graciasa esta nueva utilidad podemos mover un fichero debase de datos MDF de una máquina a otra, y ya esta-rá lista nuestra base de datos para seguir funcionan-do. Esta utilidad es muy práctica cuando queremosdistribuir nuestra aplicación junto con la base de datos,de forma que adjuntamos nuestro fichero de base de

Pedro Pozo

dnm.laboratorio

Lo primero que

Pedro Pozoes redactor de dotNetManía. Es

es consultor e-Bussines.Ingeniero Técnico Informático

de Sistemas y Webmaster del portal para desarrolladores

.NET Framework Clikear.com

...no se trata de una versión demo ni deuna versión de pruebas con fecha de caducidad, se trata de un completo

sistema de base de datos, incluso tiene el mismo motor de base datos que

las otras ediciones superiores

Page 65: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

datos en la distribución de la aplicación y ya estará lis-to para usar sin necesidad de realizar ninguna confi-guración adicional. Para poder utilizar esta base dedatos deberemos utilizar la opción AttachDBFilenameen nuestra cadena de conexión, que nos permite conec-tar con nuestra base de datos que ha sido cambiada delocalización.

En cuanto a las posibilidades para trabajar conXML, se ha incluido soporte nativo del mismo.Disponemos de un nuevo tipo de datos XML, inte-grándose así perfectamente el sistema de base de datoscon este lenguaje universal, permitiéndonos hacerdesarrollos mucho más versátiles.

Entre las nuevas características también están elsoporte de replicación y SQL Service Broker. El sopor-te de replicación consiste en tener una base de datosduplicada en varios servidores utilizando el modeloeditor-suscriptor que se sincroniza en unos intervalosde tiempo predefinidos; mientras que SQL ServiceBroker nos permite trabajar de modo desconectado,aunque realmente Service Broker sólo funciona en com-binación con otras ediciones de SQL Server 2005.Este nuevo servicio consiste en la comunicación entreservidores SQL Server 2005 mediante contratos demensajería llamados diálogos. Puede ver mucho mássobre Service Broker en el excelente artículo deFernando Guerrero.

Además, Microsoft ha creado una nueva aplica-ción que sirve de interfaz de usuario para gestionarbases de datos y que podemos descargar de forma gra-tuita de Internet. Esta nueva aplicación se llama SQLServer Express Manager y la comentaremos más ade-lante en este mismo artículo.

En cuanto a los requisitos hardware y softwarenecesarios para instalar SQL Server 2005 Express,podemos verlos en la tabla siguiente:

Diferencias

Ya hemos comentado con anterioridad que estaedición Express tiene el mismo motor de base dedatos que las ediciones superiores, por lo cual pasaruna base de datos creada con SQL Server 2005Express a SQL Server 2005 Workgroup, Standard

o Enterprise es un proceso inmediato que no supo-ne ningún problema.

Pero entonces ¿en qué se diferencia la ediciónExpress del resto de ediciones?. Pues bien, principal-

mente en que tiene limitaciones en cuanto al hard-ware en el que puede ser instalado, y que no tienecaracterísticas de alta disponibilidad e inteligencia denegocios.

Esta edición Express tiene sus limitaciones a nivelde hardware, que son las siguientes:

• Tamaño máximo de bases de datos de 4 GB.• Tamaño máximo de memoria RAM de 1 GB.• Un único microprocesador (aunque puede fun-

cionar en un sistema multiprocesador sólo uti-lizará uno).

También tiene otras diferencias con respecto a lasediciones superiores, que son:

• No dispone de características de alta disponibi-lidad como data mirroring o clustering.

• No dispone de búsqueda de texto completa.• No tiene SQL Agent.• No dispone de servicios de notificación y data-

warehouse.

En la tabla siguiente podemos ver una compara-ción de las limitaciones de hardware que tiene cadauna de las ediciones de SQL Server 2005.

Sin embargo, SQL Server Express, es totalmentegratuito, y podemos incluirlo en la distribución de nues-tras aplicaciones, sin que nos suponga ningún incrementoen los gastos de nuestros desarrollos.

dotN

etM

anía

<<

65

dnm.laboratorio<<

Requerimientos Hardware Requerimientos Software

Microprocesador 600mHz (reco-mendado 1GB)

Windows 2000,Windows XPProfessional ó Windows 2003

Memoria RAM 256MB (recomen-dado 512)

Microsoft .NET Framework2.0

170MB de espacio libre en discoduro

Microsoft Internet Explorer6.0 SP1 o mayor

Tabla 1

Express Workgroup Standard Enterprise

1 CPU 2 CPU 4 CPU Ilimitada

1 GB RAM 3 GB RAM Ilimitada Ilimitada

4GB Base Datos Ilimitada Ilimitada Ilimitada

Tabla 2

Otra nueva característica es la movilidad de las basesde datos de un servidor a otro con XCOPY.Gracias aesta nueva utilidad podemos mover un fichero de basede datos MDF de una máquina a otra, y ya estará lista

nuestra base de datos para seguir funcionando

Page 66: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

SQL Express Manager

Al instalar SQL Server 2005 Express podemoscomprobar que la única herramienta de usuario quenos proporciona es SQL Computer Manager que sirvepara gestionar los servicios básicos de SQL Server yconfigurar los protocolos de red. Por tanto, Microsofttambién ha desarrollado una aplicación para gestio-nar nuestras bases de datos, que es también gratuitay muy sencilla de utilizar: se trata de SQL ExpressManager.

Esta aplicación tiene un interfaz de usuario muysencillo de utilizar, con la que podemos realizar lastareas básicas de gestión de una base de datos, ayu-dados en muchas ocasiones por asistentes. Además depermitirnos conectar con bases de datos SQL Server2005 Express, también podemos hacerlo con otrasediciones de SQL Server 2005, SQL Server 2000, yMSDE 2000.

Como podemos ver en la figura 1, esta herra-mienta incluye un explorador de objetos, que recuer-da en su aspecto al Enterprise Manager, aunque conuna funcionalidad más reducida. Así, podemos hacertareas típicas como gestionar las tablas, procedi-mientos almacenados, crear usuarios, entre otras.También incluye un editor de Transact-SQL para poder realizar consultas a labase de datos.

Integración con Visual Studio .NET 2005

La integración de SQL Server Express con VisualStudio .NET es casi total, se nota que se ha hecho unesfuerzo para aumentar la facilidad de uso y la senci-llez en nuestros desarrollos.

Tan solo arrastrando y soltando una tabla de nues-tra base de datos sobre un formulario podemos tener-la disponible en nuestra aplicación, sin escribir unasola línea de código o, por ejemplo, también se pue-de hacer del mismo modo la unión de un control list-box a un campo de nuestra base de datos. Todo de unaforma visual e intuitiva, moviendo los campos de labase de datos con nuestro ratón sobre el control quenos interese.

Una nueva característica es que ahora podemosutilizar objetos como fuente de datos de un con-trol. Por ejemplo, un control datagrid puede enla-zarse con un objeto de nuestra aplicación que repre-sentara a algún elemento de nuestra base de datos,por ejemplo, una tabla, vista o procedimiento alma-cenado. De esta forma en los desarrollos en n-capaspodemos establecer una clara separación entre nues-tro interfaz de usuario, la lógica de negocio y lacapa de datos.

ConclusionesPodemos considerar, por tanto, a Microsoft SQL

Server 2005 Express como una base de datos ligera,portable y de sencillo manejo, que podrá ser utiliza-da por una amplia variedad de usuarios debido a sucarácter gratuito. Sin duda será de gran utilidad paradesarrolladores, estudiantes o aplicaciones que no exi-gen una alta disponibilidad o un alto rendimiento yquizá un primer paso para abordar proyectos más gran-des debido a su facilidad para migrar a ediciones supe-riores de SQL Server 2005.

dotN

etM

anía

<<

66

dnm.laboratorio<<

Figura 1. SQL Express Manager

Podemos considerar, por tanto, a Microsoft SQL Server 2005 Express como una base de datos ligera, portable y de sencillo manejo, que podrá ser utilizada por

una amplia variedad de usuarios debido a su carácter gratuito

Page 67: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento
Page 68: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

que después departicipar activamente en comunida-des virtuales, Callsql.com, helpdna.net,siquelnet.com, portalsql.com y en los gru-pos de noticias públicos, pensamos quesería buena idea ponerle cara a esa gen-te, hacer más humano si se puede estemundillo. Así pues, podría decirse queGUSE nació hace muchos años enTorrevieja una calurosísima noche enque nos juntamos a cenar al final 3familias que no se conocían más quepor Internet. Después de esto y de fortalecer esa amis-tad creímos que sería buena idea, unir a más gente enreuniones con carácter técnico y hablar de nuestrascosillas :-), quedar a comer alguna vez, en fin esas cosasque hacen más humana esta profesión.

De entonces a ahora hay un largo camino que,apoyados por Microsoft, hemos recorrido y ahora,casi 50 profesionales estamos ilusionados con este pro-yecto que ya tiene nombre y forma y que esperamosnos brinde muchísimos éxitos profesionales.

Os cuento la historia más reciente, si puede poner-se un título sería “y de cómo dio sus primeros pasosGUSENET”:

El 27 de mayo en la Facultad de Informática deMurcia y gracias a la colaboración de la propia facul-tad y de Microsoft, tuvimos la oportunidad de reu-nirnos por segunda vez a tratar temas relacionadosdirectamente con .NET y SQLServer.

En la primera reunión1, allá por julio del añopasado en Torrevieja, tuvimos la oportunidad de

disfrutar de dos charlas magistralesa cargo de Ron Talmage y MikeHotek, en esa reunión nos hicieronde anfitriones Fernando G.Guerrero uno de los dos RegionalDirector de Microsoft y EladioRincón MVP en SQL. Tras aquellaprimera experiencia, muy positiva,nos propusimos constituir firme-mente el grupo de usuarios, aún sinnombre. Sin embargo las circunstan-cias hicieron que no nos constituye-

ramos realmente hasta mayo de este año.La segunda reunión, este mismo Mayo, fue

espectacular, los tres ponentes que estuvieron connosotros, David Carmona , Antonio Soto yFernando G. Guerrero dieron realmente el espí-ritu y el conocimiento que esperamos todos obte-ner de estas reuniones.

David Carmona, contó las novedades de VisualStudio Team System –si habéis tenido la oportuni-dad de disfrutar de alguna charla de él sabréis elmagnifico nivel que da a sus presentaciones y loamenas que resultan–. En un evento como este, conel número ideal en mi opinión de asistentes (algomenos de 50) la cercanía que imprimió a su charlahizo que no sólo técnicamente fuese impresionan-te, sino que también fuese algo así como una reu-nión entre amigos.

Antonio Soto vino desde La Coruña a contarnos lasnovedades sobre seguridad que trae SQL Server 2005,es un tema realmente denso, certificados, claves, encrip-

dotN

etM

anía

<<

68

dnm.comunidad.net<<

GUSE.NETGrupo de Usuarios del Sureste de España

<< Ya hace mucho tiempo

Muchas veces la inquietud es la fuerza mayor que hay en la naturaleza, así naceGUSE, el Grupo de Usuarios del Sureste de España, por la inquietud que algunos

sentimos hacia la tecnología en la que trabajamos todos los días.

1 Nota del editor: La primera reunión se llamó “I Reunión PASS Spanish Group” y dimos cuenta de ella en el número 7, el deseptiembre de 2004 en dotNetManía. Fue un 9 de julio de 2004.

Page 69: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

tación de campos, sin embargo, Antonio supo darle estetono amable que hace que las cosas complejas parezcanmenos complejas. Nos contó cuales eran las formas paraencriptar /desencriptar y como podía afectar esta nuevafuncionalidad a los servicios SQL.

Fernando G. Guerrero hizo una especie de pre-guntas al experto mezcladas con ese saber estar queda la experiencia internacional del “MaestroGuerrero”, creo que simplemente nos “enamoró” tec-nológicamente hablando. Fue capaz de transmitir deforma muy sencilla lo que son buenas prácticas y loque no lo son, ahondando en aquellos temas en quela audiencia parecía más interesada.

En este punto establecimos un diálogo ameno yfluido entre los integrantes del grupo de usuarios,debatimos asuntos técnicos, por supuesto, pero tam-bién asuntos relacionados con la logística del grupo.Entre otras cosas, por ejemplo, quedamos que todaslas sesiones tendrían una parte de ofertas/demandasde empleo, en las que las empresas interesadas (esténo no involucradas en el grupo) puedan encontrar pro-fesionales motivados y bien formados en tecnología.

Al final lo que vamos a hacer son reuniones men-suales, sea invierno o verano, en ellas trataremos lasúltimas tendencias de la tecnología (menudo fin deaño nos espera :-), y todos aquellos temas que puedanresultar de interés para el trabajo del día a día.

En cuanto al formato, decidimos que sería mixto,es decir, un par de horas serán de presentaciones for-males, con Powerpoint, demos y todas esas cosas, y lasegunda parte será de preguntas y respuestas, mezcla-das con casos prácticos.

La idea es que cada uno de los integrantes del gru-po pueda sentirse libre de consultar lo que no sabe, oexponer cómo está haciendo las cosas, simplemente paravalidar que no está inventando la rueda de nuevo y escu-

char puntos de vista de otras personas más alejadas de eldía a día este que nos somete a tanta presión.

Para la tercera reunión (que hemos bautizado comoEpisodio III), vamos a contar con Juan Salvador Díazy con Salvador Ramos y con Sergio Vázquez, que nosvan a hablar de SSIS, es decir, de los nuevos retos a losque nos enfrentaremos con los servicios de integraciónde Microsoft SQL 2005 (antes DTS), también haremos

un overview de servicios que tenemos con SQL –será algorápido pero muy práctico– y veremos también aspectosde migración de ASP a ASP.NET, después las seccionesque os hablaba, ofertas/demandas de empleo, y mesaredonda con casos prácticos. Algunos de estos casos yalos estamos discutiendo en off para garantizar que seamuy ágil y amena la sesion.

Y después de esto ¿qué? Bueno pues la verdad esque parece que vamos a seguir pisando fuerte, es muyposible que en julio contemos con una sorpresa muyagradable, en este momento estamos cerrando podercontar con el gran Itzik Ben-Gan, escritor habitualde SQLServer-Magazine y que ha aceptado nuestrainvitación a venir. Es muy probable que esto cuaje, yque cerremos unas sesiones muy interesantes.

Así que ya sabes, si estás a un tiempo razonable entu desplazamiento y te apetece tratar la tecnología des-de un punto de vista fresco y dinámico, puedes acu-dir sin ningún problema a nuestras reuniones, queserán alternativamente en Alicante y Murcia y a la quequedáis todos, formalmente invitados.

Me gustaría terminar estas líneas agradeciendo aMicrosoft la gran acogida que han dado a esta iniciativa,

a los miembros del grupo que están haciendo posible quela ilusión de unos cuantos “locos” de la informática seconcrete y a dotNetManía que nos presta su espaciopara que os contemos nuestras ilusiones.

Nos vemos en el sureste en la próxima reunión delGUSE.NET.

dotN

etM

anía

<<

69

dnm.comunidad.net

Miguel Egea

...vamos a seguir pisando fuerte, es muy posibleque en julio contemos con una sorpresa muy

agradable, en este momento estamos cerrandopoder contar con el gran Itzik Ben-Gan,escritor habitual de SQLServer-Magazine

Eladio Rincón Fernando Guerrero Salvador Ramos Miguel Egea Antonio soto

Algunas de las personas que participan o han participado en las reuniones de GUSE.NET

Page 70: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

perspectiva del desarrollador, SQLServer 2005 introduce mejoras significativas en variasáreas, incluyendo soporte de tipos de datos, consultasdependientes y modificación, y múltiples resultadosactivos (MARS). El proveedor de datos ADO.NETpara SQL Server también tiene nuevas posibilidadesvinculadas a las mejoras de SQL Server 2005. Algunasde estas mejoras han sido algo sobrevaloradas y correnel riesgo de ser mal utilizadas.

¿No debería dar el paso y comenzar a explorarMARS ? Soy un tanto tradicional y no me fío dema-siado cuando se comienza a dar mucho bombo a unatecnología dada. ¿Salvará MARS a la Tierra?

Te comprendo. Yo también soy un tanto escépti-co cuando veo eso en cualquiera de sus formas. En mihumilde opinión, Multiple Active Result Set (MARS),como muchas otras iniciativas de cara al desarrollo enSQL Server 2005, no salvará nuestro amado mundo;ni siquiera lo conquistará. Nos ayudará a manejarmejor algunos problemas de programación. Así queajústese el cinturón, ponga el motor en marcha yvamos a explorar.

Cualquier versión de SQL Server anterior a la 2005,soporta solamente un conjunto de resultados abiertopor conexión. Otras bases de datos han soportado estacaracterística desde hace mucho –sin importar la imple-mentación– y ésta es una de las características que losprogramadores han solicitado desde mucho tiempoatrás al equipo de desarrollo de SQL Server. EnADO.NET 1.x, tanto el proveedor nativo de SQLServer como el proveedor OLE DB para SQL Serversoportaban únicamente un conjunto de resultados porconexión. Curiosamente, el proveedor OLE DB noadministrado y la vieja versión de la librería de ADO,sí parecen soportarlo. ¿Qué sucede? Que es sólo unailusión. En OLE DB el efecto de múltiples resultadosactivos se consigue abriendo nuevas conexiones nomanejadas por el pool asociado.

En SQL Server 2005, la característica MARS estáimplementada de forma nativa y permite a una aplica-ción tener más de un SqlDataReader abierto en la mis-ma conexión, cada uno lanzado desde un comando dis-tinto. Tener más de un SqlDataReader abierto por cone-xión ofrece potencialmente mejoras en el rendimiento,ya que múltiples Readers son menos pesados que múlti-

ples conexiones. Al mismo tiempo, MARS añade cier-tas penalizaciones ocultas por operación, debido a suimplementación interna. Considerar los inconvenientesy realizar una decisión sensata, es, como puede imagi-narse, labor personal suya.

Para habilitar MARS en una conexión SQL Server2005 (o incluso en una SQL Server Express 2005), nohay que hacer nada. Está activa por defecto. Para desha-bilitarla, se necesita configurar el atributo MultipleActiveResultSets a false, en la cadena de conexión:

string conn = "MultipleActiveResultSets=false; … ";

El uso canónico de MARS (su escenario de utiliza-ción más apropiado), es cuando se utiliza un DataReaderpara navegar por un conjunto de resultados, mientrasotro comando sobre la misma conexión lanza sentenciasde actualización sobre la base de datos, a medida quevamos leyendo. En el mundo anterior a .NET, proba-blemente haya usado un cursor de servidor para esaslabores. Pero en el deslumbrante mundo de ADO.NETlos cursores de servidor se han eliminado. Si necesita leerdatos al tiempo que actualiza, está en dificultades.Consideremos un simple ejemplo de código para leerlos empleados e invertir los nombres, pongamos de Nancya ycnaN (Ver fuente 1).

Lo primero, obtenemos un DataReader y, a continua-ción, recorremos todos los registros. Leemos el conte-nido de la columna FirstName, la guardamos en una cade-na e invertimos el orden de sus caracteres. Después lee-mos el valor de la clave primaria de ese registro, y lan-zamos un comando UPDATE para actualizar los resultadosmodificados. Se lanza el comando UPDATE sobre la mis-ma conexión que se está utilizando con el Reader. Al final

SQL Server 2005

Dino Esposito

dnm.todotnet.qa

<< Incluso desde la sola

Dino Esposito es redactor de dotNetManía.

Formador, consultor y escritorafincado en Roma.Miembro

del equipo de Wintellect,Dino está especializado en

ASP.NET y ADO.NET. Puedeenviarle sus consultas a

[email protected]

¿No debería dar el paso y comen-zar a explorar MARS? ¿Salvará

MARS a la Tierra¿ ?

Page 71: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

del bucle, cerramos el Reader. Para refres-car alguna interfaz de usuario, digamosun DataGrid, obtenemos otro Reader a par-tir del mismo comando de consulta y mos-tramos los nombres actualizados. Si se eje-cuta sobre un SQL Server 2005, funcio-na como un campeón.

Si intentas hacer esto en ADO.NET1.x o en ADO.NET 2.0 con MARS des-habilitado, obtienes una excepción, acu-sando que el DataReader asociado con laconexión está abierto, y debiera cerrarseantes de intentar ejecutar un comandoUPDATE. En otras palabras, leer y escribiral mismo tiempo, por la misma conexión,es una característica que sólo MARS pue-de habilitar. Como comentario paralelo,considera que, para que funcione MARS,es preciso utilizar diferentes objetosSqlCommand, para las diferentes sentenciasque se quieran ejecutar. En el fuente 1,utilizo el mismo objeto Command (la varia-ble cmd1), para leer la lista de los emplea-dos 2 veces. La primera para navegar, lasegunda para recuperar los nombresmodificados. Para que esto funcione ten-go que usar distintos Commando cerrar pre-viamente el Reader.

Otra gran ventaja de MARS es que, siestamos procesando una transacción, te

permite ejecutar código en el mismo ámbi-to del nivel de aislamiento que la conexiónoriginal. No se obtiene lo mismo abrien-do una segunda conexión por debajo.

Existen algunos “cos-tos” asociados con MARS:Revisemos el proceso de eje-cución de un comando.Cuando se crea una cone-xión, ADO.NET crea unaconexión física y una lógica.La conexión lógica va a parara una especie de pool para sureutilización posterior. Cuando intentasejecutar un método de un objetoSqlCommand, ADO.NET busca una cone-xión lógica disponible. Si se encuentra una,se vincula al objeto SqlCommand de formaque pueda ejecutarse. Si no, se crea ydevuelve una nueva conexión lógica. Nohace falta decir que ese SqlCommand requie-re de una conexión lógica y que esta cone-xión se asigna un instante antes de la eje-cución. La distinción entre conexionesfísicas y lógicas es parte del funcionamien-to interno de SQL Server en lo que con-cierne a la ejecución del comando. Cuandose completa el comando, la conexión lógi-ca es liberada nuevamente en el pool deconexiones.

Las conexiones lógicas son recursos“caros” y valiosos, y se agrupan en una zonade memoria de 10 elementos. En tiempode ejecución los comandos son agrupadosen paquetes y ejecutados en transaccionesinternas contra tablas de la base de datos.Hay que recordar que MARS está defini-do en términos de agrupamiento secuen-cial, no en términos de ejecución parale-la. La ejecución actual, sin embargo, sólopuede ser lanzada en puntos bien defini-dos. La mayoría de las sentencias, dehecho, deben ejecutarse de forma atómi-ca en un proceso batch. Las excepcionesson SELECT, BULK INSERT y FETCH. Para elresto de comandos, la ejecución debe com-pletarse antes de que otro comando pue-da ser lanzado sobre la misma conexión.El manejo excesivo de comandos, puedeoriginar una utilización sobrecargada deconexiones. Incluso más sobrecargada queutilizar distintas conexiones o cursores deservidor.

Este comportamiento de MARS estádisponible en la versión 2.0 de .NETFramework para los proveedores admi-nistrados OLE DB y Oracle. El provee-dor de Oracle, no soporta el atributoMultipleActiveResultSet en la cadena deconexión, pero habilita esa característicaautomáticamente. El proveedor OLE DB

no soporta tampoco ese atributo en lacadena de conexión, pero simula múlti-ples resultados cuando se conecta a ver-siones anteriores de SQL Server o cuan-do la librería MDAC 9.0 no está presen-te. Si operamos a través de OLE DB enuna versión SQL Server 2005 equipadacon MDAC 9.0, la característica está acti-va de forma nativa.

Si OLE DB soporta ya múltiplesResultsets, ¿por qué necesitaría utilizarMARS para trabajar con ellos? O, dichode otra forma, ¿por qué Microsoft nolo implementó como en OLE DB?

La lectura entre líneas de esta pre-gunta, sería algo así como ¿En qué for-ma difieren los múltiples Resultsets de

dotN

etM

anía

<<

71

dnm.todotnet.qa<<

Si OLE DB soporta ya múltiplesResultsets, ¿por qué necesitaría utili-zar MARS para trabajar con ellos?

¿ ?

using (SqlConnection conn = new SqlConnection(connString)){

SqlCommand cmd1 = new SqlCommand("SELECT * FROM employees", conn);cmd1.Connection.Open();SqlDataReader reader = cmd1.ExecuteReader();

// Navegar por el data readerwhile (reader.Read()){

// Invertir el nombrestring firstNameReverted = reader["firstname"].ToString();char[] buf = firstNameReverted.ToCharArray();Array.Reverse(buf);firstNameReverted = new string(buf);

// Ver el nombre invertido en la misma conexiónint id = (int)reader["employeeid"];SqlCommand cmd2 = new SqlCommand(

"UPDATE employees SET firstname=@newFirstName WHERE employeeid=@empID", conn);

cmd2.Parameters.AddWithValue("@newFirstName", firstNameReverted);cmd2.Parameters.AddWithValue("empID", id);cmd2.ExecuteNonQuery();

}reader.Close();

// Obtener un nuevo Reader para refrescar la Interfaz de Usuariogrid.DataSource = cmd1.ExecuteReader(); grid.DataBind();cmd1.Connection.Close();

}

Fuente 1

Page 72: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

OLE DB y MARS en SQL Server 2005?Imagine el mismo ejemplo canónico queconsideramos antes, actualizar mientrasleemos. Si escribe ese código para usarOLE DB funciona normalmente. Sinembargo, lo que sucede internamente,merece algo más de atención. El puntoclave es que, en OLE DB, el comandopara actualizar el registro es enviado a tra-vés de una segunda conexión, invisible yno perteneciente al pool de conexiones.MARS en SQL Server 2005 funcionadiferente y utiliza la misma conexión. Lapregunta real sería ¿cuál es mejor? ¿cuá-les fueron los inconvenientes que lleva-ron al equipo de desarrollo de SQLServer a implementar MARS de formadistinta? (Lo que ha supuesto un consi-derable trabajo adicional).

Cuando usamos OLE DB, SQLServer no trata las dos conexiones usadasde forma especial, son sólo dos conexio-nes más. Funcionan en entornos de eje-cución diferentes y pueden entrar enmutuo conflicto. Intente envolver el códi-go anterior dentro de una transacción defi-nida de forma explícita: seguirá funcio-nando en MARS, pero no en OLE DB.De hecho, el proveedor OLE DB impi-de la creación de una nueva conexión des-de una transacción local, o distribuida.

Incluso puede ser peor. Si la tran-sacción comienza con uno de los coman-dos, el proveedor no lo detecta, y le per-mite lanzar una segunda conexión. Eneste punto, los comandos que aparen-temente se encuentran en la misma tran-sacción, acaban ejecutándose en tran-sacciones distintas. En situaciones extre-mas, esto podría desembocar incluso enel temido “abrazo mortal” (deadlock),sobre todo si el nivel de la transacciónes alto (pongamos REPEATABLE READ oSERIALIZABLE) y los tiempos de ejecu-ción de los distintos comandos provo-can su entrelazado.

¿Habría que usar MARS en cur-sores de servidor? Bueno, creo que séla respuesta: no hay cursores de ser-vidor en ADO.NET, ¿no?

Tiene razón. No hay cursores de ser-vidor en ADO.NET, aunque su introduc-ción fue repetidamente anunciada e inclu-so existió una implementación de ella, enuna fase muy temprana de ADO.NET2.0. Sin duda, los cursores de servidor sonla forma más común de obtener la misma

funcionalidad que permite MARS hoy enSQL Server 2005. Sin embargo, aunqueambos tienen ciertos puntos en común,no se trata de lo mismo. Como si fueranmanzanas y naranjas, quizá tengan formassimilares, tengan el mismo color, se pro-duzcan y sean degustadas por la mismagente, pero son cosas bien distintas, enrealidad.

Los cursores de servidorsuministran una forma de proce-sar los resultados de una consul-ta, trabajando con una fila cadavez. Un cursor se declara porencima de una consulta, y a tra-vés de una operación fetch seobtienen las filas individuales apartir del conjunto de resultados.Una vez que las filas han sido procesadas,o ya no se necesitan los resultados, el cur-sor es destruido, lo que libera los recur-sos de servidor asociados con él. Durantelas operaciones fetch, no hay código eje-cutándose en el servidor; sólo se preser-va el estado. La principal limitación delos cursores de servidor es el rendimien-to. Los cursores requieren un viaje de iday vuelta al servidor por cada operaciónfetch, mientras que los resultados deMARS son accesibles a medida que seencuentran disponibles.

Al final, la existencia de MARS noelimina la necesidad de los cursores. Hayescenarios que sólo pueden ser procesa-dos mediante cursores. Debido a esto, notodas las aplicaciones que utilizan curso-res de servidor pueden ser cambiadas parausar MARS. Y, lo que es más importan-te acerca de MARS: no utiliza ejecuciónparalela de sentencias.

He leído que SQL Server 2005soporta XML de forma nativa. ¿Esono existía ya? ¿Cuál es la diferenciacon FOR XML?

El que SQL Server 2005 soporte deforma nativa el tipo de datos XML, sig-nifica que ahora podemos almacenardatos XML en columnas individuales.Estoy de acuerdo en que, a primera vis-ta, esto no parece nada nuevo en el sen-tido de que XML es texto plano y para

almacenar datos XML en unacolumna lo único que se necesita esque el tipo de columna acepteentradas de texto. Lo que te permi-te hacer SQL Server 2005, sinembargo, es algo distinto. Ahora

podrías crear una columna del tipoXML. XML se convierte así en un tiponativo del mismo nivel que int o var-char. Es reconocido por la nueva sinta-xis de T-SQL y soportado por las herra-mientas de SQL Server, incluyendo eladministrador de conexiones delExplorador de Servidores de VisualStudio 2005.

SqlXml es el nombre oficial del nue-vo tipo en ADO.NET. El tipo pertene-ce al espacio de nombres SqlTypes comocualquier otro tipo de dato SQL.GetSqlXml() es el nuevo método de laclase SqlDataReader que devuelve elvalor de la columna en formato fuerte-mente tipado.

Este fragmento de código muestracómo ejecutar una consulta y recuperar elvalor de un campo particular declaradocomo XML. La clase SqlXml puede expo-ner los contenidos en cualquiera de las dosformas: como texto plano (propiedadValue) o a través de un XmlReader (con elmétodo CreateReader).

En este punto, debiera estar clara ladiferencia con FOR XML. La cláusula FORXML fuerza a que toda la salida de unaconsulta se convierta en XML; el sopor-te nativo XML de SQL Server 2005 tepermite trabajar con XML a nivel decolumna.

dotN

etM

anía

<<

72

dnm.todotnet.qa<<

Traducción por Marino Posadas

SqlDataReader reader = cmd.ExecuteReader();while (reader.Read()){

// El campo #1 contiene datos XML

// Leer datos y hacer algún procesoSqlXml xml = reader.GetSqlXml(1);ProcessData(xml);

}

¿Habría que usar MARS encursores de servidor? ¿ ?

He leído que SQL Server 2005soporta XML de forma nativa.

¿Eso no existía ya?¿ ?

Page 73: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

dotN

etM

anía

<<

73

<<

Microsoft SQL Server 2005 New FeaturesMichael Otey

Editorial: McGraw-Hill Osborne Media ISBN: 0072227761Páginas: 352Publicado: Junio, 2004

Prologada por uno de los propios Jefes de Proyecto de SQL-Server 2005, Otey (yacon más de 6 obras en su haber, y Senior Technical Editor de SQL Server Magazine)presenta una visión de las novedades de esta versión dividida en 3 apartados prin-cipales: Administración de bases de datos, Desarrollo y Business Intelligence.

De especial interés resultan los apartados de integración con el CLR, mejoras dellenguaje T-SQL, Integración de XML, mejoras de seguridad, y los nuevos mode-los de desarrollo: AMO, SMO, ODL, XMLA. Es de apreciar la concisión obteni-da, en poco más de 350 páginas.

A First Look at Microsoft SQL Server 2005 for DevelopersBob Beauchemin,Dan Sullivan,Niels Berglund

Editorial: Addison-WesleyISBN: 0321180593Páginas: 693Publicado: Junio, 2004

Conocíamos a Beauchemin por su anterior “Essential ADO.NET”, donde ya habíaprobado su mérito divulgador, habiendo estado entre las mejor consideradas res-pecto a su temática. Vuelve ahora con esta propuesta temprana, pero bien acogida,para revisar los aspectos de interés para el desarrollador de Bases de Datos, tenien-do el mérito de centrarse en aquellas cosas que -siendo necesarias- considera quepueden resultar más complejas al desarrollador “clásico” de BB. DD.: la integra-ción con CLR y su acceso, el soporte XML en T-SQL y como tipo de datos nati-vo, SQL-Server 2005 como plataforma de servicios Web, las mejoras de ADO.NETy el uso de la plataforma como servidor de aplicaciones.

dnm.biblioteca.net<<

dnm.biblioteca.net

Page 74: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento

SQL Skills: Se trata del sitio oficial de una de lasdivulgadoras de la herramienta (no me resigno allamarle “evangelista”) más populares en el mun-do, Kimberley Tripp, ponente habitual en Tech-Ed y PDC, y autora de numeroso artículos y obras

sobre el tema. El sitio está plagado de información: artículos,recursos, información de eventos, scripts de SLQ, etc.http://www.sqlskills.com.

SQL Team Un sitio pseudo-oficial, con cantidad deartículos, recursos, trucos, diseño de bases de datos,consultas, procedimientos almacenados, adminis-tración, OLAP, seguridad y muchísimo más. Sus

webmasters: Bill Graziano (graz) y Sean Baird. http://www.sql-team.com.

SQLDev.net: El sitio de Gert Drappers, otro de los gurús querecomendamos en este número. En este caso, mucho con-tenido y poco continente: todo artículos y código fuente.http://www.SQLDev.net.

El sitio oficial de Bill Vaughn, otro de los clásicos delas bases de datos. Aparte de la información sobresus actividades, mantiene una base de datos deartículos publicados por él en las revistas inter-nacionales más populares, como SQL-ServerMagazine, MSDN Magazine, Pinnacle, VisualStudio Magazine, VSJ Magazine, y un buen conjunto de infor-mación adicional. http://betav.com/BLOG/billva.

Las presentaciones de la conferencia PASS,disponibles eninglés en el sitio de Gert DrappersEl pasado mes de mayo, la conferencia PASS (una de lasmás importantes en su género en Europa), se celebró conuna gran participación. Muchas de las presentaciones estándisponibles gratuitamente en el sitio Web de GertDrappers (ver “Sitios recomendados”). Las conferencias(así como otro material similar) se encuentran enhttp://www.sqldev.net/events.htm#2005_PASS_European_Conference_May_11-13_2005,_Munich_(Germany).

Cada neurona es una célula pensante que funciona como unsofisticado ordenadorAl contrario de lo que se pensaba, (que el cerebro uti-lizaba amplísimas zonas para el almacenamiento de

recuerdos, ahora parece queel funcionamiento neuronaltiene una “personalidad indi-vidual”, tal y como se deducede las experiencias realizadaspor el Instituto Tecnológicode California, y publicadas enla prestigiosa revista Nature,recientemente. Algún inves-tigador ya sugiere a la vista de esto, las posibles impli-caciones del descubrimiento en los sistemas deInteligencia Artificial y Redes Neuronales. Para deta-lles sobre la noticia, ver la siguiente dirección :http://www.tendencias21.net/index.php?action=article&id_article=165499.

dotN

etM

anía

<<

74

no

tici

as.

no

tici

as

dnm.desvan<<

Marino Posadas

“The enterprise applications DesignPattern” y “The SqlDataAccessor Class”,son dos capítulos descargables de la obra“Design Patterns for Scalable Microsoft.NET Applications”, de Sten y PerSundblad disponibles en formato digital enhttp : //www.2xsundblad. com/ProductDetai l s .a spx?ProductID=1.

Documentos y código en la Red Sitios recomendados

"Choosing Between the CLR and T-SQL inSQL Server 2005", es un documento aclarato-rio sobre las posibilidades y beneficios que nospueden ofrecer las nuevas capacidades de inte-

gración con el CLR en SQL-Server 2005 frente al tra-dicional T-SQL. Por Andy Holloway, disponible enhttp://www.devx.com/dbzone/Article/28412?trk=DXRSS_LATEST.

SQL Server 2005 White Papers: el sitio "oficial" deMicrosoft (http://www.microsoft.com/sql/2005/techin-fo/default.asp) es un excelente lugar para comenzar a reco-pilar información sobre las nuevas características delproducto.

NOTA Además de los citados, no se pierda los sitios de Fernando Guerrero (www.solidqualitylearning.com), Eladio Rincón(http://www.siquelnet.com), Miguel Egea (http://www.portalSQL.com) y Salvador Ramos (http://www.helpdna.net), todos ellos autores deartículos en este ejemplar e integrantes de lo que ya se denomina universalmente “Escuela Mediterránea de SQL-Server” (y no “EscuelaMurciana de SQL-Server”, como hemos podido leer en algunos sitios extranjeros, sin duda desconocedores de nuestra geografía.).

Page 75: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento
Page 76: Visual Basic.NET • C# • Delphi • ASP.NET • ADO.NET • .NET …€¦ ·  · 2011-04-22Este componente de SQL Server es el pilar fundamental en el que se ... está exento