DB2的SQL Dump

10

我想将一个 IBM DB2 UDB 服务器中特定 schema 的内容导出至 SQL 文本文件(类似于 mysql 的 mysqldump 功能)。

我找到了 db2look 工具,但它只能导出 schema 的结构(只有 ddl,没有 dml)。

那么我该如何实现呢?

jrh。

5个回答

10
你需要的是db2move命令。对于特定模式,你应该使用“sn”开关。
例如,要导出数据:
db2move [your_db_name] EXPORT -sn [your_schema_name]

根据您想要做什么,db2move有许多选项和开关可用。

如果db2move不完全符合您的需求,您可以查看DB2中可用的数据移动选项表格。


需要注意的一点是,db2move使用PC/IXL作为数据容器格式,不会生成SQL转储。我不确定问题提问者是否要求SQL转储,因为他熟悉这种方式,还是因为某种原因他需要一个带有INSERT的真正的SQL转储。如果是后者,db2move将无法帮助他。 - Tamas Czinege
您说得对,医生...我也不确定 OP 想要什么,所以为 DB2 的所有数据移动选项提供了链接。 - Michael Sharek

5
您可以使用Java编写的SQL客户端SQquirreL来完成此操作。在其“Objects”树中,选择所有所需的表并从上下文菜单中选择“Scripts > Create Data Script”。

嗯,我使用 Aqua Data Studio 完成了那个任务...它表现得非常好,谢谢 :) - jrharshath
1
不错,但对于一个足够大的数据集,它无法放入内存,这就不是一个选项。但可以用于较小的表格。 - egbokul

2
如果目标是将数据传输回另一个DB2数据库,您可以使用EXPORT和相关的IMPORTLOAD命令。
实际上,您可以基于SYSCAT.TABLES中的元数据生成语句。 EXPORT
   SELECT 'EXPORT TO /usr/data/SCHEMA/' || TABNAME || '.ixf OF IXF LOBS TO /usr/data/SCHEMA/lbos/ MODIFIED BY LOBSINFILE SELECT * FROM SCHEMA.' || TABNAME || ';'
     FROM SYSCAT.TABLES
    WHERE TABSCHEMA = 'SCHEMA'
 ORDER BY TABNAME

导入

   SELECT 'IMPORT FROM /usr/data/SCHEMA/' || TABNAME || '.ixf OF IXF LOBS FROM /usr/data/SCHEMA/lobs/ MODIFIED BY LOBSINFILE INSERT INTO SCHEMA.' || TABNAME || ';'
     FROM SYSCAT.TABLES
    WHERE TABSCHEMA = 'SCHEMA'
 ORDER BY TABNAME

如果你需要实际的插入脚本,那么你可能需要使用第三方工具(我不知道DB2是否提供这样的工具)。

1

备份所有DDL的Db2模式:

我使用下面的命令,成功地导出了所有DDL。

db2look -d CusDb -x -e -z CusSchema -o OutputFile

语法: db2look -d DbName -x -e -z SchemaName -o OutputFile_name 说明:此命令用于从指定的数据库中提取指定模式的DDL,并将其写入指定的输出文件。

0

对于导入,稍微调整使用load可以避免行被拒绝。

db2 -x "SELECT 'load FROM /usr/data/SCHEMA/' || TABNAME || '.ixf OF IXF LOBS FROM /usr/data/SCHEMA/ MODIFIED BY identityoverride INSERT INTO CFEXT.' || TABNAME || ';'FROM SYSCAT.TABLES WHERE TABSCHEMA = 'CFEXT' ORDER BY TABNAME" > /tmp/db2cfeimport.sql


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接