SQL Server y otras hierbas

Cambio de rumbo….

Me voy a tomar la libertad de escribir un artículo No-Técnico… Es más, voy a escribir algo personal por primera vez acá.

Cuando partí este blog en diciembre de 2009, mi intención era tener un lugar donde escribir sobre tecnologías Microsoft (principalmente SQL Server) con la idea de aportar contenido en español.

Durante este tiempo, he tratado de publicar contenido de distintos temas y profundidad. Si bien no he podido escribir tanto como me gustaría, creo que al menos lo que he publicado les ha servido…

Siempre me he considerado un ñoño. Y he estado orgulloso de serlo… Es más, una vez una amiga bromeaba sobre mi diciendo que yo me reía de los chistes de la serie The Big Bang Theory porque… DE VERDAD ENTIENDO ESOS CHISTES!!! (Y porque vio que en mi biblioteca hay libros iguales a los que hay en la biblioteca de Sheldon y Leonard…)

Sin embargo, la vida nos da sorpresas (y ahora entenderán el título de este articulo) y me hicieron una oferta que no pude rechazar… Hace un mes, me ofrecieron el puesto de Application Platform Product Marketing Manager en Microsoft Chile, y obviamente lo acepte.

Como el nombre del puesto lo indica, ahora tengo que preocuparme de mucho más que solo la parte técnica… Además, dentro de Application Platform esta no solo SQL Server (que sigue siendo mi producto preferido), sino que Visual Studio y BizTalk Server. Y en mi caso, además tengo a cargo Windows Azure.

Ustedes se preguntaran: ¿Y por qué debiera importarme eso? Muy buena pregunta, es porque de a poco el “y otras hierbas” de este blog va a ir tomando más importancia; a medida que comience a escribir sobre Visual Studio, BizTalk Servery Windows Azure. Además, voy a aprovechar esta plataforma para ir contándoles de actividades presenciales que tengamos acá en Chile y de actividades online que puedan serles de interés.

Esas eran las noticias, ahora a trabajar… Como siempre, sus comentarios y sugerencias sobre temas para escribir son más que bienvenidas.

CPU Affinity Mask y Virtualización de SQL Server

Después de varios meses sin escribir por temas de trabajo, vuelvo con un articulo de Denny Cherry (Twitter/Blog) sobre un tema que cada vez veo mas presente en distintos clientes… La virtualización de SQL Server. Ahí vamos!

Si tienes algún Servidor SQL físico que quieras virtualizar, debieras revisar la configuración de Affinity Mask antes de mover la maquina desde el ambiente físico al virtual usando algún software P2V. La razón para esta precaución es que la Affinity Mask se configura específicamente para la CPU y el numero de núcleos de la CPU no será el correcto y no podrás obtener la configuración correcta usando sp_configure sin obtener un error como el que se muestra a continuación

Msg 5832, Level 16, State 1, Line 1

The affinity mask specified does not match the CPU mask on this system.

Si no se han convertido las maquinas antes, simplemente cambiamos las affinity mask a 0 lo cual las configura para todos los procesadores. Si ya hemos convertido las maquinas, la mejor opción es conectarnos a los SQL Server usando la conexión dedicada y cambiamos manualmente el valor en la tabla de sistema usando la siguiente consulta

UPDATE sys.configurations

SET value = 0

WHERE Name = ‘affinity mask

Ojala nunca tengan este problema, pero si si les ocurre al menos ya saben como solucionarlo.

ACTUALIZACION: Paul Randal me recuerda que la CPU Affinity se deprecio en SQL Server 2008 R2, así que posiblemente no quieran configurar esta propiedad.

Lync 2010 Mobile Client disponible para Windows Phone

Hace poco rato recibí un aviso vía correo de que el cliente Lync 2010 para Windows Phone ya estaba disponible en el Marketplace.

Como soy intruso por naturaleza lo busqué, lo descargué, lo instalé y lo traté de usar… Pero no pude.

¿Por qué? Porque hace un par de días, se realizó una actualización a los servidores de Office 365 y se publicaron los cambios a los registros DNS necesarios para utilizar el cliente. Ese cambio yo no lo había hecho…

Para encontrar los registros, simplemente vayan al Administrador de DNS de su Office 365 y agreguen (o modifiquen) sus registros DNS. A mi me funcionaron los cambios rápidamente y en menos de 5 minutos ya tenía mi cliente Lync 2010 funcionando.

Acá les dejo algunas capturas:

2011-12-12 01-12-33.487

2011-12-12 01-19-22.209

2011-12-12 01-19-28.587

2011-12-12 01-13-58.572

Usar Windows Live Skydrive como unidad de red en Windows 7

A estas alturas, para nadie es desconocido que por tener una casilla de correo Hotmail también tenemos una cuenta en Windows Live Skydrive.

¿Qué es Skydrive? Bueno, es un sistema de almacenamiento online que ofrece 25 GB de espacio para almacenamiento, 5 GB para sincronización de documentos desde el PC, compartir documentos y archivos con quienes queramos, y mi favorita: Integración con Office 2010 que permite acceder, editar y crear documentos desde cualquier computador, sin necesidad de tener instalado Office.

Una característica que yo no había usado hasta ahora (y que no conocía hasta hace un par de días) es la posibilidad de usar Skydrive como una unidad de red. O sea, podemos abrir la carpeta que queramos desde Windows Explorer sin necesidad de usar Internet Explorer.

¿Como se hace? Acá va:

blog1

  • Ese 1a2b3c4d5e6f es el ID único para nuestra cuenta Skydrive.
  • Ahora creamos la unidad de red.

blog2

blog3

  • Ingresamos nuestro LiveId y Contraseña.

blog4

  • Listo! Ya tenemos una unidad de red N: conectada a nuestro SkyDrive, listo para ser usado como una carpeta común y corriente.

