Clonar una base de datos de Microsoft SQL Server en Compute Engine

En este tutorial se muestran dos formas de clonar una base de datos de Microsoft SQL Server que se ejecuta en Compute Engine. Un método usa capturas de disco persistente. El otro método usa la copia de seguridad y la restauración nativas de SQL Server, transfiriendo la copia de seguridad mediante Cloud Storage. Cloud Storage es el servicio de almacenamiento de objetos de Google Cloud. Ofrece una forma sencilla, segura, duradera y de alta disponibilidad de almacenar archivos.

La clonación es el proceso de copiar una base de datos online en otro servidor. La copia es independiente de la base de datos y se conserva como una copia de un momento concreto. Puedes usar una base de datos clonada para varios fines sin sobrecargar el servidor de producción ni poner en riesgo la integridad de los datos de producción. Algunas de estas finalidades son las siguientes:

  • Realizar consultas analíticas
  • Pruebas de carga o de integración de tus aplicaciones
  • Extracción de datos para rellenar almacenes de datos
  • Realizar experimentos con los datos

Cada método de clonación descrito en este tutorial tiene ventajas e inconvenientes. El método ideal para ti depende de tu situación. En la siguiente tabla se destacan algunos aspectos clave.

Problema Método 1: Capturas de disco Método 2: Crear copias de seguridad y restaurar datos con Cloud Storage
Espacio en disco adicional necesario en instancias de SQL Server No se necesita espacio en disco adicional Espacio adicional necesario para almacenar el archivo de copia de seguridad al crear y restaurar
Carga adicional en las instancias de SQL Server de origen durante la clonación Sin carga adicional Carga adicional en la CPU y las E/S al crear y subir archivos de copia de seguridad
Duración de la clonación Relativamente rápido para bases de datos grandes Relativamente lento para bases de datos grandes
Puede clonar desde instancias de SQL Server externas a Google Cloud No
complejidad Una secuencia compleja de comandos para adjuntar discos clonados Un conjunto de comandos relativamente sencillo para clonar
Puede aprovechar los sistemas de copias de seguridad que ya tenga Sí, si el sistema de copias de seguridad usa Google Cloud capturas de disco Sí, si el sistema de copias de seguridad escribe archivos de copia de seguridad nativos de SQL Server en Cloud Storage
Granularidad de la clonación Solo se pueden clonar discos completos Solo se puede clonar la base de datos especificada
Coherencia de datos Coherente en el momento de la captura Coherente en el momento de la copia de seguridad

En este tutorial se da por hecho que tienes experiencia en la administración de sistemas Microsoft Windows, PowerShell y Microsoft SQL Server con SQL Server Management Studio de Microsoft.

Configuración del entorno

Para completar este tutorial, debes configurar tu entorno de computación con lo siguiente:

  • Una instancia de SQL Server en Compute Engine (llamada sql-server-prod) para representar tu servidor de base de datos de producción.
  • Un disco adicional (llamado sql-server-prod-data) conectado a tu servidor de producción para almacenar tu base de datos de producción.
  • Una copia de la base de datos de ejemplo de SQL Server Wide World Importers para simular la base de datos de producción que quieres clonar.
  • Una instancia de SQL Server en Compute Engine llamada sql-server-test para representar tu servidor de base de datos de prueba. Clonas tu base de datos en este servidor.

En el siguiente diagrama se muestra esta arquitectura.

Diagrama que muestra la configuración para clonar una base de datos de SQL Server en este tutorial.

Crea la instancia de VM de producción

Para simular un entorno de producción, configura una instancia de VM de Compute Engine que ejecute SQL Server en Windows Server.

La instancia de máquina virtual de este tutorial usa dos discos: un disco de 50 GB para el SO y las cuentas de usuario, y un disco de 100 GB para el almacenamiento de la base de datos.

En Compute Engine, usar discos independientes no ofrece ninguna ventaja de rendimiento. El rendimiento del disco se determina en función de la capacidad de almacenamiento total de todos los discos conectados a una instancia y del número total de vCPUs de la instancia de la máquina virtual. Por lo tanto, la base de datos y el archivo de registro pueden residir en el mismo disco.

Consola

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ve a la página Instancias de VM.

  2. Haz clic en Crear.

  3. En el campo Nombre, escribe sql-server-prod.

  4. En Región, selecciona us-east1.

  5. En Zona, selecciona us-east1-b.

  6. En Configuración de la máquina, cambia Tipo de máquina a n1-standard-2 (2 vCPU).

  7. Junto a la descripción de Disco de arranque, haz clic en Cambiar.

  8. En el panel Disco de arranque, haz clic en la pestaña Imágenes públicas.

  9. En la lista desplegable Sistema operativo, selecciona SQL Server en Windows Server.

  10. En la lista desplegable Versión, selecciona SQL Server 2022 Standard en Windows Server 2022 Datacenter.

  11. Asegúrate de que se hayan definido los siguientes valores:

    • Tipo de disco de arranque se define como Disco persistente estándar.
    • El tamaño (GB) se ha definido en 50.
  12. Haz clic en Seleccionar.

  13. En Identidad y acceso de APIs, define Permisos de acceso como Permitir el acceso completo a todas las APIs de Cloud.

  14. Despliega Gestión, seguridad, discos, redes, único cliente.

  15. Haz clic en la pestaña Discos.

  16. Haz clic en Añadir disco nuevo .

  17. En el campo Nombre, escribe sql-server-prod-data.

  18. En el campo Tamaño (GB), escribe 100.

  19. Haz clic en Listo.

  20. Haz clic en Crear.

