2009-05-29 7 views
5

私はいくつかのデータが削除されたライブデータベースを持っており、そのデータを元に戻す必要があります。私はすでに別のマシンに復元されているそのデータベースの最新のコピーを持っています。バックアップ以降、ライブデータベースに無関係の変更が加えられたため、完全なリストアでライブデータベースを一掃する必要はありません。SQL Serverのデータベースバックアップからデータの一部を救済するにはどうすればよいですか?

必要なデータはわずかです - わずか12行ですが、それらのダース行にはそれぞれ外部キーを持つ他のテーブルからいくつかの行があり、それらのカップル行には、外部キーが指し示す外部キーを持つ行の数手で復元することは複雑になるでしょう。

理想的には、データベースのバックアップコピーに必要なダース行を選択し、それに依存するすべての推移的閉包と、それらに依存するすべてのデータをエクスポートし、それを他のものに触れることなくライブデータベースにインポートすることができます。

ここではどのような方法が最適ですか?ありがとう。

誰もがsp_generate_insertsについて言及しました。これを使用すると、アイデンティティ列がすべてを狂わせないようにするにはどうすればよいですか? IDENTITY INSERTをオンにするだけですか?

+0

+1、幸運! –

答えて

1

私は以前同様の状況に遭遇しましたが、手作業で行うことが私にとって最善の結果をもたらしたことがわかりました。

バックアップを2番目のサーバーに復元し、必要な情報を取得するためにクエリを実行した後、データを挿入するスクリプトを作成してsp_generate_insertsを作成し、リレーショナル行を持つテーブルごとに繰り返します。

私は合計で、2つの他のテーブルにリレーショナルデータを持つ約10のマスターレコードしか持っていませんでした。それはすべてのものを元の状態に戻すのに約1時間しかかかりませんでした。

UPDATE限り、あなたは所有者=「dboは」@指定すると、それがONに挿入するIDを設定して、あなたのためのスクリプトの末尾に、それをオフに設定します。、sp_generate_insertsについての質問に答えるために

+0

私は成功しました。 sp_generate_insertsは便利ですが、多くのカラムとnvarcharカラムを持つテーブルがあるテーブルでは失敗します。また、WHERE句には128文字までに制限されています。その結果、私はテーブルごとに少なくとも1つ手作業をする必要がありました。 –

1

手で復元する必要があります。 sp_generate_insertsは新しいデータに適しています。しかし、データを更新するために、私はそれをこのように実行します。

SELECT 'Update YourTable ' 
    +'SET Column1='+COALESCE(''''+CONVERT(varchar,Column1Name)+'''','NULL') 
    +', Column2='+COALESCE(''''+CONVERT(varchar,Column2Name)+'''','NULL') 
    +' WHERE Key='+COALESCE(''''+CONVERT(varchar,KeyColumn)+'''','NULL') FROM backupserver.databasename.owner.YourTable 

あなたも挿入をこのように作成することができますが、sp_generate_insertsが良いです。それらのアイデンティティー値、そして幸運を見てください(私はこの問題を以前に持っていて、今どこにいるのか知っています)。

便利なクエリ:SQL Server 2008の

--find out if there are missing rows, and which ones 
SELECT 
    b.key,c.key 
    from backupserver.databasename.owner.YourTable b 
     LEFT OUTER JOIN YourTable     c ON b.key=c.key 
    WHERE c.Key is NULL 

--find differences 
SELECT 
    b.key,c.key 
    from YourTable            c 
     LEFT OUTER JOIN backupserver.databasename.owner.YourTable b ON c.key=b.key 
    WHERE b.Key is not null 
     AND ( ISNULL(c.column1,-9999)  != ISNULL(b.column1,-9999) 
      OR ISNULL(c.column2,'~')  != ISNULL(b.column2,'~') 
      OR ISNULL(c.column2,GETDATE()) != ISNULL(b.column2,GETDATE()) 
      ) 
0

SQL Server Management Studioを使用すると、INSERT文として表データをエクスポートすることができます。 http://www.kodyaz.com/articles/sql-server-script-data-with-generate-script-wizard.aspxを参照してください。この方法では、sp_generate_insertsの柔軟性が欠けています(WHERE句を指定してテーブル内の行をフィルタリングすることはできません)が、製品の一部であるため信頼性が高くなります。

関連する問題