Se você usa o SQL Server Management Studio (SSMS) ou alguma outra GUI para gerenciar seus bancos de dados, pode estar acostumado a fazer backup e restaurar bancos de dados usando “apontar e clicar”.
Normalmente, isso envolve clicar com o botão direito do mouse no banco de dados e selecionar Restaurar ou semelhante, seguindo os prompts (por exemplo, ao restaurar um banco de dados no Azure Data Studio).
Mas se você precisar fazer isso com T-SQL, você pode usar o
RESTORE DATABASE
demonstração. Exemplo
Segue um exemplo básico:
RESTORE DATABASE World
FROM DISK = N'/var/opt/mssql/Bak/World.bak'
WITH FILE = 1;
Isso é quase tão simples quanto pode ser. O
RESTORE DATABASE
A instrução tem uma sintaxe bastante complexa (como a maioria das coisas T-SQL), mas essa instrução é suficiente para uma operação básica de restauração padrão. Neste caso, restaurei um banco de dados chamado World de um arquivo .bak. Eu usei
FROM DISK
para especificar que era de um arquivo .bak e forneci o caminho completo para esse arquivo. Outras opções aqui incluem FROM TAPE
e FROM URL
. Também incluí
WITH FILE = 1
aqui, mas esse é o valor padrão de qualquer maneira. Esta cláusula especifica o número do arquivo do conjunto de backup a ser usado. Ou seja, qual conjunto de backup usar no arquivo (um arquivo pode ter vários conjuntos de backup). Obter uma lista de conjuntos de backup
Você pode usar
RESTORE HEADERONLY
para obter uma lista de conjuntos de backup no arquivo. Mais especificamente, ele retorna um conjunto de resultados de informações de cabeçalho de backup para todos os conjuntos de backup. Exemplo:
RESTORE HEADERONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Isso retorna muitas colunas, então não vou apresentá-las todas aqui.
Uma das colunas é chamada Posição . Isso deve ser usado com o
FILE =
opção ao restaurar o banco de dados. Exemplo com mais opções
Aqui está um exemplo com mais opções:
RESTORE DATABASE [WideWorldImporters]
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak'
WITH FILE = 1,
MOVE N'WWI_Primary' TO N'/var/opt/mssql/data/WideWorldImporters.mdf',
MOVE N'WWI_UserData' TO N'/var/opt/mssql/data/WideWorldImporters_UserData.ndf',
MOVE N'WWI_Log' TO N'/var/opt/mssql/data/WideWorldImporters.ldf',
MOVE N'WWI_InMemory_Data_1' TO N'/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1',
NOUNLOAD,
STATS = 5;
Na verdade, esse é o script que o Azure Data Studio gerou para mim quando usei a interface GUI para iniciar uma operação de restauração. Ao fazer isso, o Azure Data Studio oferece a opção de executar a restauração imediatamente ou gerar um script com o código T-SQL que você pode executar posteriormente.
Neste caso, o script usa o
MOVE
argumento para mover cada nome de arquivo lógico no arquivo de backup para o local do arquivo físico especificado no sistema operacional. Nesse caso, o arquivo .bak usou um local de arquivo físico diferente (e usou caminhos de arquivo do Windows) e, portanto, isso teve que mudar para se adequar ao meu sistema. Veja abaixo uma explicação de como obter essas informações. O
NOUNLOAD
é realmente uma opção de fita. Ele garante que a fita não seja descarregada da unidade após a conclusão da restauração. Dado que eu não estava restaurando da fita, essa opção foi ignorada. As
STATS
O argumento permite avaliar o progresso da operação de restauração. Ele especifica que uma mensagem será exibida toda vez que outra porcentagem for concluída. Se você não incluir um valor percentual aqui, o SQL Server exibirá uma mensagem após a conclusão de cada 10%. RESTAURAR ARQUIVOS SOMENTE
Se você quiser criar uma instrução como a anterior, que usa o comando
MOVE
argumento para mover cada nome de arquivo lógico no arquivo de backup, para o local do arquivo físico especificado no sistema operacional, você pode usar RESTORE FILELISTONLY
para retornar os nomes de arquivos lógicos (e mais). RESTORE FILELISTONLY
retorna um conjunto de resultados contendo uma lista do banco de dados e arquivos de log contidos no conjunto de backup. Aqui está um exemplo usando o mesmo arquivo .bak WideWorldImporters do exemplo anterior:
RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/Bak/WideWorldImporters-Full.bak';
Resultado (usando saída vertical):
-[ RECORD 1 ]------------------------- LogicalName | WWI_Primary PhysicalName | D:\Data\WideWorldImporters.mdf Type | D FileGroupName | PRIMARY Size | 1073741824 MaxSize | 35184372080640 FileId | 1 CreateLSN | 0 DropLSN | 0 UniqueId | 8d30f4f9-a463-404f-805a-9bd1c634b66b ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 11993088 SourceBlockSize | 512 FileGroupId | 1 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 2 ]------------------------- LogicalName | WWI_UserData PhysicalName | D:\Data\WideWorldImporters_UserData.ndf Type | D FileGroupName | USERDATA Size | 2147483648 MaxSize | 35184372080640 FileId | 3 CreateLSN | 37000000095200001 DropLSN | 0 UniqueId | 28d406e0-78ff-4400-9a4b-3a05d136b1f3 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 434962432 SourceBlockSize | 512 FileGroupId | 2 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 3 ]------------------------- LogicalName | WWI_Log PhysicalName | E:\Log\WideWorldImporters.ldf Type | L FileGroupName | NULL Size | 104857600 MaxSize | 2199023255552 FileId | 2 CreateLSN | 0 DropLSN | 0 UniqueId | 6ac6807e-8774-415b-8efc-e8c569b0855e ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 0 SourceBlockSize | 512 FileGroupId | 0 LogGroupGUID | NULL DifferentialBaseLSN | 0 DifferentialBaseGUID | 00000000-0000-0000-0000-000000000000 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL -[ RECORD 4 ]------------------------- LogicalName | WWI_InMemory_Data_1 PhysicalName | D:\Data\WideWorldImporters_InMemory_Data_1 Type | S FileGroupName | WWI_InMemory_Data Size | 0 MaxSize | 0 FileId | 65537 CreateLSN | 624000000336200003 DropLSN | 0 UniqueId | f65663c8-a250-433e-bbe6-e13a5599a607 ReadOnlyLSN | 0 ReadWriteLSN | 0 BackupSizeInBytes | 980090880 SourceBlockSize | 512 FileGroupId | 3 LogGroupGUID | NULL DifferentialBaseLSN | 626000002440500037 DifferentialBaseGUID | 0c5a4141-4a09-4b31-8c83-217870278065 IsReadOnly | 0 IsPresent | 1 TDEThumbprint | NULL SnapshotUrl | NULL
Assim, podemos ver que os locais físicos desse arquivo usam caminhos de arquivo do Windows. Por exemplo, o primeiro (com um nome lógico de WWI_Primary ) tem um local físico de D:\Data\WideWorldImporters.mdf .
No meu caso, restaurei o banco de dados para o SQL Server para Linux (executando em um contêiner Docker no meu Mac), então, quando restaurei esse arquivo .bak no meu sistema, tive que alterar os caminhos físicos para se adequar ao meu sistema.
Claro, você também pode alterar os caminhos do arquivo ao restaurá-lo em uma máquina Windows, se necessário.
A Sintaxe Completa
Fazer backup e restaurar bancos de dados pode ser bastante complicado, dependendo de seus requisitos. O
RESTORE
declaração é projetada para cobrir muitos cenários diferentes. Em particular, abrange os seguintes cenários de restauração:- Restaure um banco de dados inteiro a partir de um backup completo do banco de dados (uma restauração completa).
- Restaure parte de um banco de dados (uma restauração parcial).
- Restaure arquivos ou grupos de arquivos específicos em um banco de dados (uma restauração de arquivo).
- Restaure páginas específicas em um banco de dados (uma restauração de página).
- Restaure um log de transações em um banco de dados (uma restauração de log de transações).
- Reverta um banco de dados para o ponto no tempo capturado por um instantâneo do banco de dados.
A sintaxe completa contém muitas opções, portanto, se seus requisitos excederem o escopo deste artigo, confira a documentação da Microsoft para o
RESTORE
oficial sintaxe e explicação. Leia também a Visão geral de restauração e recuperação da Microsoft para obter uma visão geral das várias considerações e abordagens para restaurar bancos de dados.