Cloud Shell

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Inicializa las siguientes variables:

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Donde:

    • VPC_NAME: nombre de tu VPC
    • SUBNET_NAME: nombre de tu subred
  3. Configura tu ID de proyecto predeterminado:

    gcloud config set project PROJECT_ID
    

    Sustituye PROJECT_ID por el ID de tu Google Cloud proyecto.

  4. Define tu región predeterminada:

    gcloud config set compute/region REGION
    

    Sustituye REGION por el ID de la región en la que quieras hacer el despliegue.

  5. Define tu zona predeterminada:

    gcloud config set compute/zone ZONE
    

    Sustituye ZONE por el ID de la zona en la que quieras implementar el servicio.

  6. Crea una instancia de Compute Engine con la imagen de aplicación de SQL Server 2022 Standard en Windows Server 2022 Datacenter:

    REGION=$(gcloud config get-value compute/region)
    ZONE=$(gcloud config get-value compute/zone)
    
    gcloud compute instances create sql-server-prod \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --image-family=sql-std-2022-win-2022 \
        --image-project=windows-sql-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=sql-server-prod \
        --create-disk="mode=rw,size=100,type=pd-standard,name=sql-server-prod-data,device-name=sql-server-prod-data" \
        --subnet=$SUBNET_NAME 
    

    Este comando otorga a la instancia acceso completo a las Google Cloud APIs, crea un disco secundario de 100 GB y lo asocia a la instancia. Ignora la advertencia de rendimiento del disco, ya que no necesitas un rendimiento alto para este tutorial.

Conectarse a la instancia de VM

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ve a la página Instancias de VM.

  2. Espera unos 5 minutos a que la instancia de VM esté lista.

    Para monitorizar el proceso de inicialización de la VM, consulta la salida de su puerto serie en Cloud Shell:

    gcloud compute instances tail-serial-port-output sql-server-prod
    

    Cuando veas el siguiente mensaje, la inicialización habrá finalizado.

    Instance setup finished. sql-server-prod is ready to use.
    

    Pulsa Control+C para dejar de monitorizar el puerto serie.

  3. Haz clic en el nombre de la instancia sql-server-prod para abrir la página Detalles de la instancia de VM.

  4. En Acceso remoto, haz clic en Definir contraseña de Windows y, a continuación, en Definir para crear tu cuenta en el ordenador remoto.

    En este paso se genera una contraseña. Anota la contraseña o cópiala en un archivo temporal seguro.

  5. En la sección Compute Engine de la consola Google Cloud , haz clic en el desplegable RDP y selecciona la opción Descargar el archivo RDP para descargar el archivo RDP de tu instancia.

    Usa este archivo para conectarte a la instancia mediante un cliente RDP. Para obtener más información, consulta Clientes de Escritorio Remoto de Microsoft.

  6. Cuando se te pida, introduce la contraseña que acabas de generar y haz clic en Aceptar.

  7. Para aceptar el certificado del servidor e iniciar sesión en tu instancia de Windows remota, haz clic en Continuar.

  8. Cuando se te pregunte si quieres que otros ordenadores y dispositivos de la red puedan detectar tu ordenador, haz clic en No.

Configurar el disco adicional

El segundo disco conectado a la instancia de producción se usa para almacenar tu base de datos de producción. Este disco está vacío, por lo que debes particionarlo, formatearlo y montarlo.

  1. En una sesión RDP conectada a tu instancia de sql-server-prod, haz clic en el botón Inicio de la barra de tareas de Windows, escribe diskpart y, a continuación, haz clic en diskpart para abrir DiskPart.
  2. Cuando se te pida que permitas que la aplicación haga cambios, haz clic en .
  3. Muestra una lista de los discos conectados a tu instancia:

    list disk
    

    El resultado es el siguiente:

    Disk ###  Status         Size     Free     Dyn  Gpt
    --------  -------------  -------  -------  ---  ---
    Disk 0    Online           50 GB      0 B
    Disk 1    Online          100 GB   100 GB
    

    El disco 1 (100 GB) es tu disco de datos.

  4. Selecciona el disco de datos:

    select disk 1
    
  5. Inicializa el disco:

    clean
    
  6. Crea una tabla de particiones GUID:

    convert gpt
    
  7. Crea la partición de datos usando todo el disco:

    create partition primary
    
  8. Lista de los volúmenes disponibles:

    list volume
    

    El resultado es el siguiente:

    Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
    ----------  ---  -----------  -----  ----------  -------  ---------  --------
    Volume 0     C                NTFS   Partition     49 GB  Healthy    Boot
    Volume 1                      FAT32  Partition    100 MB  Healthy    System
    Volume 2                      RAW    Partition     99 GB  Healthy
    

    El volumen 2 (99 GB) es tu disco de datos.

  9. Selecciona el volumen:

    select volume 2
    
  10. Formatea la partición con el sistema de archivos NTFS y asígnale la etiqueta data:

    format quick fs=ntfs label=data
    
  11. Monta el disco como unidad D:

    assign letter=d
    
  12. Salir de DiskPart:

    exit
    

Descargar la base de datos de ejemplo

Para configurar tu entorno para este ejercicio de clonación, debes hacer lo siguiente:

Para crear el directorio y descargar el archivo de copia de seguridad, sigue estos pasos:

  1. En tu sesión de RDP, haz clic en el botón Inicio de la barra de tareas de Windows, escribe PowerShell y, a continuación, selecciona la aplicación Windows PowerShell.

  2. En el símbolo del sistema de PowerShell, crea una estructura de directorios para el almacenamiento de la base de datos:

    mkdir D:\sql-server-data\wideworldimporters
    
  3. Descargar el archivo de copia de seguridad en la unidad D:

    bitsadmin /transfer sampledb /dynamic /download /priority FOREGROUND `
      https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak `
      D:\sql-server-data\WideWorldImporters-Full.bak
    

Restaurar la base de datos de ejemplo

Debes restaurar la base de datos de ejemplo en la unidad D (data), ya sea de forma interactiva mediante los asistentes de SQL Server Management Studio (SSMS) de Microsoft o directamente ejecutando un comando de Transact-SQL.

