2013-10-03 100 views
0

我有在Visual Studio 2012使用一个数据库文件的项目,我们会打电话给管理SQL日志文件大小

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

+1

“小”是什么意思?现在有多大,数据文件有多大? – RBarryYoung

+0

@RBarryYoung,我真的不确定。此代码尚未投入生产,目前我们还没有正确的测试数据来投入此数据库。这个想法是采取数据库的备份,但是我的项目经理常常说需要备份,因此不需要使用.ldf文件。我不知道他们为什么要这样做,我不熟悉这种类型的数据库维护。我对数据库的使用经验是在使用SQLite的移动应用程序中,所以这对我来说很新。 – jeffmcnd

回答

3

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

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

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

+0

在我寻找答案时,我遇到了使用简单恢复模型的想法。我不确定它是否符合项目要求,但我一定会把它作为一个想法。谢谢。 – jeffmcnd