2012-11-20 55 views
0

这个问题将成为关于SSIS项目中型进口项目最佳实践的纯粹组织问题。组织200多张桌子导入项目的最佳做法

因此,我有源数据库,不断充实新数据。然后我有一个临时数据库,我有时会从源数据库加载数据,以便我可以处理源数据库的副本并迁移当前系统。我实际上使用一个SSIS Visual Studio项目来导入这些数据。

我的问题是,我意识到我的项目的实际设计并非真正最佳,现在我想将此项目移动到SQL Server,以便我可以安排导入而不是手动运行Visual Studio项目。这意味着实际的项目需要进行清理和优化。

所以基本上,对于每个表,过程很简单:截断表,从源中提取并加载到目标中。我有大约200张桌子。由于源数据库一次仅接受一个连接,所以无法并行提取。那么你将如何设计这样一个项目?

我从微软的文档中看到,他们推荐每个软件包使用一个数据流,但管理200个不同的软件包似乎是不可能的,尤其是我将不得不链接进行调度。在另一方面一个封装与200的数据流似乎unamangeable太...


编辑21/11:

第一apporach我想,当启动该项目是自动提取我的表来使用通过在表名列表上迭代。如果我的源表和目标表具有所有相同的模式对象名称,但来自不同供应商(BTrieve和Oracle)的源数据库和目标数据库也具有不同的命名限制,那么结果可能会很好。例如,BTrieve不保留名称并允许超过30个字符名称,而Oracle不包含这些名称。所以这就是我如何用半自动列映射手动创建200个数据流(大部分是自动的)。

当为目标数据库生成CREATE TABLE查询时,我创建了一个可重用的C#库,其中包含用于生成新模式对象名称的方法,以防万一该方法可能自动化。如果有任何自定义工具来生成可以使用外部.NET库的软件包,那么这可能会有所斩获。

回答

0

基本上可以创建10个子包每一个都具有20个数据流的任务,并创建一个主包裹其触发这些子pkgs.Using parent to child configuration创建.DEFINE优先约束单个XML file配置文件在主以串行方式执行包PKG。通过这种方式,与具有200个数据流任务的200个包或单个包相比,可维护性会更好。

0

以下链接可能对您有用。

Single SSIS Package for Staging Process

希望这有助于!

+0

这实际上是我开发这个项目时想要使用的第一种方法,所以一切都会自动进行。但问题是我的源代码(BTrive)和登台(Oracle)具有非常不同的模式对象命名约定,因此无法自动映射列名称(例如,源数据库中的“时间”在我的目标中变为“TIME_” DB,因为“TIME”是Oracle中的保留字)。因此,所有这些数据流都必须手动配置。 – Ucodia

2

你看过BIDS Helper的BIML(商业智能标记语言)作为一个包生成工具吗?我用它来创建多个包,它们都遵循相同的基本截断 - 提取加载模式。如果您需要比BIML内置的智能略高一些,那么可以使用BimlScript,它可以将C#代码嵌入到处理中。

从您的问题描述中,我相信您可以编写一个BIML文件并生成两百个单独的包。你可以用它来生成一个包含两百个数据流任务的包,但我从来没有尝试过推动SSIS。

+0

谢谢你,我会仔细看看。我更新了我的原始问题,以便与您描述的场景相匹配。 – Ucodia

相关问题