web-dev-qa-db-ja.com

SQL Server 2008の.mdfおよび.ldfファイルからのデータベースの復元

何らかの理由で、SQL Server 2008 R2をアンインストールする必要がありますが、その前にデータベースの2つのファイル(.mdfおよび.ldf)をコピーしました

C:\ Program Files(x86)\ Microsoft SQL Server\MSSQL10_50.MSSQL2008\MSSQL\DATA

さて、質問は、新しくインストールしたSQL Server 2008 R2のこれらのファイルからデータベースを回復できるかどうかです。

はいの場合:どうすればこれを行うことができますか?

48
Ahsan Raza

はい、可能です。手順は次のとおりです。

  1. 最初に.mdfおよび.ldfファイルをC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\フォルダーに入れます

  2. 次に、SQLソフトウェアに移動し、[データベース]を右クリックして、[アタッチ]オプションをクリックして、[データベースのアタッチ]ダイアログボックスを開きます。

  3. [追加]ボタンをクリックして、C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\folderからデータベースファイルを開いて検索します

  4. 「OK」ボタンをクリックします。 SQL Server Management Studioは、.MDFファイルからデータベースをロードします。

99
sridhar

最初のグーグル検索でこの答えが得られました。そこで、新しいバージョンのattach、detachでこれを更新することを考えました。

Create database dbname 
On 
(   
Filename= 'path where you copied files',   
Filename ='path where you copied log'
)
For attach; 

さらに、データベースが完全にシャットダウンされ(データベースのシャットダウン中にアクティブなトランザクションがない場合)、ログファイルがない場合は、以下の方法を使用できます。SQLサーバーは新しいトランザクションログファイルを作成します。

Create database dbname 
    On 
    (   
    Filename= 'path where you copied files'   
    )
    For attach; 

トランザクションログファイルを指定しない場合、SQLはデフォルトのパスを検索し、データベースが正常にシャットダウンされたかどうかに関係なく、それを使用しようとします。

これは MSDN がこれについて言っていることです。

読み取り/書き込みデータベースに単一のログファイルがあり、ログファイルの新しい場所を指定しない場合、アタッチ操作はファイルの古い場所を検索します。見つかった場合、データベースが正常にシャットダウンされたかどうかに関係なく、古いログファイルが使用されます。ただし、古いログファイルが見つからず、データベースが正常にシャットダウンされ、アクティブなログチェーンがない場合、アタッチ操作はデータベースの新しいログファイルを作成しようとします。

このアプローチにはいくつかの制限があり、いくつかの副作用もあります。

1.アタッチおよびデタッチ操作は、両方ともデータベースのデータベース間の所有権チェーンを無効にします
2。信頼できるデータベースはオフに設定されています
3。読み取り専用データベースを切り離すと、差分バックアップの差分ベースに関する情報が失われます。

最も重要なのは、最近のバージョンのデータベースを以前のバージョンに接続できないことです。

参照:
https://msdn.Microsoft.com/en-in/library/ms190794.aspx

10
TheGameiswar

スクリプト(動作するスクリプト)から:

CREATE DATABASE Northwind
ON ( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Northwind.mdf' )
LOG ON ( FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA\Northwind_log.ldf')
GO

明らかにパスを更新します:

C:\Program Files\Microsoft SQL Server\MSSQL11.SQLEXPRESS\MSSQL\DATA

.mdfおよび.ldfが存在する場所。

9

答えがありますはい、可能です。

に行く

SQL Server Management Studio>データベースを選択>接続をクリック

次に、.mdfおよび.ldfファイルを選択して追加します。 OKをクリックします。

7
Adam John

これは私がやったことです

最初にcreate database xを実行します。 xは、古いデータベースの名前です(例:mdfの名前)。

次に、SQLサーバー構成を開き、SQLサーバーを停止します。

そこで、新しく作成したデータベースの場所を参照した後、プログラムファイルの下にあるはずです。私の場合は

C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQL\MSSQL\DATA

そして、新しく作成されたmdfおよびIdfを古いファイル/データベースで補充します。

その後、単にSQLサーバーとwallaを再起動してください:)

1
Alen.Toma
use test
go
alter proc restore_mdf_ldf_main (@database varchar(100), @mdf varchar(100),@ldf varchar(100),@filename varchar(200))
as
begin 
begin try
RESTORE DATABASE @database FROM DISK = @FileName
with norecovery,
MOVE @mdf TO 'D:\sql samples\sample.mdf',
MOVE @ldf TO 'D:\sql samples\sample.ldf'
end try
begin catch
SELECT ERROR_MESSAGE() AS ErrorMessage;
print 'Restoring of the database ' + @database + ' failed';
end catch
end

exec restore_mdf_ldf_main product,product,product_log,'c:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\product.bak'
0
Sarfaraz Kazi