Restaure o arquivo Mdf de um disco rígido danificado

1

Eu tenho um banco de dados MS SQL Server 2005 no meu servidor de banco de dados. Recentemente, o servidor de banco de dados falhou, portanto, preciso mover o banco de dados para um novo servidor. Existe alguma maneira de restaurar o arquivo mdf de um disco rígido com falha, supondo que o arquivo não estava localizado em setores defeituosos?

    
por Graviton 31.07.2009 / 06:34

2 respostas

5

Sim. Se você tiver o arquivo ldf, terá uma chance maior de sucesso.

Basta pegar os arquivos mdf e ldf para copiá-los para o novo servidor. Em seguida, anexe o banco de dados à nova instância usando o procedimento armazenado do sistema sp_attach_db ou usando o SQL Server Management Studio.

Se você não tiver o arquivo ldf, poderá anexar o banco de dados usando apenas o arquivo mdf usando o procedimento armazenado do sistema sp_attach_single_file_db ou usando o SQL Server Management Studio.

    
por 31.07.2009 / 06:44
0

Você também tem um arquivo de backup recente? Não só você pode seguir as instruções do mrdenny, mas se isso falhar, você pode tentar restaurar a partir do último backup.

Se você não tiver backups (e esperamos poder restaurar seu banco de dados!), pense em implementar um trabalho de agente do SQL Server. Você pode fazer o script do backup do banco de dados e permitir que o agente seja executado em algum momento que você saiba que o servidor está sendo menos usado.

Se você tiver backups em todo o sistema, esse arquivo será selecionado, pois o SQL Server só bloqueará o arquivo enquanto o backup estiver sendo criado.

O script abaixo é para SQL Server 2005 SQL Server Agent. Isso mostra uma programação que é executada às 12h10 todos os dias e faz backup de um banco de dados chamado MyDB. Você pode ajustar conforme necessário. Execute isso dentro do seu estúdio de gerenciamento para entender como configurar um trabalho agendado no SQL Server Agent.

USE [msdb]
GO
/****** Object:  Job [My Backups]    Script Date: 07/31/2009 21:56:21 ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [[Uncategorized (Local)]]]    Script Date: 07/31/2009 21:56:21 ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'My Backups', 
        @enabled=1, 
        @notify_level_eventlog=0, 
        @notify_level_email=0, 
        @notify_level_netsend=0, 
        @notify_level_page=0, 
        @delete_level=0, 
        @description=N'Automate System Backups', 
        @category_name=N'[Uncategorized (Local)]', 
        @owner_login_name=N'Administrator', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Backup MyDB]    Script Date: 07/31/2009 21:56:22 ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Backup MyDB', 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, @subsystem=N'TSQL', 
        @command=N'BACKUP DATABASE [MyDB] TO  DISK = N''C:\Program Files (x86)\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\MyDB.bak'' WITH NOFORMAT, INIT,  NAME = N''MyDB Backup'', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
', 
        @database_name=N'master', 
        @flags=0
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'Daily Backups', 
        @enabled=1, 
        @freq_type=4, 
        @freq_interval=1, 
        @freq_subday_type=1, 
        @freq_subday_interval=0, 
        @freq_relative_interval=0, 
        @freq_recurrence_factor=0, 
        @active_start_date=20090731, 
        @active_end_date=99991231, 
        @active_start_time=1000, 
        @active_end_time=235959
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:
    
por 31.07.2009 / 14:29