2011-12-07 27 views
37

SQL Server 2008の.bakファイルを指定すると、トランザクションログなしで.bakファイルからデータベースを復元する方法はありますか?トランザクションログなしでSQL Serverデータベースを復元する

私が求めているのは、このデータベースのトランザクションログファイルサイズが膨大であることです。すぐに利用できるディスク容量を超えています。私はトランザクション・ログに関心がなく、未完了のトランザクションには関心がないので、通常はデータベースを復元してからログをゼロに縮小します。しかし、最初の場所でログを作成するのに十分なディスク容量がない場合、それは役に立ちません。私が必要とするのは、トランザクションログではなく.bakファイルからデータのみを復元するようにSQL Serverに指示する方法です。それを行う方法はありますか?

私は.bakファイルの生成を制御していないことに注意してください。これは外部ソースからのものです。したがって、.bakファイルを生成する前にトランザクションログを縮小することはオプションではありません。

+1

+1、良い質問! –

+0

特に、データベースに対する開発と手動テストを行い、定期的に交換する場合は、復旧時間も問題になります – Savage

答えて

2

これは実際にはServerFaultまたはDBAサイトの質問ですが、短い答えは「いいえ、完全な.bakファイルのみを復元できます(ファイルグループや断片的なリストアなどのエキゾチックなシナリオを除いて)」。あなたは "巨大な"という意味ではありませんが、ディスクスペースは安いです。より多くの追加が本当にオプションでない場合は、外部ソースからデータを取得する別の方法を見つける必要があります。

+0

十分に公正です。 – PhantomDrummer

6

いいえ、トランザクションログが必要です。

オプション1:

オプションは、上の十分なスペースを持っているマシンにそれを復元することであってもよいです。次に、リストアされたコピーで、ログを一括ログまたはシンプルログに変更し、ログを縮小し、この新しいコピーで別のバックアップ操作を行い、それを使用してより小さいトランザクションログでターゲットマシンにリストアします。

オプション2:また

、おそらく外部ソースでの接触はあなたにそれを送信する前に、トランザクションログを縮小する可能性があり(ログが原因の大きな取引の多くに大きい場合、これは動作しない場合があります) 。

ログファイルを縮小するコマンドの文書はavailable hereです。

+0

ありがとうございます。 .bakファイルについては何もできないので、十分なディスク容量を持つマシンを見つけることになるでしょう。 – PhantomDrummer

+5

興味のある方は、*なぜ* MSはトランザクションログではなくデータを復元するだけのオプションを提供していないのですか?私は、復元されたdbのTLが非常に大きい唯一の理由は、.bakファイルには、「復元するときにTLのために余分なスペースを確保してください」というフラグが含まれている必要があります。回復プロセスが原則としてそのようなフラグを無視できないべきである論理的理由。だから私はなぜそのオプションがないのか興味をそそられています。私の特定の.bakファイルでは、TLに必要なスペースは50GBですが、これはほぼ完全に空きスペースです。 – PhantomDrummer

2

.bakファイルの生成を制御できないため、これはうまくいかないかもしれませんが、ソースを壊してデータベースを切り離してから.mdfファイルのコピーを直接送信すると、 .mdfとサーバーは自動的に新しい空のトランザクションログファイルを作成します。

sp_detach_dbおよびsp_attach_db(または、SQL Serverのバージョンによっては、CREATE DATABASE database_name FOR ATTACH)を参照してください。

8

トランザクションログは、バックアップの不可欠な部分です。 SQL Serverにトランザクションログを無視するよう指示することはできません。トランザクションログファイルを同時に復元および縮小する方法はないからです。しかし、DBA postを参照してプロセスをハックすることはできますが、まったくお勧めしません。

また、サードパーティ製のツールを使用して復元することもできます。特に、多くの時間と時間を節約できる復元プロセスがあります。 ApexSQL Restore、RedGate仮想復元、Idera仮想データベースを参照してください。

免責事項:私はサポートエンジニアとしてApexSQLため

0

は、私は、これは今古いスレッドですけど、私はトランザクションログの破損の問題を抱えていた間、私はそれに出くわし、ここで私はせずに周りにそれを得た方法で働いここではすべてのデータの損失(!私もダウンタイムなければならなかった)

は私がやったことです: -

停止SQL Serverインスタンスのサービス が影響を受けるデータベースの.mdfファイルのファイルおよび.ldfファイル(のコピーを作成します.ndfファイルがある場合はコピーしてください!) - ちょうど確かに、あなたのために動作しない場合は、常にこれらを戻すことができます。

サービスを再開してください。

SQL管理スタジオにログインし、データベースモードをシンプルに変更してからフルバックアップを取ってください。

データベースタイプをもう一度変更して、もう一度フルバックアップを取ってから、トランザクションログバックアップを取ってください。

データベースを切り離します。

データベースを右クリックして[復元]をクリックし、ドロップダウンリストからデータベース名を選択し、作成された後の完全データベースバックアップを選択します(シンプルモードから取得したものではありません)。

復元をクリックすると、ログファイルが破損することなくすべて復元されます。

これはエラーなしで動作し、バックアップはすべて正常に機能し、トランザクションログエラーはこれ以上発生しませんでした。

関連する問題