blog5

Espero que les sirva tanto como a mi.

Más de 180 mil websites afectados por ataque de SQL Injection

Si, otro ataque masivo por SQL Injection dando vueltas por el mundo… Ya ha afectado a más de 180 mil sitios en ASP .NET. El artículo de referencia tiene información bastante decente acerca del ataque. Sin embargo, no da muchas luces de cómo protegernos de un ataque por SQL Injection.

    "No hay manera sencilla de arreglar la vulnerabilidad en la base de datos atacada, excepto 'endurecer' la base de datos aplicando las actualizaciones y que los requerimientos de seguridad sean consistentes. Monitorear la base de datos buscando actividad inusual también es importante".

Actualizar (o parchar) SQL Server NO PREVENDRÁ un ataque por SQL Injection, para nada. SQL Server no es el vector de ataque para SQL Injection, la aplicación web lo es. Para cuando el ataque llegue a la base de datos SQL Server (o cualquier base de datos) será muy tarde.

En realidad es bastante fácil protegerse de un ataque por SQL Injection. Solo dejen de usar código SQL generado dinámicamente y usen consultas parametrizadas en su lugar. Eso es todo, ese es el GRAN secreto. Si, se entiende que escribir código .NET como consultas parametrizadas es más difícil que hacerlo solo usando concatenación, pero que ataquen el sitio y coloquen malware en los equipos de los clientes porque quisimos ahorrarnos un poco de tiempo… no sé si será buena excusa.

Como este articulo está basado en el Blog de Denny Cherry (con su autorización), y él tiene un libro llamado "Securing SQL Server". Es lógico que al menos promocione su libro. En el libro (que yo compré para mi Kindle), explica cómo usar consultas parametrizadas. No es tan difícil y hay varios ejemplos de cómo hacerlo. No se necesita usar procedimientos almacenados para usar consultas parametrizadas. Se puede hacer usando SQL dinámico, funciona básicamente igual.

En caso que aún no se convenzan… las consultas parametrizadas son la UNICA FORMA de estar 100% seguros de estar protegidos contra ataques por SQL Injection.

Saludos,

Notas desde el Keynote de SQL PASS Día 2

Este artículo es una traducción del Blog de Denny Cherry. A quien agradezco la autorización para traducir su contenido al español.

Bienvenidos al Keynote del día 2 del SQL PASS Summit. Hoy fue otro día de anuncios a cargo de Quentin Clark, quien es Corporate VP a cargo del SQL Server database Engine.

Quentin comenzó hablando de como SQL Server 2012 mejorará la manera en que SQL Server provee los 9s suficientes de up time, mediante la introducción de Always On. StreamInsight incluye la opción de Alta Disponibilidad lo que permitirá mantener corriendo los procesos de StreamInsight todo el tiempo.

La primera demo del Keynote de hoy fue sobre mi característica favorita de SQL Server 2012: Always On. En la demo se mostró un clúster de 3 nodos que tenía alojadas las aplicaciones de producción, con el clúster en 2 data centers. Durante la demo, el presentador realizó el setup rápida y fácilmente. Luego de configurar un nodo secundario de solo lectura, el Availability Group apareció como de solo lectura en la configuración de enrutamiento de Always On y los servicios de Reporting Services se configuraron para que automáticamente haga enrutamiento al secundario de solo lectura y así mantener la carga de trabajo de los reportes fuera del servidor SQL se producción. (Escribiré más sobre Always On más adelante).

En la segunda parte del Keynote, Quentin habló acerca de los índices ColumnStore y como esta característica permitirá correr reportes y data analysis mucho, mucho más rápido. Quentin también habló acerca de cómo PowerPivot se mejoró, específicamente cuando se implementa con SharePoint, lo que permite que los usuarios generen sus propios reportes dentro de la plataforma SharePoint (lo cual es genial… A menos que no tengas o no puedas pagar por SharePoint).

La siguiente demo fue para un conjunto de características llamadas Data Quality Services (DQS) y Master Data Services (MDS). DQS es una característica bastante atractiva que permite limpiar problemas de datos, como lat/lon incorrectas basadas en una dirección usando datos desde SQL Azure data marketplace. Durante la demo había un par de tiendas ubicadas en el medio del agua alrededor de Seattle. Usando DQS la ubicación de las tiendas fue corregida rápidamente desde el medio del agua a la ubicación correcta en Seattle.

Quentin habló después acerca del programa Fast Track, que permite a los vendors de hardware vender sistemas pre-empaquetados y pre-configurados con SQL Server, lo cual puede hacer más fácil para los clientes adquirir servidores de SQL Server. Otro programa que Microsoft tiene es el de las soluciones de tipo Appliance, donde pueden obtener un servidor desde un vendor, configurarlo y tenerlo andando en un par de horas; listo para realizar la carga de datos.

Microsoft mostró el HP Enterprise Database Consolidation Appliance. Este sistema es básicamente un Appliance para nube privada, en un rack de servidores con 192 núcleos, 400 discos (que soportan hasta 60 mil IOs de SQL Server) y 2 TB de RAM. Se puede comprar como medio rack o full rack appliance. Yo lo entiendo como un Appliance que tiene un clúster Windows Hyper-V donde se pueden configurar Máquinas Virtuales rápida y fácilmente. Donde el sistema realmente te salva es en la capacidad de implementarlo de una sola vez sápida y fácilmente sin tener que probar manualmente cada uno de los componentes, porque HP ya lo habrá hecho y certifica que el hardware funciona correctamente antes de despacharlo. Desde el punto de vista del soporte, tenemos un solo número de teléfono al cual llamar en caso de problemas de software y hardware.

El siguiente anuncio de hoy fue el driver ODBC para plataformas Linux para que así las aplicaciones de plataformas no Microsoft que se conecten a bases de datos SQL Server no tengan que sufrir cambios. Quentin también anunció que Change Data Capture ahora tiene soporte en SSIS y en Oracle (No estoy seguro de que significa o como funciona).

A continuación, se mostró Semantic Search. Esta característica se usa junto a la nueva característica de File Table, que permite cargar archivos a una base de datos a través del sistema de archivos. Luego, Semantic Search se puede utilizar para leer los archivos y no solo realizar búsqueda de esos valores, sino que puede entender los datos dentro de los archivos y así encontrar archivos basado en búsquedas específicas. Así se pueden encontrar documentos relacionados a lo que se encontró no solo usando términos específicos de búsqueda sino que el documento original para realizar búsquedas.

Otro cambio de nombre de esta semana fue para Project Juneau, ahora se llama SQL Server Data Tools.

Desde ahora, se puede hacer clic derecho en una base de datos y migrarla a SQL Azure. Esto se hace creando un DACPAC (v2.0) y haciendo push hacia Azure, con solo unos clics. Otra característica de Azure que ahora está soportada es la capacidad de realizar respaldos de bases de datos locales o en Azure hacia file storage en Azure, creando un bacpac que luego se copia al file storage en Azure. Hasta ahora, no hemos visto una forma de hacer esto mediante T-SQL. Esta tecnología se puede usar también para respaldar las bases de datos Azure al file storage Azure y luego usar SSMS para conectarse a ese storage y restaurar la base de datos a una instancia local para desarrollo y testeo.

SQL Azure ahora soporta federación del lado de las bases de datos de la plataforma Azure para así realizar escalamiento de la plataforma de bases de datos rápida y fácilmente a través del management portal sin cambios a las aplicaciones. A final de año SQL Azure soportara bases de datos de hasta 150 GB así como el uso de diferentes collation.

Desde hoy está disponible el CTP de SQL Azure Reporting y SQL Azure Data Sync. El CTP de Reporting permite ejecutar reportes de SSRS desde la nube SQL Azure. El CTP de Data Sync (que es el CTP final) permite sincronizar fácilmente datos entre una instancia local y una de Azure o desde una instancia Azure a una instancia SQL en otro proveedor en la nube.

Espero que estén tan emocionados como yo lo estoy, algunas de estas características se ven muy, muy entretenidas.

Notas desde el Keynote de SQL PASS

Este artículo es una traducción del Blog de Denny Cherry. A quien agradezco la autorización para traducir su contenido al español.

Hoy fue el primer día del SQL Server PASS Summit. Hubo algunos anuncios que posiblemente no vieron en el stream y que debieran saber.

Durante la parte de PASS del Keynote supimos de la gran cantidad de entrenamiento que SQL PASS entrega a la comunidad. PASS lleva cerca de 430.000 horas de entrenamiento entregadas a sus miembros. Ese número subirá exponencialmente durante los próximos 3 días gracias a las sesiones en el PASS Summit.

Durante el Keynote, había gran expectativa acera del libro "SQL MVP Deep Dives" que fue oficialmente lanzado en el PASS Summit. Este libro, en caso que no lo sepan fue escrito por 55 SQL Server MVP y todas las ganancias irán a Operation Smile.

El primer anuncio, y posiblemente el más importante, fue el nombre oficial de SQL Server "Denali". Será SQL Server 2012 y se lanzará el primer semestre de 2012. Este anuncio, así como el resto del Keynote, fueron hechos por Ted Kummert Senior VP de la Plataforma de Negocios de SQL Server en Microsoft.

Ted habló bastante sobre la nube Azure, lo cual es un gran cambio de las instalaciones "on premise" que Microsoft ha ofrecido por los últimos 20 años. La razón de esto es que muchos clientes ya están llevando sus datos a Azure. Pero no se preocupen, esto no significa que se acabaron las instalaciones "on site". Microsoft está trabajando arduo en nuevas características que vendrán en las próximas versiones de SQL Server, el producto que conocemos y amamos. Azure simplemente nos da una opción adicional aparte de construir y ejecutar sistemas "on site", así podemos ser más flexibles y además no preocuparnos acerca del Hardware y actualizaciones; de eso se encargan en la nube.

Si han usado "Project Crescent", su nombre oficial es "Power View" (Me pidieron que dejara claro que HAY un espacio en el nombre). Además, dieron algunas pistas de que otras herramientas para BI se verán en SQL Azure el 2012. De qué tipo serán, es otra pregunta; pero serán interesantes de ver.

Ted también habló específicamente de grandes volúmenes de datos y algunas direcciones hacia donde la gente se mueve con estos volúmenes de datos. Las empresas hoy no "botan" sus datos, y algunas veces esos datos son no-estructurados y esa es la mejor forma de usarlos. Microsoft apuntará a este mercado con la plataforma de cómputo distribuido, esto significa que Microsoft soportará Hadoop como parte de su plataforma de datos. Esto significa que podremos ejecutar Hadoop en Windows y en Azure.

Desde la semana pasada, tenemos disponible el conector Apache Hadoop para SQL Server y para la plataforma PDW. Versiones futuras incluirán la distribución de Hadoop que mencioné más arriba así como el driver ODBC y el add-in para Excel para hacer más fácil a los usuarios obtener datos desde Hadoop hacia sus plataformas de negocio. Creo que es un avance importante porque permite el almacenamiento de datos en plataformas distintas a las que están acostumbrados en sus plataformas de bases de datos tradicionales. Microsoft tendrá una versión CTP de su plataforma Hadoop en SQL Azure antes del fin del 2011.

