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 | Sí |
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.
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
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear.
En el campo Nombre, escribe
sql-server-prod
.En Región, selecciona us-east1.
En Zona, selecciona us-east1-b.
En Configuración de la máquina, cambia Tipo de máquina a n1-standard-2 (2 vCPU).
Junto a la descripción de Disco de arranque, haz clic en Cambiar.
En el panel Disco de arranque, haz clic en la pestaña Imágenes públicas.
En la lista desplegable Sistema operativo, selecciona SQL Server en Windows Server.
En la lista desplegable Versión, selecciona SQL Server 2022 Standard en Windows Server 2022 Datacenter.
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.
Haz clic en Seleccionar.
En Identidad y acceso de APIs, define Permisos de acceso como Permitir el acceso completo a todas las APIs de Cloud.
Despliega Gestión, seguridad, discos, redes, único cliente.
Haz clic en la pestaña Discos.
Haz clic en Añadir disco nuevo add.
En el campo Nombre, escribe
sql-server-prod-data
.En el campo Tamaño (GB), escribe
100
.Haz clic en Listo.
Haz clic en Crear.
Cloud Shell
Abre Cloud Shell.
Inicializa las siguientes variables:
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
Donde:
VPC_NAME
: nombre de tu VPCSUBNET_NAME
: nombre de tu subred
Configura tu ID de proyecto predeterminado:
gcloud config set project
PROJECT_ID
Sustituye
PROJECT_ID
por el ID de tu Google Cloud proyecto.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.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.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
En la consola de Google Cloud , ve a la página Instancias de VM.
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.
Haz clic en el nombre de la instancia
sql-server-prod
para abrir la página Detalles de la instancia de VM.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.
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.
Cuando se te pida, introduce la contraseña que acabas de generar y haz clic en Aceptar.
Para aceptar el certificado del servidor e iniciar sesión en tu instancia de Windows remota, haz clic en Continuar.
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.
- 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, escribediskpart
y, a continuación, haz clic en diskpart para abrir DiskPart. - Cuando se te pida que permitas que la aplicación haga cambios, haz clic en Sí.
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.
Selecciona el disco de datos:
select disk 1
Inicializa el disco:
clean
Crea una tabla de particiones GUID:
convert gpt
Crea la partición de datos usando todo el disco:
create partition primary
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.
Selecciona el volumen:
select volume 2
Formatea la partición con el sistema de archivos NTFS y asígnale la etiqueta
data
:format quick fs=ntfs label=data
Monta el disco como unidad D:
assign letter=d
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:
- Crea una estructura de directorios en la unidad D (
data
) para almacenar tu base de datos. - Descarga el archivo de copia de seguridad completa de la base de datos de ejemplo Wide World Importers de SQL Server. Esta base de datos simula la base de datos de producción que quieres clonar.
Para crear el directorio y descargar el archivo de copia de seguridad, sigue estos pasos:
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.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
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
- 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). - 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. - 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.
- En Fuente, selecciona Dispositivo y, a continuación, haz clic en el botón [...] situado junto al nombre del dispositivo.
- 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.
- En el selector de archivos, ve a
D:\sql-server-data
, haz clic en el archivoWideWorldImporters-Full.bak
y, a continuación, en Aceptar. 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.
En Seleccionar una página, haz clic en Archivos.
Marca la casilla Reubicar todos los archivos en la carpeta.
En los campos Carpeta de archivos de datos y Carpeta de archivos de registro, introduce
D:\sql-server-data\wideworldimporters
.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
- 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). - 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. - Selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta.
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
.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 refresh 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.
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.
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.
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
Ve a la página Instancias de VM.
Haz clic en Crear.
En el campo Nombre, escribe
sql-server-test
.En Región, selecciona us-east1.
En Zona, selecciona us-east1-b.
En Configuración de la máquina, cambia Tipo de máquina a n1-standard-2 (2 vCPU).
Junto a la imagen del libro, haz clic en Cambiar.
En el panel Disco de arranque, haz clic en la pestaña Imágenes públicas.
En la lista desplegable Sistema operativo, selecciona SQL Server en Windows Server.
En la lista desplegable Versión, selecciona SQL Server 2022 Standard en Windows Server 2022 Datacenter.
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.
Haz clic en Seleccionar.
En Identidad y acceso de APIs, define Permisos de acceso como Permitir acceso completo a todas las APIs de Cloud.
Haz clic en Crear.
Cloud Shell
Abre Cloud Shell.
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
En la consola de Google Cloud , ve a la página Instancias de VM.
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.
Haz clic en el nombre de la instancia
sql-server-test
para ver la página Detalles de la instancia de VM.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.
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.
Cuando se te solicite, introduce la contraseña que acabas de generar y haz clic en Aceptar.
Para aceptar el certificado del servidor e iniciar sesión en tu instancia de Windows remota, haz clic en Continuar.
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.
Crear la captura del disco
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en el nombre de la instancia de
sql-server-prod
.En la página Detalles de la instancia de VM, haz clic en el disco
sql-server-prod-data
.Haz clic en Crear copia.
Ponle un nombre a la vista general
sql-server-prod-data-snapshot
.En Ubicación, selecciona Regional.
Comprueba que la región sea
us-east1
(la misma que la de tus instancias de VM).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.
Haz clic en Crear.
Al cabo de unos minutos, se creará la captura.
Cloud Shell
Abre Cloud Shell.
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.
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en el nombre de la instancia
sql-server-test
.En la página Detalles de la instancia de VM, haz clic en Editar.
Haz clic en Añadir disco nuevo add.
Asigna un nombre al nuevo disco
sql-server-test-data
.En Tipo de origen, selecciona Snapshot.
En la instancia
sql-server-prod-data-snapshot
que has creado, selecciona la captura de origen.Asegúrate de que Modo esté configurado como Lectura/escritura.
Haz clic en Listo.
Cloud Shell
Abre Cloud Shell.
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}"
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:
- 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, escribediskpart
y, a continuación, haz clic en diskpart para abrir DiskPart. - Cuando se te pida que permitas que la aplicación haga cambios, haz clic en Sí.
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.
Selecciona el disco de datos:
select disk 1
Poner el disco online:
online disk
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.
Selecciona el volumen:
select volume 2
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.
Monta el volumen como unidad D:
assign letter=d
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.
- 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, escribecmd
. - Abre la aplicación Símbolo del sistema como administrador.
Asigna el propietario de los archivos de la carpeta
sql-server-data
al usuario de servicioMSSQLSERVER
:icacls d:\sql-server-data /setowner "nt service\mssqlserver" /t
Restablecer todos los permisos de todos los archivos de la carpeta
sql-server-data
de nivel superior:icacls d:\sql-server-data /reset /t
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
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
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
- 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, escribessms
y, a continuación, selecciona Microsoft SQL Server Management Studio (Ejecutar como administrador). - Haga clic en Conectar para conectarse al motor de base de datos
sql-server-test
mediante la autenticación de Windows. - En el Explorador de objetos, haz clic con el botón derecho en Bases de datos y, a continuación, selecciona Adjuntar.
- En el asistente Adjuntar bases de datos, haga clic en Añadir.
- Ve al directorio
D:\sql-server-data\wideworldimporters
, haz clic en el archivoWideWorldImporters.mdf
y, a continuación, en Aceptar. 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 refresh en el Explorador de objetos para ver si la base de datos aparece en el árbol Bases de datos.
Transact-SQL
- 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, escribessms
y, a continuación, selecciona Microsoft SQL Server Management Studio (Ejecutar como administrador). - Haga clic en Conectar para conectarse al motor de base de datos
sql-server-prod
mediante la autenticación de Windows. - Selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta.
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
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 refresh 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.
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.
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.
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
- 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 datossql-server-test
. - 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. - En el asistente Eliminar objeto, asegúrese de que la casilla Cerrar conexiones existentes esté marcada.
- Haz clic en Aceptar.
Transact-SQL
- 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 datossql-server-test
. 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 refresh 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.
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
En la Google Cloud consola, ve a la página Navegador de Cloud Storage.
Haz clic en Crear segmento.
Asigna el nombre
project-name
-bucket al segmento.Haz los cambios siguientes:
project-name
: el ID de tu proyecto de Google Cloud.
Despliega Elige una clase de almacenamiento predeterminada y, a continuación, selecciona Regional.
En Ubicación, selecciona us-east1.
Haz clic en Crear.
Cloud Shell
Abre Cloud Shell.
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
- 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 datossql-server-prod
. - 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. - 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.
- Para añadir un archivo de copia de seguridad, haz clic en Añadir.
En el campo Destino, introduce
D:\sql-server-data\WideWorldImporters-copy.bak
.Selecciona la página Opciones de medios y, a continuación, Sobrescribir todos los conjuntos de copias de seguridad existentes.
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.
Para crear la copia de seguridad, haz clic en Aceptar.
La creación de la copia de seguridad tarda unos minutos.
Transact-SQL
- 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 datossql-server-prod
. Para realizar una copia de seguridad comprimida de solo copia de la
WideWorldImporters
base de datosen 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
- En la sesión RDP conectada a tu instancia de
sql-server-prod
, abre una ventana de Windows PowerShell. 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
Sal de PowerShell.
exit
Copia el archivo de copia de seguridad de Cloud Storage en sql-server-test.
- En la sesión RDP conectada a tu instancia
sql-server-test
, abre una ventana de Windows PowerShell. 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\
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
- 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 datossql-server-test
. - 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.
- En Fuente, selecciona el Dispositivo y, a continuación, haz clic en el botón [...] situado junto al nombre del dispositivo.
- 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.
- En el selector de archivos, ve a
D:\sql-server-data
, haz clic en el archivoWideWorldImporters-copy.bak
y, a continuación, haz clic en Aceptar. 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
.En Seleccionar una página, haz clic en Archivos.
Selecciona Reubicar todos los archivos en la carpeta.
En los campos Carpeta de archivos de datos y Carpeta de archivos de registro, introduzca
D:\sql-server-data\wideworldimporters
.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
- 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 datossql-server-test
. - Selecciona Archivo > Nuevo > Consulta con la conexión actual para abrir una nueva ventana de consulta.
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
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 refresh 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.
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.
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.
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
Abre Cloud Shell.
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ñasqlserver12@
.
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
.
Abre Cloud Shell.
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)')"
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
Abre Cloud Shell.
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
.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.
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 &
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 datossqlserver-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 ...