Power Shell es un poderoso shell desarrollado por Microsoft que nos facilitará la automatización de tareas por medio de la programación de scripts, es la versión mejorada de lo que es la consola MS-DOS de Windows, y mediante esta herramienta podremos automatizar muchas de las tareas que hacemos de manera manual, en este caso vamos a respaldar por medio de PowerShell una base de datos de SQL Server.
Para respaldar una base de datos SQL SERVER es necesario utilizar el comando Backup-SqlDatabase
Lo primero que tenemos que hacer es abir Powershell de preferencia PowerShell ISE, para poder crear nuestros archivos con script.
Una de las ventajas entre muchas otras que tiene PowerShell, es que podemos utilizar clases y funciones que utilizamos en .NET, así que si sabes usar .NET, ya tienes mucho avance en el conocimiento de PowerShell.
Para comenzar debemos instalar las librerías para el manejo de SQL Server. Ya que el comando Backup-sqldatabase no estará disponible hasta descargar las librerías, para descargar las librerías ejecutaremos en la consola de PowerShell el siguiente comando:
desde el PowerShell, es importante ejecutar el comando con derechos de administrador.
Nos aparecerá un mensaje como el siguiente al cual responderemos que Sí
En la primera función recibe como parámetro la instancia a la cual haremos el respaldo, buscaremos las bases de datos que se encuentran en la instancia, que no sean de sistema, por eso el operad >6, la variable $bd, sera la encargada de guardar el arreglo resultante de ese query, con el comando Invoke-Sqlcmd ejecutaremos una consulta, como vemos es necesario poner la instancia, el query y la base de datos donde se ejecutará.
La segunda función respalda las bases de datos y colocara los archivos en las rutas que le indiquemos. Lo primero que hacemos es obtener la $fecha, esto para que el nombre del archivo de respaldo tenga la fecha y la hora del respaldo, la variable $dir, guarda las rutas a las que se copiará el respaldo.
Para realizar el respaldo, es necesario utilizar la función Backup-SqlDatabase, función, como vemos, necesita algunos parámetros, como son la base de datos a respaldar, el archivo como se llamará y la instancia, ademas de algunos parámetros opcionales, como en mi caso -CopyOnly.
Después viene el ciclo, mediante el cual copiaremos los archivos de respaldo a las rutas indicadas en el arreglo $dir
Por ultimo, tenemos la ejecución del archivo, lo que sería el main
Para respaldar una base de datos SQL SERVER es necesario utilizar el comando Backup-SqlDatabase
Lo primero que tenemos que hacer es abir Powershell de preferencia PowerShell ISE, para poder crear nuestros archivos con script.
Una de las ventajas entre muchas otras que tiene PowerShell, es que podemos utilizar clases y funciones que utilizamos en .NET, así que si sabes usar .NET, ya tienes mucho avance en el conocimiento de PowerShell.
Para comenzar debemos instalar las librerías para el manejo de SQL Server. Ya que el comando Backup-sqldatabase no estará disponible hasta descargar las librerías, para descargar las librerías ejecutaremos en la consola de PowerShell el siguiente comando:
Install-Module -Name SqlServer
Con este comando instalaremos los módulos necesarios para controlar SQL SERVER
desde el PowerShell, es importante ejecutar el comando con derechos de administrador.
Nos aparecerá un mensaje como el siguiente al cual responderemos que Sí
Una vez que confirmamos la solicitud de PowerShell comienza la instalación de los módulos
Una vez terminada la instalación lo que tenemos que hacer es habilitar la ejecución de scripts, ya que viene deshabilitada por default, para habilitar la ejecución de scripts teclearemos el siguiente comando:
Set-ExecutionPolicy Unrestricted
Al ejecutar este comando, nos aparecerá un cuadro de diálogo de confirmación, al confirmar, ya podremos ejecutar scripts sin problemas, es importante que PowerShell, se esté ejecutando como administrador
Ahora procederemos a crear el script que nos permita realizar los respaldos de la base de datos
function exo-basesdatos($instancia)
{
$query =
"SELECT name FROM sys.databases where
database_id > 6"
$bd=Invoke-Sqlcmd -Query $query -ServerInstance
$instancia -Database
master
return $bd
}
function exo-respaldarbases($bd, $instancia)
{
$fecha =
Get-Date -Format
ddMMyyyy-HHmmss
$dir =
"C:\BD1",
"C:\BD2"
foreach($a
in $bd)
{
$archivo
= "c:\basesdatos\"
+ $a.name + " $fecha" + ".bak"
Backup-SqlDatabase -ServerInstance $instancia -Database $a.name -BackupFile $archivo -CopyOnly
foreach ($b
in $dir)
{
Copy-Item
$archivo -Destination
$b
}
}
}
$instance = "DESKTOP-BF69QH1\$instancia"
get-fnMensaje $instance
$bd = exo-basesdatos($instance)
$bd
exo-respaldarbases -bd $bd -instancia $instance
En la primera función recibe como parámetro la instancia a la cual haremos el respaldo, buscaremos las bases de datos que se encuentran en la instancia, que no sean de sistema, por eso el operad >6, la variable $bd, sera la encargada de guardar el arreglo resultante de ese query, con el comando Invoke-Sqlcmd ejecutaremos una consulta, como vemos es necesario poner la instancia, el query y la base de datos donde se ejecutará.
function exo-basesdatos($instancia)
{
$query =
"SELECT name FROM sys.databases where
database_id > 6"
$bd=Invoke-Sqlcmd -Query $query -ServerInstance
$instancia -Database
master
return $bd
}
La segunda función respalda las bases de datos y colocara los archivos en las rutas que le indiquemos. Lo primero que hacemos es obtener la $fecha, esto para que el nombre del archivo de respaldo tenga la fecha y la hora del respaldo, la variable $dir, guarda las rutas a las que se copiará el respaldo.
Para realizar el respaldo, es necesario utilizar la función Backup-SqlDatabase, función, como vemos, necesita algunos parámetros, como son la base de datos a respaldar, el archivo como se llamará y la instancia, ademas de algunos parámetros opcionales, como en mi caso -CopyOnly.
Después viene el ciclo, mediante el cual copiaremos los archivos de respaldo a las rutas indicadas en el arreglo $dir
function exo-respaldarbases($bd, $instancia)
{
$fecha =
Get-Date -Format
ddMMyyyy-HHmmss
$dir =
"C:\BD1",
"C:\BD2"
foreach($a
in $bd)
{
$archivo
= "c:\basesdatos\"
+ $a.name + " $fecha" + ".bak"
Backup-SqlDatabase -ServerInstance $instancia -Database $a.name -BackupFile $archivo -CopyOnly
foreach ($b
in $dir)
{
Copy-Item
$archivo -Destination
$b
}
}
}
Por ultimo, tenemos la ejecución del archivo, lo que sería el main
$instance = "DESKTOP-BF69QH1\$instancia"
get-fnMensaje $instance
$bd = exo-basesdatos($instance)
$bd
exo-respaldarbases -bd $bd -instancia $instance.
Para ejecutarlo:
Hasta aquí el post, espero haya sido de su agrado y utilidad, cualquier duda que tengan pregunten y les responderé a todos, compartan, comenten, y den clic en algún anuncio.
Saludos
No hay comentarios.:
Publicar un comentario