Hace un tiempo atrás escribí un post acerca del historial de backups y restores de una base de datos, esos scripts estoy seguro que les fueron de mucha utilidad, sin embargo yo sabia tenían algunas limitaciones las cuales requerían que en algunos casos tengamos que hacer cambios al código para que pudiera hacer lo que necesitábamos, pero si no dominábamos las tablas de sistema que están involucradas en el código, estos cambios se tornaban incluso más difíciles. Pues bueno ahora les traigo otra alternativa a esos scripts, este primer post nos guiara en los aspectos mas importantes del cmdlet de Powershell que vamos a utilizar para poder obtener esta misma información y más.

Uno de los pre-requisitos para utilizar este cmdlet es tener instalado el modulo de “dbatools” para lo cual les dejo el enlace aquí. Luego se asume que este comando sera utilizado por un usuario de Windows administrador de la instancia de base de datos de la cual se desea consultar la información. Finalmente es importante notar que no es necesario ejecutar los comandos desde el mismo servidor de base de datos, al contrario, se recomienda que estos se ejecuten desde un terminal cliente.

El comando que utilizaremos se llama “Get-DbaBackupHistory”, el nombre del comando es bastante descriptivo en cuanto a su proposito. Este comando tiene algunos parametros que detallaremos a continuación para modificar su comportamiento o la información que nos arroja:

  • -SqlServer: El servidor SQL Server al cual nos conectaremos.
  • -Credential: Objeto de tipo credencial que utilizaremos si no contamos con un usuario Windows con acceso a la instancia de base de datos.
  • -IgnoreCopyOnly: Si se coloca este parametro, el comando ignorará los backups de tipo “Copy Only”.
  • -Force: Según la documentación arroja toda la información, de la forma en que SQL Server la retorna, sin embargo no he conseguido hacerla funcionar correctamente. Sugiero no se utilice este parámetro.
  • -Since: Define una fecha de inicio desde la cual queremos la información. Esto ayuda a reducir la información retornada.
  • -Last: Retorna la ultima cadena de backups completa, es decir el ultimo backup full, diferencial y logs para traer la base de datos hasta la ultima transacción respaldada.
  • -LastFull: Retorna sólo el ultimo backup Full de las bases de datos.
  • -LastDiff: Retorna sólo el ultimo backup diferencial de las bases de datos.
  • -LastLog: Retorna sólo el ultimo backup de log de las bases de datos.
  • -Raw: Por defecto el comando agrupará los mediasets (backups partidos en multiples archivos) dentro de un solo objeto. si se prefiere tener un objeto por archivo de backup, se debe activar este parámetro.
  • -Databases: La lista de bases de datos, puede ser una o varias.
Ejemplo 1: Obtener el historial de backup de todas las bases de datos de una instancia:

Ejemplo 2: Obtener el historial de backup de una base de datos:

Ejemplo 3: Obtener la ultima cadena de backups complete (Full, Diferencial, Log):

En este caso sólo mostraría el ultimo full, el ultimo diferencial, y los backups de log que se sacaron luego del ultimo diferencial, estos backups serian los necesarios para restaurar la base de datos hasta la ultima trasacción respaldada.

Ejemplo 4: Obtener el ultimo backup full de multiples bases de datos:

¿Qué les pareció? muy buena funcionalidad verdad, sin embargo ustedes dirán: “Hey, pero no tengo la ruta ni el archivo de backup”. Los entiendo, yo también me hice esa misma pregunta, sin embargo lo que nos esta exponiendo ese comando de Powershell es un objeto, el cual sólo esta mostrando algunas de sus propiedades, se puede obtener las demás propiedades a través de otros comandos, acá les mostrare sólo algunos ejemplos de lograr esto:

Format-List:

Select:


Como podemos darnos cuenta con Powershell contamos con muchas más posibilidades de obtener la información que necesitamos para obtener el historial de backups de nuestras bases de datos. Los animo a seguir experimentando con Powershell y SQL Server. Nos vemos en el próximo post.