我需要将20万条记录从一个数据库(oracle)迁移到另一个数据库( Server)。我将使用SSIS ()管理迁移,并且已经创建了包。
记录引用数据库中的文档(带有HBLOB字段)。它们需要相当长的时间才能被迁移,因此我在SSIS中引入了变量,以便每次只迁移一个记录的子集,方法是使用一个将变量作为二进制文件的查询。以这种方式,我可以开始移动一些历史记录前的实际日期。
在开始时,我想通过I移动,例如以第一个块1'000为例,然后是第二个块等等。但这是不可能的,因为某些文档(在生产系统中)仍然可以更改,因此它们还不能移动。
在这里对比:
If "Status" is closed -> the document can be safely taken
(other statuses are draft, pending).
If "CreatedDate" < 2010 -> the document can be moved without taking care of status.但是,使用这种模式,很难跟踪已移动的文档(在第2点),因为其他文档在此期间可能处于关闭状态。
有人能建议一个更好的程序来移动这些记录而不冒重复或丢失任何数据的风险吗?
发布于 2013-05-08 08:38:04
尝试使用跟踪迁移的文档的暂存表,例如:
迁移表
--------------------------------------------------
| MigratedDocId | MigrationTimeStamp | Other |
--------------------------------------------------
| 1 | anydate | blah |
--------------------------------------------------
| 2 | anyotherdate | blah |假设您有一个文档ID (或任何其他PK),下面是主表
--------------------------------------
| DocID | Status | CreationDate |
--------------------------------------
| 1 | closed | 2011 | (migrated according to [2])
--------------------------------------
| 2 | closed | 2012 | (migrated according to [2])
--------------------------------------
| 3 | open | 2011 | (*)
--------------------------------------
| 4 | any | 2009 | (migrated according to [1])
--------------------------------------现在,假设(*)行从open更改为closed,首先需要将该行迁移到目标DB,检查迁移过程:
SELECT * FROM MAINTABLE
WHERE STATUS = 'closed'
AND M.DOCID NOT IN ( SELECT MIGRATEDDOCID FROM MIGRATIONTABLE )您可以以任何方式改进您的查询,可能是使用联接,也可以是使用get (我更喜欢第二个),但这里是获得(*)行的最简单方法。然后,在迁移之后,将DocID插入迁移表。这是暂存区域的原则之一,有时(但事实并非如此),您需要一个专用的DB来存储所有此类支持表和视图。
https://stackoverflow.com/questions/16435001
复制相似问题