DBCC CLONEDATABASE (Transact-SQL)
Se aplica a:SQL Server
Genera un clon de solo esquema de una base de datos mediante DBCC CLONEDATABASE
para investigar problemas de rendimiento relacionados con el optimizador de consultas.
Convenciones de sintaxis de Transact-SQL
Sintaxis
DBCC CLONEDATABASE
(
source_database_name
, target_database_name
)
[ WITH { [ NO_STATISTICS ] [ , NO_QUERYSTORE ] [ , VERIFY_CLONEDB | SERVICEBROKER ] [ , BACKUP_CLONEDB ] } ]
Nota:
Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte Versiones anteriores de la documentación.
Argumentos
source_database_name
El nombre de la base de datos que se va a copiar.
target_database_name
El nombre de la base de datos en la que se copiará la base de datos de origen. DBCC CLONEDATABASE
creará esta base de datos, que no debería existir.
NO_STATISTICS
Se aplica a: SQL Server 2014 (12.x) Service Pack 2 CU 3, SQL Server 2016 (13.x) Service Pack 1 y versiones posteriores.
Especifica si las estadísticas de tabla o índice se deben excluir de la clonación. Si no se especifica esta opción, se incluirán automáticamente estadísticas de tabla o de índice.
NO_QUERYSTORE
Se aplica a: SQL Server 2016 (13.x) Service Pack 1 y versiones posteriores.
Especifica si los datos del Almacén de consultas se deben excluir del clon. Si no se especifica esta opción, los datos del Almacén de consultas se copiarán en el clon si el Almacén de consultas está habilitado en la base de datos de origen.
VERIFY_CLONEDB
Se aplica a: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 y versiones posteriores.
Comprueba la coherencia de la base de datos nueva. Esta opción es necesaria si la base de datos clonada está pensada para usarse en producción. Habilitar VERIFY_CLONEDB
también deshabilita las estadísticas y la recopilación del Almacén de consultas, lo que equivale a ejecutar WITH VERIFY_CLONEDB, NO_STATISTICS, NO_QUERYSTORE
.
El comando siguiente se puede usar para confirmar que la base de datos clonada está preparada para usarse en producción:
SELECT DATABASEPROPERTYEX('clone_database_name', 'IsVerifiedClone');
SERVICEBROKER
Se aplica a: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 y versiones posteriores.
Especifica si los catálogos del sistema relacionados con Service Broker deben incluirse en el clon. La opción SERVICEBROKER
no se puede usar en combinación con VERIFY_CLONEDB
.
BACKUP_CLONEDB
Se aplica a: SQL Server 2014 (12.x) Service Pack 3, SQL Server 2016 (13.x) Service Pack 2, SQL Server 2017 (14.x) CU 8 y versiones posteriores.
Crea y comprueba una copia de seguridad de la base de datos clonada. Si se usa en combinación con VERIFY_CLONEDB
, la base de datos clonada se comprueba antes de que se realice la copia de seguridad.
Comentarios
Las validaciones siguientes las realiza DBCC CLONEDATABASE
. Se produce un error en el comando si alguna de las validaciones no se efectúa correctamente.
- La base de datos de origen debe ser una base de datos de usuario. No se permite la clonación de bases de datos del sistema (bases de datos
master
,model
,msdb
,tempdb
,distribution
, etc.). - La base de datos de origen debe ser legible o estar en línea.
- No puede existir una base de datos que use el mismo nombre que la base de datos clonada.
- El comando no se encuentra en una transacción de usuario.
Si todas las validaciones se efectúan correctamente, la clonación de la base de datos de origen se lleva a cabo mediante las siguientes operaciones:
- Crea una base de datos de destino que usa el mismo diseño de archivo como origen, pero tiene tamaños de archivo predeterminados de la base de datos
model
. - Crea una instantánea interna de la base de datos de origen.
- Copia los metadatos del sistema de la base de datos de origen a la base de datos de destino.
- Copia todos los esquemas de todos los objetos de la base de datos de origen a la base de datos de destino.
- Copia las estadísticas de todos los índices de la base de datos de origen a la base de datos de destino.
Nota
La nueva base de datos generada a partir de DBCC CLONEDATABASE
sirve principalmente para fines de diagnóstico y de solución de problemas. Para que la base de datos clonada se pueda usar como base de datos de producción, se debe usar la opción VERIFY_CLONEDB
.
Todos los archivos de la base de datos de destino heredarán la configuración de tamaño y crecimiento de la base de datos model
. Los nombres de archivo para la base de datos de destino siguen la convención <source_file_name_underscore_random number>
. Si el nombre del archivo generado ya existe en la carpeta de destino, se producirá un error en DBCC CLONEDATABASE
.
DBCC CLONEDATABASE
no admite la creación de un clon si hay algún objeto de usuario (tablas, índices, esquemas, roles, etc.) que se ha creado en la base de datos model
. Si hay objetos de usuario en la base de datos model
, se produce un error en el clon de la base de datos con el siguiente mensaje de error:
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object <system table> with unique index 'index name'. The duplicate key value is <key value>
Importante
Si tiene índices de almacén de columnas, vea Consideraciones al optimizar las consultas con índices de almacén de columnas en las bases de datos clonadas para actualizar las estadísticas de los índices de almacén de columnas antes de ejecutar el comando DBCC CLONEDATABASE
. A partir de SQL Server 2019 (15.x), los pasos manuales descritos en el artículo anterior ya no serán necesarios, ya que el comando DBCC CLONEDATABASE
recopila esta información automáticamente.
Blob de estadísticas para los índices de almacén de columnas
A partir de SQL Server 2019 (15.x), DBCC CLONEDATABASE
captura automáticamente los blobs de estadísticas de índices de almacén de columnas, por lo que no es necesario realizar ningún paso manual. DBCC CLONEDATABASE
crea una copia de solo esquema de una base de datos que incluye todos los elementos necesarios para solucionar problemas de rendimiento de consultas sin copiar los datos. En versiones anteriores de SQL Server, el comando no copiaba las estadísticas necesarias para solucionar con precisión los problemas de las consultas del índice de almacén de columnas y se tenían que realizar pasos manuales para capturar esta información.
Para obtener información relacionada con la seguridad de los datos en bases de datos clonadas, vea Understanding data security in cloned databases (Descripción de la seguridad de los datos en bases de datos clonadas).
Instantánea de base de datos interna
DBCC CLONEDATABASE
usa una instantánea de base de datos interna de la base de datos de origen para la coherencia transaccional que se necesita para realizar la copia. Con esta instantánea se evitan problemas de bloqueo y de simultaneidad cuando se ejecutan estos comandos. Si no se puede crear una instantánea, se producirá un error en DBCC CLONEDATABASE
.
Durante los siguientes pasos del proceso de copia se mantienen bloqueos de nivel de base de datos:
- Validar la base de datos de origen
- Obtener el bloqueo S compartido para la base de datos de origen
- Crear una instantánea de la base de datos de origen
- Crear una base de datos clonada (una base de datos vacía heredada de la base de datos
model
) - Obtener el bloqueo X exclusivo para la base de datos clonada
- Copiar los metadatos en la base de datos clonada
- Liberar todos los bloqueos de base de datos
Tan pronto como el comando haya terminado de ejecutarse, se quitará la instantánea interna. Las opciones TRUSTWORTHY
y DB_CHAINING
están desactivadas en una base de datos clonada.
Objetos admitidos
Solo se pueden clonar los siguientes objetos en la base de datos de destino. Los objetos cifrados se clonan, pero no se pueden usar en la base de datos clonada. Los objetos que no figuran en la siguiente sección no se admiten en el clon:
- APPLICATION ROLE
- AVAILABILITY GROUP
- COLUMNSTORE INDEX
- CDB
- CDC
- Change Tracking 6, 7, 8
- CLR 1, 2
- DATABASE PROPERTIES
- DEFAULT
- FILES AND FILEGROUPS
- Full text 3
- FUNCTION
- INDEX
- LOGIN
- PARTITION FUNCTION
- PARTITION SCHEME
- PROCEDURE 4
- QUERY STORE 2, 5
- ROLE
- RULE
- SCHEMA
- SEQUENCE
- SPATIAL INDEX
- STATISTICS
- SYNONYM
- TABLE
- MEMORY OPTIMIZED TABLES 2
- FILESTREAM AND FILETABLE OBJECTS 1, 2
- TRIGGER
- TYPE
- UPGRADED DB
- USER
- VIEW
- XML INDEX
- XML SCHEMA COLLECTION
1 A partir de SQL Server 2014 (12.x) Service Pack 2 CU 3.
2 A partir de SQL Server 2016 (13.x) Service Pack 1.
3 A partir de SQL Server 2016 (13.x) Service Pack 1 CU 2.
4 Los procedimientos de Transact-SQL se admiten en todas las versiones a partir de SQL Server 2014 (12.x) Service Pack 2. Los procedimientos CLR se admiten a partir de SQL Server 2014 (12.x) Service Pack 2 CU 3. Los procedimientos compilados de forma nativa se admiten a partir de SQL Server 2016 (13.x) Service Pack 1.
5 Los datos de Almacén de consultas solo se copian si están habilitados en la base de datos de origen. Para copiar las estadísticas en tiempo de ejecución más recientes como parte del Almacén de consultas, ejecute sp_query_store_flush_db
para vaciar las estadísticas en tiempo de ejecución en el Almacén de consultas antes de ejecutar DBCC CLONEDATABASE
.
6 A partir de SQL Server 2016 (13.x) Service Pack 2 CU 10.
7 A partir de SQL Server 2017 (14.x) Service Pack 2 CU 17.
8 A partir de SQL Server 2019 (15.x) CU 1 y las versiones posteriores.
Permisos
Requiere la pertenencia al rol fijo de servidor sysadmin .
Mensajes de registro de error
Los siguientes mensajes son un ejemplo de los mensajes registrados en el registro de errores durante el proceso de clonación:
2018-03-26 15:33:56.05 spid53 Database cloning for 'sourcedb' has started with target as 'sourcedb_clone'.
2018-03-26 15:33:56.46 spid53 Starting up database 'sourcedb_clone'.
2018-03-26 15:33:57.80 spid53 Setting database option TRUSTWORTHY to OFF for database 'sourcedb_clone'.
2018-03-26 15:33:57.80 spid53 Setting database option DB_CHAINING to OFF for database 'sourcedb_clone'.
2018-03-26 15:33:57.88 spid53 Starting up database 'sourcedb_clone'.
2018-03-26 15:33:57.91 spid53 Database 'sourcedb_clone' is a cloned database. A cloned database should be used for diagnostic purposes only and is not supported for use in a production environment.
2018-03-26 15:33:57.92 spid53 Database cloning for 'sourcedb' has finished. Cloned database is 'sourcedb_clone'.
Acerca de Service Packs para SQL Server
Los Service Packs son acumulativos. Cada nuevo Service Pack contiene todas las correcciones que se encuentran en los service packs anteriores, junto con las nuevas correcciones. Nuestra recomendación es aplicar el Service Pack más reciente y la actualización acumulativa más reciente para ese Service Pack. No tiene que instalar un Service Pack anterior antes de instalar el Service Pack más reciente. Consulte la tabla 1 en Actualizaciones e historial de versiones más recientes para SQL Server para obtener más información sobre el Service Pack más reciente y la actualización acumulativa más reciente.
Nota:
La base de datos recién generada a partir de DBCC CLONEDATABASE no se admite para usarse como base de datos de producción y está pensada principalmente para la solución de problemas y el diagnóstico. Se recomienda desasociar la base de datos clonada después de crear la base de datos.
Propiedades de la base de datos
DATABASEPROPERTYEX('dbname', 'IsClone')
devolverá 1 si la base de datos se generó mediante DBCC CLONEDATABASE
.
DATABASEPROPERTYEX('dbname', 'IsVerifiedClone')
devolverá 1 si la base de datos se ha comprobado correctamente con WITH VERIFY_CLONEDB
.
Ejemplos
A. Creación de un clon de una base de datos que incluye un esquema, estadísticas y un Almacén de consultas
En el ejemplo siguiente se crea un clon de la base de datos AdventureWorks2022
que incluye datos de esquema, de estadísticas y de Almacén de consultas (SQL Server 2016 (13.x) Service Pack 1 y versiones posteriores):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone);
GO
B. Creación de un clon de solo esquema de una base de datos sin estadísticas
En el ejemplo siguiente se crea un clon de la base de datos AdventureWorks2022
que no incluye estadísticas (SQL Server 2014 (12.x) Service Pack 2 CU 3 y versiones posteriores):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS;
GO
C. Creación de un clon de solo esquema de una base de datos sin estadísticas y sin Almacén de consultas
En el ejemplo siguiente se crea un clon de la base de datos AdventureWorks2022
que no incluye datos de estadísticas y de Almacén de consultas (SQL Server 2016 (13.x) Service Pack 1 y versiones posteriores):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
GO
D. Creación de un clon de una base de datos que se comprueba para su uso en producción
En el ejemplo siguiente se crea un clon de solo esquema de la base de datos AdventureWorks2022
sin datos de estadísticas ni de Almacén de consultas que se comprueba para su uso como base de datos de producción (SQL Server 2016 (13.x) Service Pack 2 y versiones posteriores):
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB;
GO
E. Creación de un clon de una base de datos que se comprueba para su uso en producción que incluye una copia de seguridad de la base de datos clonada
En el ejemplo siguiente se crea un clon de solo esquema de la base de datos AdventureWorks2022
sin datos de estadísticas ni de Almacén de consultas que se comprueba para su uso como base de datos de producción. También se creará una copia de seguridad comprobada de la base de datos clonada (SQL Server 2016 (13.x) Service Pack 2 y versiones posteriores).
DBCC CLONEDATABASE (AdventureWorks2022, AdventureWorks_Clone) WITH VERIFY_CLONEDB, BACKUP_CLONEDB;
GO