Compartir a través de


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 lógico de Azure SQL Database o en otro servidor lógico. 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 lógico o un servidor lógico diferente 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 lógico, se pueden usar los mismos inicios de sesión 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 lógico diferente, la entidad de seguridad que inició la operación de copia en el servidor lógico 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 lógico de destino o porque esas contraseñas e identificadores de seguridad (SID) son diferentes. Para más información sobre cómo administrar inicios de sesión al copiar una base de datos en un servidor diferente, consulte Configuración y administración de la seguridad de Azure SQL Database para la restauración geográfica o la conmutación por error. Una vez realizada la operación de copia en un servidor lógico diferente, y antes de que otros usuarios se vuelvan a aplicar, solo el inicio de sesión asociado al propietario de la base de datos o el administrador del servidor puede 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 de una base de datos

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

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 lógico 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 con Transact-SQL

Inicie sesión en la master base de datos con el inicio de sesión del administrador del servidor o el inicio de sesión que creó la base de datos que desea copiar. Para que la copia de la base de datos sea correcta, los inicios de sesión que no son el administrador del servidor deben ser miembros del rol administrador de BD. Para obtener más información sobre los inicios de sesión y la conexión al servidor lógico, consulte Autorización del acceso a la base de datos.

Inicie la copia de la base de datos de origen con la instrucción CREATE DATABASE… AS COPY OF. La instrucción T-SQL continúa ejecutándose hasta que se completa la operación de copia de la base de datos.

En esta sección se proporcionan comandos Transact-SQL para las siguientes operaciones:

Nota:

La finalización de la instrucción T-SQL no finaliza la operación de copia de la base de datos. Para finalizar la operación, quite la base de datos de destino.

Copiar en el mismo servidor lógico

Inicie sesión en la master base de datos con el inicio de sesión del administrador del servidor o el inicio de sesión que creó la base de datos que desea copiar. Para que la copia de la base de datos sea correcta, los inicios de sesión que no son el administrador del servidor deben ser miembros del rol administrador de BD.

Este comando copia Database1 en una nueva base de datos denominada Database2 en el mismo servidor lógico. Según el tamaño de su base de datos, la operación de copia puede tardar algún tiempo en completarse.

-- Execute on the master database to start copying
CREATE DATABASE Database2 AS COPY OF Database1;

Copia en un grupo elástico

Inicie sesión en la master base de datos con el inicio de sesión del administrador del servidor o el inicio de sesión que creó la base de datos que desea copiar. Para que la copia de la base de datos sea correcta, los inicios de sesión que no son el administrador del servidor deben ser miembros del rol administrador de BD.

Este comando copia el valor de Database1 en una nueva base de datos denominada Database2 que se encuentra en un grupo elástico denominado pool1. Según el tamaño de su base de datos, la operación de copia puede tardar algún tiempo en completarse.

Database1 puede ser una base de datos única o agrupada. Puede realizar copias entre grupos de niveles diferentes, pero recuerde que algunas copias entre niveles devuelven errores. Por ejemplo, puede copiar una base de datos estándar única o elástica en un grupo de uso general, pero no puede copiar una base de datos elástica estándar en un grupo de tipo premium.

-- Execute on the master database to start copying
CREATE DATABASE Database2
AS COPY OF Database1
(SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool1 ));

Copiar en otro servidor lógico

Conéctese a la master base de datos del servidor lógico de destino donde se va a crear la nueva base de datos. Use un inicio de sesión que tenga el mismo nombre y contraseña que el propietario de la base de datos de origen en el servidor lógico de origen. El inicio de sesión en el servidor lógico de destino también debe ser miembro del rol dbmanager o ser el inicio de sesión del administrador del servidor.

Este comando copia Database1 en server1 una nueva base de datos denominada Database2 en server2. Según el tamaño de su base de datos, la operación de copia puede tardar algún tiempo en completarse.

-- Execute on the master database of the target logical server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;

Importante

Ambos firewalls de servidor lógico deben configurarse para permitir la conexión entrante desde la dirección IP del cliente que emite el comando T-SQL CREATE DATABASE ... AS COPY OF . Para determinar la dirección IP de origen de la conexión actual, ejecute: SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Nota:

No se admite la copia de base de datos mediante T-SQL al conectarse al servidor lógico de destino a través de un punto de conexión privado. Si se configura un punto de conexión privado, pero se permite el acceso a la red pública, la copia de la base de datos se admite cuando se conecta al servidor lógico de destino desde una dirección IP pública mediante la autenticación de SQL. Una vez que se completa la operación de copia, se puede denegar el acceso público.

