Escolar Documentos
Profissional Documentos
Cultura Documentos
O backup e a restauração de um banco de dados é uma tarefa crítica pois visa manter a integridade e a segurança das
informações armazenadas.
Para grandes aplicações a realização do backup e restauração em geral fica sob responsabilidade de um DBA, mas para
aplicações menores a responsabilidade fica por conta do desenvolvedor e isso pode ser uma tarefa espinhosa visto que
temos diversas versões do SQL Server, diversos tipos de backups, etc.
Neste artigo eu vou mostrar como podemos realizar a restauração e o backup do banco de dados SQL Server em uma
aplicação Windows Forms usando a linguagem C# para a versão do SQL Server 2012 e utilizando os recursos do SQL
Server Management Objects (SMO) que é uma coleção de namespaces que, por sua vez, contêm diferentes classes,
interfaces, delegados e enumerações, para trabalhar e gerenciar uma instância do SQL Server via programação.
O SMO estende e substitui os Objetos de Gerenciamento Distribuído do SQL Server (SQL-DMO) que foi usado para
versões mais antigas do SQL Server (SQL Server 2000). Portanto veremos como usar o SMO e como gerenciar
programaticamente uma instância do SQL Server usando C#.
Nota: Os aplicativos que usam SMO e que foram escritos usando versões anteriores do SQL Server podem ser recompilados
usando SMO no SQL Server atual. As referências a dlls do SMO em versões antigas do SQL Server devem ser removidas e as
referências às novas dll do SMO fornecidas com o SQL Server atual devem ser incluídas.
Apresentando o SMO
O modelo de objeto SMO representa o SQL Server como uma hierarquia de objetos. No topo dessa hierarquia esta o
objeto Server, abaixo dele residem todas as demais classes de instância.
- Classes de instância - Os objetos do SQL Server são representados por classes de instância. Elas formam uma
hierarquia que se assemelha à hierarquia de objetos do servidor de banco de dados. No topo desta hierarquia esta o
objeto Server e, por isso, existe uma hierarquia de objetos de instância que incluem: bancos de dados, tabelas, colunas,
triggers , índices, funções definidas pelo usuário, procedimentos armazenados, etc.
- Classes de utilidade - As classes de utilidade são independentes da instância do SQL Server e executam tarefas
específicas. Essas classes foram agrupadas com base em suas funcionalidades. Por exemplo, operações de script de
banco de dados, bancos de dados de backup e restauração, transferência de esquema e dados para outro banco de
dados etc.
Em geral para poder usar esses recursos você deverá usar as seguintes referências:
Microsoft.SqlServer.ConnectionInfo
Microsoft.SqlServer.Smo
Microsoft.SqlServer.Management.Sdk.Sfc
Microsoft.SqlServer.SmoExtended
https://www.macoratti.net/17/07/cshp_bkpsql1.htm 1/9
26/12/22, 08:48 C# - Backup e Restauração de banco de dados SQL Server
pode iniciar, parar e pausar os serviços do SQL Server, alterar
os protocolos e as bibliotecas de rede, etc
Instalando o SMO
Para podermos usar os recursos do SMO temos que instalar você deve selecionar o SDK de Ferramentas do Cliente
quando instalar o SQL Server. Para instalar o Client Tooks SDK sem instalar o SQL Server, instale o Shared Management
Objects do pacote de recursos do SQL Server.
Se você quiser garantir que o SQL Server Management Objects esteja instalado em um computador que executará seu
aplicativo, você pode usar os Shared Management Objects(Objetos de gerenciamento compartilhado) .msi no pacote de
recursos do SQL Server.
Por padrão, os assemblies SMO estão instalados no diretório C:\Program Files\Microsoft SQL
Server\130\SDK\Assemblies\
Você referencia os pacotes em seu projeto clicando com o botão direito do mouse sobre o nome do projeto e
selecionando a opção Add Reference.
Cabe ressaltar que podemos ter os seguintes tipos de backup no SQL Server:
1. Full Backups
2. Differential Backups
3. Transaction Log Backups
4. Backup with Compression
5. Full or Differential Restores
Recursos Usados :
https://www.macoratti.net/17/07/cshp_bkpsql1.htm 2/9
26/12/22, 08:48 C# - Backup e Restauração de banco de dados SQL Server
A seguir inclua as referências ao SMO via menu Project opção Add Reference :
1 Panel
1 PictureBox
4 Label
2 TextBox - txtUsuario, txtSenha
2 Combobox - cboServidor , cboDatabase
5 Buttons - btnAlterarServidor, btnAlterarDatabase, btnBackup, btnRestore e btnEncerrar
1 checkbox - chkIntegratedSecurity
https://www.macoratti.net/17/07/cshp_bkpsql1.htm 3/9
26/12/22, 08:48 C# - Backup e Restauração de banco de dados SQL Server
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
try
{
chkIntegratedSecurity.Checked = true;
// Se existerem servidores
if (tabelaServidores.Rows.Count > 0)
{
// Percorre cada servidor na tabela
foreach (DataRow drServer in tabelaServidores.Rows)
{
cboServidor.Items.Add(drServer["Name"]);
cboServidor.Text = Convert.ToString(drServer["Name"]);
}
}
}
catch (Exception)
{
// Inicie o serviço do SQL Server Browser se não conseguir carregar os servidores.(http://msdn.microsoft.com/en-us/library/m
MessageBox.Show("ERROR: Não existem servidores disponíveis.\nOu ocorreu um erro ao carregar os servidores", "Servidor Err
}
finally
{
this.Cursor = Cursors.Default;
}
this.Cursor = Cursors.Default;
}
O código já esta comentado mas vale ressaltar a operação de carregar o combobox com as instâncias locais do SQL
Server pode demorar. Se por algum motivo não carregar nenhuma instância então tente habilitar o serviço do SQL Server
Browser.
A seguir o código do evento SelectedValueChanged dos combobox que desabilita os combox e o código do evento
Click dos botões Alterar (servidor e database) habilita os combobox:
https://www.macoratti.net/17/07/cshp_bkpsql1.htm 4/9
26/12/22, 08:48 C# - Backup e Restauração de banco de dados SQL Server
private void btnAlterarDatabase_Click(object sender, EventArgs e)
{
//habilita o combobox dos databases
cboDataBase.Enabled = true;
}
Código do evento CheckedChanged do controle CheckBox que verifica se esta marcado ou não e altera as propriedades
dos TextBox para o usuário e senha:
txtSenha.Enabled = false;
txtSenha.Text = string.Empty;
}
if (chkIntegratedSecurity.CheckState == CheckState.Unchecked)
{
txtUsuario.Enabled = true;
txtSenha.Enabled = true;
}
}
Código do evento Click do combobox - cboDataBase - que carrega o controle com o nome dos bancos de dados
selecionados para a instância do servidor selecionada:
https://www.macoratti.net/17/07/cshp_bkpsql1.htm 5/9
26/12/22, 08:48 C# - Backup e Restauração de banco de dados SQL Server
// percorre a lista de banco de dados
foreach (Database dbServer in servidor.Databases)
{
// Adiciona o banco de dados na combobox
cboDataBase.Items.Add(dbServer.Name);
}
}
}
else
{
// Um servidor não foi selecionado exibe um erro
MessageBox.Show("ERROR: Contate o Administrador!!", "Servidor", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (Exception)
{
// Inicie o serviço do SQL Server Browser se não conseguir carregar os servidores.(http://msdn.microsoft.com/en-us/library/m
MessageBox.Show("ERROR: Ocorreu um erro durante a carga dos banco de dados disponíveis", "Server", MessageBoxButtons.O
}
finally
{
this.Cursor = Cursors.Arrow;
}
}
Lembrando que o backup foi definido para o tipo de dispositivo FILE e que o arquivo .bak será copiado na pasta
\bin\debug do projeto.
this.Cursor = Cursors.WaitCursor;
// Se foi escolhido o arquivo o arquivo que deseja ser restaurado
// Cria uma nova operação de restore
Restore rstDatabase = new Restore();
// Define o tipo de restore para o banco de dados
rstDatabase.Action = RestoreActionType.Database;
// Define o database que desejamos restaurar
rstDatabase.Database = cboDataBase.SelectedItem.ToString();
// Define o dispostivo de backup a partir do qual vamos restaurar o arquivo
BackupDeviceItem bkpDevice = new BackupDeviceItem(DBpath + "\\Backup.bak", DeviceType.File);
// Adiciona o dispositivo de backup ao tipo de restore
rstDatabase.Devices.Add(bkpDevice);
// Se o banco de dados ja existe então subsititui
rstDatabase.ReplaceDatabase = true;
// Realiza o Restore
rstDatabase.SqlRestore(servidor);
MessageBox.Show("Database " + cboDataBase.Text + " RESTAURADO com sucesso", "Servidor", MessageBoxButtons.OK, Me
}
catch (Exception)
{
MessageBox.Show("ERRO: Ocorreu um erro durante a restauração do banco de dados", "Erro na aplicação", MessageBoxBut
}
finally
{
this.Cursor = Cursors.Arrow;
//habilita os botões
btnBackup.Enabled = true;
btnRestore.Enabled = true;
btnAlterarDatabase.Enabled = true;
btnAlterarServidor.Enabled = true;
}
}
else
{
MessageBox.Show("ERRO: Não foi estabelecida uma conexão com o SQL Server", "Servidor", MessageBoxButtons.OK, Message
this.Cursor = Cursors.Arrow;
}
}
https://www.macoratti.net/17/07/cshp_bkpsql1.htm 7/9
26/12/22, 08:48 C# - Backup e Restauração de banco de dados SQL Server
O projeto foi testado com o SQL Server 2012. Para versões anteriores pode ser necessário ajustes no código.
"E o mundo passa, e a sua concupiscência; mas aquele que faz a vontade de Deus permanece para sempre."
1 João 2:17
Quer aprender C# ??
https://www.macoratti.net/17/07/cshp_bkpsql1.htm 8/9
26/12/22, 08:48 C# - Backup e Restauração de banco de dados SQL Server
Referências:
https://www.macoratti.net/17/07/cshp_bkpsql1.htm 9/9