Migra datos entre SQL Server 2017 y Cloud SQL para SQL Server mediante archivos de copia de seguridad

Migra datos entre SQL Server 2017 y Cloud SQL para SQL Server mediante archivos de copia de seguridad

En este instructivo, migrarás los datos de SQL Server 2017 Enterprise que se ejecuta en Compute Engine a Cloud SQL para SQL Server 2017 Enterprise. Aquí se muestra cómo exportar los datos de SQL Server 2017, cómo importarlos a Cloud SQL para SQL Server 2017 y cómo validar si se importaron de forma correcta.

Si deseas migrar datos desde SQL Server 2008, consulta Migra datos entre SQL Server 2008 y Cloud SQL para SQL Server mediante archivos de copia de seguridad.

Este instructivo te resultará útil si eres un administrador de sistemas, desarrollador, ingeniero, administrador de bases de datos o ingeniero DevOps y deseas migrar datos de SQL Server 2017 a Cloud SQL para SQL Server.

En el instructivo, se da por sentado que estás familiarizado con lo siguiente:

  • Microsoft SQL Server
  • Microsoft PowerShell
  • Compute Engine
  • Cloud Storage
  • Cloud SQL

Objetivos

  • Crear una instancia de máquina virtual (VM) de SQL Server en Compute Engine para alojar la base de datos de muestra
  • Crear una instancia de Cloud SQL para SQL Server
  • Crear un depósito de Cloud Storage
  • Crear una copia de seguridad de la base de datos de muestra
  • Importar la base de datos a Cloud SQL para SQL Server
  • Validar los datos importados

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

  • Compute Engine
  • Cloud SQL
  • Cloud Storage
  • SQL Server (premium con Compute Engine)

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud sean aptos para obtener una prueba gratuita.

Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.

Antes de comenzar

1. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

Nota: Si no planeas conservar los recursos que creaste durante este procedimiento, crea un proyecto en lugar de seleccionar uno existente. Cuando termines, puedes borrar el proyecto y quitar todos los recursos asociados con él.

2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

3. Habilita las API de Cloud Storage, Cloud SQL Admin, and Compute Engine.

4. En Cloud Console, activa Cloud Shell.

En la parte inferior de Cloud Console, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell que tiene el SDK de Cloud preinstalado, incluida la herramienta de línea de comandos de gcloud, y valores ya establecidos para el proyecto actual. La inicialización de la sesión puede tomar unos minutos.

Crea una secuencia de comandos para una base de datos de muestra

En esta sección, debes crear una secuencia de comandos para propagar una base de datos de muestra precargada. Luego, crea una instancia de SQL Server 2017 en Compute Engine que use esta base de datos.


1. En Cloud Shell, crea una secuencia de comandos de PowerShell para implementarla como secuencia de comandos de inicio: 

cat << 'EOF' > startup.ps1
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$dataseturl
= "https://opendata.maryland.gov/api/views/ryxx-aeaf/rows.csv?accessType=DOWNLOAD"
Invoke-WebRequest -Uri $dataseturl -OutFile c:\dataset.csv
Invoke-Sqlcmd -Query "CREATE DATABASE testdb;"
Invoke-Sqlcmd -Query "CREATE TABLE testdb.dbo.MarylandZipCodes ( zipcode int NOT NULL PRIMARY KEY,  city varchar(255), county varchar(255))"
Invoke-Sqlcmd -Query "BULK INSERT testdb.dbo.MarylandZipCodes FROM 'c:\dataset.csv' WITH (DATAFILETYPE='char',FIELDTERMINATOR=',' ,ROWTERMINATOR = '0x0a',  FIRSTROW=2);"
EOF

Esta secuencia de comandos de inicio crea una base de datos local llamada testdb con una tabla llamada MarylandZipCodes. Luego, la secuencia de comandos descarga el registro público de códigos postales de Maryland y, a continuación, importa el registro a la tabla.

2. Crea una instancia de SQL Server 2017 Enterprise para Windows Server 2016:

gcloud compute instances create sql-server --machine-type n1-highmem-4 \
   
--boot-disk-size 50GB \
 
--image-project windows-sql-cloud --image-family sql-ent-2017-win-2016 \
 
--zone us-central1-f  \
 
--scopes=https://www.googleapis.com/auth/cloud-platform \
 
--metadata-from-file windows-startup-script-ps1=startup.ps1

En este instructivo, debes crear la instancia en la zona us-central1-f con un tamaño de disco de arranque de 50 GB. Para obtener más información sobre las zonas, consulta Ubicaciones de Cloud. La marca --metadata-from-file configura la secuencia de comandos de PowerShell para que sea la secuencia de comandos de inicio de la instancia.

Crea la instancia de Cloud SQL y el depósito de Cloud Storage

1. En Cloud Shell, crea la instancia de Cloud SQL para SQL Server 2017 Enterprise a la que luego migrarás la base de datos:

gcloud beta sql instances create target  \
   
--database-version=SQLSERVER_2017_ENTERPRISE \
   
--cpu=2 \
   
--memory=5GB \
   
--root-password=sqlserver12@ \
   
--zone=us-central1-f

