sql >> Base de Datos >  >> RDS >> Database

Clonación de bases de datos con PSDatabaseClone

Autor invitado:Sander Stad (@sqlstad)

PSDatabaseClone es un módulo de PowerShell que tiene la capacidad de crear imágenes de bases de datos ("clones") y distribuir esos clones a uno o más hosts.

¿Por qué usar este módulo?

Los administradores de bases de datos, y realmente cualquiera que tenga que lidiar con el aprovisionamiento de datos, tienen usuarios que quieren trabajar con nuestras bases de datos. Esto puede ser para desarrollar nuevas soluciones, extraer datos para procesos ETL, simular problemas de rendimiento, recuperar datos con fines de generación de informes, etc.

Aprovisionar los datos a otras ubicaciones puede ser una tarea muy tediosa y la mayoría de nosotros dedicamos mucho tiempo y recursos a realizar esa tarea.

Las soluciones conocidas para aprovisionar los datos son mediante la restauración de bases de datos o el desarrollo de secuencias de comandos extensas para resolver este problema. Estas soluciones no siempre son la forma más eficiente de aprovisionar datos y pueden llevar una cantidad considerable de tiempo.

Además del tiempo que cuesta llevar los datos a otras ubicaciones, también puede costar mucho espacio en disco.

¿Qué pasaría si hubiera una manera de reducir la cantidad de tiempo que lleva aprovisionar los datos y, al mismo tiempo, reducir la cantidad de recursos necesarios? Ahora hay una solución para eso y se llama PSDatabaseClone.

Cómo instalar el módulo

La instalación del módulo se puede realizar de varias formas.

Galería de PowerShell

La forma más fácil es usando el comando Install-Module . El comando busca el módulo en la Galería de PowerShell. Ejecute el siguiente código para instalar el módulo usando la Galería de PowerShell:

Install-Module PSDatabaseClone

El uso de este método también facilita la actualización del módulo cuando se lanza una nueva versión. Simplemente use el Update-Module comando como el siguiente para actualizarlo a la última versión:

Update-Module PSDatabaseClone

Clonación del repositorio

Otra forma de instalar el módulo es clonando el repositorio de Git en su máquina local. Aconsejaría a las personas que quieran contribuir al proyecto que utilicen este método.

Ejecute el siguiente comando:

git clone https://github.com/sanderstad/PSDatabaseClone.git

Esto descargará todo el repositorio a su máquina local desde la cual puede usar el módulo o desarrollar nuevas funciones para él.

¿Cómo funciona el módulo?

Imágenes

El objetivo del módulo era usar la menor cantidad posible de aplicaciones externas, para que todos puedan usar el módulo sin tener que instalar ningún extra. El módulo funciona mediante el uso de tecnología nativa en Windows para crear discos duros virtuales (VHD). Un VHD es un formato de archivo que representa un disco duro y puede contener volúmenes, particiones que a su vez pueden contener archivos y carpetas. Los VHD se pueden distribuir a otros hosts y montarse como un disco adicional, de forma similar a como se conecta una unidad USB externa. Una vez conectado, el host puede acceder a los archivos y carpetas como cualquier otro disco del sistema.

El módulo crea un VHD que será nuestra supuesta imagen. La imagen contendrá todos los archivos y carpetas necesarios para la base de datos.

Durante el proceso de creación de una imagen, el módulo obtendrá una copia de seguridad de la base de datos que especificó y restaurará la base de datos en un VHD.

Después de la restauración, el VHD se cierra y se desmonta y ahora contiene todos los archivos necesarios para clonar la base de datos.

Figura 1:Proceso de creación de una imagen

Clones

Para crear un clon, el módulo crea un "disco de diferenciación" que contiene los mismos archivos y carpetas que el disco principal, pero solo guarda el delta entre el principal y el secundario.

Esa funcionalidad ahorra inmediatamente espacio en disco porque solo se usa una fracción del tamaño de la base de datos original para la clonación.

Otra ventaja es que, dado que el clon guarda el delta de los cambios, la imagen en sí no se ve afectada por ninguno de los cambios. Esto significa que otros clones tampoco se ven afectados.

El proceso de creación de un clon consiste en crear un disco de diferenciación dentro de una imagen creada (disco principal). El clon se monta y la base de datos dentro del clon se adjunta a una instancia.

A partir de ese momento, la base de datos está operativa de la misma forma que lo estaría la original. Contiene los mismos objetos, datos y comportamientos. Debido a que todos los objetos están en la base de datos como la base de datos original, los planes de consulta y las estadísticas de consulta actuarán de la misma manera.

Esto le brinda al usuario o al desarrollador la oportunidad de crear consultas que se ejecutarán de la misma manera en producción que en su sistema de desarrollo, lo que reduce el riesgo de ejecutar consultas ineficientes.

Creación de imágenes y clones

