PS Script v1 para Vaulting de SnapShots SME y SMSQL

Estimados lectores,

Hace unas semanas realicé un pequeño desarrollo en Microsoft PowerShell basado en la NetApp Data OnTap PowerShell Toolkit para integrar los SnapManagers de Exchange y/o SQL con SnapVault transfiriendo los snapshots consistentes hacia una cabina de backup. El objetivo de PS Script v1 para Vaulting de SnapShots SME y SMSQL es seleccionar los snapshots recientes del backup consistente de las bases de datos y logs, ubicados en una lista de volúmenes que pasamos como parámetro, para mantener un conjunto de backups en la cabina de destino a modo de archivado.

El script, en su primera versión, está pensado para iniciar las actualizaciones de SnapVault de forma secuencial sobre cada volumen. Este razonamiento se basa en la necesidad de transferir un número relativamente elevado de snapshots sobre enlaces WAN lentos que comparten otros servicios. Con una pequeña modificación del código conseguimos que las actualizaciones se realicen de forma simultánea tal y como veremos en la versión v2.

Para el correcto funcionamiento de PS Script v1 para Vaulting de SnapShots SME y SMSQL se ha diseñado la siguiente lista de parámetros:

[0] ----> Establecer "SMSQL" o "SME" según si transferimos snapshots de SQL o Exchange
[1] ----> Número de snapshots a retener en la controladora de Destino
[2] ----> Nombre de la planificación de snapshots: por ejemplo "Backup_SME" o "Backup_SMSQL"
[3] ----> Controladora de Origen: "NetApp-Produccion"
[4] ----> Controladora de Destino: "NetApp-Backup"
[5] ----> Volumen de Origen:  "Vol_Produccion"
[6] ----> Volumen de Destino: "Vol_Produccion_SnapVault"
[7] ----> Path de Destino:    "/vol/Vol_Produccion_SnapVault/Backup"
[n-2] --> Recursividad Volumen de Origen
[n-1] --> Recursividad Volumen de Destino
[n] ----> Recursividad Path de Destino

El código del script es el siguiente:

# Importar el Módulo DataONTAP instalado previamente en el servidor
Import-Module DataONTAP
# Inicializar variables para SMSQL o SME
if ($args[0] -eq "SMSQL") {
	$SMBBDD = "sqlsnap"
	$SMLOG  = "sqlinfo"
}
elseif ($args[0] -eq "SME") {
	$SMBBDD = "exchsnap"
	$SMLOG  = "eloginfo"
}
# Establecer la retención de snapshots en la controladora de Destino
Connect-NaController $args[4]
for($i=6;$i -lt $args.count;$i=$i+3) {
	Set-NaSnapvaultSecSnapshotSchedule $args[$i] $args[2] -AutoUpdate $false -RetentionCount $args[1]
	-DaysOfWeek "-" -HoursOfDay "0"}
# Iniciar la transferencia de SV seleccionando el snapshot más reciente de SnapManager sobre cada volumen
# de Origen. Esperar a que finalice y generar un snapshot en la controladora de Destino. El bucle está diseñado
# para ejecutar todas las transferencias secuencialmente.
for ($i=5;$i -lt $args.count;$i=$i+3) {
	Connect-NaController $args[3]
	$SnapName = get-nasnapshot $args[$i] | ? { $_.Name -imatch $SMBBDD -Or $_.Name -imatch $SMLOG }
	| Sort-Object AccessTimeDT -Descending | Select-Object -first 1
	Connect-NaController $args[4]
	Start-NaSnapVaultSecTransfer $args[$i+2] -PrimarySnapshot $SnapName.Name
	$EndSleep = $FALSE
	while (!$EndSleep) {
		$SVstate = Get-NaSnapvaultSecStatus -Path $args[$i+2]
		if ($SVstate.status -eq "idle") {
			$EndSleep = $TRUE
			Start-NaSnapvaultSecSnapshot -VolumeName $args[$i+1] $args[2]
		}
    }
}

El script puede integrarse con los Jobs de SMSQL y los de SME añadiendo pasos adicionales sea el caso de trabajos de SQL (SQL Agent) o bien tareas programadas de Windows. En el caso de usar el agente de SQL podemos configurar el paso adicional directamente con el script y su correspondiente paso de argumentos. Para las tareas programadas de Windows nos podemos apoyar de un proceso por lotes (CMD o BAT) y añadir como segunda acción éste mismo. Veamos un ejemplo:

powershell.exe C:\SnapVaultScripts\SV-SME-SMSQL.ps1 "SME"/"SMSQL" 30 Backup_Exchange/SQL NetApp-ORIGEN NetApp-DESTINO
Vol_ORI1 Vol_DST1_SV /vol/Vol_DST1_SV/Backup
Vol_ORI2 Vol_DST2_SV /vol/Vol_DST2_SV/Backup
Vol_ORIn Vol_DSTn_SV /vol/Vol_DSTn_SV/Backup

El archivo .bat del ejemplo hace una llamada a la PowerShell para ejecutar el script recibiendo la lista de parámetros, separados por un espacio en blanco, en el orden diseñado.


Licencia de Creative Commons

This Post by David Solé Pérez is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License

Pagina Principal

327 Visitas del Post

¿Te ha gustado este artículo? ¡Suscríbete!

Artículos Relacionados

  • Activar el modo silencioso en la Cli de OceanStor Estimados lectores, en este nuevo artículo vamos a ver cómo activar el modo silencioso en la Cli de OceanStor útil en los casos donde realicemos scripting, por ejemplo, para las tareas del […]
  • Mover buzones de Microsoft Exchange 2003 a 2007 o 2010 Estimados lectores, ya sé que Exchange 2003 dejó de estar soportado por Microsoft el 8 de Abril de 2014 pero ¿cuántos quedan todavía en producción? No voy a inventar la rueda con […]
  • Determinar la version de VMware ESXi Estimados lectores, en este artículo veremos cómo determinar la versión de VMware ESXi o VMware ESX para saber exactamente de qué Update estamos hablando. Generalmente acostumbramos a ver […]
  • Comandos para crear un volumen de NetApp 7-Mode Estimados lectores, ya sé que desde hace bien poquito estamos trabajando con la versión cDOT de NetApp pero todavía tenemos mucho recorrido con 7-Mode así que vamos a ver los comandos para […]
  • Integrar los backups de SMVI con SnapVault En este nuevo artículo veremos cómo integrar los backups de SMVI con SnapVault mediante un pequeño script que podemos encontrar en la NetApp Community. En este caso usamos el plugin VSC […]
  • Identificar un disco Failed en una NetApp Estimados lectores, En este nuevo artículo vamos a ver cómo identificar un disco Failed en una NetApp usando la línea de comandos. Cuando se produce un fallo de disco en una cabina de […]
David Solé Pérez

Autor: David Solé Pérez

Padre de Paula e Ivet, entusiasta de las Tecnologías de la Información y de la Comunicación.

Un comentario en “PS Script v1 para Vaulting de SnapShots SME y SMSQL”

Deja una respuesta

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