0

Visual Studio 2012 でプロジェクトを作成しました。このプロジェクトでは、1 つのデータベースを使用して、ファイルを呼び出します。

db.mdf、db_log.ldf、db_db_0.ldf (これがどこから来たのかわからない)

私がやろうとしているのは、.ldf ファイルのサイズが小さいままであることを確認することです。データベースのバックアップを作成し (.mdf を想定しています)、その時点から .ldf ファイルを再作成するように言われました。したがって、これらの手順を実行する前に発生したトランザクションはなくなり、.ldf ファイルは小さくなり、管理しやすくなります。

私が試したこと:

string detachQuery = String.Format("sp_detach_db @dbname='{0}'", _connection.Database);

using (var cmd = new SqlCommand(detachQuery, _connection))
{
    try
    {
        cmd.ExecuteNonQuery();
    }
    catch (Exception e) { }
}

ここでのアイデアは、データベースをバックアップした後に .ldf ファイルからデータベースを切り離し、それを新しい .ldf ファイルに再接続することですが、新しい .ldf ファイルを作成する方法はわかりません。これに関する問題は、次の例外が発生することです。

"Cannot detach the database because it is currently in use."

私の質問は、C# では、これはどのように行われるのでしょうか? 私の 2 番目の質問は、より管理しやすいログ ファイルの望ましい効果を達成するためのより良い方法はありますか?

4

1 に答える 1

3

Detach メソッドでは、正しいアプローチをとっていません。ログ ファイルを小さく保ちたい場合は、定期的に (15 分ごとに) トランザクション ログのバックアップを実行し、場合によってはファイルを圧縮する必要があります。

ポイントインタイムリカバリを気にしない場合(dbファイルのデタッチを検討しているため、私は推測します)、データベースのプロパティでシンプルリカバリモードをオンにしてください。

リカバリ モードの概要については、こちらを参照してください。どちらが正しいかを判断してください。ただし、この問題を解決するために C# コードはまったく必要ありません。 http://technet.microsoft.com/en-us/library/ms189275(v=sql.105).aspx

于 2013-10-03T22:25:47.947 に答える