Sql 如何将记录从一个DB2数据库移动到另一个DB2数据库?

Sql 如何将记录从一个DB2数据库移动到另一个DB2数据库?,sql,database,db2,archiving,Sql,Database,Db2,Archiving,通常,我们希望清理(删除)生产数据库(DB2)中的记录,并将它们移动到归档数据库(同样是具有相同模式的DB2数据库) 为了完成这个故事,我们的数据库中有很多外键约束。 因此,如果表b中的记录b有一个外键,用于表a中的记录a,并且我们要在生产数据库中删除记录a,那么也必须在生产数据库中删除记录b,并且必须在归档数据库中创建这两个记录 当然,不丢失任何数据是非常重要的。因此,我们不可能删除生产数据库中的记录,而这些记录永远不会插入归档数据库 最好的方法是什么 仅供参考,我已检查,建议的解决方案存在以

通常,我们希望清理(删除)生产数据库(DB2)中的记录,并将它们移动到归档数据库(同样是具有相同模式的DB2数据库)

为了完成这个故事,我们的数据库中有很多外键约束。 因此,如果表b中的记录b有一个外键,用于表a中的记录a,并且我们要在生产数据库中删除记录a,那么也必须在生产数据库中删除记录b,并且必须在归档数据库中创建这两个记录

当然,不丢失任何数据是非常重要的。因此,我们不可能删除生产数据库中的记录,而这些记录永远不会插入归档数据库

最好的方法是什么

仅供参考,我已检查,建议的解决方案存在以下缺点

  • 加载实用程序摄取实用程序导入实用程序:仅处理在存档数据库中插入记录的部分。它不包括全部动作
  • 导出实用程序:仅涵盖导出数据的方法(可能由导入实用程序导入*)
  • db2moverestore命令db2relocatedb、ADMIN\u COPY\u SCHEMA、ADMIN\u MOVE\u TABLE拆分镜像:如果您只想将满足特定条件的特定记录移动到存档数据库中,则不能选择
因此,根据我的研究,目前最好的解决方案似乎是一种内部开发的脚本,即

  • 导出要以IXF格式移动的记录
  • 在存档数据库中导入这些导出的记录
  • 删除生产数据库中的这些记录
  • 为了避免出现事务日志完整错误,此脚本应成批执行此操作(例如,50000条记录)


    为了在步骤3中没有外键约束错误:我们还必须确保在步骤1中,我们还将所有具有外键约束的记录导出到导出的记录中,并将所有具有外键约束的记录导出到这些记录中……

    有用于此的工具(如Optim Archive)这可能更好地满足您没有意识到的需求

    在此期间-查看联邦和工具
    asntdiff

    在存档数据库上,您可以定义与实时数据库的连接(
    CREATE SERVER
    )。使用此定义,您可以定义实时表的昵称(
    CREATE昵称
    )。使用这些昵称,您可以将适当的数据加载到存档表中。您可以使用您喜爱的数据移动实用程序-加载、导入、插入等

    加载后,您可以使用带有适当选择条件的asntdiff工具来验证表

    一旦您对两个位置的数据都存在感到满意,就可以删除实时数据库中的行

    对于外键关系-使用视图SYSCAT.TABDEP查找此类依赖项。您可以在存档数据库中将外键定义为“未强制”(或不定义它们),以避免上一过程中出现错误

    无论数据库是什么,数据归档都是一个大而常见的话题。您可能还想了解如何获得更好的性能和控制。

    询问“最佳”方法的问题用处有限,因为忽略了评估标准。 有时,技术人员和业务人员的评估标准不同

    有时,客户公司的多项政策可以确定此类标准,因此了解当地政策、程序或模式至关重要

    除了实施团队的技能水平和经验外,操作要求、安全要求和许可要求通常会影响方法

    有时,公司会有特定的标准化归档和删除工具,或有时受行业部门甚至行业特定监管要求影响的特定模式

    由于stackoverflow是一个面向编程的网站,像您这样的问题可以被认为是离题的,因为您询问的是关于哪种设计方法是可行的,而忽略了许多特定于您的公司/行业的上下文,这些上下文很可能会影响解决方案模式

    影响方法的一些典型要求或问题如下:

    • 本地安全要求是否允许数据离开Db2环境?(即存储在Db2表之外的磁盘上的数据)。有时这会限制导出或从文件/管道加载的使用)。在RDBMS之外,数据可能存在修改、检查或删除的风险(无论是意外的还是故意的)

    • 发生运行时错误时解决方案的可重启性。这通常是一项关键要求。在不同的物理数据库(即使是相同的RDBMS)之间复制数据时,存在许多可能的错误(网络错误、资源问题、并发问题、操作问题等)。解决方案必须保证故障后的任何重新启动从故障点恢复,还是必须进行清理并重新启动整个作业?答案可以决定设计

    • 如果两个数据库之间存在联合(或者如果可以在Db2许可条款中添加联合),那么这通常是推送或拉送内容的最简单实用的方法。本地表和远程表似乎位于同一个逻辑数据库中,这简化了该方法。数据永远不需要离开RDBMS。这还简化了失败作业的可重启性。如果需要,它还允许数据保持加密

    • 如果SQL复制或基于Q的复制获得许可,则可以将其配置为智能同步源表和目标表,并在适当配置的情况下尊重RI。这种方法需要大量的数据