Como recuperar um banco de dados SQL usando a recuperação de linha de comando com o NMM

This article applies to This article does not apply to This article is not tied to any specific product. Not all product versions are identified in this article.

Instructions


Este artigo documenta o procedimento a ser seguido para uma restauração bem-sucedida de um banco de dados SQL que foi submetido a backup com o NMM usando VDI

A restauração de um banco de dados SQL a partir do backup usando a linha de comando talvez seja necessária se houver um problema com a restauração a partir da GUI (Networker user para GUI do SQL Server ou o plug-in SSMS). A tarefa de navegação na GUI está lenta ou o banco de dados necessário não está visível na GUI para restauração.


Normalmente, os seguintes savesets são criados quando é feito backup de um só banco de dados:

Um backup completo de um só banco de dados terá os seguintes savesets:
SQLbackups.001 Data Domain sql12srv1 25/05/2016 13:26:41 PM 119 MB 3209027663 cb completo MSSQL$FINANCE:testdb ==> Saveset
de backup completo SQLbackups.001 Data Domain sql12srv1 25/05/2016 13:29:16 PM 5 KB 3192250597 cb incr MSSQL$FINANCE: testdb ==> saveset de metadados.


Um backup incremental de um só banco de dados terá os seguintes savesets:
SQLbackups.001 Data Domain sql12srv1 25/5/2016 13:34:14 PM 1320 MB 3141919250 cb incr MSSQL$FINANCE:testdb ==> Saveset
de backup de log SQLbackups.001 Data Domain sql12srv1 25/5/2016 13:40:31 PM 5 KB 3125142409 cb incr MSSQL$FINANCE:testdb ==> saveset de metadados Observe que cada backup tem um saveset


de metadados, que sempre é criado como nível 'incr' e normalmente é muito pequeno. Esse saveset contém informações que possibilitam ver a listagem do banco de dados na GUI "Networker User for SQL Server". Esse saveset é criado com cada backup de VDI do SQL. No entanto, é possível que esse saveset não exista se o processo de clonagem manual não incluir incorretamente esse saveset para clonagem e se os savesets originais não existirem mais. Se esse for o caso, a restauração da linha de comando é a única opção.

Depois de determinar de qual backup você precisa se recuperar, você pode construir a linha de comando. Veja abaixo um exemplo de um comando de restauração:

nsrsqlrc -s nsr-server -c sql12srv1 -t "5/25/2016 1:34:14 PM" -d "MSSQL$FINANCE:testdb-recovered" -C " 'testdb' = 'c:\recover\testdb.mdf', 'testdb_log' = 'c:\recover\testdb_log.ldf', 'testdb_log1' = 'c:\recover\testdb_log1.ldf'" "MSSQL$FINANCE:testdb"

No comando

acima, a opção "s" é especificar o nome do servidor do Networker,
-c option é usado para especificar o client de origem (se a recuperação estiver sendo feita em um host diferente do client de origem),
-d especifica o DB de destino para o qual restaurar. Esse banco de dados não existirá. O processo de restauração criará o banco de dados na instância de destino.
-C especifica que esta é uma restauração de cópia. Os parâmetros após -C especificam os nomes lógicos dos arquivos no banco de dados.  Observe que esses nomes precisam corresponder exatamente aos nomes lógicos do banco de dados que está sendo restaurado.  Se o banco de dados existir, execute as propriedades no nome do banco de dados na GUI do SSMS e procure em 'Files'.

Se a restauração estiver sendo feita em um SQL Server em cluster, adicione o "-A "virtual-Server name" ao comando de restauração.

O último componente no comando é o nome do banco de dados que está sendo restaurado, por exemplo, MSSQL$
FINANCE:testdb

Se você não tiver certeza de quais são os nomes lógicos dos arquivos de banco de dados, poderá fornecer um comando incompleto como abaixo:

