我试图将一个 IBM DB2 UDB 服务器中特定模式的内容转储到一个 sql 文本文件中(很像 mysql 的 mysqldump 功能)。
我遇到了 db2look,但它只转储模式的结构(只有 ddl,没有 dml)。
那么我怎样才能完成我的事情呢?
jrh
您正在寻找的是db2move命令。对于特定模式,您应该使用“sn”开关。
因此,例如导出数据:
db2move [your_db_name] EXPORT -sn [your_schema_name]
db2move 有许多可用的选项和开关,具体取决于您想要做什么。
如果 db2move 不是您所需要的,您可以查看DB2 中可用的数据移动选项表。
您可以使用SQquirreL(一个用 Java 实现的 SQL 客户端)来完成此操作。在其“对象”树中,您将选择所有所需的表并从上下文菜单中选择“脚本 > 创建数据脚本”。
如果目标是将数据传输回另一个 DB2 数据库,您可以使用EXPORT
, 和相关的IMPORT
or命令。LOAD
实际上,您可以根据元数据生成语句SYSCAT.TABLES
出口
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 提供了一个工具,尽管我可能是错的。)
具有所有 DDL 备份的 Db2 模式:
我使用了下面的命令,它对我导出所有 DDL 很有用。
db2look -d CusDb -x -e -z CusSchema -o OutputFile
语法:db2look -d DbName -x -e -z SchemaName -o OutputFile_name
对于导入,稍微调整以使用负载有助于避免行被拒绝。
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