miércoles, 15 de noviembre de 2017

SQL Server DBCC CLONEDATABASE

Comando DBCC CLONEDATABASE

Cuando inicie con los Comandos DBCC, mencione que dentro de la categoría de varios se encontraba este comando que crea una nueva base de datos que contiene el esquema de todos los objetos y estadísticas de la base de datos de origen especificada. Este comando es realmente una buena incorporación a los comandos de consola de base de datos que ha realizado Microsoft SQL Server, este comando inicia su funcionamiento en la versión Microsoft SQL Server 2017, aunque está presente en las versiones de Microsoft SQL Server 2012 en el paquete de servicio 4, Microsoft SQL Server 2014 en el paquete de servicio 2 y en Microsoft SQL Server 2016 en el paquete de servicio 1.

Es realmente importante notar que esta funcionalidad no está pensada para que la base de datos clonada se utilice en ambientes productivos ya que su principal objetivo es la resolución de problemas y diagnóstico. De tal forma que se recomienda que una vez que se ha generado la base de datos clonada, ésta sea separada del servidor y restaurada en algún otro servidor.
La sintaxis de este comando en su forma más simple es:

USE master;
GO
DBCC CLONEDATABASE (source_database_name, target_database_name);
Microsoft SQL Server llevara a cabo las acciones requeridas para hacer un clone de la base de datos identificada como source_database_name, generando la base de datos denominada target_database_name. Es importante notar que toda la información de la tarea solicitada se registrara en el registro de Microsoft SQL Server. Las acciones que se llevan a cabo incluyen la generación de la base de datos del tamaño especificado en la base de datos model, se establece el método de recuperación den SIMPLE, así como el método de verificación de página en CHECKSUM, la opción TRUSTWORTHY a OFF y DB_CHAINING a OFF para la base de datos identificada como target_database_name. Una vez que la operación se ha llevado a cabo, la base de datos identificada target_database_name quedara en el estado de solo lectura y se presentara la siguiente notificación en los resultados.

Database cloning for 'source_database_name' has started with target as 'target_database_name'.
Database cloning for 'source_database_name' has finished. Cloned database is 'target_database_name'.
Database 'source_database_name' is a cloned database. A cloned database should be used for diagnostic purposes only and is not supported for use in a production environment.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.


Se puede observar que el último mensaje de la ejecución del comando indica que la base de datos clonada solo debe ser  utilizada con propósitos de diagnóstico y no será soportada en un ambiente de producción.
En términos generales podemos decir que esta operación lleva a cabo las siguientes operaciones:
  •        Crea una nueva base de datos de destino con el nombre identificado en target_database_name, que utiliza el mismo diseño de archivo que la base de datos origen, pero con tamaños de archivo predeterminados como la base de datos model.
  •        Crea una instantánea interna de la base de datos origen, identificada como source_database_name, para poder extraer los metadatos correspondientes.
  •        Copia los metadatos del sistema de la base de datos origen, source_database_name, a la base de datos de destino, identificada como tarjet_database_name.
  •        Copia todos los esquemas para todos los objetos desde la base de datos origen hasta la base de datos destino.
  •        Copia las estadísticas para todos los índices desde el origen a la base de datos de destino. Aquí se ve la importancia de que esta base de datos deba ser utilizada con propósitos de diagnóstico.
Existen algunos argumentos opcionales que pueden ser utilizados con el comando, estos son:

NO_STATISTICS
Este argumento especifica si las estadísticas de tabla / índice deben excluirse en el clon. Si no se especifica esta opción, las estadísticas de tabla / índice se incluyen automáticamente. Esta opción está disponible comenzando con Microsoft SQL Server 2014 SP2 CU3 y Microsoft SQL Server 2016 Service Pack 1.
NO_QUERYSTORE
Este argumento especifica si el almacén de consultas necesita ser excluido en el clon. Si no se especifica esta opción, los datos del almacén de consultas se copian en el clon si están habilitados en la base de datos de origen. Esta opción está disponible comenzando con Microsoft SQL Server 2016 Service Pack 1.

Como se ha mencionado, este comando debe ser utilizado para crear una copia del esquema y las estadísticas de una base de datos de producción, para investigar los problemas de rendimiento de las consultas, por lo que es importante tomar en cuenta las restricciones y los objetos que son soportados en el uso de este comando, Microsoft ha indicado una serie de objetos que están permitidos para la clonación, mismos que están indicados en la documentación del comando. Las restricciones implican que el uso del comando genere mensajes de error y estas son:
  • La base de datos de origen siempre debe ser especificada para una base de datos de usuario. La clonación de bases de datos del sistema (master, model, msdb, tempdb, distribution database, etc.) no está permitida.
  • La base de datos de origen que se establece en el comando debe estar en línea o legible.
  • El nombre de la base de datos que se establece como de destino no debe existir previamente al uso del comando.
  • El comando no debe ser usado en una transacción de usuario.

Ejemplos de DBCC CLONEDATABASE

Mostraré algunos ejemplos de uso de este comando:

USE master;
GO
DBCC CLONEDATABASE (db1, db2);
Genera un clone de la base de datos indicada como db1 generando la base de datos indicada como db2, incluye el esquema, las estadísticas y en el caso de Microsoft SQL Server 2016 y posterior, también incluye el almacenamiento de consultas y deja la base de datos db2 en el estado de solo lectura.

USE master;
GO
DBCC CLONEDATABASE (AdventureWorks, AdventureWorks_Clone) WITH NO_STATISTICS;
Crea un clone de la base de datos AdventureWorks, solo el esquema, sin incluir las estadísticas, para el caso de Microsoft SQL Server 2014 y posterior,  pero incluye almacenamiento de consultas para Microsoft SQL Server 2016 y posterior.

USE master;
GO
DBCC CLONEDATABASE (db1, db1_Clone) WITH NO_STATISTICS, NO_QUERYSTORE;
Crea un clone de la base de datos db1, solo el esquema, sin incluir las estadísticas, ni el almacenamiento de consultas para Microsoft SQL Server 2016 y posterior. Este ejemplo no funcionará en versiones anteriores de Microsoft SQL Server 2016.

Comentarios

Este comando debe ser utilizado cuando se tiene un bajo desempeño de las consultas en una base de datos y se debe llevar a cabo un análisis para la resolución de los problemas y el diagnostico correspondiente, ya que como se ha visto se copia todo el esquema de la base de datos de destino y se permite mantener las estadísticas generadas con las consultas y los índices, así como el almacenamiento de las consultas, en las versiones de Microsoft SQL Server 2016 y posteriores.

Es necesario indicar que si bien existen argumentos que nos permiten generar únicamente la estructura, el uso de la base de datos clonada solo podrá servir para efectos de mantener una copia limpia de la base de datos original, la cual puede ser usada en otro servidor para desarrollo o pruebas.

No hay comentarios.:

Publicar un comentario