Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to attach mdf file to localDb throws error at least one file is required

Tags:

Here is error

TITLE: Microsoft SQL Server Management Studio

Attach database failed for Server '(localdb)\mssqllocaldb'. (Microsoft.SqlServer.Smo)

ADDITIONAL INFORMATION:

At least one file is needed for Database Attach. (Microsoft.SqlServer.Smo)

I am trying to attach this .mdf database file to my LocalDb instance. It's fine if I can to it to SQL Server too. I have .ldf file in the same directory

like image 322
Neeraj Sharma Avatar asked Oct 13 '16 11:10

Neeraj Sharma


People also ask

How do I connect to a MDF file in SQL Server?

Launch SSMS -> Connect to the SQL Server instance -> Right-click on Database -> Click Attach. In the new Locate Database Files window, browse the file system to locate the MDF file. Double-click it. The associated data files and log files are populated in the associated files grid view in the Attach Databases window.

How do I import MDF files into SQL?

In the 'Object Explorer' window, right-click on the 'Databases' folder and select 'Attach...' The 'Attach Databases' window will open; inside that window click 'Add...' and then navigate to your . MDF file and click 'OK'. Click 'OK' once more to finish attaching the database and you are done.

What is MDF file in Visual Studio?

You can use Visual Studio to open a project that contains a database file (. mdf) that was created by using an older version of SQL Server Express or LocalDB.

How can I run MDF file without installing SQL Server?

The only way to access MDF files without SQL server installed on your environment is to rely on a professional tool such as Kernel for SQL Recovery. It not only enables viewing of MDF files without SQL server, but also repairs corrupt, damaged, or inaccessible MDF files.


2 Answers

For completion's sake - Jim's comment solves (half) the problem and gets you going.

The other "half" of the problem is - what if you ultimately want to rename the physical database file? The answer is available in this CodeProject post.


Steps:

  1. ALTER DATABASE to set the new physical filenames (data file and log file)
    Won't take effect until SQL Server is restarted or the database taken offline and brought back online

    • ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName', FILENAME = '<Full-Path-Required>\NewDbName.mdf');
    • ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName_log', FILENAME = '<Full-Path-Required>\NewDbName_log.ldf');
  2. ALTER DATABASE again to set new logical file names (again, data and log files)
    Takes effect immediately

    • ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName', NEWNAME = 'NewDbName');
    • ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName_log', NEWNAME = 'NewDbName_log');
  3. Take offline and bring back online or restart SQL Server

    • Using SQL Server Management Studio:
      1. Right-click on the renamed database and click Take Offline under Tasks.
      2. Right-click on the (offline) database and click Bring Online under Tasks.
    • Using T-SQL:
      1. ALTER DATABASE [CurrentName] SET OFFLINE WITH ROLLBACK IMMEDIATE; (sets it to offline and disconnects any clients)
      2. ALTER DATABASE [CurrentName] SET ONLINE;

Full code:

-- Find "CurrentName" (without quotes) and replace with the current database name
-- Find "NewDbName" (without quotes) and replace with the new database name


USE [CurrentName];

-- Change physical file names:
ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName', FILENAME = '<Full-Path-Required>\NewDbName.mdf');
ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName_log', FILENAME = '<Full-Path-Required>\NewDbName_log.ldf');

-- Change logical names:
ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName', NEWNAME = 'NewDbName');
ALTER DATABASE [CurrentName] MODIFY FILE (NAME = 'CurrentName_log', NEWNAME = 'NewDbName_log');

-- Take offline and back online
USE [master]
GO
ALTER DATABASE [CurrentName] SET OFFLINE WITH ROLLBACK IMMEDIATE;
-- Then navigate to <Full-Path-Required> and rename the files
ALTER DATABASE [CurrentName] SET ONLINE;
like image 150
Jesse Avatar answered Sep 21 '22 14:09

Jesse


If you don't recall the previous filenames, open the .mdf file in a hex editor and at around offset 0x19D you'll see a UTF-16 (2 byte/char) string of that filename

like image 37
DeepSpace101 Avatar answered Sep 19 '22 14:09

DeepSpace101