La creación de la instancia puede tomar unos minutos. El nombre de usuario raíz predeterminado es sqlserver y la contraseña predeterminada es sqlserver12@. Para este instructivo, debes crear la instancia en la zona us-central1-f. Para obtener más información sobre las zonas, consulta Ubicaciones de Cloud.

2. Crea un depósito de Cloud Storage para almacenar el archivo de copia de seguridad antes de importar los datos a Cloud SQL:

gsutil mb -l US "gs://${DEVSHELL_PROJECT_ID}-sql-backups"

Crea una copia de seguridad de la base de datos de muestra

En esta sección, debes conectarte a la máquina virtual (VM) de SQL Server, crear una copia de seguridad de la base de datos y subirla a Cloud Storage.

1. En Cloud Shell, restablece la contraseña para la instancia de VM de SQL Server:

gcloud compute reset-windows-password sql-server --zone=us-central1-f

Toma nota de la contraseña nueva para el usuario.

2. En el navegador, instala la extensión de Chrome RDP para Google Cloud.

3. En Cloud Console, ve a la página Instancias de VM.

4. A fin de abrir la extensión de Chrome RDP, haz clic en el botón RDP de la instancia de VM sql-server a la que deseas conectarte.

5. En los campos nombre de usuario y contraseña, ingresa el nombre de usuario y la contraseña que anotaste antes para la instancia de VM de SQL Server.

6. Deja en blanco el campo Dominio y haz clic en Aceptar para conectarte a la VM de SQL Server.

Cuando se te solicite, acepta el certificado.

7. Si aceptas los términos, haz clic en Continuar.

8. En el navegador, minimiza todas las ventanas, y, luego, inicia la herramienta de línea de comandos de PowerShell.

9. Crea una carpeta de copia de seguridad:

mkdir c:\backup

10. En el navegador, crea una copia de seguridad de la base de datos en la carpeta de copia de seguridad:

osql -E -Q "BACKUP DATABASE testdb TO DISK='c:\backup\testdb.bak'"

11. En la shell de la instancia, copia el archivo de copia de seguridad en el depósito de Cloud Storage:

$PROJECT_ID=(gcloud config get-value core/project)

gsutil cp
-n c:\backup\testdb.bak gs://$PROJECT_ID-sql-backups

Importa el archivo de copia de seguridad a Cloud SQL

1. En Cloud Shell, recupera la cuenta de servicio asociada con la instancia de Cloud SQL y guárdala en una variable:

SVC_EMAIL_ADDRESS=$(gcloud sql instances describe target \
   
--format='value(serviceAccountEmailAddress)')
echo $SVC_EMAIL_ADDRESS

Google Cloud crea una cuenta de servicio cuando creas la instancia de Cloud SQL. Debes usar la cuenta de servicio a fin de otorgar permiso a la instancia de Cloud SQL para acceder a los recursos que necesita.

2. Agrega la cuenta de servicio a la lista de control de acceso (LCA) del depósito de Cloud Storage con permisos de escritor:

gsutil acl ch -u ${SVC_EMAIL_ADDRESS}:W gs://${DEVSHELL_PROJECT_ID}-sql-backups

3. Agrega la cuenta de servicio al archivo de importación con permisos de lector:

gsutil acl ch -u $SVC_EMAIL_ADDRESS:R gs://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak

4. Importa el archivo de copia de seguridad a la base de datos de Cloud SQL:

gcloud beta sql import bak target \
    gs
://${DEVSHELL_PROJECT_ID}-sql-backups/testdb.bak --database testdb

Valida la importación de datos

En esta sección, debes verificar si los datos de muestra se importaron de forma correcta.

1. En Cloud Shell, instala el kit de herramientas de SQL Server:

sudo apt-get install -y mssql-tools

Si aceptas los términos de la licencia, ingresa yes cuando se te solicite.

2. Para acceder de forma segura a la instancia de Cloud SQL, descarga el proxy de Cloud SQL:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy

3. Inicia el proxy de Cloud SQL:

CONNECTION_NAME=$(gcloud sql instances describe target --format='value(connectionName)')
./cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &

4. Observa la cantidad de filas en la tabla de Cloud SQL:

/opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q "select count(*)
from testdb.dbo.MarylandZipCodes"

Cuando se te solicite, ingresa la contraseña sqlserver12@. Asegúrate de que el resultado sea 619.

Limpieza

La manera más fácil de eliminar la facturación es borrar el proyecto de Cloud que creaste para el instructivo.

Borra el proyecto

Precaución: Borrar un proyecto tiene las consecuencias que se enumeran a continuación.Se borra todo en el proyecto. Si utilizaste un proyecto existente para este instructivo, cuando lo borres, también borrarás cualquier otro trabajo que hayas realizado en el proyecto.Se pierden los ID personalizados de proyectos. Cuando creaste este proyecto, es posible que hayas creado un ID del proyecto personalizado que desees utilizar en el futuro. Para conservar las URL que utilizan el ID del proyecto, como una URL appspot.com, borra los recursos seleccionados dentro del proyecto en lugar de borrar todo el proyecto.

1. En Cloud Console, ve a la página Administrar recursos.

2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar

3. En el cuadro de diálogo, escribe el ID del proyecto y haz clic en Cerrar para borrar el proyecto.