Microsoft anunció "Data Explorer" el cual permite a los usuarios hacer Self Service BI sin darse cuenta de que lo están haciendo. Esto permite que los usuarios vean y lean fácilmente los datos, y más importante aún tomar los datos y transformarlos en información que pueden usar para manejar la empresa más rápida y fácilmente. No los voy a aburrir con información sobre la demostración, porque apestaba. Con eso perdieron bastante de la audiencia en un par de minutos.

No olviden revisar mañana con más anuncios desde Microsoft en el Keynote de mañana.

Posiblemente la Nube no será una buena solución de respaldo

Este artículo es una traducción del Blog de Denny Cherry. A quien agradezco la autorización para traducir su contenido al español.

El 19 de julio, encontré un artículo en un blog que hablaba acerca de la posibilidad de desechar una solución de respaldo y usar la nube en reemplazo. Básicamente, los puntos eran que como alguien mas almacena tus datos, ya no tendrías que preocuparte de planes de recuperación de desastres, mantener múltiples copias, etc. porque alguien mas se preocuparía de esas cosas ahora.

En el papel esto suena genial, pero yo trabajo en el mundo real. Y en el mundo real, como administrador no puedo confiar en que alguien mas maneje mi solución de recuperación de desastres. Cuando las cosas se rompen y perdemos todo y tenemos que restaurar, como administrador yo soy el que esta amarrado con la gerencia a levantar todo y volver a echar a andar la compañía, y no a quien quiera que yo le haya tercerizado los respaldos.

Cuando se trata de mis respaldos (y básicamente de todos los datos) no confío en nadie. Si se los envío a un proveedor en la nube como se que nadie va a intentar revisarlos, modificarlos, venderlos, etc? Si yo no controlo todo de punta a punta, no puedo estar seguro de que mis datos están seguros. Puedo cifrarlos antes de subirlos a la nube, pero eso solo me da cierto nivel de protección. El cifrado puede romperse, solo se requiere tener suficientes equipos destinados a hacerlo.

Existe otro pequeño problema con el usar la nube para respaldar. Las grandes empresas (y las pequeñas también) tienen grandes cantidades de datos, y quiero decir GRANDES cantidades. En estos días, no es extraño que una empresa de unas 10 – 20 personas tenga un par de Terabytes de datos. Si todos esos datos se respaldaran a la nube periódicamente, se necesitaría mucho ancho de banda para poder realizar esos respaldos en un tiempo prudente. El ancho de banda no es gratis, no lo es en Estados Unidos y menos en otros países. Muchos países tienen topes de ancho de banda para subida y debes pagar si lo sobrepasas. Si tienes que subir 100 Gigas de datos a la semana (un 10% de cambio en los datos es bastante normal) podría demorar unas 10 – 12 horas en subirse con una conexión rápida, y costar varios cientos de dólares en cargos de banda ancha.

Ejecutar tus aplicaciones en la nube es algo totalmente distinto. Cuando haces esto, tienes el control de la instalación y puedes controlar en cuantos sitios residen tus datos. Las soluciones de respaldo en la nube que he revisado no tienen este nivel de control. Simplemente tienes que confiar en que la empresa a la que le estás pagando esté haciendo las cosas bien. Después de todo, si almacenan los datos en un lugar cercano para acceso rápido ¿Que pasa si hay un corte de energía por un desastre natural y ellos sufren el mismo problema? ¿A quien llamamos? No puedes despedir a nadie porque el plan era dejar que ellos lo administraran. Y lo peor, no puedes levantar tus sitios porque debes esperar que ellos levanten el de ellos.

En mi mundo, esa no es una solución razonable.

Estar Preparados: Recolectar Datos desde sp_whoisactive a una tabla

Este artículo es una traducción de uno publicado por Kendra Little en su blog. Le agradezco su autorización y si les gusta, los agradecimientos deben ir a ella. / This post was translated from Kendra Little’s blog. I wanna thank her for letting me use this and if you like this, comments and thanks should go to her.

Soy fan del Procedimiento Almacenado sp_whoisactive de Adam Machanic.

Una de las mejores cosas del sp_whoisactive es que es muy rápido al generar una tabla para recolectar los datos necesarios, luego se ejecuta el procedimiento en un ciclo con una cláusula de espera para recolectar regularmente los datos necesarios. Este uso está documentado (ver el artículo de Adam acá), pero he habado con mucha gente q no sabe cómo hacer esto o no tiene un script guardado.

¿Qué es sp_whoisactive?

Sp_whoisactive es un procedimiento escrito por Adam Machanic. Se puede encontrar acá: sp_whoisactiveV10

Que haremos hoy

Hágase un favor: Hoy prepárese para lo siguiente:

· Crear el procedimiento almacenado sp_whoisactive en una base de datos de usuario utilizada solo para administración (Ver artículo de Adam acá)

· Jugar con el script que les entrego más abajo y examinar los parámetros del procedimiento almacenado

· Guardar el script que crea una tabla para su versión preferida de sp_whoisactive, y luego ejecútela en ciclos para almacenar los datos.

¿Por qué haría esto?

Aunque se ejecuten herramientas de monitoreo, usar sp_whoisactive para revisar datos desde las DMVs (incluyendo query plans) puede ser muy valioso.

Cuando las cosas salen mal, terriblemente mal, sería bueno tener este script en reserva para recolectar datos sobre la actividad existente en la instancia SQL mientras uno se enfoca en el problema. Esto nos ayudara a resolver el problema lo más rápido posible, si revisamos periódicamente los datos que recolecta. Como los datos están guardados, podemos usarlos más adelante para explicar las causas del problema y prevenir que suceda otra vez.

Paso 1: crear la tabla @destino

Déjenme dejar esto claro nuevamente: esto no fue mi trabajo. No quiero tomarme el crédito, pero si quiero difundirlo.

Primero, creamos la tabla destino. Sp_whoisactive permite generar una tabla destino fácilmente. Acá hay una versión básica que incluye la fecha actual en el nombre de la tabla, así como tres flags para obtener información de las transacciones, query plans y block leaders.

