db2 import export 到相同的 ixf 但不同的进程

Posted

技术标签:

【中文标题】db2 import export 到相同的 ixf 但不同的进程【英文标题】:db2 import export to same ixf but different processes 【发布时间】:2018-12-30 07:14:44 【问题描述】:

运行 db2 import/export 命令时,db2 是否检查文件锁?

我有 2 个进程,一个运行导出到 ixf,另一个进程导入 ixf。两者每天运行多次,导出过程是可变时间的,如果当前正在写入 ixf,我不想导入它。

【问题讨论】:

我一定误会了你:你实际上是在运行数据库导出而不将数据库切换到只读模式吗? 是的,数据库导出运行时没有运行 db2 set write suspend for database 【参考方案1】:

这可能是特定于实现细节的,因此请考虑一个更安全的设计,以便仅在成功完成导出后处理导入的开始,可能通过更智能的调度或不同的脚本编写。

如果您从 IXF 开始 Db2 导入,然后开始将 Db2 导出到同一个 IXF,那么当前支持的 Db2-LUW 客户端版本应该会导致导出失败,并显示本地的 SQL3001c(打开输出文件的 i/O 错误)文件系统。

如果您开始导出到 IXF,然后在导出完成之前从同一个 IXF 开始导入,那么当前支持的 Db2-LUW 客户端版本应该会再次导致导入失败并显示 SQL3030C(打开输入时出现 i/o 错误文件)至少对于本地文件系统。

但是,行为可能会因操作系统、托管输入/输出文件的文件系统、文件系统挂载选项等而有所不同,当然错误是不可避免的。出于这些原因,请考虑更稳健的设计。

【讨论】:

如果 db2 尝试导入从另一台服务器复制的 csv 文件,它会在导入时抛出错误吗?你有没有推荐任何关于 db2 和文件读/写冲突的书籍 您不应该使用 cmets 进行后续问题。我不知道任何 Db2 书籍会提供有关每个命令的文件打开模式的实现细节。一些网络复制工具使用临时文件名,只有在成功复制所有数据后才重命名。如果脚本能够提取内容,脚本也可以等待网络复制完成,并且只处理零返回码的文件。将内容推送到目标服务器的脚本可以在成功复制时推送标志文件,而在目标上运行的其他脚本只能在存在标志文件时执行。【参考方案2】:

认为这取决于导出查询中使用的隔离级别,以及为导入获取的锁。如果导入具有插入类型,则锁定在行上。如果导入具有替换类型,则锁定将在表级别。

但是,我没有任何引用来支持上一段。

【讨论】:

以上是关于db2 import export 到相同的 ixf 但不同的进程的主要内容,如果未能解决你的问题,请参考以下文章

DB2db2命令Export与Import

DB2用export命令导出表发生错误,错误提示如下

异构环境oracle数据库迁移——export和import

ES6:export和import

db2 backup export

db2中import的用法update