我是SQL Server管理的新手,目前正在寻求使用SSIS构建解决方案。 我的问题主要是关于“我的逻辑是否正确”以及关于最佳实践的一些较小的事情。
但是,让我给你画一幅图!
我有一个应用程序,它为我提供数据库视图,以减轻对该数据库的压力我想定期将这些视图的数据传输到辅助数据库/不同的实例,然后我可以在其上设置更具体的权限/转换/其他视图以该数据为基础。我最初提供的观点在如何获得它们方面几乎是固定的。
经过一番阅读后,我认为要走的路是使用SSIS。我开始构建我的包并使用“SSIS导入和导出向导”进行初始传输。
现在我的第一个问题是,这是传输数据的正确方法吗?SSIS是适合这项工作的工具吗?
其次,我注意到该向导发出了多个SQL Preperation任务和数据流任务。 对我来说,将每个成为表格的视图拆分为单独的SQL Preperation Task和单独的数据流任务只是为了保持清晰的图像和尽可能多的控制似乎是合乎逻辑的。虽然这需要一些时间来设置(> 100个视图/表),但它似乎比向导的方式更清晰,只需将它们中的一些组合在一起。
此外,由于预制任务已经创建了表,因此它们在第二次执行时失败,因为它们已经存在。除了为每个查询添加IFEXISTS子句之外,还有一个快速的工作原理吗?
如果我从错误的方向接近这个完整的解决方案,那么对此的任何想法都会受到赞赏或提示更好的解决方案。 我的想法是稍后向系统添加一些SSAS,并对这些表/数据提供一些数据分析。
谢谢!
答案 0 :(得分:1)
如果您要将数据传输到其他实例,那么SSIS可能是您最好的选择。您的下一个问题是确定您是想每次导入所有数据还是仅导入新的/更新的项目。
如果您每次都要导出所有数据,这会更加简单,并且您可以使用合适的维护窗口(例如隔夜)来完成此过程而不会影响最终用户,只需截断即可数据和重新加载。这显然会带来与增加数据传输量相关的后果。
如果您只想导出新的/更新的数据,现在需要确定是否可以实际计算出哪些行是新的还是不同的,而不是简单地将它们全部与辅助数据库中的行进行比较。理想情况下,您的源表将具有可靠的LastUpdateDate
列或更好的rowversion
列,使用该列可以导出所有行的值,这些值的值可能超出辅助实例中相应表中的值。
关于仅限更新路线,有很多要做的阅读,我强烈建议你avoid the Slowly Changing Dimension transformation like the plague。
当您想要在大量类似对象上执行简单操作时,您也可以认为有很多重复性任务,例如将ifexists
添加到帖子中的表创建中。解决这个问题的最佳方法是学习如何使用Biml基于元数据自动执行重复性任务。
祝你好运!