Creación de una copia transaccionalmente coherente de una base de datos de Azure SQL Database

Se aplica a: Azure SQL Database

Azure SQL Database proporciona varios métodos para crear una copia de una base de datos existente en el mismo servidor o en un servidor diferente. Una base de datos se puede copiar usando Azure Portal, PowerShell, la CLI de Azure o Transact-SQL.

Nota:

Microsoft Entra ID era conocido anteriormente como Azure Active Directory (Azure AD).

Información general

Una copia de base de datos es una instantánea coherente con las transacciones de la base de datos de origen en el momento en el que se inicia la solicitud de copia. Puede seleccionar el mismo servidor u otro distinto para la copia. También puede optar por conservar la redundancia de copia de seguridad y el tamaño de proceso de la base de datos de origen, o usar una redundancia de almacenamiento de copia de seguridad o tamaño de proceso diferentes dentro del mismo nivel de servicio. También es posible copiar una base de datos en el nivel de servicio Estándar a un nivel Estándar o De uso general y una base de datos en el nivel de servicio Premium al nivel Premium o Crítico para la empresa.

Una vez completada la copia, la nueva base de datos es una base de datos totalmente funcional e independiente en la base de datos de origen. Los inicios de sesión, los usuarios y los permisos de la base de datos copiada se administran independientemente de la base de datos de origen. La copia se crea mediante la tecnología de replicación geográfica. Una vez completada la propagación de réplicas, el vínculo de replicación geográfica finaliza automáticamente. Todos los requisitos para usar la replicación geográfica se aplican a la operación de copia de la base de datos. Consulte Información general de la replicación geográfica activa para obtener más información.

Nota:

Azure Portal, PowerShell y la CLI de Azure no permiten copiar bases de datos en una suscripción diferente.

Copia de base de datos para bases de datos de Hiperescala

Para bases de datos del nivel de servicio de Hiperescala, la base de datos de destino determina si la copia es una copia rápida o una copia del tamaño de los datos:

  • Copia rápida: cuando la copia se realice en la misma región que el origen, se crea a partir de las instantáneas de blobs. Esta copia es una operación rápida independientemente del tamaño de la base de datos.

  • Copia del tamaño de los datos: si la base de datos de destino se encuentra en una región diferente a la del origen, o si la redundancia del almacenamiento de copia de seguridad de base de datos (local, zonal o geográfica) del destino difiere de la redundancia de la base de datos de origen, la operación de copia es una operación del tamaño de los datos. El tiempo de copia no es directamente proporcional al tamaño, ya que los blobs del servidor de páginas se copian en paralelo.

Inicios de sesión en la copia de la base de datos

Al copiar una base de datos en el mismo servidor, los mismos inicios de sesión se pueden usar en ambas bases de datos. La entidad de seguridad que usa para copiar la base de datos se convierte en el propietario de la base de datos en la nueva base de datos.

Al copiar una base de datos en un servidor diferente, la entidad de seguridad que ha iniciado la operación de copia en el servidor de destino se convierte en el propietario de la nueva base de datos.

Independientemente del servidor de destino, todos los usuarios de base de datos, sus permisos y sus identificadores de seguridad (SID) se copian en la copia de la base de datos. Usar usuarios de base de datos contenidos para el acceso a datos asegura que la base de datos copiada tenga las mismas credenciales de usuario, de tal forma que, una vez completada la copia, pueda obtener acceso inmediato a ellas con las mismas credenciales.

Si utiliza inicios de sesión de nivel de servidor para el acceso a datos y copia la base de datos en otro servidor, es posible que el acceso basado en inicios de sesión no funcione. Esto puede ocurrir porque los inicios de sesión no existen en el servidor de destino o porque las contraseñas e identificadores de seguridad (SID) son diferentes. Vea Administración de la seguridad de Azure SQL Database después de la recuperación ante desastres para obtener más información sobre cómo administrar inicios de sesión al copiar una base de datos en un servidor diferente. Una vez que la operación de copia en un servidor diferente se realiza correctamente y antes de que se reasignen otros usuarios, solo el inicio de sesión asociado al propietario de la base de datos o el administrador del servidor pueden iniciar sesión en la base de datos copiada. Para resolver los inicios de sesión y establecer el acceso a los datos una vez completada la operación de copia, consulte Resolución de inicios de sesión.

Copia con Azure Portal

Para copiar una base de datos mediante Azure Portal, abra la página de la base de datos y, después, elija Copiar para abrir la página Crear base de datos SQL - Copiar base de datos. Rellene los valores del servidor de destino en el que desea copiar la base de datos.

Captura de pantalla de Azure Portal, en la que se muestra la opción Copiar base de datos resaltada en la página de información general de la base de datos.

Copia de una base de datos

Una base de datos se puede copiar usando PowerShell, la CLI de Azure y Transact-SQL (T-SQL).

En el caso de PowerShell, use el cmdlet New-AzSqlDatabaseCopy.

Importante

El módulo de Azure Resource Manager (RM) para PowerShell todavía es compatible con Azure SQL Database, pero todo el desarrollo futuro se realizará para el módulo Az.Sql. El módulo de AzureRM continuará recibiendo correcciones de errores hasta diciembre de 2020 como mínimo. Los argumentos para los comandos del módulo Az y los módulos AzureRm son esencialmente idénticos. Para obtener más información sobre la compatibilidad, vea Presentación del nuevo módulo Az de Azure PowerShell.

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

