@
leyendo...
Tecnología

Respaldando BD en SQL Server hacia Microsoft Azure – Parte 1

Siempre se ha hablado de la importancia de generar respaldos sobre las bases de datos en SQL Server. Y más importante, que dichos respaldos estén almacenados por fuera del sistema o ambiente que los trabaja o contiene para estar seguros de que, en caso de alguna contingencia, podremos restaurar, de acuerdo con la política definida para respaldar y restaurar y así, garantizar el menor impacto de pérdida de datos en la empresa.

Desde SQL Server yo puedo respaldar hacia Microsoft Azure, usando el servicio Blob Storage de éste, mediante tres aspectos:

  1. Usando una URL como el destino del respaldo. Esto es similar a respaldar hacia discos o cintas.
  2. Mediante respaldos File-Snapshots. Éstos proveen respaldos y restauraciones casi instantáneas.
  3. Configurando SQL Server para administrar la estrategia de respaldos, o Respaldo Administrado SQL Server hacia Microsoft Azure.

En este primer post, trataremos lo relacionado con el primer aspecto, también conocido como SQL Server Backup to URL, como hacerlo y qué consideraciones tener en cuenta. De hecho, la idea surgió porque voy a hacer “decomissioning” de una MV que tengo en Microsoft Azure con SQL Server 2014 y hay una base de datos de ahí que me interesa recuperar, “ContosoRetailDW” y pues voy a aprovechar esta característica funcional para hacerlo. Para quienes estén interesados en esta base de datos de ejemplo, la pueden descargar desde la página de descargas de Microsoft, exactamente en Microsoft Contoso BI Demo Dataset for Retail Industry. Esta base de datos de ejemplo, que está disponible desde 2010, ofrece un esquema estrella y una buena cantidad de datos. Como yo ya había actualizado algunos datos y hecho algunas cosas sobre ésta, prefiero respaldar desde 2014 y restaurar en 2016.

Para usar esta característica funcional, se requiere contar con SQL Server 2012 SP1 CU2 o posterior. En otro post, les indicaré cómo proceder para versiones anteriores a ésta.

Voy a usar mi cuenta de suscripción en Microsoft Azure, porque el procedimiento requiere una cuenta de almacenamiento. Adicionalmente, instalaré las herramientas de PowerShell en la laptop para hacer los scripts requeridos para el propósito del post.

El primer paso es ir hacia la página de recursos de Microsoft Azure y descargar la herramienta de línea de comando de PowerShell.

Instalando Azure PowerShell en Windows

Dar clic en “Windows install”. El abre la ventana de Web Platform Installer 5.0 y los deja de una vez en la parte de instalación del PowerShell.

WPI 5 - Azure PowerShell en Windows

Dar clic en “Install” para iniciar el proceso de instalación.

Un par de minutos más tarde, termina el proceso de instalación.

Cierren la ventana del WPI.

Abrir la ventana de PowerShell en su sistema operativo y ejecutar el siguiente comando:

Login-AzureRmAccount

En la ventana que les aparece de Azure, ingresar las credenciales asociadas con el servicio.

Si todo sale bien, debe salir un mensaje en la ventana de PowerShell indicando el ambiente, la cuenta, el SubscriptionID y el nombre de dicha suscripción.

Si, como en mi caso, la suscripción que les aparece no es la que desean, pueden ejecutar el siguiente comando en PowerShell para ir a la deseada:

Set-AzureRmContext -SubscriptionName

El nombre de la suscripción aparece, entre varios sitios, en las propiedades de su MV en Azure bajo la etiqueta “Subscription name”.

Ahora, para efectos de organización, vamos a crear un grupo de recursos. Si ustedes desean usar un grupo de recursos existente, pasen al siguiente paso. Recuerden que los nombres aquí usados son sugeridos; pueden usar éstos o los que les gusten. El comando es el siguiente:

New-AzureRmResourceGroup -Name “sqlsbackup2urlrg” -Location “East US”

Ahora, dentro del grupo de recursos, bien sea creado o uno ya existente, se creará una cuenta ARM de almacenamiento. El comando es el siguiente:

New-AzureRmStorageAccount -Name “sqlsbackup2urlstorage” -ResourceGroupName “sqlsbackup2urlrg” -Type Standard_RAGRS -Location “East US”

Ahora se va a obtener la llave de acceso asociada a la cuenta ARM de almacenamiento creada en el paso anterior. Se almacenará en una variable para facilidad posterior. El comando es el siguiente:

$LlaveDeCuenta = Get-AzureRmStorageAccountKey -ResourceGroupName “sqlsbackup2urlrg” -Name “sqlsbackup2urlstorage”

Ahora se crea un contexto de almacenamiento con la cuenta que creamos previamente. Se almacenará en una variable para facilidad posterior. El comando es el siguiente:

$ContextoAlmacenamiento = New-AzureStorageContext -StorageAccountName “sqlsbackup2urlstorage2” -StorageAccountKey $LlaveDeCuenta[0].Value

Teniendo lo anterior, ya estamos listos para crear el contenedor de nuestro respaldo de SQL Server. Los comandos son los siguientes:

$Contenedor = New-AzureStorageContainer -Context $ContextoAlmacenamiento -Name “sqlsbackup2urlcontainer”

$cbc = $Contenedor.CloudBlobContainer

Ahora, ya para ir terminando, se crea la política de acceso para el almacenamiento, así como la firma de acceso compartido. Los comandos son los siguientes:

$Permisos = $cbc.GetPermissions();

$NombrePolitica = $policyName

$Politica = new-object “Microsoft.WindowsAzure.Storage.Blob.SharedAccessBlobPolicy”

$Politica.SharedAccessStartTime = $(Get-Date).ToUniversalTime().AddMinutes(-5)

$Politica.SharedAccessExpiryTime = $(Get-Date).ToUniversalTime().AddYears(10)

$Politica.Permissions = “Read,Write,List,Delete”

$Permisos.SharedAccessPolicies.Add($NombrePolitica, $Politica)

$cbc.SetPermissions($Permisos);

$Politica = new-object “Microsoft.WindowsAzure.Storage.Blob.SharedAccessBlobPolicy”

$sas = $cbc.GetSharedAccessSignature($Politica, $NombrePolitica)

Write-Host ‘Shared Access Signature= ‘$($sas.Substring(1))”

Luego de esta última instrucción, vamos hacia el servidor o si tienen conexión desde un SQL Server Management Studio hacia el servidor, también es válido. Se establece conexión con la instancia en donde está la base de datos a respaldar y pegamos la siguiente sentencia T-SQL.

CREATE
CREDENTIAL [https://sqlsbackup2urlstorage.blob.core.windows.net/sqlsbackup2urlcontainer]

WITH
IDENTITY=‘sqlsbackup2urlstorage’,

SECRET=‘o2oFNvDqVHOJbwq20+8nVToS0oDEM3TRU3e8umRfkvSNgRk+EsgE4vb4VR56cui6c4p2KwbZzkmBhEkGjbhyGQ==’

Noten que la identidad que se está usando es el nombre del Storage o del almacenamiento y el “Secret” la clave del almacenamiento; puede ser la primera o la segunda. Para obtener dicha clave, visitar el Portal Azure, ir a la cuenta de almacenamiento y en Settings, dar clic en Access Keys. Escoger la primera que aparece y copiarla. Pegarla en el query.

Ejecutar el script.

Ahora, vamos a conectarnos a la instancia con el SQL Server 2014 mediante SQL Server Management Studio. En éste, se abre una nueva ventana y se pega el siguiente script T-SQL:

USE master;
ALTER
DATABASE ContosoRetailDW

SET RECOVERY FULL;
— Back up the full AdventureWorks2014 database to the container that you created in Lesson 1

BACKUP DATABASE ContosoRetailDW

TO URL =
https://sqlsbackup2urlstorage.blob.core.windows.net/sqlsbackup2urlcontainer/ContosoRetailDW.bak’

    WITH CREDENTIAL=https://sqlsbackup2urlstorage.blob.core.windows.net/sqlsbackup2urlcontainer’;
GO

Para validar que, en efecto, se hizo el respaldo, acceder de nuevo al Portal Azure, ir a la cuenta de almacenamiento y luego al contenedor. Debe verse algo así:

Respaldo en Azure Blob Storage Service

En estos momentos, ya tenemos nuestro respaldo en Microsoft Azure.

Ahora, a restaurarlo en SQL Server 2016. Para la restauración, copiar la siguiente instrucción T-SQL en el SQL Server Management Studio conectado al SQL Server 2016:

— Restore ContosoRetailDW from URL to SQL Server instance

RESTORE DATABASE ContosoRetailDW

FROM URL=https://sqlsbackup2urlstorage.blob.core.windows.net/sqlsbackup2urlcontainer/ContosoRetailDW.bak’

WITH MOVE ‘ContosoRetailDW2.0’ to ‘C:\SQLDATA\ContosoRetailDW_Data.mdf’
,MOVE ‘ContosoRetailDW2.0_log’ to ‘C:\SQLLOG\ContosoRetailDW_Log.ldf’

Luego de menos de un minuto, la ventana del SQL Server Management Studio debe verse así:

Resultado de ejecución de respaldo

Y ya en nuestro SQL Server 2016 se aprecia “ContosoRetailDW” con las otras bases de datos:

ContosoRetailDW en SQL Server 2016

Ahora bien, si quisiera respaldar desde SQL Server 2016 solo tengo que ejecutar la siguiente instrucción en SQL Server Management Studio:

CREATE CREDENTIAL [https://sqlsbackup2urlstorage.blob.core.windows.net/sqlsbackup2urlcontainer]

WITH IDENTITY=‘sqlsbackup2urlstorage’,

SECRET=‘o2oFNvDqVHOJbwq20+8nVToS0oDEM3TRU3e8umRfkvSNgRk+EsgE4vb4VR56cui6c4p2KwbZzkmBhEkGjbhyGQ==’

Y volver a hacer respaldo hacia el contenedor. Recuerden ponerle otro nombre al archivo de respaldo:

BACKUP DATABASE ContosoRetailDW

TO URL=https://sqlsbackup2urlstorage.blob.core.windows.net/sqlsbackup2urlcontainer/ContosoRetailDW_2016.bak’

WITH CREDENTIAL=https://sqlsbackup2urlstorage.blob.core.windows.net/sqlsbackup2urlcontainer’;

Ahora tenemos dos respaldos en el almacenamiento de Microsoft Azure:

Dos respaldos en Azure Blob Storage Service

Todo por ahora. En una próxima entrega, el segundo aspecto de respaldo, cual es File-Snapshot.

Saludos.

Comentarios

Aún no hay comentarios.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Categorías

Archivos

A %d blogueros les gusta esto: