首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据库记录迁移算法

数据库记录迁移算法
EN

Stack Overflow用户
提问于 2013-05-08 07:26:59
回答 1查看 546关注 0票数 0

我需要将20万条记录从一个数据库(oracle)迁移到另一个数据库( Server)。我将使用SSIS ()管理迁移,并且已经创建了包。

记录引用数据库中的文档(带有HBLOB字段)。它们需要相当长的时间才能被迁移,因此我在SSIS中引入了变量,以便每次只迁移一个记录的子集,方法是使用一个将变量作为二进制文件的查询。以这种方式,我可以开始移动一些历史记录前的实际日期。

在开始时,我想通过I移动,例如以第一个块1'000为例,然后是第二个块等等。但这是不可能的,因为某些文档(在生产系统中)仍然可以更改,因此它们还不能移动。

在这里对比:

代码语言:javascript
复制
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.
  1. 在最初的情况下,我可以移动所有“旧”文档(在2010年之前创建)。

  1. 我将把所有处于“封闭”状态的文件移走。

  1. 在生活的那一天,我会迁移所有剩下的记录。

但是,使用这种模式,很难跟踪已移动的文档(在第2点),因为其他文档在此期间可能处于关闭状态。

有人能建议一个更好的程序来移动这些记录而不冒重复或丢失任何数据的风险吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-08 08:38:04

尝试使用跟踪迁移的文档的暂存表,例如:

迁移表

代码语言:javascript
复制
--------------------------------------------------
| MigratedDocId | MigrationTimeStamp    |  Other |
--------------------------------------------------
| 1             | anydate               |  blah  |
--------------------------------------------------
| 2             | anyotherdate          |  blah  |

假设您有一个文档ID (或任何其他PK),下面是主表

代码语言:javascript
复制
--------------------------------------
| 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,检查迁移过程:

代码语言:javascript
复制
    SELECT * FROM MAINTABLE
    WHERE STATUS = 'closed'
    AND M.DOCID NOT IN ( SELECT MIGRATEDDOCID FROM MIGRATIONTABLE )

您可以以任何方式改进您的查询,可能是使用联接,也可以是使用get (我更喜欢第二个),但这里是获得(*)行的最简单方法。然后,在迁移之后,将DocID插入迁移表。这是暂存区域的原则之一,有时(但事实并非如此),您需要一个专用的DB来存储所有此类支持表和视图。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16435001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档