DECLARE @destination_table VARCHAR(4000) ;
SET @destination_table = 'WhoIsActive_' + CONVERT(VARCHAR, GETDATE(), 112) ;

DECLARE @schema VARCHAR(4000) ;
EXEC sp_WhoIsActive
@get_transaction_info = 1,
@get_plans = 1,
@find_block_leaders = 1,
@RETURN_SCHEMA = 1,
@SCHEMA = @schema OUTPUT ;  

SET @schema = REPLACE(@schema, '<table_name>', @destination_table) ;

PRINT @schema
EXEC(@schema) ;

Paso 2: Crear el ciclo para recolectar los datos.

Es necesario asegurarse de especificar los mismos parámetros para el sp_whoisactive en este ciclo, para que los datos de salida encajen en el schema para la tabla creada.

Este ejemplo corre 10 veces con un lapso de 5 segundos entre ejecuciones. Dependiendo de lo que se encuentre, los números se cambian a discreción.

DECLARE
@destination_table VARCHAR(4000) ,
@msg NVARCHAR(1000) ;

SET @destination_table = 'WhoIsActive_' + CONVERT(VARCHAR, GETDATE(), 112) ;

DECLARE @numberOfRuns INT ;
SET @numberOfRuns = 10 ;

WHILE @numberOfRuns > 0
BEGIN;
EXEC dbo.sp_WhoIsActive @get_transaction_info = 1, @get_plans = 1,
@find_block_leaders = 1, @DESTINATION_TABLE = @destination_table ;

SET @numberOfRuns = @numberOfRuns - 1 ;

IF @numberOfRuns > 0
BEGIN
SET @msg = CONVERT(CHAR(19), GETDATE(), 121) + ': ' +
'Logged info. Waiting...'
RAISERROR(@msg,0,0) WITH nowait ;

WAITFOR DELAY '00:00:05'
END
ELSE
BEGIN
SET @msg = CONVERT(CHAR(19), GETDATE(), 121) + ': ' + 'Done.'
RAISERROR(@msg,0,0) WITH nowait ;
END

END ;

GO

Paso 3: Generar la consulta para revisar los resultados.

Este paso es opcional, pero como la tabla contiene en el nombre un Timestamp, me gusta tener a mano una consulta para revisar los resultados sin tener que copiar y pegar el nombre de la tabla. También prefiero poner la columna collection_time primero y ordenar según ella.

DECLARE @destination_table NVARCHAR(2000), @dSQL NVARCHAR(4000) ;
SET @destination_table = 'WhoIsActive_' + CONVERT(VARCHAR, GETDATE(), 112) ;
SET @dSQL = N'SELECT collection_time, * FROM dbo.' +
QUOTENAME(@destination_table) + N' order by 1 desc' ;
print @dSQL
EXEC sp_executesql @dSQL

Ya soy un DBA!!! (Parte 2)

En el artículo anterior nos hicimos una idea de como partir organizando nuestras tareas como DBA. Ahora vamos por el detalle de algunas de esas tareas.

Crear una lista de servidores

El nombre lo dice todo, pero siempre es bueno tener una idea de lo que se supone que tenemos que administrar. Lógicamente esta lista no va estar completa el primer día, pero nos va a dar una muy buena idea de que es lo que tenemos directamente a cargo. Si alguna vez, los van a visitar a su escritorio y les preguntan: “¿Sabes si el WINSRV2K8R2-PROD12 esta replicando a alguna parte?” y no tienen idea de que ese servidor existía, no se preocupen; eso suele pasar. Pero tengan claro que los van a mirar con cara de “Como no lo conoce si esta instalado hace mas de 6 meses, yo lo uso siempre y el es el DBA…”

Pongan mucho esfuerzo en recopilar la mayor cantidad de información posible apenas puedan. Así ya van a saber a que se enfrentan y les será mas fácil cuando lleguen al punto de generar un plan de acción.

La pregunta lógica en este punto es: ¿De donde saco la información?. Bueno, la respuesta es: De todas partes. Partan por preguntarle a su superior y de ahí vean donde los conduce el camino amarillo… Seguramente pasarán por Administradores de Red, de Sistemas, de Aplicaciones, Desarrolladores, etc. Luego averigüen si hay un sistema de administración de ambientes de TI (MS SCOM, Quest Spotlight, etc.) y si no los conocen o no tienen acceso aun, pídanle a los administradores que les den los reportes lo mas actualizado posible. Un consejo: NUNCA se queden con una sola versión de la historia (Herramientas vs Personas). He visto varios casos de servidores con el “DESA” en su nombre y que resultan siendo de producción, pero alguien olvido cambiarle el nombre.

Otro punto MUY importante es el de los servidores que NO deben administrar. Puede tocarles el caso de servidores de bases de datos que sean de aplicaciones de clientes o que tengan un contrato de soporte con un tercero (generalmente proveedor de alguna aplicación). Si alguien les dice que no son responsables de un servidor, les aconsejo que lo pidan de manera formal (correo, por ejemplo). Así en caso de algún problema con ese servidor especifico, ya saben a quien recurrir y que la culpa no es de ustedes.

Como ultimo tip. Traten de mantener un listado histórico. Eso les servirá para revisar si su carga de trabajo a aumentado, disminuido o se ha mantenido en el tiempo. ¿Tengo mas bases de datos o menos? ¿Funcionan los respaldos? ¿Como andan los jobs? Con eso, van a poder demostrar su valor para la empresa en algún momento de su vida laboral. Además de tener argumentos para una futura reunión con su jefe y les pregunten: “¿Y en que has estado?” (Créanme se los van a preguntar mas de una vez).

Saludos,

Ya soy un DBA!!! (Y ahora, qué hago?)

En mi último artículo les hablé de lo que es (a grandes rasgos) un DBA. Recibí un par de comentarios pidiéndome más información sobre el tema así que acá vamos.

Lo primero que necesitamos es averiguar por donde comenzamos. Suena bastante obvio, pero a veces es más difícil de lo que parece. Si tienes la suerte de entrar a una empresa donde no eres su primer DBA, gran parte de la documentación, tareas de rutina y procedimientos de contingencia ya existirán (la mayor parte del tiempo es así). Pero ¿y si no es así? ¿Cuáles son las Bases de Datos “más importantes”? ¿Cuántos servidores tengo a cargo? ¿Cuantos son de desarrollo, testeo y producción? ¿A quién llamo para coordinar tareas fuera de horario?… Y la lista de preguntas sigue, pero para que asustarlos más… Acá van algunos consejos.

Checklist Inicial

Son las 09:00 AM y ya estas sentado en tu puesto, con tu taza (jarro) de café, mirando la pantalla. Ya conociste a tus compañeros de trabajo, organizaste (brevemente) tu escritorio, revisaste tu correo electrónico (aunque no tienes nada en la bandeja de entrada, llevas apenas 5 minutos en la empresa) y estas listo para iniciar tu trabajo como DBA.

Lo PRIMERO que debes hacer es una lista de los servidores y sistemas que debes administrar. Si no tienes eso, créeme que tu trabajo será un “poco” complicado.

Un consejo es separar ese Checklist en partes. ¿Para qué? Bueno, a algunos (como yo), les ayuda para organizar más fácil las cosas.

Mi Checklist suele tener 3 partes. La primera es para “mis cosas”. La segunda para “los clientes”. La tercera es para los planes de acción. Mi recomendación es tratar enfocar los primeros esfuerzos en esas tres tareas durante el primer día.

Un Checklist inicial (en mi caso) suele tener la siguiente información:

  1. Lista de Servidores.
  2. Revisión de tareas de respaldo.
  3. Revisión de recuperación desde esos respaldos.
  4. Lista de clientes.
  5. Lista de Bases de Datos criticas.
  6. Lista de proyectos o entregables con fecha de cierre próxima.
  7. Baselines iniciales
    • Revisión de Servidores.
    • Revisión de Bases de Datos.
  8. Plan de recuperación (no confundir con Plan de Respaldos).

Yo se que están pensando… ¿Como puedo hacer un Plan de recuperación el primer día? Bueno, no lo hagan… Pero COMIENCEN a hacerlo. Créanme, es bueno estar preparados.

Si algún DBA con algunos años de experiencia esta leyendo esto, seguramente dirá: ¿Y los índices? ¿Y el plan de mejoras de rendimiento? ¿Y la revisión de logs? Calma… recuerden que esto es solo el primer día. Van a tener muuuucho tiempo para preocuparse de esas otras tareas (créanme… muuuuuucho tiempo).

Un punto importante: Recuerden avisarle a su superior lo que están haciendo, como lo están haciendo y PORQUE lo están haciendo. Mostrar preocupación por conocer el ambiente al que llegamos además, de preocupación e iniciativa, demuestra que no quieren imponer su visión de las cosas; sino conocer lo que existe y como USTEDES se van a adaptar y lo van a mejorar. En lugar de llegar a cambiar todo lo que existe hasta la fecha.

Más adelante, vamos a comenzar a explorar con un poco de detalle cada uno de los puntos del Checklist.

Como siempre, sus preguntas y comentarios son bienvenidos. Y me gustaría que otros DBAs pudieran aportar con sus consejos o experiencias en su primer día.

Saludos,

¿Que significa DBA?

(El siguiente dialogo es ficticio, cualquier semejanza con la realidad es mera coincidencia)

Persona nueva en la empresa: ¿Tu eres Felipe, cierto?

Yo: Si, mucho gusto.

Persona nueva en la empresa: ¿Cual es tu cargo acá?

Yo: Soy el DBA

Persona nueva en la empresa: Ahhh, y eso ¿Que significa?

YO: Administrador de Bases de Datos

Persona nueva en la empresa: Ahhh, o sea ¿tu me puedes ayudar con una planilla Excel donde tengo mi Base de Datos de potenciales clientes?

Yo: emmmm….

En inglés (de donde vienen el 99,999% de las siglas que usamos en informática) DBA significa “DataBase Administrator”. Pero hay otros significados menos conocidos: “Default Blame Accepter” (Aceptador de culpas por defecto) y ”Don’t Bother Asking” (No te molestes en preguntar). Básicamente, el significado de DBA depende de quien lo explique.

Alguna vez leí que ser DBA era como ser Presidente de un país. Primero: La mitad de la gente que esta cerca tuyo con cree que estés suficientemente capacitado para hacer el trabajo que tienes. Segundo: Cada vez que tomes una decisión o hagas un plan de acción, lo van a criticar antes de leerlo (incluso por quienes te apoyaron al principio). Y tercero, te van a juzgar por lo que hagas en los primeros 100 días en tu puesto, sea bueno o malo, y no importa si no es tu culpa.

La verdad, no existe una única definición de DBA. ¿Por que? Simple… Porque un DBA toca tantas áreas diferentes de la empresa en sus tareas habituales que es imposible definirlo en pocas palabras. Para unos el DBA es quien les resetea la contraseña y arregla las cosas que hacen que las aplicaciones anden lento. Así, el DBA siempre va a tener la culpa de que la aplicación ande lento, aunque el problema sea del proveedor de internet (para una aplicación web) o que alguien casualmente corto un cable de red al hacer aseo en la sala de servidores.

