我在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#中,这是怎么做到的?我的第二个问题是:是否有更好的方法来实现更易于管理的日志文件的预期效果?
答案 0 :(得分:3)
使用Detach方法,您没有采取正确的方法。如果要保持日志文件较小,则需要定期(每15分钟)运行一次事务日志备份,有时会缩小文件。
如果您不关心时间点恢复(我会假设,因为您正在考虑分离db文件),只需打开数据库属性中的简单恢复模式。
此处可以找到恢复模式的概述。找出哪一个是正确的,但根本不需要c#代码来解决这个问题。 http://technet.microsoft.com/en-us/library/ms189275(v=sql.105).aspx