Crear una imagen

El primer paso del proceso es crear una imagen. Para crear una imagen tiene los siguientes requisitos previos:

  • Instancia de origen
  • Instancia de destino (puede ser la misma que la instancia de origen)
  • Base de datos
  • Ruta de red
  • Copia de seguridad

El comando que crea la imagen es:New-PSDCImage .

Es muy importante usar una ruta de red a las imágenes para que otros hosts puedan encontrar la imagen y usarla para crear un clon.

Cuando se ejecuta el siguiente comando:

New-PSDCImage -SourceInstance SQLDB1 -DestinationInstance SQLDB1 -ImageNetworkPath \\sqldb1\psdatabaseclone\images -Database DB1 -CreateFullBackup

Obtendrás el siguiente resultado:

Este comando se ejecutó el 24 de julio de 2018 alrededor de las 9 p.m., lo que explica las fechas en la imagen

En este ejemplo, el comando busca la instancia SQLDB1 para una base de datos particular e intenta crear una imagen usando la misma instancia. Creará una nueva copia de seguridad completa para obtener los datos más recientes.

El resultado es una imagen ubicada en el recurso compartido de red \\sqldb1\psdatabaseclone\images llamado DB1_20180724214146.vhdx .

Los números en el nombre de la imagen son una marca de tiempo en la que se creó la imagen.

Crear un clon

El clon depende de la imagen y la forma más fácil de crear un clon a partir de una base de datos en particular es dejar que el módulo lo resuelva por usted.

Ejecutando el siguiente comando:

New-PSDCClone -SqlInstance SQLDB3 -Database DB1 -CloneName DB1_Clone2 -LatestImage

Creará un resultado similar al siguiente:

El comando acaba de crear un disco diferencial en otra instancia. El clon se basa en la última imagen de la base de datos DB1 y se llamará "DB1_Clone2".

Debido a que no proporcionamos un destino, el comando buscará la ubicación de datos predeterminada de la instancia de SQL Server.

Dentro de ese directorio creará un subdirectorio llamado “clonar”. El clon se colocará dentro de esa carpeta.

Recuperación de información

Durante la configuración del módulo, asignó una ubicación donde se pueden encontrar todos los clones. Esta era una base de datos o un directorio, y más específicamente un recurso compartido, donde se escriben los archivos de configuración.

Para recuperar la información puedes usar los comandos Get-PSDCImage y Get-PSDCClone . Estos comandos recuperarán la información del almacén de información y se la devolverán al usuario.

Información de la imagen

Para obtener la información de la imagen, debe usar el comando Get-PSDCCimage . Esto le dará un resultado similar al siguiente:

Verá que puede haber varias imágenes de la misma base de datos, cada una de las cuales podría tener datos diferentes.

Información de clonación

De forma similar a la recuperación de información de imagen, puede obtener información de clonación. Use el comando Get-PSDCClone y obtendrá un resultado similar al siguiente:

¡¿Qué sigue?!

Lo siguiente con PSDatabaseClone es hacer posible ofuscar los datos en las imágenes para que sea adecuado para entornos empresariales. Todos conocemos los incidentes de violación de datos últimamente y queremos asegurarnos de que nuestros datos, al menos los datos que no están en las instalaciones, estén enmascarados de tal manera que nadie sepa qué hacer con ellos.

¿Cómo puedes ayudar?

PSDatabaseClone es un módulo de PowerShell de código abierto y todos los interesados ​​pueden ayudar a mejorar el módulo. Si está familiarizado con el desarrollo de funciones y/o módulos de PowerShell, puede ayudar a desarrollar nuevas funciones, corregir errores (estoy seguro de que hay errores en alguna parte). Si no se siente cómodo desarrollando el código, no se preocupe; hay muchas cosas que hacer.

Puedes ayudar a probar las diferentes funciones e intentar romperlas. Yo, como una persona, solo puedo llegar hasta cierto punto y la mayoría de las veces pruebo el feliz flujo de mis programas. Probablemente pruebes de una manera diferente y obtengas otros resultados en los que nunca hubiera pensado. Esto ayudará a mejorar el módulo.

También puede ayudar a pensar en nuevas funciones para agregar a la solución actual. Es posible que tenga una gran idea para una nueva funcionalidad que no se me hubiera ocurrido por mi cuenta.

Si tiene una idea para una nueva función o encontró un error, vaya a la página de github y cree una solicitud de función o un informe de error. Se agradece mucho.

Información

Sitio web:https://psdatabaseseclone.org

Github:https://github.com/sanderstad/PSDatabaseClone

Sobre el autor

Sander ha estado trabajando con SQL Server desde la versión 2000.
Ha trabajado en una variedad de industrias , de la agricultura, las industrias financieras y la atención médica.
Ha estado trabajando con PowerShell desde la versión 1 y está adoptando la automatización donde puede.