如何在不增加日志文件的情况下重新加载表?

时间:2010-06-28 14:49:04

标签: sql-server sql-server-2008 ssis logfiles

我有以下场景,每晚在SQL Server 2008中使用SSIS运行:

  • 创造一些温度。表,并从ODBC数据源导入数据
  • 导入完成后,删除现有表,并重命名temp。与删除表同名的表

在SSIS作业或SQL Server设置中,我需要做什么才能最小化日志记录?我不想关闭整个数据库的日志记录,因为只有这几个表每晚都会更新。

5 个答案:

答案 0 :(得分:1)

不幸的是,日志记录是数据库级别的设置。也许您可以将负载加载到单独的DB(使用SIMPLE或BULK LOGGED),然后假设该位成功,更新现有表。

答案 1 :(得分:1)

是否有可能将这些表拆分为另一个数据库?

您不仅可以单独管理日志记录设置,还可以管理日志和备份本身,因此您可以更加精细地控制它。

您可以在旧数据库中创建视图,这些视图指向您移动到新数据库的表,因此代码可能甚至不需要更改。

答案 2 :(得分:1)

更频繁地备份到事务日志可以保持大小,而不是要求增加日志大小。此外,我发现现在存储空间很便宜,您可以将LDF文件重定位到该驱动器,以方便可用空间。

答案 3 :(得分:1)

我认为在表加载之前立即将恢复模型更改为批量记录,然后切换回full将是最佳选择。在实施之前,请务必阅读要考虑的事项(http://msdn.microsoft.com/en-us/library/ms190203.aspx)。这可以通过ALTER DATABASE语句完成,这些语句可以添加到SSIS包的控制流中:

-- switch to bulk-logged mode
alter database <dbname,,> set recovery bulk_logged;

-- switch back to full
alter database <dbname,,> set recovery full;

虽然我也(并且目前)依赖更频繁的日志备份来保持日志驯服,但这更像是艺术而非科学。像大多数艺术品一样,一定会让你大吃一惊;不幸的是,这些惊喜更像是对牙医的访问:痛苦而且可能是可预防的:)。

我还想知道你是否在oledb目标组件上使用快速加载选项(假设你正在使用它)。这应该是最小的日志记录。在加载可能值得检查的数据时,有很多关于性能的white paper很好(准备好,这是一个很好的)。 。 。也许它可以给你一些更多的想法!

答案 4 :(得分:0)

我会将这些表放在另一个启用了简单恢复的数据库中,然后在另一个数据库中使用同义词使它们显示为本地。

这将使您可以利用其他人为这些表推荐的简单恢复模型和快速加载选项。