Asistente de SSMS

  1. En tu sesión de RDP, haz clic en el botón Inicio de la barra de tareas de Windows, escribe ssms y, a continuación, selecciona Microsoft SQL Server Management Studio (Ejecutar como administrador).
  2. Una vez que se inicie la aplicación, haz clic en Conectar para conectarte al motor de base de datos sql-server-prod mediante la autenticación de Windows.
  3. En el Explorador de objetos, haga clic con el botón derecho en Bases de datos y, a continuación, seleccione Restaurar base de datos.
  4. En Fuente, selecciona Dispositivo y, a continuación, haz clic en el botón [...] situado junto al nombre del dispositivo.
  5. En el cuadro de diálogo Seleccionar dispositivos de copia de seguridad, asegúrate de que Archivo esté seleccionado en Tipo de medio de copia de seguridad y, a continuación, haz clic en Añadir.
  6. En el selector de archivos, ve a D:\sql-server-data, haz clic en el archivo WideWorldImporters-Full.bak y, a continuación, en Aceptar.
  7. Haz clic en Aceptar para cerrar el cuadro de diálogo Seleccionar dispositivos de copia de seguridad.

    El cuadro de diálogo Restaurar base de datos ahora contiene datos sobre la copia de seguridad de la base de datos Wide World Importers.

  8. En Seleccionar una página, haz clic en Archivos.

  9. Marca la casilla Reubicar todos los archivos en la carpeta.

  10. En los campos Carpeta de archivos de datos y Carpeta de archivos de registro, introduce D:\sql-server-data\wideworldimporters.

    Captura de pantalla que muestra el cuadro de diálogo Restaurar base de datos.

  11. Haz clic en Aceptar para iniciar la operación de restauración.

Al cabo de un par de minutos, recibirás una notificación indicando que la base de datos se ha restaurado.

Transact-SQL

  1. En tu sesión de RDP, haz clic en el botón Inicio de la barra de tareas de Windows, escribe ssms y, a continuación, selecciona Microsoft SQL Server Management Studio (Ejecutar como administrador).
  2. Una vez que se inicie la aplicación, haz clic en Conectar para conectarte al motor de base de datos sql-server-prod mediante la autenticación de Windows.
  3. Selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta.
  4. Inicia una restauración a partir del archivo de copia de seguridad que has descargado:

    USE [master]
    GO
    
    RESTORE DATABASE [WideWorldImporters]
      FROM  DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-Full.bak'
      WITH  FILE = 1,
      MOVE N'WWI_Primary' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf',
      MOVE N'WWI_UserData' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf',
      MOVE N'WWI_Log' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf',
      MOVE N'WWI_InMemory_Data_1' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1',
      NOUNLOAD,
      STATS = 5
    GO
    

    Este comando restaura la base de datos y el archivo de registro en el directorio D:\sql-server-data\wideworldimporters.

  5. Haz clic con el botón derecho en el código de la consulta y selecciona Ejecutar.

    Espera un par de minutos hasta que se complete la restauración de la base de datos. Puede hacer clic en Actualizar en el Explorador de objetos para ver si la base de datos aparece en el árbol de bases de datos. Una vez que se haya completado la restauración de la base de datos, puedes cerrar la ventana de consulta sin guardar.

Para comprobar que la base de datos de ejemplo funciona, puedes ejecutar una consulta.

  1. En Microsoft SQL Server Management Studio, selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta y, a continuación, copia el siguiente código:

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    Esta consulta obtiene información de resumen de las 100 facturas entregadas más recientemente.

  2. Haz clic con el botón derecho en la ventana de consulta y selecciona Ejecutar.

    En el panel Resultados se muestra la información de resumen.

    Captura de pantalla que muestra el panel Resultados de una consulta a la base de datos de ejemplo.

Crear la instancia de VM de prueba

En esta sección, creará una instancia de SQL Server llamada sql-server-test como destino de la base de datos clonada. La configuración de esta instancia es idéntica a la de la instancia de producción. Sin embargo, no crearás un segundo disco de datos, sino que lo adjuntarás más adelante en este tutorial.

Consola

  1. Ve a la página Instancias de VM.

    Ve a la página Instancias de VM.

  2. Haz clic en Crear.

  3. En el campo Nombre, escribe sql-server-test.

  4. En Región, selecciona us-east1.

  5. En Zona, selecciona us-east1-b.

  6. En Configuración de la máquina, cambia Tipo de máquina a n1-standard-2 (2 vCPU).

  7. Junto a la imagen del libro, haz clic en Cambiar.

  8. En el panel Disco de arranque, haz clic en la pestaña Imágenes públicas.

  9. En la lista desplegable Sistema operativo, selecciona SQL Server en Windows Server.

  10. En la lista desplegable Versión, selecciona SQL Server 2022 Standard en Windows Server 2022 Datacenter.

  11. Asegúrate de que se hayan definido los siguientes valores:

    • Tipo de disco de arranque se define como Disco persistente estándar.
    • El tamaño (GB) se ha definido en 50.
  12. Haz clic en Seleccionar.

  13. En Identidad y acceso de APIs, define Permisos de acceso como Permitir acceso completo a todas las APIs de Cloud.

  14. Haz clic en Crear.

Cloud Shell

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Crea la instancia de SQL Server de prueba:

    gcloud compute instances create sql-server-test \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --image-family=sql-std-2022-win-2022 \
        --image-project=windows-sql-cloud \
        --boot-disk-size=50GB \
        --boot-disk-device-name=sql-server-test \
        --subnet=$SUBNET_NAME
    

    Puedes ignorar la advertencia de rendimiento del disco porque no necesitas un rendimiento alto para este tutorial.

