miércoles, 24 de agosto de 2016

¿Cómo serializar una base SQL de Azure con Visual Studio?

Este artículo indica cómo podemos serializar una base de datos de SQL Server que se encuentra en Azure con Visual Studio y sus ventajas. Se complementa con el documento: Cómo serializar una base SQL con Visual Studio  

Para serializar una base SQL que se encuentra en Azure con Visual Studio hay algunos pasos extras que deberemos realizar. Éstos, se centran en asegurar la conexión desde nuestra máquina local a Azure. 

Deberemos:

1. Azure: abrir un puerto desde el portal de administración de Azure
2. Azure: habilitar el acceso a través del Firewall
3. SQL Server Azure: verificar que el protocolo TCP está habilitado
4. SQL Server Azure: configurar usuario
5. Visual Studio local: conectar remotamente a SQL Azure

1. Azure: abrir un puerto desde el portal de administración de Azure

Para poder abrir un puerto desde la máquina virtual de Azure debemos crear un "endpoint",  concepto utilizado para dirigir y controlar el tráfico de ingreso a la máquina virtual.
Luego, ingresamos a nuestra máquina virtual Azure, dentro de la consola de administración de Windows Azure,seleccionamos la "Virtual Machine" en la cual estableceremos el endpoint y hacemos clic en el item: "ENDPOINTS".


Allí vemos que ya hay dos endpoints previamente creados. Uno es para el funcionamiento de PowerShell y el otro es para permitir el acceso remoto. Su generación fue automática cuando creamos la máquina virtual. Para agregar nuestro endpoint hacemos clic en Add:


Se abrirá la siguiente ventana en la cual confirmaremos que queremos crear un endpoint de tipo "stand-alone". La opción “Add an endpoint to an existing load-balanced set” no es relevante para nuestro objetivo: establecer una conexión desde una máquina local a un servidor SQL Azure.


En nuestro caso, tanto en el campo PUBLIC PORT como en PRIVATE PORT deberemos ingresar el puerto correspondiente. 

Nota importante: es aconsejable no utilizar el puerto default (1433). Sin embargo, haremos uso del mismo sólo por motivos educativos. Entonces ingresamos un nombre para el endpoint; seteamos el protocolo TCP y por último completamos los números de puertos:


Con esto, damos por finalizada la creación del endpoint.

2. Azure: habilitar el acceso a través del Firewall

A continuación, le indicaremos a Windows que queremos dejar pasar el tráfico proveniente de ese puerto que acabamos de habilitar. Para acceder a la configuración del firewall podemos presionar las teclas: Windows + R Y escribimos wf.msc. De esa manera se nos abre la siguiente ventana. Seleccionamos la sección Inbound Rules y luego hacemos clic en el botón New rule:


Hacemos clic en Siguiente o Next y seleccionamos la opción Port:


En la próxima ventana elegimos las opciones TCP y "Specific local ports:", en este último ingresamos el puerto 1433 según nuestro ejemplo.



Acto seguido, nos consulta qué tipo de acción queremos que ejecute el Firewall. Queremos que permita el tráfico así que seleccionamos: Allow the connection:


A continuación nos pregunta el alcance de la regla, dejamos las opciones tildadas por default y vamos a la próxima ventana.


Finalmente, le damos un nombre a nuestra regla y opcionalmente una descripción:


Cuando estamos listos, hacemos clic en Finish.

Verificamos que se haya creado la regla:


3. SQL Server Azure: verificar que el protocolo TCP está habilitado

Es bueno verificar que nuestro servidor SQL tenga habilitado el protocolo TCP, ¡nos ahorrá más de un dolor de cabeza! Para ello abrimos el SQL Server Configuration Manager y en la sección SQL Server Network Configuration verificamos que el protocolo TCP esté habilitado (enabled):


4. SQL Server Azure: configurar usuario

Ahora, debemos configurar un acceso en el propio motor de base de datos. Dependiendo de nuestra base y configuración, podríamos llegar a tener ya creado un usuario para "Acceso remoto":


Si ese es el caso, podríamos reutilizarlo. Sino debemos crear uno nuevo y asegurarnos de que tenga acceso a la base de datos a la cual nos queremos conectar.

5. Visual Studio local: Conectar remotamente a SQL Azure

Por último, vamos a revisar si finalmente todo nuestro esfuerzo fue suficiente para establecer la conexión. Para ello, abrimos el Visual Studio y seguimos los pasos necesarios para crear una solución de tipo SQL Server Project tal como está explicado en este artículo: Cómo serializar una base SQL con Visual Studio  

En esta ocasión, vamos a explicar cómo agregar un proyecto a una solución ya existente. Una vez abierta nuestra solución, hacemos clic derecho sobre la misma y seleccionamos Add -> New Project...:


Definimos el nombre del nuevo proyecto:


Verificamos que se haya agregado correctamente a la solución:


Lo próximo que vamos a hacer, es configurar el proyecto para que sea posible la conexión a Azure. Hacemos clic derecho sobre el mismo y abrimos las propiedades:


En el campo Target platform: seleccionamos Micosoft SQL Azure Database V12 (dependiendo del tipo de versión de base de datos que tengamos en Azure).


El próximo paso es "importar" la base de datos a nuestro proyecto. Para dar curso a ello, iremos a la solución y haremos clic derecho, luego seleccionaremos Import -> Database...:


En la ventana que aparece, hacemos clic en New connection...:


