AlwaysOn con PowerShell I

Introducción

Aunque es muy fácil crear todo lo relacionado con AlwaysOn desde el «wizard», cuando se necesita una automatización podemos recurrir a PowerShell para facilitar la creación, por ejemplo, de máquinas nuevas en entornos de desarrollo. Además es interesante conocer las técnicas para acceder a SQL Server.

SQL Server PowerShell

Para trabajar con SQL Server se puede usar el Entorno de Scripting Integrado Windows PowerShell que mediante líneas de comandos nos permite trabajar con las características de SQL Server. El entorno es interactivo al ser interpretado y no perderse los objetos entre ejecuciones.

El lenguaje de PowerShell, al ser un lenguaje de programación, permite una lógica más compleja que Transact-SQL, que es un lenguaje matemático. Por lo tanto, en el caso de la administración, que es la tarea de este artículo, nos puede ayudar bastante.

El módulo que nos proporciona SQL Server es SQLPS, un módulo comprensivo que incluye todo lo necesario para trabajar con el servidor de base de datos. Al cargarlo, estamos trayendo al entorno un proveedor de SQL Server que usa un mecanismo de navegación basado en rutas, como veremos, y un conjunto de comandos llamados en PowerShell cmdlets.

Módulo SQLPS

Lo primero es importar el módulo SQLPS. Para ello, antes tenemos que tener en cuenta la seguridad en PowerShell, que por defecto está puesta en restringida e impide que se cargue dicho módulo. Lo normal es que se habilite la ejecución de scripts firmados y solo para este proceso.

A continuación podemos importar el módulo. Pero si lo hacemos con las opciones por defecto van a aparecer advertencias porque los verbos usados en los nombres de dos cmdlets (Encode-Sqlname y Decode-Sqlname) no coinciden con los verbos aprobados para Windows PowerShell. Para no recibir una advertencia que nos puede distraer en nuestro desarrollo, le decimos que no verifique los nombres.

Proveedor de PowerShell de SQL Server

Vamos a empezar por explicar las rutas que usa el proveedor de SQL Server. Lo que hacen es transformar las jerarquías de objetos del motor de base de datos en unas rutas de acceso similares a las del sistema de archivos. Tan similares que hasta se puede usar, por ejemplo, cd cambiar directorio.

La jerarquía empieza en SQLSERVER: que es la raíz para el proveedor de SQL Server. Es decir, otros proveedores pueden implementar otras unidades, pero SQL Server solo implementa una que es la mencionada. A partir de ahí hay un conjunto de carpetas principales que se corresponden con los componentes de SQL Server: recordemos que SQL Server es un paquete de utilidades en realidad como Servidor de bases de datos, Analysis Services, etc. Para los objetos de base de datos la carpeta es \SQL, que además incluye el Agente, Broker y correo.

Luego tenemos que decir con qué instancia nos queremos conectar. Si la instancia es la por defecto, su nombre es \DEFAULT. Veamos un ejemplo para crear el extremo que necesita AlwaysOn para que se comuniquen las instancias:

Como no me gustan las líneas largas porque son difíciles de leer, suelo estructurar los comandos en varias líneas. Para separarlas hay que emplear el acento grave (`). También, aunque no es necesario, me gusta poner un punto y coma para dejar claro dónde termina cada comando.

cmdlets del motor de base de datos

El principal es el que ejecuta scripts de Transact-SQL y de XQuery, es decir, que nos permite llevar a cabo una gran parte de lo que se puede hacer con sqlcmd. Aunque el modelo de objetos permite hacer casi todo en SQL Server, a veces nos conviene usar directamente un script de SQL Server. Una de las ventajas de PowerShell es que podemos embeber variables dentro de la cadena que se envía a la instancia de SQL Server, siempre y cuando esté debidamente acotada. Es decir, que PowerShell sea capaz de diferencia el nombre de la variable del resto del texto. De otra manera, hay que componer el texto aparte.

En el ejemplo, como para que funcione AlwaysOn las bases de datos tienen que estar en modo de recuperación completo, lo hacemos para todas y así nos aseguramos:

Siguientes pasos

Antes de empezar a crear el grupo de disponibilidad, podemos necesitar:

  • Crear el directorio compartido para pasar las copias de seguridad.
  • Hacer las copias completas iniciales para que se inicie el registro si las bases de datos estaban en modo de compatibilidad simple.
  • Crear el inicio de sesión que van a usar los extremos.
  • Permitir que el usuario del servicio SQL Server acceda al extremo.
  • Asegurarnos que la sesión AlwaysOn_health esté funcionando.

Una vez tenemos los requisitos, podemos ya crear el grupo de disponibilidad, en este caso con las características:

  • Modo de disponibilidad sincrónico.
  • Conmutación automática.
  • No permite conexiones en modo secundario –no se va a usar, solo es DRP–.
  • La versión es SQL Server 2014.
  • El Agente de Escucha usa el puerto estándar de SQL Server.

Lo siguiente es hacer en el primario las copias de seguridad completas y de registro usando el cmdlet Backup-SqlDatabase.

Pasamos al secundario y unimos la réplica al grupo de disponibilidad:

Restauramos en el secundario las copias de seguridad anteriores en modo de no recuperación, por ejemplo usando el comando Restore-SqlDatabase.

Por último unimos las bases de datos al grupo de disponibilidad:

Conclusión

Aunque en este artículo solo presentamos los comandos específicos de AlwaysOn, dado que cada instalación es propia, hemos podido ver la utilidad de crear un script parametrizable para generar cualquier grupo de disponibilidad.

En el siguiente artículo vemos lo útil que es SMO y cómo utilizar la jerarquía de objetos para realizar parte de la administración de AlwaysOn:

0 comentarios

Dejar un comentario

¿Quieres unirte a la conversación?
Siéntete libre de contribuir

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Al utilizar el Sitio, usted acepta el uso de cookies. más información

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close