Conectarse a la instancia de VM

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ve a la página Instancias de VM.

  2. Espera unos 5 minutos a que la instancia de VM esté lista.

    Para monitorizar el proceso de inicialización de la VM, consulta la salida de su puerto serie en Cloud Shell:

    gcloud compute instances tail-serial-port-output sql-server-prod
    

    Cuando veas el siguiente mensaje, la inicialización habrá finalizado.

    Instance setup finished. sql-server-test is ready to use.
    

    Pulsa Control+C para dejar de monitorizar el puerto serie.

  3. Haz clic en el nombre de la instancia sql-server-test para ver la página Detalles de la instancia de VM.

  4. En Acceso remoto, haz clic en Definir contraseña de Windows y, a continuación, en Definir para crear tu cuenta en el ordenador remoto.

    En este paso se genera una contraseña. Anota la contraseña o cópiala en un archivo temporal seguro.

  5. En la sección Compute Engine de la consola Google Cloud , haz clic en el desplegable RDP y selecciona la opción Descargar el archivo RDP para descargar el archivo RDP de tu instancia.

    Usa este archivo para conectarte a la instancia mediante un cliente RDP. Para obtener más información, consulta Clientes de Escritorio Remoto de Microsoft.

  6. Cuando se te solicite, introduce la contraseña que acabas de generar y haz clic en Aceptar.

  7. Para aceptar el certificado del servidor e iniciar sesión en tu instancia de Windows remota, haz clic en Continuar.

  8. Cuando se te pregunte si quieres que tu PC sea visible, haz clic en No.

Clonar la base de datos mediante capturas de disco de Compute Engine

Una forma de clonar una base de datos de SQL Server que se ejecuta en Compute Engine es almacenar la base de datos en un disco de datos independiente y usar capturas de disco persistente para crear un clon de ese disco.

Las capturas de discos persistentes te permiten obtener una copia de los datos del disco en un momento determinado. Programar capturas de disco es una forma de crear copias de seguridad de tus datos automáticamente.

En esta sección del tutorial, harás lo siguiente:

  • Haz una instantánea del disco de datos del servidor de producción.
  • Crea un disco a partir de la instantánea.
  • Monta el nuevo disco en el servidor de prueba.
  • Adjunta la base de datos de este disco a SQL Server en la instancia de prueba.

En el siguiente diagrama se muestra cómo se clona una base de datos mediante copias de disco.

Diagrama que muestra la configuración para clonar una base de datos de SQL Server mediante capturas de disco.

Crear la captura del disco

Consola

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ve a la página Instancias de VM.

  2. Haz clic en el nombre de la instancia de sql-server-prod.

  3. En la página Detalles de la instancia de VM, haz clic en el disco sql-server-prod-data.

  4. Haz clic en Crear copia.

  5. Ponle un nombre a la vista general sql-server-prod-data-snapshot.

  6. En Ubicación, selecciona Regional.

  7. Comprueba que la región sea us-east1 (la misma que la de tus instancias de VM).

  8. Selecciona la opción Habilitar VSS.

    Esta opción usa el servicio de instantáneas de volumen de Microsoft Windows para crear una instantánea coherente.

  9. Haz clic en Crear.

    Al cabo de unos minutos, se creará la captura.

Cloud Shell

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Crea una captura de tu disco de datos en la misma zona que la instancia de VM:

    gcloud compute disks snapshot sql-server-prod-data \
         --snapshot-names=sql-server-prod-data-snapshot \
         --guest-flush \
         --zone="${ZONE}"
    

    La opción --guest-flush usa el servicio de instantáneas de volumen de Microsoft Windows para crear una instantánea coherente. Al cabo de unos minutos, se creará la captura.

Adjunta la instantánea del disco a la instancia de prueba

Debes crear un disco de datos a partir de la captura que has creado y, a continuación, adjuntarlo a la instancia sql-server-test.

Consola

En los pasos siguientes, crearás un disco persistente, usarás la captura del disco de producción para su contenido y, a continuación, adjuntarás el disco a la instancia de prueba.

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ve a la página Instancias de VM.

  2. Haz clic en el nombre de la instancia sql-server-test.

  3. En la página Detalles de la instancia de VM, haz clic en Editar.

  4. Haz clic en Añadir disco nuevo .

  5. Asigna un nombre al nuevo disco sql-server-test-data.

  6. En Tipo de origen, selecciona Snapshot.

  7. En la instancia sql-server-prod-data-snapshot que has creado, selecciona la captura de origen.

  8. Asegúrate de que Modo esté configurado como Lectura/escritura.

  9. Haz clic en Listo.

Cloud Shell

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Crea un disco persistente con el contenido de la captura del disco de producción:

    gcloud beta compute disks create sql-server-test-data \
         --size=100GB \
         --source-snapshot=sql-server-prod-data-snapshot \
         --zone="${ZONE}"
    
  3. Acopla el disco nuevo a tu instancia sql-server-test con permisos de lectura y escritura:

    gcloud compute instances attach-disk sql-server-test \
        --disk=sql-server-test-data --mode=rw
    

Montar el nuevo disco de datos en Windows