nsrsqlrc -s nsr-server -c sql12srv1 -t "5/25/2016 1:34:14 PM" -d "MSSQL$FINANCE:testdb-recovered" -C " 'mydb' = 'c:\ recover\testdb.mdf'" "MSSQL$FINANCE:testdb"
43708:(pid 2144):Hora de início: Wed May 25 15:37:42 2016
43621:(pid 2144):Computer Name: SQL12SRV1 Nome de usuário: administrator
NSR_CLIENT: sql12srv1.jets.local;
                  NSR_SERVER: nsr-server;
37725:(pid 2144):Recuperando o banco de dados 'testdb' em 'testdb-recovered' ...
142468:(PID 2144):[2292]nsr/db_apps/bsmsql/rcstripes.c(222): Localizando o backup do saveset MSSQL$FINANCE:/testdb.
37945:(pid 2144):Realocação ausente para testdb de arquivo lógico.
37945:(pid 2144):Realocação ausente para arquivo lógico testdb_log.
37945:(pid 2144):Realocação ausente para arquivo lógico testdb_log1.
37946:(pid 2144):Nenhum arquivo lógico chamado mydb no banco de dados
original 29401:(pid 2144):D Erro na lista de realocação de arquivos atabase. A lista de arquivos real é:
37947:(pid 2144):       testdb = C:\Arquivos de Programas\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\
testdb.mdf 37947:(PID 2144):       testdb_log = C:\Arquivos de Programas\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\testdb_log.ldf
37947:(PID 2144):       testdb_log1 = C:\Arquivos de Programas\Microsoft SQL Server\MSSQL11. FINANÇAS\MSSQL\DATA\testdb_log1.ldf

142468:(PID 2144):[2292]nsr/db_apps/bsmsql/rcstripes.c(222): Localizando o backup do saveset MSSQL$FINANCE:/testdb.
37945:(pid 2144):Realocação ausente para testdb de arquivo lógico.
37945:(pid 2144):Realocação ausente para arquivo lógico testdb_log.
37945:(pid 2144):Realocação ausente para arquivo lógico testdb_log1.
37946:(pid 2144):Nenhum arquivo lógico chamado mydb no banco de dados
original 29401:(pid 2144):D Erro na lista de realocação de arquivos do atabase. A lista de arquivos real é:
37947:(pid 2144):       testdb = C:\Arquivos de Programas\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\
testdb.mdf 37947:(PID 2144):       testdb_log = C:\Arquivos de Programas\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\testdb_log.ldf
37947:(PID 2144):       testdb_log1 = C:\Arquivos de Programas\Microsoft SQL Server\MSSQL11. FINANCE\MSSQL\DATA\testdb_log1.ldf

A operação de restauração foi concluída com erros. Consulte o arquivo de log de backup do módulo para obter detalhes. erro XBSA desconhecido 1169 (0x491) nsr/db_apps/bsmsql/rcovmain.cpp(442): Entrando em cleanUp(). NSR/db_apps/BSMSQL/rcovmain.cpp(500): Saindo da limpeza().
43709:(pid 2144):Tempo de parada: Qua 25 de maio 15:37:49 2016


***********************

No comando acima eu dei um nome lógico aleatório 'mydb' e o comando cospe o nome lógico real dos arquivos DB e a localização original deles. Você pode usar essas informações para criar seu comando de restauração. Observe que você precisa fornecer um caminho diferente para restaurar os dados. Você não pode e não deve fornecer o caminho de origem inicial no comando de restauração para evitar o risco de sobregravação dos dados existentes.

O tempo de backup para restauração pode ser obtido no comando mminfo. O horário de salvamento, conforme mostrado na saída, pode ser usado ou você pode relatar nsavetime e usar esse tempo.

por exemplo:

mminfo -avot -s nsr-server -q "client=sql12srv1,savetime >= yesterday"

