SQL Server 2000 - Restaurando .MDF Usando sp_attach_single_file_db falha com erro

3

Como mais de uma pessoa estava se intrometendo no banco de dados, perdemos nossos arquivos de log de transações e, consequentemente, perdemos o banco de dados. Felizmente, temos o arquivo MDF ainda perfeitamente intacto, e não estamos preocupados com as transações perdidas, já que elas eram apenas transações de 'delete'.

Eu fiz algumas pesquisas, e descobri que o comando sp_attach_single_file_db é muito bem feito para isso, e o sql server foi encerrado antes do arquivo ser removido. Eu usei este comando:

EXEC sp_attach_single_file_db @dbname = 'RecoveredDatabase',
@PhysName = 'E:\SQL Data\AerationBasinsTrend_data.mdf'

Onde 'RecoveredDatabase' é meu novo banco de dados, e 'E: \ SQL DATA \ AerationBasinsTrend_Data.mdf' é o arquivo .mdf do phyiscal. Eu recebo um erro quando executo isso. O servidor relata isso:

Server: Msg 1813, Level 16, State 2, Line 1

Could not open new database 'RecoveredDatabase'. CREATE DATABASE is aborted.

Device activation error. The physical file name 'E:\SQL Data\AerationBasinsTrend_Log.LDF' may be incorrect.

Device activation error. The physical file name 'C:\SQL Backup\TransLog' may be incorrect.

Tanto quanto eu sei, este comando deve criar um novo arquivo ldf se o antigo não estiver presente. O que estou perdendo?

    
por crazytreeboy 11.05.2011 / 01:18

1 resposta

4

Você pode experimentar:

  1. Create a new database with the same name and same MDF and LDF files

  2. Stop sql server and rename the existing MDF to a new one and copy the original MDF to this location and delete the LDF files.

  3. Start SQL Server

  4. Now your database will be marked suspect

  5. Update the sysdatabases to update to Emergency mode. This will not use LOG files in start up

Sp_configure "allow updates", 1
go
Reconfigure with override
GO
Update sysdatabases set status = 32768 where name = "BadDbName"
go
Sp_configure "allow updates", 0
go
Reconfigure with override
GO
  1. Restart sql server. now the database will be in emergency mode

  2. Now execute the undocumented DBCC to create a log file

DBCC REBUILD_LOG(dbname,'c:\dbname.ldf') -- Undocumented step to create a new log file.

(replace the dbname and log file name based on your requirement)

  1. Execute sp_resetstatus

  2. Restart SQL server and see the database is online.

Fonte

    
por 11.05.2011 / 01:35

Tags