Gunnar Peipman's ASP.NET blog

ASP.NET, C#, SharePoint, SQL Server and general software development topics.

Sponsors

News

 
 
 
DZone MVB

Links

Social

Attaching SQL Server database without log file

I needed to attach SQL Server 2008 database to server. There was no log file, just mdf. I don’t know why but it is not very easy to get this database online. After some digging in internet I found solution.

I suggest you to read and try out example by Paul S. Randal TechEd Demo: Creating, detaching, re-attaching, and fixing a suspect database. I also suggest you to bookmark this posting, you never know…. I found simplest solution from stackoverflow: How to recover database from MDF in SQL Server 2005? It works also for SQL Server 2008.

  1. Create database with same name as MDF file you have.
  2. Stop SQL Server and swap MDF files. Make sure you also keep new database you just created.
  3. Start SQL Server. Database will be now in suspect state because log file is not correct.
  4. Run the following script:
     
    USE [master]
    GO
    ALTER DATABASE
    [MyDatabase] SET EMERGENCY
    GO
    ALTER DATABASE
    [MyDatabase] SET SINGLE_USER
    GO
    DBCC
    CHECKDB ([MyDatabase], REPAIR_ALLOW_DATA_LOSS)
    GO
    ALTER DATABASE
    [MyDatabase] SET MULTI_USER
    GO
    ALTER DATABASE
    [MyDatabase] SET ONLINE
    GO

When I ran this script I got the following output.


Msg 5173, Level 16, State 1, Line 1
One or more files do not match the primary file of the database. If you are attempting to attach a database, retry the operation with the correct files.  If this is an existing database, the file may be corrupted and should be restored from a backup.
Log file 'c:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS2008\MSSQL\DATA\MyDatabase_log.ldf' does not match the primary file.  It may be from a different database or the log may have been rebuilt previously.
Warning: The log for database 'MyDatabase' has been rebuilt. Transactional consistency has been lost. The RESTORE chain was broken, and the server no longer has context on the previous log files, so you will need to know what they were. You should run DBCC CHECKDB to validate physical consistency. The database has been put in dbo-only mode. When you are ready to make the database available for use, you will need to reset database options and delete any extra log files.
DBCC results for 'MyDatabase'.
Service Broker Msg 9675, State 1: Message Types analyzed: 14.
Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.
Service Broker Msg 9667, State 1: Services analyzed: 3.
Service Broker Msg 9668, State 1: Service Queues analyzed: 3.
Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.
Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.
Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.
Service Broker Msg 9605, State 1: Conversation Priorities analyzed: 0.

… Long list of GBCC messages …

CHECKDB found 0 allocation errors and 0 consistency errors in database 'MyDatabase'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.


You can see the error message in the output but that was no problem after all. My database is now online and works as expected.


kick it on DotNetKicks.com pimp it Progg it Shout it

Comments

Manh Le said:

I tried it your way , however it doesnt work , Im using SQL 2008 ^_^

# December 17, 2009 10:56 AM

DigiMortal said:

Are you sure you didn't miss some important steps? Can you describe what you did and at what point you faced the problems?

# December 17, 2009 12:38 PM

Brian said:

This worked for me.  Thank you.  

My server crashed and the _log file was corrupted.  I followed these exact instructions and my 1.6 GB _mdf file data is back working again. /phew

# July 7, 2011 2:30 AM

jo said:

hi it is not working for me also. Could you please help me. it is a bit important for me.

i have done everything that you have mentioned. when i run your script i even got the same error message. After that, when i clicked on the database i am getting this error.

the database is not accessible.

# July 27, 2011 10:32 PM

P M Sabuwala said:

Thanks Sir, This work with me.

# August 29, 2011 3:12 AM

Jamie said:

This was a lifesaver.  Thanks for posting!

# December 14, 2011 11:31 AM

Sergey said:

Thanx for the post!

In my case, I had to rearrange steps a bit to make it work (my DB has neverending "in recovery" state):

1.Create database with same name as MDF file you have.

USE [master]

GO

ALTER DATABASE [MyDatabase] SET EMERGENCY

GO

ALTER DATABASE [MyDatabase] SET SINGLE_USER

GO

2.Stop SQL Server and swap MDF files. Make sure you also keep new database you just created.

3.Start SQL Server. Database will be now in suspect state because log file is not correct.

4.Run the following script:

USE [master]

DBCC CHECKDB ([MyDatabase], REPAIR_ALLOW_DATA_LOSS)

GO

ALTER DATABASE [MyDatabase] SET MULTI_USER

GO

ALTER DATABASE [MyDatabase] SET ONLINE

GO

and it works!

# December 24, 2011 6:24 AM

ana said:

Thank you so much! You saved me!

# March 8, 2012 7:27 AM

SimonP said:

You can attach a data file without the log file as follows.  Right-click at the database level and select "Attach...".  In the "Attach Databases" window, click "Add" and select the MDF file.  In the "Database details" box click on the log file and click "Remove".  You can then click "OK" and a new log file will be created.  

# April 18, 2012 4:53 AM

Jurica1609 said:

after swapping MDF file, you must delete LDF file and the start sql server.

# July 26, 2012 3:29 AM