SQLbackups.001 Data Domain sql12srv1 25/5/2016 13:26:41 PM 119 MB 3209027663 cb completo MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain sql12srv1 25/05/2016 13:29:16 PM 5 KB 3192250597 cb incr MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain sql12srv1 25/5/2016 13:34:14 PM 1320 MB 3141919250 cb incr MSSQL$FINANCE:testdb
SQLbackups.001 Data Domain sql12srv1 25/5/2016 13:40:31 5 KB 3125142409 cb incr MSSQL$FINANCE:testdb

mminfo -avot -s nsr-server -q "client=sql12srv1,savetime >= yesterday" -r volume,client,sumflags,sumsize,level,savetime(25),nsavetime,name

SQLbackups.001 sql12srv1 cb 119 MB full 25/5/2016 1:26:41 PM 1464197201 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 5 KB incr 25/5/2016 13:29:16 PM 1464197356 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 1320 MB incr 25/5/2016 13:34:14 PM 1464197654 MSSQL$FINANCE:testdb
SQLbackups.001 sql12srv1 cb 5 KB incr 25/05/2016 13:40:31 PM 1464198031 MSSQL$FINANCE:testdb

Observe que você pode especificar nsavetime/savetime do saveset de metadados ou do saveset de dados real. Qualquer uma delas funcionará.

Cenário 2:

Se os backups forem registrados no banco de dados de mídia sem os nomes do banco de dados, o tempo do backup necessário não será tão óbvio. Por exemplo, todos os backups de banco de dados têm os mesmos nomes de saveset abaixo:

SQLbackups.001 Data Domain sql12srv1 25/5/2016 16:43:15 PM 151 KB 2672168543 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 25/5/2016 16:45:26 PM 151 KB 2655391455 cb incr MSSQL$FINANCE:

Do acima não se pode dizer qual saveset tem o backup que você precisa.

Se o saveset de dados medata existir, os backups poderão ser navegados na GUI e você poderá encontrar o nome do banco de dados e o tempo de backup na GUI. Por exemplo, se o DB24 for necessário, a GUI mostrará o tempo de backup como "25/05/2016 16:49". 

kA5j0000000TNJYCA4_1_0

Se o saveset de metadados não estiver lá, você precisará executar o comando nsrinfo para localizar o horário de salvamento da restauração. e.; g se o mminfo mostra os savesets como abaixo:

SQLbackups.001 Data Domain sql12srv1 25/5/2016 16:43:15 PM 151 KB 2672168543 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 25/05/2016 16:45:26 PM 151 KB 2655391455 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 25/5/2016 4:47:34 PM 151 KB 2638614367 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 25/5/2016 16:49:42 PM 151 KB 2621837279 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 25/5/2016 16:51:50 PM 151 KB 2605060191 cb incr MSSQL$FINANCE:
SQLbackups.001 Data Domain sql12srv1 25/5/2016 16:53:58 PM 151 KB 2588283103 cb incr MSSQL$FINANCE:Execute

nsrinfo nos horários de salvamento conforme abaixo para obter informações sobre o banco de dados que faz parte do saveset:

nsrinfo -n mssql -t "5/25/2016 4:43:15 PM" sql12srv1
Scanning client 'sql12srv1' for savetime 1464208995(5/25/2016 4:43:15 PM) do namespace
mssql MSSQL$FINANCE:/ DB21
MSSQL$FINANCE:/DB21%/files.1464208995.1464209044
2 objetos encontrados

nsrinfo -n mssql -t "5/25/2016 4:49:42 PM" sql12srv1
scanning client 'sql12srv1' for savetime 1464209382(5/25/2016 4:49:42 PM) do namespace
mssql MSSQL$FINANCE:/DB24 MSSQL$FINANCE:/DB24
%/files.1464209382.1464209437
2 objetos encontrados

Como os savesets não mostram os nomes de banco de dados, isso pode ser um pouco de tentativa e erro no cenário em que o saveset de metadados não existe. Use o tamanho aproximado do banco de dados como uma pista para restringir a consulta nsrinfo a alguns savesets.

Article Properties
Article Number: 000022417
Article Type: How To
Last Modified: 09 Aug 2022
Version:  4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.