El disco que has creado está conectado a la instancia de VM, pero está sin conexión y el volumen está configurado como de solo lectura. Para configurar el volumen como de lectura y escritura y montable, sigue estos pasos:

  1. En la ventana del cliente RDP que está conectada a tu instancia de sql-server-test , haz clic en el botón Inicio de la barra de tareas de Windows, escribe diskpart y, a continuación, haz clic en diskpart para abrir DiskPart.
  2. Cuando se te pida que permitas que la aplicación haga cambios, haz clic en .
  3. Muestra una lista de los discos conectados a tu instancia:

    list disk
    

    El resultado es el siguiente:

    
    Disk ###  Status         Size     Free     Dyn  Gpt
    --------  -------------  -------  -------  ---  ---
    Disk 0    Online           50 GB      0 B
    Disk 1    Offline         100 GB      0 B       *
     

    Tu disco de datos (Disco 1, 100 GB) está sin conexión.

  4. Selecciona el disco de datos:

    select disk 1
    
  5. Poner el disco online:

    online disk
    
  6. Lista de los volúmenes disponibles:

    list volume
    

    El resultado es el siguiente:

    Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
    ----------  ---  -----------  -----  ----------  -------  ---------  --------
    Volume 0     C                NTFS   Partition     49 GB  Healthy    Boot
    Volume 1                      FAT32  Partition    100 MB  Healthy    System
    Volume 2                      RAW    Partition     99 GB  Healthy
    

    El volumen 2 (99 GB) es el volumen de datos. Aparece como Oculta y no tiene asignada ninguna letra de unidad.

  7. Selecciona el volumen:

    select volume 2
    
  8. Borra los atributos que se definieron al crear el volumen a partir de la instantánea:

    attr volume clear readonly hidden nodefaultdriveletter shadowcopy
    

    Este comando hace que el volumen se pueda montar.

  9. Monta el volumen como unidad D:

    assign letter=d
    
  10. Salir de DiskPart:

    exit
    

Restablecer la propiedad y los permisos de un archivo

Como has creado el disco de datos haciendo una instantánea de la instancia sql-server-prod, los IDs de usuario de la propiedad y los permisos de los archivos son diferentes a los de la instancia sql-server-test. Debes cambiar la propiedad de los archivos a un usuario de la instancia de sql-server-test y actualizar los permisos para que el usuario local y el usuario de MSSQLSERVER puedan leer los archivos.

  1. En la ventana del cliente RDP conectada a tu instancia de sql-server-test, haz clic en el botón Inicio de la barra de tareas de Windows y, a continuación, escribe cmd.
  2. Abre la aplicación Símbolo del sistema como administrador.
  3. Asigna el propietario de los archivos de la carpeta sql-server-data al usuario de servicio MSSQLSERVER:

    icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
    
  4. Restablecer todos los permisos de todos los archivos de la carpeta sql-server-data de nivel superior:

    icacls d:\sql-server-data /reset /t
    
  5. Actualiza las listas de control de acceso (LCAs) de la carpeta sql-server-data:

    icacls d:\sql-server-data /grant Administrators:(oi)(ci)f "nt service\mssqlserver":(oi)(ci)f "owner rights":(oi)(ci)f  %USERNAME%:(oi)(ci)f
    
  6. Inhabilita la herencia de la carpeta raíz de la unidad para que solo se apliquen los permisos anteriores:

    icacls d:\sql-server-data /inheritancelevel:r
    
  7. Sal del símbolo del sistema:

    exit
    

La instancia de SQL Server y el usuario local de la instancia sql-server-test ahora pueden acceder a los archivos de la base de datos.

Adjunta la base de datos clonada

Ahora, adjunta la base de datos clonada en la unidad D (data) a la instancia de SQL Server de prueba. Puedes adjuntar la base de datos de forma interactiva mediante los asistentes de Microsoft SQL Server Management Studio o directamente ejecutando un comando de Transact-SQL.

Asistente de SSMS

  1. En la sesión RDP conectada a tu instancia de sql-server-test, haz clic en el botón Inicio de la barra de tareas de Windows, escribe ssms y, a continuación, selecciona Microsoft SQL Server Management Studio (Ejecutar como administrador).
  2. Haga clic en Conectar para conectarse al motor de base de datos sql-server-test mediante la autenticación de Windows.
  3. En el Explorador de objetos, haz clic con el botón derecho en Bases de datos y, a continuación, selecciona Adjuntar.
  4. En el asistente Adjuntar bases de datos, haga clic en Añadir.
  5. Ve al directorio D:\sql-server-data\wideworldimporters, haz clic en el archivo WideWorldImporters.mdf y, a continuación, en Aceptar.
  6. Haz clic en Aceptar para adjuntar la base de datos.

    Al cabo de unos instantes, se adjuntará la base de datos clonada. Puede hacer clic en Actualizar en el Explorador de objetos para ver si la base de datos aparece en el árbol Bases de datos.

Transact-SQL

  1. En una sesión RDP conectada a tu instancia de sql-server-test, haz clic en el botón Inicio de la barra de tareas de Windows, escribe ssms y, a continuación, selecciona Microsoft SQL Server Management Studio (Ejecutar como administrador).
  2. Haga clic en Conectar para conectarse al motor de base de datos sql-server-prod mediante la autenticación de Windows.
  3. Selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta.
  4. Adjunta los archivos de datos y de registro en el directorio D:\sql-server-data\wideworldimporters:

    USE [master]
    GO
    
    CREATE DATABASE [WideWorldImporters] ON
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.mdf' ),
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters.ldf' ),
    ( FILENAME = N'D:\sql-server-data\wideworldimporters\WideWorldImporters_UserData.ndf' )
     FOR ATTACH
    GO
    
  5. Haz clic con el botón derecho en el código de la consulta y selecciona Ejecutar.

    Al cabo de unos instantes, se adjuntará la base de datos clonada. Puede hacer clic en Actualizar en el Explorador de objetos para ver si su base de datos aparece en el árbol de Bases de datos. Una vez que se haya adjuntado la base de datos, puedes cerrar la ventana de consulta sin guardar.

Para verificar que la base de datos de ejemplo funciona, puedes ejecutar una consulta.

  1. En SQL Server Management Studio, selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta y, a continuación, copia el siguiente código:

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    Esta consulta obtiene información de resumen de las 100 facturas entregadas más recientemente.

  2. Para ejecutar la consulta, haz clic con el botón derecho en la ventana de consulta y, a continuación, selecciona Ejecutar.

    En el panel Resultados se muestra la información de resumen.

    Captura de pantalla que muestra el panel Resultados de una consulta a la base de datos de ejemplo.