Si le preguntamos a un Desarrollador que hace el DBA su respuesta mas común seria: “Hacer mas lento mi trabajo”. Claro… es responsabilidad del DBA implementar estándares y lineamientos para el uso de las Bases de Datos, pero eso obliga a el desarrollo sea mas lento. La ventaja es que el ambiente es mas estable, pero eso no importa cuando los desarrolladores están gritando porque necesitan permisos de Sys Admin para ejecutar la aplicación.

No malentiendan este articulo. Mi idea no es asustarlos sobre ser un DBA. A mi personalmente me gusta serlo. Durante el tiempo que llevo trabajando con Bases de Datos, he tenido la suerte de ir aprendiendo varios “trucos” y “sutilezas” del cargo. La idea es que teniendo este articulo como punto de partida, vayamos conociendo esos trucos para que, quienes tengan interés en convertirse en DBA puedan ir llevándolos a la practica y así hacerles un poco mas ligero el esfuerzo de lidiar con la percepción que hay de el rol de DBA.

Como siempre, sus comentario y sugerencias son mas que bienvenidas. Para el próximo articulo: Algunas cosas que se deben tener en cuenta para el trabajo diario como DBA.

Saludos,

Posted: 30/5/2010 3:14 por Felipe Zuñiga | con 7 comment(s)
Archivado en: ,
SQL Server 2008 R2 disponible para descarga

Estimados,

Desde hoy ya está disponible a suscriptores Technet y MSDN la versión final de SQL Server 2008 R2 y de PowerPivot. Esto se suma a la disponibilidad la semana pasada de SharePoint 2010 y Office 2010.

Para quienes no tienen suscripciones a Technet o MSDN, en un artículo de la semana pasada, esta el link para descargar las versiones de evaluación de SQL Server 2008 R2.

Saludos,

Versión de Evaluación de SQL Server 2008 R2

Estimados,

Como ya deben saber, hoy fue el lanzamiento de SQL Server 2008 R2.

Para quienes quieran probarlo, acá hay un link para descargar una versión de evaluación de 180 días.

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

Saludos,

SQL Server 2008 R2 ya esta RTM

Estimados,

Luego de un par de meses sin actualizar este blog, vuelvo para contarles que hoy Microsoft informó que SQL Server 2008 R2 ya esta en RTM (Release To Manufacturing). Eso significa que la versión final que saldrá a público ya está lista.

Les comparto algunas mejoras de esta nueva versión de SQL:

  • PowerPivot: Es una solución de BI de “auto-servicio”. Permite a los usuarios finales acceder, analizar y compartir datos dentro de la empresa usando SharePoint 2010 y Excel 2010.
  • Master Data Services: Permite que las organizaciones tengan un repositorio centralizado de su información, no importando de que sucursales o sistemas vengan los datos. Así se asegura un almacén de datos actualizado y común a todas las áreas de la empresa.
  • Report Builder 3.0: Componente de creación de reportes con soporte para visualización Geoespacial.
  • StreamInsight: Es una plataforma de procesamiento de baja latencia que permite analizar la información mas rápido a medida que los datos van cambiando, y así tomar mejores decisiones en tiempo casi real.

Si quieren mas información sobre SQL Server 2008 R”, les dejo los siguientes links:

Saludos y como siempre sus comentarios y sugerencias son bienvenidos,

SQL Server 2008 R2 ya tiene fecha de lanzamiento

Estimados,

Microsoft publicó hoy en el blog oficial de SQL Server que en mayo de 2010 estará disponible SQL Server 2008 R2.

A medida que vaya saliendo información mas detallada, la voy a ir publicando. Mientras, sus consultas o comentarios sobre SQL Server son mas que bienvenidas.

Saludos,

Listar las tablas y columnas de una Base deDatos

Hoy me encontré con una petición bastante inusual (inusual, porque nunca me lo habían pedido antes…). ¿Como obtengo una lista de TODAS las tablas y TODAS las columnas de una Base de Datos?

No fue menor la solicitud. Obtener el listado de todas las columnas de una tabla no es difícil, pero esta Base de Datos tenia cerca de 60 tablas y algunas de estas tablas tienen casi 20 columnas, la tarea se hacía un poco tediosa.

Hasta que se me ocurrió ponerme a cachurear por ahí y encontré las siguientes consultas:

Para Bases de Datos SQL Server 2000

SELECT SO.NAME, SC.NAME

FROM sysobjects SO INNER JOIN syscolumns SC

ON SO.ID = SC.ID

WHERE SO.XTYPE = ‘U’

ORDER BY SO.NAME, SC.NAME

Para Bases de Datos SQL Server 2005

SELECT SO.NAME, SC.NAME

FROM sys.objects SO INNER JOIN sys.columns SC

ON SO.OBJECT_ID = SC.OBJECT_ID

WHERE SO.TYPE = ‘U’

ORDER BY SO.NAME, SC.NAME

 

Como siempre, sus dudas y comentarios son bienvenidos.

Posted: 11/1/2010 15:12 por Felipe Zuñiga | con 13 comment(s) |
Archivado en: ,
¿Eres estudiante? CERTIFICATE!!!!

(Este articulo fue publicado originalmente en mi antiguo blog).

Hace unas semanas hice una charla sobre SQL Server Integration Services 2008 en una Universidad en el norte de Chile y me sorprendió gratamente la cantidad de alumnos interesados en certificase en alguna tecnología.

A todos ellos que me preguntaron sobre certificaciones les tengo una MUY BUENA noticia. Hasta el 31 de Julio de 2010, Microsoft tendrá precios especiales para estudiantes en sus exámenes de certificación. En el caso de Chile, el descuento es de un 50%.

El listado de los exámenes esta en: http://www.prometric.com/microsoft/student

El único requisito para hacer efectivo este descuento es presentar una identificación que acredite tu condición de estudiante al momento de rendir el examen.

Durante el fin de semana iré publicando links donde encontrar material de preparación para algunos exámenes.

