代码之家  ›  专栏  ›  技术社区  ›  PHeiberg

如何将远程系统中的数据复制和验证到SQL Server中

  •  1
  • PHeiberg  · 技术社区  · 17 年前

    我想根据一些简单的验证逻辑(必填字段和数据格式)和一些更高级的数据层次结构检查来验证数据。导入的数据是分层的,其中一些数据之间存在父子关系。层次结构验证应检查暂存表和生产表中当前可用的数据,以确保导入完成后存在有效的层次结构。

    据我目前所知,生产表中的记录总数不会超过100万条,每批更新的项目可能最多只有几千行。

    我的问题是什么解决方案最适合导入数据?

    我想到了几个可能的解决方案:

    开始转移的方式:

    • 以固定的时间间隔放置临时表 开始某种形式的转移 插入。
    • 在将新数据插入MQ时,让MQ启动传输过程 桌子

    验证和传输数据的方法:

    • 创建SSIS作业
    • 创建存储过程
    • 自定义.NET代码

    1 回复  |  直到 17 年前
        1
  •  0
  •   Kristen    17 年前

    我们对这类工作采用封闭式流程。

    将数据从远程系统获取到暂存表中,导入到产品表中。

    如果您可以自由地向临时表添加列(远程端将忽略这些列),或者临时表具有唯一/不重复的标识或GUID,则可以创建并行表。

    理想情况下,在暂存表中创建行的例程将使用批次号,然后在成功时创建“批次号完成”记录。因此,您有一个信号量来停止导入,直到所有相关记录都已导入。

    (它们可以插入到事务块中,但您必须确信插入到暂存表中的所有进程都能做到这一点)。

    给定标识/GUID,我将创建一个1:1的“错误表”来存储描述导入失败的任何消息。

    您可以选择将故障行移动或复制到单独的故障暂存表中,这样主暂存表就不会被阻塞,并且更容易确保故障被分拣(我想是由人工分拣的)。

    话虽如此,以下是我们具体流程的更详细描述:

    插入此表,共个 刚出现的

    如果在源表中找不到stagin表行,我们会定期标记stagin表行Action=Deleted。

    在目标服务器上,检查数据并将其导入生产的例程仅在更新日期起作用(处理自上次更新日期起的所有内容)

    所有暂存表都位于一个单独的数据库中,该数据库具有最少的日志记录-如果恢复,该数据库将从“上次更新日期”自动刷新,因此我们的目标是最大限度地减少事务日志记录。我们没有;t将暂存表存储在生产数据库中(将有完整的事务日志记录),以避免TLOG膨胀

    我们以源数据库的方式传输数据,并且只在目标端进行数据操作。这样做的原因是,如果数据操作错误,并且我们修复了它,我们只需要在目标端重新运行它-源数据都存在于目标端的暂存表中。如果我们在源端进行操作,我们还必须重新传输所有数据。

    对于调试,在暂存表中更新日期很有帮助。我们经常会听到“为什么会有这种不同”,看到更新的on会告诉我们目标端的操作是错误的(即,我们有显示预期源数据的最新数据)还是源端(未找到最新数据!)