Ahora que has visto cómo clonar una base de datos mediante capturas de disco persistente, puede que quieras probar a clonar una base de datos mediante la copia de seguridad y la restauración. Para completar el tutorial de este segundo método, debes eliminar la base de datos que has clonado de la instancia sql-server-test.

Eliminar la base de datos clonada

Para eliminar la base de datos clonada que has creado con las copias de seguridad de disco, sigue estos pasos.

Asistente de SSMS

  1. En la sesión RDP conectada a tu instancia de sql-server-test, abre Microsoft SQL Server Management Studio y, a continuación, conéctate al motor de base de datos sql-server-test.
  2. En el Explorador de objetos, expanda Bases de datos, haga clic con el botón derecho en la base de datos WorldWideImporters y, a continuación, seleccione Eliminar.
  3. En el asistente Eliminar objeto, asegúrese de que la casilla Cerrar conexiones existentes esté marcada.
  4. Haz clic en Aceptar.

Transact-SQL

  1. En la sesión RDP conectada a tu instancia de sql-server-test, abre Microsoft SQL Server Management Studio y, a continuación, conéctate al motor de base de datos sql-server-test.
  2. Para cerrar todas las conexiones a la base de datos WideWorldImporters y eliminarla, copia la siguiente secuencia de comandos en una nueva ventana de consulta, haz clic con el botón derecho en el código y, a continuación, haz clic en Ejecutar:

    USE [master]
    GO
    ALTER DATABASE [WideWorldImporters] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    GO
    DROP DATABASE [WideWorldImporters]
    GO
    

    Una vez que se haya eliminado la base de datos, puedes cerrar la ventana de consulta sin guardar. Puedes hacer clic en Actualizar en Explorador de objetos para confirmar que la base de datos se ha eliminado.

Clonación mediante copia de seguridad y restauración

Otro método para clonar una base de datos de SQL Server que se ejecuta en Compute Engine es usar las funciones nativas de copia de seguridad y restauración de SQL Server. Con este método, la copia de seguridad se transfiere mediante Cloud Storage.

En esta sección del tutorial se usan recursos que has creado en la sección Clonar la base de datos con copias de disco de Compute Engine de este tutorial. Si no has completado esa sección, debes hacerlo antes de continuar.

En esta sección del tutorial, harás lo siguiente:

  • Crea un segmento de Cloud Storage.
  • Crea una copia de seguridad de la base de datos en el servidor de producción.
  • Copia el archivo de copia de seguridad del servidor de producción en Cloud Storage.
  • Copia el archivo de copia de seguridad de Cloud Storage en el servidor de prueba.
  • Restaura la copia de seguridad en la instancia de prueba.

En el siguiente diagrama se muestra cómo se clona una base de datos transfiriendo una copia de seguridad mediante Cloud Storage.

Diagrama que muestra la configuración para clonar una base de datos de SQL Server mediante Cloud Storage.

Como se puede dar acceso a Cloud Storage a sistemas externos a Google Cloud , puedes usar este método para clonar bases de datos de instancias de SQL Server externas.

Crea un segmento de Cloud Storage

Debes crear un segmento de Cloud Storage que almacene los archivos de copia de seguridad mientras los transfieres de la instancia sql-server-prod a la instancia sql-server-test.

Consola

  1. En la Google Cloud consola, ve a la página Navegador de Cloud Storage.

    Ir a la página Navegador de Cloud Storage

  2. Haz clic en Crear segmento.

  3. Asigna el nombre project-name-bucket al segmento.

    Haz los cambios siguientes:

    • project-name: el ID de tu proyecto de Google Cloud.
  4. Despliega Elige una clase de almacenamiento predeterminada y, a continuación, selecciona Regional.

  5. En Ubicación, selecciona us-east1.

  6. Haz clic en Crear.

Cloud Shell

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Crea un segmento de Cloud Storage en la misma región que tus instancias de VM:

    gcloud storage buckets create "gs://$(gcloud config get-value project)-bucket" --location="${REGION}"
    

Crear una copia de seguridad completa de la base de datos en un momento dado

Es posible que ya hagas copias de seguridad en tu entorno de producción. Puedes usar estas copias de seguridad como base para clonar tu base de datos. En este tutorial, crearás una copia de seguridad de solo copia para que no afecte a ninguna programación de copias de seguridad completas o incrementales.

Asistente de SSMS

  1. En la sesión RDP conectada a tu instancia de sql-server-prod, abre Microsoft SQL Server Management Studio y, a continuación, conéctate al motor de base de datos sql-server-prod.
  2. En el Explorador de objetos, expanda Bases de datos, haga clic con el botón derecho en la base de datos WorldWideImporters y, a continuación, seleccione Tareas > Copia de seguridad.
  3. En el asistente Crear copia de seguridad de la base de datos, asegúrate de que se hayan definido los siguientes valores:
    • Tipo de copia de seguridad se ha definido como Completa.
    • Se ha seleccionado Copia de seguridad solo de los datos.
    • La opción Crear copia de seguridad en está configurada como Disco.
  4. Para añadir un archivo de copia de seguridad, haz clic en Añadir.
  5. En el campo Destino, introduce D:\sql-server-data\WideWorldImporters-copy.bak.

    Captura de pantalla que muestra el cuadro de diálogo para crear una copia de seguridad de la base de datos.

  6. Selecciona la página Opciones de medios y, a continuación, Sobrescribir todos los conjuntos de copias de seguridad existentes.

  7. Selecciona la página Opciones de copia de seguridad y, a continuación, cambia Definir compresión de copia de seguridad a Comprimir copia de seguridad.

  8. Para crear la copia de seguridad, haz clic en Aceptar.

    La creación de la copia de seguridad tarda unos minutos.

