Como faço para restaurar um backup do SQL que fiz há dois dias?

3

Desastres de banco de dados só acontecem com outras pessoas, certo? DIREITO?!?

Tenho certeza de que isso nunca aconteceu com ninguém desde o início do histórico do computador, mas, acredite ou não, estou tendo um problema com a restauração de um banco de dados. Talvez você possa ajudar. Eu espero que seja algo realmente simples.

Pergunta: Como faço para restaurar um backup que fiz há dois dias?

A GUI não parece estar funcionando e não consigo encontrar o TSQL correto para fazê-lo manualmente.

DETALHES

Eu fiz um backup de um banco de dados do SQL Server 2005 na segunda-feira, 9 de novembro de 2009, por volta das 9h30, usando o SQL Server Management Studio com as seguintes opções:

Modelo de recuperação: Simple Review Tipo de backup: completo
Componente de backup: banco de dados
Expira após: 0 dias
Destino: disco

Eu gostaria de restaurar esse backup, mas estou com alguns problemas.

Tentativa nº 1: use a GUI

Usou as seguintes opções na caixa de diálogo Restaurar banco de dados:

Para o banco de dados: [MyDatabaseName] Para um momento: '11 / 9/2009 12:00:00 0 milisegundos Do banco de dados: [MyDatabaseName] Sobrescreva o banco de dados existente: true. Estado de recuperação: deixe o banco de dados pronto para uso revertendo ...

Mensagem de erro: acesso exclusivo não pôde ser obtido porque o banco de dados está em uso. Tentei definir como single_user, reiniciar o serviço do SQL Server, etc. Nunca consegui descobrir como encerrar as conexões existentes na GUI do Database Restore.

Tentativa 2: usar TSQL

ALTER DATABASE [MyDatabaseName] SET SINGLE_USER COM ROLLBACK IMEDIATO GO

ALTER DATABASE [MyDatabaseName] SET RECUPERAÇÃO COMPLETA GO

RESTORE DATABASE [MyDatabaseName] FROM DISK = N'F: \ DatabaseLocation \ BackupName.bak ' COM ARQUIVO = 1, NOUNLOAD, RECOVERY, REPLACE, STATS = 10, STOPAT = '9 de novembro de 2009'

Mensagem: Este conjunto de backup contém registros que foram registrados antes do ponto designado no tempo. O banco de dados está sendo deixado no estado de restauração para que mais avanços possam ser realizados.

Eu tentei diferentes versões do acima com REPLACE, NORECOVERY, RECOVERY, etc. Preciso saber o tempo de backup para o milissegundo exato? E se sim, como eu acho isso?

    
por Jason 11.11.2009 / 19:00

5 respostas

2

Você não pode restaurar para apontar no tempo um banco de dados de recuperação SIMPLE. Somente os bancos de dados do modo de recuperação FULL ou BULK podem ser restaurados para apontar no tempo.

Veja Recuperando para um ponto específico no tempo para a sintaxe específica (a opção é especificada no tempo RESTORE LOG, não no tempo RESTORE DATABASE). Consulte também Como restaurar um banco de dados em um ponto dentro de um backup para obter pontos mais genéricos sobre o uso do STOP AT.

    
por 11.11.2009 / 19:06
1

Parece que você consertou, mas eu estava digitando minha resposta no StackOverflow e descobri que o qustion tinha sido fechado e movido para cá, então aqui está minha seqüência normal de comando de restauração de banco de dados em T_SQL se você precisar deles

Você precisará usar

RESTORE FILELISTONLY FROM DISK = 'X:\path\MyBackupFilename.BAK'

para obter os nomes dos dispositivos lógicos (que permanecerão inalterados se forem restaurados para o mesmo banco de dados do qual o backup foi feito, mas podem ser diferentes)

USE master  -- (Can't sit in the database whilst its being restored!)
GO

-- ALTER DATABASE MyDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
ALTER DATABASE MyDatabase SET OFFLINE WITH ROLLBACK IMMEDIATE
GO

RESTORE DATABASE MyDatabase
    FROM DISK = 'X:\path\MyBackupFilename.BAK'
    WITH
        REPLACE,
        NORECOVERY, -- Allow recovery of more DIFF/TLogs
        STATS = 10, -- Show progress (every 10%)
    MOVE 'MyLogicalName_data' TO 'X:\MSSQL\path\MyDatabaseFile.mdf', 
    MOVE 'MyLogicalName_log' TO 'X:\MSSQL\path\MyDatabaseFile.ldf'
GO

-- IF need to restore a later DIFF backup (made after this FULL backup):

RESTORE DATABASE MyDatabase
    FROM DISK = 'X:\path\MyDatabaseBackup_yyyymmdd_hhmm_Diff.BAK'
    WITH
        STATS = 10, -- Show progress (every 10%)
        NORECOVERY  -- Allow recovery of more TLog
GO


-- Optional restore of additional TRANSACTION LOGs
-- Repeat the following for each transaction log, in order

RESTORE LOG MyDatabase
    FROM DISK = 'X:\path\MyDatabaseBackup_yyyymmdd_hhmm_Trans.BAK'
    WITH
        NORECOVERY  -- Allo recovery of more TLogs
GO

-- When finished restoring all backup files "activate" the database
RESTORE DATABASE MyDatabase WITH RECOVERY
GO

-- **IF** Database was made with different Logical Names "rename" those now
ALTER DATABASE MyDatabase MODIFY FILE 
(NAME = 'LogicalNameFromBackup_data', NEWNAME = 'NewLogicalName_data')
GO
ALTER DATABASE MyDatabase MODIFY FILE 
(NAME = 'LogicalNameFromBackup_log', NEWNAME = 'NewLogicalName_log')
GO

-- If backup was made when DB in single / restricted user 
-- change access back to "normal"
-- ALTER DATABASE MyDatabase SET MULTI_USER, READ_WRITE WITH ROLLBACK IMMEDIATE
GO

Se o banco de dados foi restaurado em um servidor diferente, também será necessário sincronizar novamente os usuários do banco de dados com os logins do servidor.

    
por 11.11.2009 / 19:29
1

Você pode eliminar as conexões existentes com bastante facilidade da GUI. Basta ir para a gestão - > Monitor de atividade. Classifique por banco de dados e clique com o botão direito do mouse e mate aqueles que estão no banco de dados que você deseja restaurar.

[editar]

Isso tudo supõe que sua conta não está usando o mesmo banco de dados como o padrão, é claro! Se assim for, você vai querer mudar isso e reconectar primeiro.

    
por 11.11.2009 / 19:23
0

Você já tentou

1- Pare o Sql Server.

2- Exclua ou mova para outro local arquivos físicos do banco de dados com falha (.mdf e .log).

3- Inicie o Sql Server.

4- Carregar backup

    
por 11.11.2009 / 19:08
0

De qual banco de dados você está executando a restauração? Certifique-se de que é diferente do banco de dados que você está restaurando e que você não possui consultas ativas no Sql Management Studio.

    
por 11.11.2009 / 19:09