我有以下场景,每晚使用 SQL Server 2008 中的 SSIS 运行:
- 创造一些温度。表,并从 ODBC 数据源导入数据
- 导入完成后,删除现有表并重命名临时表。与删除的表同名的表
我需要在我的 SSIS 作业或 SQL Server 设置中做什么来最小化日志记录?我不想关闭整个数据库的日志记录,因为只有这几个表每晚都会更新。
我有以下场景,每晚使用 SQL Server 2008 中的 SSIS 运行:
我需要在我的 SSIS 作业或 SQL Server 设置中做什么来最小化日志记录?我不想关闭整个数据库的日志记录,因为只有这几个表每晚都会更新。
不幸的是,日志记录是数据库级别的设置。也许您可以将加载到单独的数据库中(使用 SIMPLE 或 BULK LOGGED),然后假设该位成功,更新您现有的表。
是否有可能将这些表拆分到另一个数据库中?
您不仅可以单独管理日志记录设置,还可以管理日志和备份本身,因此您可以更精细地控制它。
您可以在旧数据库中创建指向您移动到新数据库的表的视图,因此代码甚至可能不需要进行太多更改。
我认为在表加载之前立即将恢复模型更改为批量记录,然后切换回完整状态将是最佳选择。在实施之前,请务必阅读要考虑的事项 ( 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 目标组件上使用了快速加载选项(假设这就是您正在使用的)。这也应该是最低限度的日志记录。有一篇很好的白皮书,介绍了加载数据时的多种性能技术,这些技术可能也值得一试(做好准备,这很糟糕)。. . 也许它可以给你更多的想法!
更频繁地备份事务日志可以保持大小并且不需要增加日志大小。我还发现现在存储很便宜,您可以将 LDF 文件重新定位到该驱动器以腾出可用空间。
我会将这些表放在另一个启用了简单恢复的数据库中,然后在另一个数据库中使用同义词使它们看起来是本地的。
这将使您可以利用其他人为这些表推荐的简单恢复模型和快速加载选项。