Transact-SQL

  1. En la sesión RDP conectada a tu instancia de sql-server-prod, abre Microsoft SQL Server Management Studio y, a continuación, conéctate al motor de base de datos sql-server-prod.
  2. Para realizar una copia de seguridad comprimida de solo copia de la WideWorldImportersbase de datos en el archivo d:\sql-server-data\WideWorldImporters-copy.bak, copia la siguiente secuencia de comandos en una nueva ventana de consulta, haz clic con el botón derecho en el código y, a continuación, haz clic en Ejecutar.

    BACKUP DATABASE [WideWorldImporters]
       TO  DISK = N'd:\sql-server-data\WideWorldImporters-copy.bak'
       WITH  COPY_ONLY, NOFORMAT, INIT,
       NAME = N'WideWorldImporters-Full Database Backup',
       SKIP, NOREWIND, NOUNLOAD, COMPRESSION,  STATS = 10
    GO
    

    Espera unos minutos a que el servidor cree la copia de seguridad. Una vez que se haya completado la copia de seguridad de la base de datos, puedes cerrar la ventana de consulta sin guardar.

Copiar el archivo de copia de seguridad en Cloud Storage

  1. En la sesión RDP conectada a tu instancia de sql-server-prod, abre una ventana de Windows PowerShell.
  2. Copia el archivo de copia de seguridad en el segmento de Cloud Storage que has creado anteriormente:

    gcloud storage cp d:\sql-server-data\WideWorldImporters-copy.bak "gs://$(gcloud config get-value project)-bucket/" --no-clobber
    
  3. Sal de PowerShell.

    exit
    

Copia el archivo de copia de seguridad de Cloud Storage en sql-server-test.

  1. En la sesión RDP conectada a tu instancia sql-server-test, abre una ventana de Windows PowerShell.
  2. Copia el archivo de copia de seguridad en el segmento de Cloud Storage que has creado anteriormente:

    gcloud storage cp "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" d:\sql-server-data\
    
  3. Sal de PowerShell.

    exit
    

Tu instancia de prueba ahora tiene la copia de seguridad completa de tu base de datos en su disco local.

Restaurar la copia de seguridad

Ahora puedes restaurar la copia de seguridad completa en la unidad D (data) de la instancia sql-server-test.

Asistente de SSMS

  1. En la sesión RDP conectada a tu instancia de sql-server-test, abre Microsoft SQL Server Management Studio y, a continuación, conéctate al motor de base de datos sql-server-test.
  2. En el Explorador de objetos, haga clic con el botón derecho en Bases de datos y, a continuación, seleccione Restaurar base de datos.
  3. En Fuente, selecciona el Dispositivo y, a continuación, haz clic en el botón [...] situado junto al nombre del dispositivo.
  4. En el cuadro de diálogo Seleccionar dispositivos de copia de seguridad, selecciona Archivo en la lista Tipo de medio de copia de seguridad y, a continuación, haz clic en Añadir.
  5. En el selector de archivos, ve a D:\sql-server-data, haz clic en el archivo WideWorldImporters-copy.bak y, a continuación, haz clic en Aceptar.
  6. Haz clic en Aceptar para cerrar el cuadro de diálogo Seleccionar dispositivos de copia de seguridad.

    El cuadro de diálogo Restaurar base de datos ahora contiene datos sobre la copia de seguridad de la base de datos WideWorldImporters.

  7. En Seleccionar una página, haz clic en Archivos.

  8. Selecciona Reubicar todos los archivos en la carpeta.

  9. En los campos Carpeta de archivos de datos y Carpeta de archivos de registro, introduzca D:\sql-server-data\wideworldimporters.

    Captura de pantalla que muestra el cuadro de diálogo Restaurar base de datos.

  10. Para iniciar la operación de restauración, haz clic en Aceptar.

    Cuando el proceso se haya completado, verás el mensaje Database 'WideWorldImporters' restored successfully.

Transact-SQL

  1. En la sesión RDP conectada a tu instancia de sql-server-test, abre Microsoft SQL Server Management Studio y, a continuación, conéctate al motor de base de datos sql-server-test.
  2. Selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta.
  3. Copia el siguiente comando T-SQL para iniciar una restauración desde el archivo de copia de seguridad que has copiado de Cloud Storage. De esta forma, se restaurarán la base de datos y el archivo de registro en el directorio D:\sql-server-data\wideworldimporters:

    USE [master]
    GO
    
    RESTORE DATABASE [WideWorldImporters]
      FROM  DISK = N'D:\SQL-SERVER-DATA\WideWorldImporters-copy.bak'
      WITH  FILE = 1,
      MOVE N'WWI_Primary' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.mdf',
      MOVE N'WWI_UserData' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_UserData.ndf',
      MOVE N'WWI_Log' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters.ldf',
      MOVE N'WWI_InMemory_Data_1' TO
        N'D:\SQL-SERVER-DATA\WideWorldImporters\WideWorldImporters_InMemory_Data_1',
      NOUNLOAD,
      STATS = 5
    GO
    
  4. Haz clic con el botón derecho en el código y selecciona Ejecutar.

    Al cabo de un par de minutos, se completará la restauración de la base de datos. Puede hacer clic en Actualizar en el Explorador de objetos para ver si la base de datos aparece en el árbol de Bases de datos. Una vez que se haya completado la restauración de la base de datos, puedes cerrar la ventana de consulta sin guardar.