Como también vemos en la imagen de arriba, configuramos los siguientes campos:
  • Server name: ingresamos el nombre de nuestra máquina virtual, es decir, el mismo que usamos para acceder remotamente.
  • Log on to the server: seleccionamos la opción Use SQL Server Authentication y completamos tanto el User name: (ej.: RemoteUser) y la Password.
  • Finalmente, en Select or enter a database name: seleccionamos el nombre de nuestra base de datos.
Para terminar hacemos clic en Ok y empezará la importación:


De esa manera ya tenemos toda la base de datos de SQL Azure serializada en nuestro proyecto de Visual Studio:


Damos entonces por cumplido nuestro objetivo de poder comunicarnos desde nuestro Visual Studio local a nuestra base SQL Azure. Esto nos habilita a obtener muchos beneficios como: realizar el versionado de la base de datos, facilitar el trabajo de equipos de varios miembros, impactar las modificaciones desde un acceso remoto, entre otros.

Autor:


Julián Haeberli
Baufest Technical Leader

miércoles, 10 de agosto de 2016

¿Cómo serializar una base SQL Server con Visual Studio?


Este artículo indica cómo podemos serializar una base de datos de SQL Server con Visual Studio y sus ventajas.

Serializar una base SQL en Visual Studio significa que tomaremos la estructura de una base previamente creada y la convertiremos en instrucciones SQL. ¿Y qué significa esto? Bueno, por ejemplo, si tenemos una tabla de artículos con dos campos: 


Al serializarla estaremos guardando una instrucción similar a esta:



¿Y para qué nos sirve hacer esto? Para responder esta pregunta pasaremos a la siguiente sección.

Beneficios

  • A diferencia de cuando editamos características en el SQL Server Management Studio, si en el proyecto de Visual Studio realizamos alguna modificación no deseada, podemos hacer rollback, siempre y cuando no se trate de datos en las tablas.
  • Las modificaciones pueden ser comiteadas directamente en un repositorio de fuentes como el Team Foundation Server (TFS).
  • Nos brinda la posibilidad de aplicar los cambios (deploy) en distintos ambientes con sólo cambiar la conexión.
  • Existe la posibilidad de crear scripts para insertar datos de pruebas o de tablas maestras luego de cada deploy, facilitando el testing de aplicaciones.
  • Se facilita el trabajo en equipo cuando el grupo de desarrollo es de varios miembros.
Desventajas

  • No versiona datos internos de las tablas, para ello hay sólo tres opciones:


  1. Hacer backups. Contra: pueden tener un tamaño de varios gigabytes.
  2. Crear scripts automáticamente que ingresen los datos a las tablas (insert into). Contra: la posterior ejecución de esos scripts demora horas.
  3. Crear un método complejo en el cual la información de cada registro de cada tabla no es borrada sino que tiene un estado, e incorporar fecha y hora. Contra:  el tamaño de las tablas se incrementa rápidamente, repercutiendo en la performance. Generalmente no se justifica el costo-beneficio de su implementación.

Manos a la obra

Bien, ahora que entendemos las opciones que nos brinda esta herramienta de Visual Studio, entonces pasaremos a comentar cómo es que se organiza.

Requisitos

Para empezar, debemos contar con las herramientas necesarias:

  • Visual Studio: desde la versión 2010 en adelante.
  • Acceso a un servidor SQL Server 2005 en adelante.

Creando el proyecto

Como siempre, en Visual Studio lo primero que haremos será crear una solución. En este caso, la que nos interesa es la de tipo "SQL Server Database Project". La crearemos de la siguiente forma:





El resultado es un proyecto nuevo y, obviamente, vacío:



Importando la base de datos

El próximo paso, es agregar la base de datos de SQL Server a nuestro nuevo proyecto. Para iniciar la importación hacemos clic derecho sobre el proyecto y seleccionamos la opción Import - Database:



Lo siguiente, es establecer una conexión desde Visual Studio al servidor SQL. P para ello, haremos clic en el botón New Connection...


Agregamos el nombre del servidor SQL en Server name luego desplegamos el combo Select or enter a database name: y seleccionamos la base de datos que vamos a serializar, para este ejemplo es la base de datos de nombre "Prueba":



Adicionalmente, podemos hacer clic en el botón Test Connection, pero si en el combo anteriormente ya nos muestra los nombres de las bases, podemos estar seguros de que la conexión funcionó perfectamente. 
Debemos mencionar que en este caso nuestra base de datos está configurada para aceptar el logueo de usuarios del mismo dominio de nuestra empresa: Active Directory. Si ese no fuese el caso, podemos agregar un usuario dentro del servidor SQL y establecemos la conexión utilizando ese usuario seleccionando la opción Use SQL Server Authentication. Una vez que aceptamos esta ventana, regresamos al formulario de importación y aprovechamos entonces para verificar que haya quedado seleccionada la base de datos que queremos serializar:


Iniciamos el proceso de importación haciendo clic en el botón Start, este es el resultado:



Vemos que se agregó un archivo al proyecto:



Este archivo es el resultado de serializar la tabla Artículos que habíamos creado. Recordemos que este es un ejemplo sencillo para facilitar el aprendizaje. Una base de datos productiva está compuesta de tablas, procedimientos almacenados, funciones, varios usuarios, y otros componentes;odos ellos pueden ser serializados en nuestro proyecto. 
Al abrir el archivo Articulos.sql vemos cómo Visual Studio lee el código contenido en él y dibuja una tabla, además de mostrar el código fuente:



De esta manera, vemos lo fácil que es serializar una base de datos. Simplemente hay que crear un proyecto, establecer la conexión e importar la base. El resto es automático.

Autor:


Julián Haeberli 
Baufest Technical Leader