Como siempre si tienen dudas o comentarios, son bienvenidas.

Saludos,

Microsoft Business Intelligence VPC 7.1

(Este articulo fue publicado originalmente en mi antiguo blog).

Este articulo hace referencia a algo un poco antiguo, pero que por algún descuido no había puesto acá.

Microsoft tiene disponible una Maquina Virtual con TODO lo que necesitamos para hacer pruebas de una plataforma de Business Intelligence.

Ojo con los requerimientos de ejecución de esta maquina virtual. Al tener todo en uno, no es muy “liviana” que digamos. Necesitamos 1.5 ó 2 GB de RAM (lo optimo serian mas de 2GB), además esta creada para usarse en Virtual Server o Virtual PC así que deben recordar modificarla para usarla en Windows Virtual PC o Hyper-V. Finalmente, se recomienda almacenar el Disco Virtual en una unidad de disco distinta a la que almacena el SO de la maquina Host.

Un par de datos útiles: La contraseña para ingresar a la MV es: pass@word1 y La MV expira el 15 de Abril de 2010.

LOS LINKS:

BIR7.part01.exe

BIR7.part02.rar

BIR7.part03.rar

BIR7.part04.rar

BIR7.part05.rar

BIR7.part06.rar

BIR7.part07.rar

BIR7.part08.rar

Saludos,

TRANSPARENT DATA ENCRYPTION

(Este articulo fue publicado originalmente en mi antiguo blog).

La pregunta lógica que uno hace al saber que hay una versión nueva de algún producto es: ¿Cuáles son las nuevas características que trae incluidas? Y lógicamente, el tema de seguridad es uno de los más consultados.

En SQL Server 2008 una de las nuevas características es TRANSPARENT DATA ENCRYPTION (TDE). En este post vamos a tratar de explicar en qué consiste y cuáles son los usos y ventajas de usar esta modalidad de encriptación de datos.

¿QUE ES TDE?

SQL Server 2005 ya traía incorporadas ciertas capacidades de encriptación en forma de librerías; estas capacidades permitían encriptación basadas en roles de usuarios. TDE permite realizar encriptación de todos los datos en la Base de Datos, datos físicos y logs de transacciones. Esto se realiza al encriptar los datos a medida que se escriben al disco y desencriptando al realizar la lectura.

¿POR QUE USAR TDE?

Uno de los usos posibles de esta característica es si necesitamos darle acceso a nuestras Bases de Datos a personal externo a nuestra empresa (ej.: Desarrolladores Externos). Si la Base de Datos es demasiado grande para enviarla vía Correo Electrónico o FTP; o si nuestras políticas de seguridad no permiten dar acceso a nuestra red a personal externo, la única opción que nos quedaría es entregarle a ese Desarrollador una copia de la Base de Datos en un Disco Externo. Lógicamente el Desarrollador firmara una serie de documentos legales en los cuales se compromete a no divulgar la información contenida en la Base de Datos, pero ¿y si le roban el disco externo? O ¿Si la empresa que tenía que transportarlo lo extravía en el camino?

¿CUANDO USAR TDE?

TDE es una manera eficiente y muy fácil de implementar de asegurar nuestras bases de datos (incluyendo los respaldos). Esto la convierte en una herramienta muy potente cuando necesitamos enviar copias de nuestras Bases de Datos a personal externo, sucursales o los respaldos que, tal como dicen las buenas prácticas, almacenamos en un lugar físico distinto a nuestras oficinas.

Una de las principales ventajas de TDE es que no importa si alguien se roba el Disco Externo donde enviamos la Base de Datos al desarrollador externo, no podrá acceder la información a menos que tenga un certificado que da acceso a los datos. Además de ese certificado, necesitamos una llave privada y las credenciales para acceder a esa llave. Lógicamente, cada uno de estos elementos debe ser almacenado de manera independiente y en caso de tener que enviarlos a alguien se debieran enviar de manera separada.

¿COMO FUNCIONA TDE?

Si bien existen otros métodos de encriptación, estos usualmente encriptan los datos antes de que se escriban o actualicen los datos. Generalmente, la encriptación ocurre a nivel de aplicación; en un nivel intermedio del código o en el servidor de Base de Datos con las características que trae SQL Server 2005. La clave acá es que los datos se encriptan antes de escribirse en la cache (y por lo tanto en el disco) y se mantienen encriptados en la cache y en el disco. La desencriptación ocurre cuando los datos se recuperan desde la cache y esto puede ocurrir a nivel de código medio o aplicación.

En el caso de TDE no se encripta parte de los datos, se encriptan TODOS los datos en bloques de 8K a medida que los datos se escriben en el disco y la desencriptación ocurre al leerse desde el disco. Esta encriptación ocurre a bajo nivel y aunque ocurre para todas las páginas de datos, solo ocurre al escribir y leer datos desde el disco. Por lo tanto, si la Base de Datos tiene un bajo nivel de transacciones y un alto nivel de consultas (las cuales se generan principalmente en cache), no se notara un cambio significativo en el rendimiento. En cambio, si la Base de Datos es altamente transaccional (por lo tanto, con un alto nivel de operaciones de I/O) se notara un impacto en el rendimiento.

Un aspecto importante sobre TDE es que al encriptar cualquier numero de bases de datos en una instancia, se encripta automáticamente la base TEMPDB. Esto puede resultar en una disminución del rendimiento en otras bases de datos que no estén encriptadas y que tengan un alto nivel de uso de la base Tempdb. Si este es el caso, es conveniente considerar la opción de instalar una instancia de SQL Server especifica para las bases encriptadas o buscar otra alternativa de encriptación.

Por ahora es suficiente, como siempre sus comentarios y sugerencias son mas que bienvenidos.

Saludos,

Más artículos Página siguiente >