Del mismo modo, el comando siguiente copia Database1 en server1 una nueva base de datos denominada Database2 dentro de un grupo elástico denominado pool2, en server2.

-- Execute on the master database of the target logical server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1 (SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool2 ) );

Copia en una suscripción diferente

Puede usar los pasos descritos en la sección Copiar una base de datos SQL en un servidor lógico diferente para copiar la base de datos en un servidor lógico de una suscripción diferente mediante T-SQL. Asegúrese de utilizar un inicio de sesión que tenga el mismo nombre y la misma contraseña que el propietario de la base de datos de origen. Además, el inicio de sesión debe ser miembro del rol dbmanager o de un administrador del servidor, tanto en servidores lógicos de origen como de destino.

Sugerencia

Al copiar bases de datos en el mismo inquilino de Id. de Entra de Microsoft, la autorización en los servidores lógicos de origen y destino se simplifica si inicia el comando de copia mediante un inicio de sesión de autenticación con acceso suficiente en ambos servidores lógicos. El nivel mínimo necesario de acceso es la pertenencia al rol dbmanager de la master base de datos en ambos servidores lógicos. Por ejemplo, puede usar un inicio de sesión de Id. de Entra de Microsoft que sea miembro de un grupo designado como administrador del servidor en ambos servidores lógicos.

En los scripts siguientes, el nombre de inicio de sesión que se va a copiar es loginname.

En primer lugar, conéctese a la master base de datos del servidor lógico de origen. Cree un inicio de sesión y un usuario en la master base de datos del servidor lógico de Azure SQL Database de origen.

--Step# 1
--Create login and user in the master database of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx'
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

Conéctese a la base de datos de usuario de origen. A continuación, en la base de datos de usuario de origen, cree el usuario en la base de datos de origen y agréguelo al rol de base de datos dbowner en la base de datos.

--Step# 2
--Create the user in the source database and grant dbowner permission to the database.

CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE db_owner ADD MEMBER loginname;
GO

A continuación, busque el identificador de seguridad (SID) del usuario loginname desde la master base de datos del servidor lógico de origen.

--Step# 3
--Capture the SID of the user "loginname" from master database

SELECT [sid] FROM sysusers WHERE [name] = 'loginname';

Ejecute el siguiente script en la master base de datos del servidor lógico de destino o nuevo. En primer lugar, cree un inicio de sesión y un usuario en la master base de datos del servidor lógico de destino y agréguelo al rol de servidor dbmanager. Proporcione un <strong password>y reemplace por <SID of loginname login on source server> el SID del servidor lógico de origen.

--Step# 4
--Connect to Destination server.
--Create login and user in the master database, same as of the source server.

CREATE LOGIN loginname WITH PASSWORD = '<strong password>', SID = <SID of loginname login on source server>;
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

En la master base de datos del servidor lógico de destino, cree la nueva base de datos. Reemplace por new_database_name el nombre deseado. Reemplace source_server_name y source_database_name por los nombres del origen.

--Step# 5
--Execute the copy of database script from the destination logical server using the credentials created

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

Sugerencia

La copia de una base de datos de una suscripción en un inquilino de Azure diferente solo se admite cuando se usa T-SQL y un inicio de sesión de autenticación de SQL para iniciar sesión en el servidor lógico de destino. No se admite la creación de una copia de base de datos en un servidor lógico en un inquilino de Azure diferente con la autenticación de Microsoft Entra para Azure SQL.

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 lógico diferente o en otra región. 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 lógico de origen con los permisos siguientes:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write y
  • Rol personalizado en el servidor lógico de destino con los permisos siguientes:
    • 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 lógico de destino, use la instrucción ALTER USER para volver a asignar los usuarios de la nueva base de datos a los inicios de sesión en el servidor lógico de destino. Para resolver los usuarios huérfanos, consulte Solucionar problemas de usuarios huérfanos (SQL Server). Consulte también Configuración y administración de la seguridad de Azure SQL Database para la restauración geográfica o la conmutación por error.

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 obtener información sobre cómo administrar usuarios e inicios de sesión al copiar una base de datos en un servidor lógico diferente, consulte Configuración y administración de la seguridad de Azure SQL Database para la restauración geográfica o la conmutación por error.

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, consulte Copia de una copia transaccionalmente coherente de una base de datos en Azure SQL Database.

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.