Script de PowerShell para una restauración rápida de base de datos (SQL Server)
- Publicado el
- • 3 min de lectura•--- vistas
Este script será útil si necesitas restablecer tu base de datos con frecuencia. Por ejemplo, debido a un desarrollo activo que afecta los datos en las tablas. El script está publicado en mi repositorio de GitHub aquí - [link] El escenario es:
- EXEC sp_configure 'show advanced options', 1
- EXEC sp_configure 'xp_cmdshell', 1
- Montar una ruta UNC remota (para restaurar la base de datos desde un host remoto)
- Poner la base de datos que se va a restaurar en modo offline
- Restaurar la base de datos
- Volver a poner la base de datos online
Listado del módulo SQLCmd (puede estar desactualizado, la última versión existe en el repositorio del enlace):
Function Exec(
[System.String]$command,
[System.String]$serverInstance
) {
Invoke-Sqlcmd -Query $command -ServerInstance $ServerInstance
}
Function Test(
[System.String] $serverInstance
) {
$command = EXEC master..xp_cmdshell 'set'
Exec $command $serverInstance
}
Function Reconfigure(
[System.String] $serverInstance
) {
$command = RECONFIGURE
Exec $command $serverInstance
}
Function Show-Advanced-Options(
[System.String] $serverInstance
) {
$command = EXEC sp_configure 'show advanced options', 1
Exec $command $serverInstance
Reconfigure $serverInstance
}
Function Xp-CmdShell(
[System.String] $serverInstance
) {
$command = EXEC sp_configure 'xp_cmdshell', 1
Exec $command $serverInstance
$command = RECONFIGURE
Reconfigure $serverInstance
}
Function Net-Use-Delete(
[System.String] $drive,
[System.String] $serverInstance
) {
$command = EXEC XP_CMDSHELL 'net use $drive /delete /y'
Exec $command $serverInstance
}
Function Net-Use-Add(
[System.String] $drive,
[System.String] $hostPath,
[System.String] $hostUser,
[System.String] $hostPassword,
[System.String] $serverInstance
) {
$command = EXEC XP_CMDSHELL 'net use $drive $hostPath /user:$hostUser $hostPassword /persistent:yes'
Exec $command $serverInstance
}
Function Set-Database-Offline(
[System.String] $dbName,
[System.String] $serverInstance
) {
$command = ALTER DATABASE [$dbName] SET OFFLINE WITH ROLLBACK IMMEDIATE
Exec $command $serverInstance
}
Function Set-Database-Online(
[System.String] $dbName,
[System.String] $serverInstance
) {
$command = ALTER DATABASE [$dbName] SET ONLINE
Exec $command $serverInstance
}
Function Restore-Database(
[System.String] $dbName,
[System.String] $dbFilePath,
[System.String] $serverInstance
) {
$command = RESTORE DATABASE [$dbName] FROM DISK = '$dbFilePath' WITH REPLACE
Exec $command $serverInstance
}
Listado del escenario de restauración de base de datos (también puede estar desactualizado):
.\Load-Module.ps1 SQLCmd
$serverInstance = BOT-SP2016
$db = @{
name = SharePoint_Content_80
path = \db\ksup\content\2019.09.16.00.00.07.bak
}
$hostInfo = @{
path = $env:hostPath
user = $env:hostUser
password = $env:hostPassword
}
Write-Host [x] database preconfig
Show-Advanced-Options $serverInstance
Xp-CmdShell $serverInstance
Write-Host [x] virtual path mappings
Net-Use-Delete H: $serverInstance
Net-Use-Add H: $hostInfo.path $hostInfo.user $hostInfo.password $serverInstance
Write-Host [x] taking database $($db.name) offline
Set-Database-Offline $db.name $serverInstance
Write-Host [x] restorting database $($db.name) from file $($db.path)
$path = Join-Path -Path $hostInfo.path -ChildPath $db.path
Restore-Database $db.name $path $serverInstance
Write-Host [x] taking database $($db.name) online
Set-Database-Online $db.name $serverInstance
Write-Host [x] scenario completed -ForegroundColor Green
Atención: para que el script funcione correctamente, necesitas configurar algunas variables de entorno en tu sistema operativo:

Las variables son:
- hostPath
- hostUser
- hostPassword
Y configura las variables en el script del escenario: - db.name, db.path
Índice
Disponible para colaboración por contrato
Estoy disponible para colaborar por contrato. Si tiene una idea de proyecto interesante, reserve una llamada por Calendly.
Agenda una llamada de 30 min