0

我在 Visual Studio 2012 中有一个项目,它使用一个数据库和我们将调用的文件

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# 中,这是如何完成的?我的第二个问题是:有没有更好的方法来实现更易于管理的日志文件的预期效果?

4

1 回答 1

3

使用分离方法,您没有采取正确的方法。如果要保持日志文件较小,则需要定期(每 15 分钟)运行事务日志备份,有时还需要缩小文件。

如果您不关心时间点恢复(我假设,因为您正在考虑分离 db 文件),只需在数据库属性中打开简单恢复模式。

可以在此处找到恢复模式的概述。弄清楚哪一个是正确的,但根本不需要 c# 代码来解决这个问题。 http://technet.microsoft.com/en-us/library/ms189275(v=sql.105).aspx

于 2013-10-03T22:25:47.947 回答