Confirmei por meio de testes que clicar no ícone de atualização (uma ou mais vezes) para o nó do banco de dados de uma instância do SQL Server observada no SQL Server Management Studio (SSMS 2012) faz com que meu software de restauração de banco de dados de terceiros falhe. Se o ícone de atualização não for clicado, a restauração será bem-sucedida.
Minha pergunta: o que ocorre no mecanismo do SQL Server (ou no banco de dados msdb) quando o ícone de atualização é clicado?
Atualização (14h36) Quando ocorre a falha, um banco de dados é deixado em um estado de restauração. O erro específico é "O banco de dados não pode ser recuperado porque o log não foi restaurado."
Atualização (14h48) O software de restauração de banco de dados de terceiros é orientado por GUI. Um script de restauração não está disponível para postagem. Vou capturar os comandos via Profiler.
Atualização (15h30) - script de restauração capturado do Profiler (sem atualização do SSMS)
select name, physical_name from model.sys.database_files
select name from master..sysdatabases where name = 'DC_EARTH001'
select DatabaseProperty( 'DC_EARTH001', 'IsInLoad' )
select database_id from master.sys.databases where name ='DC_EARTH001'
select DatabaseProperty( 'DC_EARTH001', 'IsSuspect' )
select DatabaseProperty( 'DC_EARTH001', 'IsShutdown' )
select name, physical_name from model.sys.database_files
RESTORE DATABASE [DC_EARTH001] FROM VIRTUAL_DEVICE='MVD_SQLAgent-DC_EARTH001__a6d9fb41_c3fc_4b00_a78e_596dd32fc149_' WITH SNAPSHOT, NORECOVERY, MOVE 'DC_EARTH001' TO 'X:\DC_EARTH001.mdf', MOVE 'DC_EARTH001_log' TO 'Y:\DC_EARTH001_log.ldf'
select name, physical_name from model.sys.database_files
select name from master..sysdatabases where name = 'DC_EARTH002'
select DatabaseProperty( 'DC_EARTH002', 'IsInLoad' )
select database_id from master.sys.databases where name ='DC_EARTH002'
select DatabaseProperty( 'DC_EARTH002', 'IsSuspect' )
select DatabaseProperty( 'DC_EARTH002', 'IsShutdown' )
RESTORE DATABASE [DC_EARTH002] FROM VIRTUAL_DEVICE='MVD_SQLAgent-DC_EARTH002__584bf879_215d_4c15_b7ad_230ecab60488_' WITH SNAPSHOT, NORECOVERY, MOVE 'DC_EARTH002' TO 'X:\DC_EARTH002.mdf', MOVE 'DC_EARTH002_log' TO 'Y:\DC_EARTH002_log.LDF'
select name from master..sysdatabases where name = 'DC_EARTH003'
select name, physical_name from model.sys.database_files
select DatabaseProperty( 'DC_EARTH003', 'IsInLoad' )
select database_id from master.sys.databases where name ='DC_EARTH003'
select DatabaseProperty( 'DC_EARTH003', 'IsSuspect' )
select DatabaseProperty( 'DC_EARTH003', 'IsShutdown' )
RESTORE DATABASE [DC_EARTH003] FROM virtual_device = 'DC_EARTH003_00__416c5ed9_54e9_4ad1_9adc_3c7401c3fd57_' WITH NORECOVERY , MOVE 'DC_EARTH003_data' TO 'X:\DC_EARTH003.mdf', MOVE 'DC_EARTH003_log' TO 'Y:\DC_EARTH003.ldf'
exec xp_msver
select convert( char(100), ServerProperty('Edition') )
select is_srvrolemember( 'sysadmin', 'NT AUTHORITY\SYSTEM' )
exec sp_helpsort
select name, source_database_id from master.sys.databases order by name
select DatabaseProperty( 'DC_EARTH003', 'IsTruncLog' )
select status from sysdatabases where name='DC_EARTH003'
RESTORE DATABASE [DC_EARTH003] WITH RECOVERY
select DatabaseProperty( 'DC_EARTH001', 'IsTruncLog' )
select status from sysdatabases where name='DC_EARTH001'
RESTORE DATABASE [DC_EARTH001] WITH RECOVERY
select DatabaseProperty( 'DC_EARTH002', 'IsTruncLog' )
select status from sysdatabases where name='DC_EARTH002'
RESTORE DATABASE [DC_EARTH002] WITH RECOVERY
Atualização (07/04/2015 às 9h25) Solução proposta pela Microsoft: SQL Server 2012 SP1 CU1
- Desempenho lento ou bloqueio ao restaurar um banco de dados e executar instruções ao mesmo tempo no SQL Server 2012 (Cenário 2 http://support.microsoft.com/en-us/kb/2725950
Atualização (07/04/2015 às 9h25) Solução implementada: SQL Server 2012 SP1 CU15 http://support.microsoft.com/en-us/kb/3038001
- O problema está resolvido
O SQL Server 2012 SP1 CU15 ( http://support.microsoft.com/en-us/kb/3038001 ) resolve o problema (nenhum impasse ocorre como resultado da emissão de um comando durante uma restauração do banco de dados).