Configurando un ambiente SQL de Emergencia

Es inevitable que como developer, en algún momento requieras manejar una base de datos.

También es inevitable que a veces te encuentres en un ambiente que no es el tuyo. Un ambiente en el que no tengas el motor de base de datos instalado y menos un software de administración como el Structured Query Language Server Management Studio (es el nombre de producto más largo que conozco en Microsoft. Sí, aún más largo que el primer nombre que se le iba a dar a Windows Phone, que era: Windows Phone 7 Series). La verdad, se le conoce más como SQL Server Management Studio y los más perezosos le llaman SSMS.

Entonces obviamente para ahorrarte problemas de licencias y dinero, puedes escoger descargar el motor de SQL Express, que es completamente gratuito. Pero esto te consume como unas 200MB. Y como el título lo sugiere, lo que queremos es tener un ambiente rápidamente instalado para trabajar. Y es que si esto ocurre, es porque no estamos en buenas condiciones; ni siquiera de internet. Así que bajar 200MB es un pain.

Afortunadamente desde SQL Server 2012, se incluye una versión minimalista del motor, llamada LocalDB. Es un motor por demanda (o sea que no está a toda hora comiéndose los recursos de máquina y por ende no acaba con tu máquina de desarrollo y juegos). Así que tienes que iniciarlo (aunque por ejemplo Visual Studio lo inicia automáticamente).

Ok, este motorcito de SQL LocalDB solo pesa 43MB y eso en la versión de 64bit. Pero lo que más me trama, es que no está consumiendo recursos a toda hora y para las labores de desarrollo funciona perfectamente. O sea, para la mayoría de las veces en que un developer está trabajando.

Cuando instalas LocalDB, éste queda en C:\Program Files\Microsoft SQL Server\120\LocalDB o similar, dependiendo de la versión. Y se accede desde cualquier tool de administración de manera estándar. O sea, a través de una cadena de conexión. En general, el server se llama (localdb)\NombreInstancia.

Un comando muy útil que queda instalado es sqllocaldb (Ubicado en C:\Program Files\Microsoft SQL Server\120\Tools\Binn o similar). Te permite crear instancias, arrancarlas, detenerlas o listarlas. Con la instalación por defecto de SQL LocalDB se crea una instancia por defecto. En general esta se llama MSSQLLocalDB.

Observen que aquí pongo las rutas de donde queda instalado todo, pues en el proceso de instalación esto no se informa y puede que después pasen su tiempo tratando de encontrar donde quedó instalado todo.

Si los directorios en los que han visto que quedan instaladas estas herramientas ya están en el path del sistema, entonces solo basta con escribir desde cualquier consola de comandos por ejemplo sqllocaldb. De lo contrario para mayor comodidad, aconsejo que metan estos directorios al path, tal y como lo muestro en este post.

Visual Studio también instala SQL LocalDB y la instancia que genera se llama ProjectsV12 o similar, dependiendo de la versión.

Igual, si uno quiere usar una instancia ya instalada, lo que puede hacer es listar todas las instancias de SQL LocalDB, a través del comando: sqllocaldb info

Esto nos emite una lista de las instancias registradas con en nuestro motorcito:

image

Observa cómo al no ser un servicio de Windows, es necesario iniciar la instancia. Luego de iniciada, podemos crearle bases de datos y sobre éstas ejecutar scripts, levantar backups, etc.

Pero con qué la administramos? Habíamos dicho que andábamos de afán. Tal vez haciendo una demo o un despliegue de algún desarrollo nuestro. Entonces tratar de bajar el SSMS con las condiciones de red estándar de sitios públicos, puede tardar casi una hora, ya que su peso está alrededor de 600MB y según la versión puede ser aún más pesado!

La más breve, sería bajar las herramientas de línea de comando para trabajar el motor, o el mejor conocido SQLCMD.

Sin embargo ten en cuenta que todo tendrás que hacerlo con línea de comandos. Desde levantar el backup, hasta hacer un select de verificación, etc. En ocasiones lo que quieres hacer es muy sencillo, entonces no hay lío. SQLCMD será suficiente. Lo puedes descargar de aquí y queda ubicado en una ubicación similar a esta: C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\120\Tools\Binn.

Cual entonces sería una opción intermedia en este caso? O sea, no tan pesada como el SSMS ni tan liviana (menos de 3MB) que el SQLCMD?

La idea sería encontrar un IDE liviano para manejar DBs tipo SQL. Uno muy famoso es TOAD pero se gasta sus 157MB, y esto no es que sea muy rápido de descargar; sin embargo es de las alternativas a SSMS más completas. Otro IDE mucho más liviano (menos de 25MB) es SQL Everywhere de Atlantis Interactive. También es gratuito y alcanza algo de autocomplete para algunos nombres en la DB.

Luego, con solo 5MB encontramos al poderoso LinqPad creado por Joseph Albahari. Para mí, LinqPad es como un salón de juegos para jugar con .NET. Por ejemplo con C# permite jugar de manera interactiva para probar una línea de código de una solución grande sin tener que ejecutarla toda en Visual Studio. Por otro lado, también permite hacer conexiones a diversas fuentes de datos. Entre ellas a SQL Server. Y sobre estas conexiones, ejecutar consultas. No solo con lenguaje T-SQL, sino también como su nombre lo indica, a través del Lenguaje Integrado de Consultas de .NET, alias: LINQ.

Pero si al usar LinqPad creen que el señor Albahari creó un excelente producto en tan solo 5MB, esperen a ver este creado por él mismo: QueryExpress. Con solo 141KB, óigase bien, KB! Puede lograr conectarse a SQL, Oracle o ODBC y además es OpenSource y el código en C# está disponible en el sitio para los que quieran ponerle más funcionalidades. Para mí es la solución perfecta para el escenario que he descrito en este post:

clip_image003

Solo por cultura general, les dejo otras herramientas interesantes para administrar SQL DBs: Database.NET soportando una enorme variedad de motores además de SQL Server y creada en .NET con solo 10.5MB. Tiene funciones bastante avanzadas como el famoso SCRIPT AS y exportación de datos. Muy conveniente.

Para los más geeks, está DBExt, un plugin para VIM, a través del cual desde el mismísimo VIM se pueden consultar diversas fuentes de datos, en modo texto. Vendría siendo muy parecido al SQLCMD; y por ahí he visto otro IDE de SQL llamado Embarcadero, pero no es free; así que, suerte.