La copia de la base de datos es una operación asincrónica, pero la base de datos de destino se crea inmediatamente después de aceptar la solicitud. Si tiene que cancelar la operación de copia mientras está en curso, quite la base de datos de destino mediante el cmdlet Remove-AzSqlDatabase.

Para obtener un script completo de PowerShell de ejemplo, consulte Copia de una base de datos en un nuevo servidor.

Supervisar el progreso de la operación de copia

Para supervisar el proceso de copia, consulte las vistas sys.databases, sys.dm_database_copies y sys.dm_operation_status. Durante el proceso de copia, la columna state_desc de la vista sys.databases de la nueva base de datos se establece en COPYING.

  • Si se produce un error en la copia, la columna state_desc de la vista sys.databases de la nueva base de datos se establece en SUSPECT. Ejecute la instrucción DROP en la nueva base de datos e inténtelo de nuevo más tarde.
  • Si la copia se realiza correctamente, la columna state_desc de la vista sys.databases de la nueva base de datos se establecerá en ONLINE. Se completa la copia y la nueva base de datos es una base de datos normal, que se puede modificar independientemente de la base de datos de origen.

Nota:

Si decide cancelar la copia mientras está en curso, ejecute la instrucción DROP DATABASE en la nueva base de datos.

Importante

Si necesita crear una copia con un objetivo de servicio bastante más pequeño que el origen, es posible que la base de datos de destino no tenga suficientes recursos para completar el proceso de inicialización y que se produzca un error en la operación de copia. En este escenario, use una solicitud de restauración geográfica para crear una copia en un servidor o una región diferentes. Para más información, vea Recuperación de una base de datos de Azure SQL mediante copias de seguridad de base de datos.

Permisos

Para crear una copia de la base de datos, debe tener los siguientes roles:

  • Propietario de la suscripción o
  • Rol de colaborador de SQL Server o
  • Rol personalizado en el servidor de origen con los siguientes permisos:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write y
  • Rol personalizado en el servidor de destino con los siguientes permisos:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

Para cancelar una copia de la base de datos, debe tener los siguientes roles:

  • Propietario de la suscripción o
  • Rol de colaborador de SQL Server o
  • Rol personalizado en la base de datos de destino con el siguiente permiso:
    • Microsoft.Sql/servers/databases/delete

Para administrar la copia de la base de datos con Azure Portal, también necesita los siguientes permisos:

  • Microsoft.Resources/subscriptions/resources/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationstatuses/read

Si quiere ver las operaciones que se esconden tras las implementaciones del grupo de recursos en el portal y las operaciones en varios proveedores de recursos, incluidas las operaciones de SQL, necesita estos permisos adicionales:

  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

Resolución de inicios de sesión

Después de que la nueva base de datos esté en línea en el servidor de destino, use la instrucción ALTER USER para volver a asignar los usuarios de la nueva base de datos a inicios de sesión en el servidor de destino. Para resolver los usuarios huérfanos, consulte Solucionar problemas de usuarios huérfanos (SQL Server). Vea también Administración de la seguridad de una base de datos de Azure SQL después de la recuperación ante desastres.

Todos los usuarios de la nueva base de datos mantienen los permisos que tenían en la base de datos de origen. El usuario que inició la copia de la base de datos se convierte en el propietario de la nueva base de datos. Cuando la copia se realiza correctamente y antes de que se reasignen otros usuarios, solo el propietario de la base de datos puede iniciar sesión en la nueva base de datos.

Para más información sobre cómo administrar usuarios e inicios de sesión al copiar una base de datos a un servidor lógico diferente, vea Administración de la seguridad de Azure SQL Database después de la recuperación ante desastres.

Errores de copia de base de datos

Pueden encontrarse los siguientes errores al copiar una base de datos en Azure SQL Database. Para más información, vea Copiar una base de datos de Azure SQL.

Código de error severity Descripción
40635 16 El cliente con la dirección IP '%.*ls' está deshabilitado temporalmente.
40637 16 Crear copia de base de datos está deshabilitado actualmente.
40561 16 Error al copiar la base de datos. No existe la base de datos de origen o de destino.
40562 16 Error al copiar la base de datos. La base de datos de origen se ha quitado.
40563 16 Error al copiar la base de datos. La base de datos de destino se ha quitado.
40564 16 No se pudo copiar la base de datos debido a un error interno. Quite la base de datos de destino e inténtelo de nuevo.
40565 16 Error al copiar la base de datos. No se permite más de una copia de base de datos simultánea para el mismo origen. Quite la base de datos de destino y vuelva a intentarlo más adelante.
40566 16 No se pudo copiar la base de datos debido a un error interno. Quite la base de datos de destino e inténtelo de nuevo.
40567 16 No se pudo copiar la base de datos debido a un error interno. Quite la base de datos de destino e inténtelo de nuevo.
40568 16 Error al copiar la base de datos. La base de datos de origen ha dejado de estar disponible. Quite la base de datos de destino e inténtelo de nuevo.
40569 16 Error al copiar la base de datos. La base de datos de destino ha dejado de estar disponible. Quite la base de datos de destino e inténtelo de nuevo.
40570 16 No se pudo copiar la base de datos debido a un error interno. Quite la base de datos de destino y vuelva a intentarlo más adelante.
40571 16 No se pudo copiar la base de datos debido a un error interno. Quite la base de datos de destino y vuelva a intentarlo más adelante.