Para demostrar que la base de datos funciona, puedes ejecutar una consulta.

  1. En Microsoft SQL Management Studio, selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta y, a continuación, copia el siguiente código:

    SELECT top(100)
      i.InvoiceDate, i.InvoiceID, i.CustomerID, c.CustomerName,
      i.ConfirmedDeliveryTime, i.ConfirmedReceivedBy
    FROM
      WideWorldImporters.Sales.Invoices i
      JOIN WideWorldImporters.Sales.Customers c
      ON i.CustomerID=c.CustomerID
    WHERE i.ConfirmedDeliveryTime IS NOT NULL
    ORDER BY i.InvoiceDate desc;
    

    Esta consulta obtiene información de resumen de las 100 facturas entregadas más recientemente.

  2. Haz clic con el botón derecho en la ventana de consulta y selecciona Ejecutar.

    En el panel Resultados se muestra la información de resumen.

    Captura de pantalla que muestra el panel Resultados de una consulta a la base de datos de ejemplo.

Usar Cloud SQL como destino de la clonación

Si tu base de datos de destino está alojada en Cloud SQL y la base de datos de origen está en Compute Engine, el único mecanismo admitido para clonar es crear una copia de seguridad de la base de datos en Cloud Storage y, a continuación, restaurarla en Cloud SQL.

En este tutorial, reutilizarás la copia de seguridad que creaste en la sección anterior.

Crear una instancia de Cloud SQL para SQL Server

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Crea una instancia de Cloud SQL para SQL Server que ejecute la misma versión de base de datos que tu instancia de sql-server-prod:

    gcloud sql instances create sqlserver-cloudsql  \
      --database-version=SQLSERVER_2022_STANDARD \
      --cpu=2 \
      --memory=5GB \
      --root-password=sqlserver12@ \
      --region=${REGION}
    

    De esta forma, se crea una instancia con el usuario raíz sqlserver y la contraseña sqlserver12@.

Actualizar los permisos de un objeto

Deben definirse los permisos correctos en el segmento de Cloud Storage y en el objeto de copia de seguridad para que la cuenta de servicio de Cloud SQL pueda leerlos. Estos permisos se definen automáticamente cuando usas la consola Google Cloud para importar el objeto, o bien puedes definirlos con comandos gcloud.

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Define una variable de entorno que contenga la dirección de la cuenta de servicio de tu instancia de Cloud SQL:

    CLOUDSQL_SA="$(gcloud sql instances describe sqlserver-cloudsql --format='get(serviceAccountEmailAddress)')"
    
  3. Añade la cuenta de servicio a la política de gestión de identidades y accesos del segmento como lector y escritor:

    gcloud storage buckets add-iam-policy-binding "gs://$(gcloud config get-value project)-bucket/" \
        --member=user:"${CLOUDSQL_SA}" --role=roles/storage.objectUser
    

Importar la base de datos exportada

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Importa el archivo exportado en tu instancia de Cloud SQL:

    gcloud sql import bak sqlserver-cloudsql \
        "gs://$(gcloud config get-value project)-bucket/WideWorldImporters-copy.bak" \
        --database WideWorldImporters
    

    Cuando se te solicite, introduce y.

  3. Instala el paquete de herramientas de SQL Server:

    sudo apt install -y mssql-tools
    

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

    Estas herramientas se usan para conectarse a Cloud SQL desde Cloud Shell y, así, poder ejecutar consultas en la instancia de Cloud SQL.

  4. Conecta el proxy de Cloud SQL a tu instancia de SQL Server:

    CONNECTION_NAME=$(gcloud sql instances describe sqlserver-cloudsql --format='value(connectionName)')
    cloud_sql_proxy -instances=${CONNECTION_NAME}=tcp:1433 &
    
  5. Para verificar que la base de datos clonada funciona, ejecuta una consulta:

    /opt/mssql-tools/bin/sqlcmd -U sqlserver -S 127.0.0.1 -Q \
      'SELECT top(100)
        i.InvoiceDate, i.InvoiceID, i.CustomerID, LEFT(c.CustomerName,20) CustomerName,
        i.ConfirmedDeliveryTime, LEFT(i.ConfirmedReceivedBy,20) ConfirmedReceivedBy
      FROM
        WideWorldImporters.Sales.Invoices i
        JOIN WideWorldImporters.Sales.Customers c
        ON i.CustomerID=c.CustomerID
      WHERE i.ConfirmedDeliveryTime IS NOT NULL
      ORDER BY i.InvoiceDate desc;'
    

    Cuando se te solicite, introduce la contraseña del usuario sqlserver del servidor de la base de datos sqlserver-cloudsql (sqlserver12@).

    Esta consulta obtiene información de resumen de las 100 facturas entregadas más recientemente.

    El resultado es el siguiente:

    InvoiceDate      InvoiceID   CustomerID  CustomerName         ConfirmedDeliveryTime                  ConfirmedReceivedBy
    ---------------- ----------- ----------- -------------------- -------------------------------------- --------------------
          2016-05-30       70349         581 Wingtip Toys (Munich            2016-05-31 07:05:00.0000000 Youssef Eriksson
          2016-05-30       70350         123 Tailspin Toys (Roe P            2016-05-31 07:10:00.0000000 Ella Zvirbule
          2016-05-30       70351         175 Tailspin Toys (San A            2016-05-31 07:15:00.0000000 Julio Correa
          2016-05-30       70352        1029 Veronika Necesana               2016-05-31 07:20:00.0000000 Veronika Necesana
          2016-05-30       70353        1014 Narendra Tickoo                 2016-05-31 07:25:00.0000000 Narendra Tickoo
          2016-05-30       70354         930 Shantanu Huq                    2016-05-31 07:30:00.0000000 Shantanu Huq
          2016-05-30       70355         963 Be Trang                        2016-05-31 07:35:00.0000000 Be Trang
          2016-05-30       70356         567 Wingtip Toys (Jerome            2016-05-31 07:40:00.0000000 Severins Polis
          2016-05-30       70357         510 Wingtip Toys (Grabil            2016-05-31 07:45:00.0000000 Manish Ghosh
    ...