Powershell para DBAs SQL Server – Vídeo 09 (Restore)

E ai Pessoal!

Segue o nono vídeo da série de Powershell para DBAs SQL Server parao canal SQLCrespi e este vídeo é dedicado a algumas dúvidas que eu recebi e sugestões que eu recebi, o foco deste vídeo é sobre restore de banco de dados SQL Server.

Abaixo segue o código usado no exemplo.

[code language=”powershell”]
#Conecta no servidor
$cred = Get-Credential sqlcrespi\administrator
Enter-PSSession -ComputerName win2016 -Credential $cred
#cria o banco de dados de controle
sqlps
Set-Location sqlserver:
$srv = new-Object Microsoft.SqlServer.Management.Smo.Server("win2016")
$database = New-Object -TypeName Microsoft.SqlServer.Management.Smo.database ($srv, ‘teste’)
$database.create()
write-host  $database.name $database.CreateDate
#cria a tabela de controle
Invoke-Sqlcmd -query ‘create table teste.dbo.controle (id int, descricao varchar(20))’

###Insert para o backup full
Invoke-Sqlcmd -Query "insert into teste.dbo.controle values (1, ‘full’)"
#Backup Full
Backup-SqlDatabase -Database teste -ServerInstance ‘win2016’ -CompressionOption On -BackupFile ‘\\WINAD\backup\teste.bak’
###Insert para o backup Diff
Invoke-Sqlcmd -Query "insert into teste.dbo.controle values (2, ‘differential’)"
#backup Diff
Backup-SqlDatabase -Database teste -ServerInstance ‘win2016’ -CompressionOption On -BackupFile ‘\\WINAD\backup\teste.bak’ -Incremental
###Insert para o backup Log
Invoke-Sqlcmd -Query "insert into teste.dbo.controle values (3, ‘log’)"
#backup log
Backup-SqlDatabase -Database teste -ServerInstance ‘win2016’ -CompressionOption On -BackupFile ‘\\WINAD\backup\teste.bak’ -BackupAction Log
Invoke-Sqlcmd -Query "select id, descricao from teste.dbo.controle"

#Consulta o arquivo de backup
Invoke-Sqlcmd -query "Restore headeronly from disk = ‘\\winad\backup\teste.bak’" | Format-Table

###Restore e teste</div>
#Restaurar o banco com um novo nome e outra alocação para arquivos
#Como vimos no vídeo 8
Restore-SqlDatabase -ServerInstance win2016 -Database ‘teste2’ -BackupFile ‘\\winad\backup\teste.bak’

###Restaura com replace e realoca os arquivos para o diretório dados2 e log2
Invoke-Sqlcmd -Query "select id, descricao from teste.dbo.controle"
#O restore-sqldatabase é um cmd-let criado através da classe Microsoft.SQLServer.Management.SMO.Restore
###Restaurar o full e aplicar um a um dos backups que estão dentro de um arquivo
#cria o diretório
new-item -ItemType Directory ‘c:\Dados3’
New-Item -ItemType Directory ‘c:\Log3’
#Full com recovery
$ArqDado = New-Object ‘Microsoft.SqlServer.Management.Smo.RelocateFile’ -ArgumentList "teste", "c:\Dados3\teste.mdf"
$ArqLog = New-Object ‘Microsoft.SqlServer.Management.Smo.RelocateFile’ -ArgumentList "teste_Log", "c:\log3\teste.ldf"
Restore-SqlDatabase -ServerInstance win2016 -Database ‘teste3’  -BackupFile ‘\\WINAD\backup\teste.bak’ -RelocateFile @($arqdado, $arqlog)
Invoke-Sqlcmd -Query "select id, descricao from teste3.dbo.controle"
Invoke-Sqlcmd -query "Restore headeronly from disk = ‘\\winad\backup\teste.bak’" | Format-Table</div>
#Full sem recovery
$ArqDado = New-Object ‘Microsoft.SqlServer.Management.Smo.RelocateFile’ -ArgumentList "teste", "c:\Dados3\teste.mdf"
$ArqLog = New-Object ‘Microsoft.SqlServer.Management.Smo.RelocateFile’ -ArgumentList "teste_Log", "c:\log3\teste.ldf"
Restore-SqlDatabase -ServerInstance win2016 -Database ‘teste3’ -ReplaceDatabase -RestoreAction Database -FileNumber 1 -NoRecovery -BackupFile ‘\\WINAD\backup\teste.bak’ -RelocateFile @($arqdado, $arqlog)
Invoke-Sqlcmd -Query "select id, descricao from teste3.dbo.controle"
get-childitem sqlserver:\sql\win2016\default\databases
#Diferencial sem recovery
Restore-SqlDatabase -ServerInstance win2016 -Database ‘teste3’-NoRecovery -BackupFile ‘\\WINAD\backup\teste.bak’ -FileNumber 2
#Invoke-Sqlcmd -Query "select id, descricao from teste3.dbo.controle"
#log
Restore-SqlDatabase -ServerInstance win2016 -database ‘teste3’  -BackupFile ‘\\WINAD\backup\teste.bak’ -FileNumber 3
Invoke-Sqlcmd -Query "select id, descricao from teste3.dbo.controle"

remove-item -force teste
get-childitem
Exit-PSSession
[/code]

Como sempre deem um like no vídeo, compartilhem e deixem seus comentários.

Assine o canal. ;)
Abraço, Rodrigo

Author: SQLCrespi

Rodrigo Crespi é MVP Data Platform, MCT, MCSE, MCSA, MCIT, MCDBA e MCP em SQL Server, possuí outras certificações em .NET Framework, Dynamics CRM e etc. Iniciou trabalhando com SQL Server na versão 6.5 na época como desenvolvedor, logo direcionou a sua carreira para a área de administração de bancos de dados. Atualmente é Sócio da CrespiDB – Soluções em Plataformas de Dados, além de professor universitário na Uniftec – Caxias do Sul Autor de diversos artigos publicados em sites e revistas sobre SQL Server e engenharia de software, mantem o canal SQLCrespi no Youtube, o blog SQLCrespi, além de ser dedicado ao SQL Server RS PASS Chapter Leader do grupo de profissionais em SQL Server do Rio Grande do Sul.

One thought on “Powershell para DBAs SQL Server – Vídeo 09 (Restore)

Deixe uma resposta