2017-09-20 14 views
4

私のアプリケーションは、私はこの方法でバックアップファイルから作成したデータベースを持っていますmdfコンテンツのみを調べるためにダミーファイルストリームファイルグループを作成することはできますか?

-- create empty db 
CREATE DATABASE MyNewDB 

-- restore on the empty db from file  
RESTORE DATABASE MyNewDB 
FROM DISK = 'c:\Temp\MyNewDB.bak' 
WITH REPLACE, 
MOVE 'MyDB_Data' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EXPRESS2008R2\MSSQL\DATA\MyNewDB.mdf', 
MOVE 'MyDB_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.EXPRESS2008R2\MSSQL\DATA\MyNewDB_log.LDF', 
MOVE 'MyDBFS' TO 'C:\FileStreamData\MyNewDBFS' 

私はブロブを保存するために、FILESTREAMファイルグループを使用し、基本的に私はそこにファイルを格納し、単一のテーブルとシングルを持っていますSQL Server Filestreamデータとして保存されているバイナリデータを含むblob列。

顧客はファイルストリームの一部が膨大となるアプリを使用し続けると、それはMDFできるが(500メガバイトとFileStreamは、私が「テーブルのみ」を転送する必要がある開発マシン上の問題をデバッグすることはしばしば

60ギガバイト

です"500MB")と "ブロブではない"( "60GB")。

私はデータベースを複製しているか、重複データベース上で、私はファイルのテーブルにNULLにBLOB列を設定し、その後、私は

CHCEKPOINT 

を実行してどのような私はその仕事を終えるためにガベージコレクタを待ちます私はバックアップを取って小さなファイルを持つことができます。

時々、私はバックアップのコピーを復元するためのスペースがないか、またはそれを行う時間がありません。

だから私は行うことができるのが大好きですが、私はすべてのWebでの解決策を見つけることができませんでしたものです:.mdf + .ldfのみ(データが含まれている)

  1. コピー

  2. どういうわけかクリートする.mdf.ldfと偽のFILESTREAMデータを添付し、 "偽のFILESTREAMデータ"(SQL Serverが接続時に受け入れるデータ)

  3. を作成テストデータベース

もちろん、私はブロブのクエリが動作するとは思っていませんが、他のテーブルのすべてのクエリはそうです。

私は必要なものを実現する方法がありますか(3Dパーティーツールを使用している可能性もありますか)?

+0

私の場合は、BLOBデータを別のデータベースに分割することを検討します。しかし、私はあなたの現在の構造や、それがどれほど実用的であるかは確かではありません。ただし、元のデータベースに新しいデータベースのテーブルを選択したり、複数のテーブルを再結合したりすることもできます。 – Greg

+0

データベースをスクリプト化する以外にも、かなり簡単なオプションはありません。管理スタジオは、実行時にテーブルを作成して値を挿入するスクリプトファイルを作成できます。たとえば、SQL 2014データベースからSQL 2008などにデータのコピーを取得する必要がある場合は、これが必要になる場合があります。一般に、スクリプト化されたものについてはいくつかの選択肢があります。 – Greg

+0

最後に、一部のファイルまたは一部のファイルグループの断片的なリカバリでこのリンクを表示することもできます。 https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/example-piecemeal-restore-of-only-some-filegroups-full-recovery-model – Greg

答えて

2

は、それが私だった場合、私は別のデータベースに超えるBLOBデータを壊す検討したい別のデータベースに

それを動かします。しかし、私はあなたの現在の構造や、それがどれほど実用的であるかは確かではありません。ただし、元のデータベースに新しいデータベースのテーブルを選択したり、複数のテーブルを再結合したりすることもできます。データベース

もう完全にきれいではありませんオプションのスクリプト

スクリプトにデータベースです。管理スタジオは、実行時にテーブルを作成して値を挿入するスクリプトファイルを作成できます。たとえば、SQL 2014データベースからSQL 2008などにデータのコピーを取得する必要がある場合は、これが必要になる場合があります。一般に、スクリプト化されたものについてはいくつかの選択肢があります。 (データベースを右クリックし、[タスク] - > [スクリプトの生成]を選択してウィザードをプルアップします。)データ

をエクスポートする代わりにバックアップを復元

、あなたはデータをエクスポートでき、インポートは、データを述べました。これを行うときに、どのデータが含まれるかを選択することになります。 blobテーブルをスキップするか、blobカラムをスキップすることができます。

ピースミール回復

最後に、あなたはまた、唯一のいくつかのファイルまたは唯一のいくつかのファイルグループの断片的な回復には、このリンクを見てみたいことがあります。オンラインhttps://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/example-piecemeal-restore-of-only-some-filegroups-full-recovery-model

自分のデータが破損していないのでファイルグループAとCの の復元、これらのファイルグループをバックアップから復元する必要はありませんが、彼らはそれらをオンラインで持ってリカバリする必要があります。 データベース管理者は、すぐにAとCを回復します。その後、バックアップしたいここ

理論的には
RESTORE DATABASE adb FILEGROUP='A', FILEGROUP='C' WITH RECOVERY 
RESTORE DATABASE adb FILEGROUP='B' FROM backup2b WITH RECOVERY 

あなたは空のデータベースのファイルストリームのファイルグループ、および復元する際に個別にそれを使用してみてください。しかし、私はこのルートがあなたのために働くかどうか分からない。あなたのブロブが同じデータベース内の同じテーブルにある場合、sqlはおそらくこれらをつなぎ合わせるためのいくつかのデータを格納します。復元時に、sqlはBLOBデータが一貫性および/または互換性があるかどうかをチェックします。

結論

は、私は本当に自分のテーブルにあなたの塊を破壊し、その後別のデータベースにそれらを移動すると、私はあなたの靴に何をするのかと思います。

これらのデータベースに直接接続することはできません。また、前述のスクリプトオプションやSQLタスクのインポートデータをオプションにすることもできます。

しかし、それはまだSQLエクスポートデータオプションがあります。必要なデータのみをエクスポートし、再インポートできるSSISパッケージを作成することができます。

関連する問題