2012-09-13 128 views
1

我一直在寻找命令将整个数据库数据(db2)导出到csv。将整个数据库数据(db2)导出到csv文件

我做了谷歌它,但它想出了db2出口命令,只有按表导出表。

例如

export to employee.csv of del select * from employee 

因此,我必须这样做,所有的表,它可以很烦人。有没有办法将db2中的整个数据库导出到csv? (或者说我可以与其他数据库使用其他格式)

谢谢

回答

2

,你可以读取SYSIBM.SYSTABLES表获得所有表的名称,并为每个表导出命令。

将导出命令写入SQL文件。

读取SQL文件,并执行导出命令。

修改为添加:警告 - 您的某些外键可能无法同步,因为在您阅读各种表格时可能会更改数据库。

+0

我曾想过这件事,但我希望开箱即用,而不是去创造属于自己的东西,即使是在bash中,我也可以做到。 另外我想根据它们属于的模式来过滤它,数据库X具有模式Y和Z,我只需要Y的表格 – 7dr3am7

+1

您必须决定您对哪些DB2模式感兴趣,并且必须创建* .csv文件名。你可以自己做。您可以在SYSIBM.SYSTABLES SELECT的WHERE子句中包含您感兴趣的模式。 –

0
# loop trough all the db2 db tables in bash and export them 
# all this is just another oneliner ... 
# note the filter by schema name ... 
db2 -x "select schemaname from syscat.schemata where 1=1 and schemaname like 'GOSALES%'" | { while read -r schema ; do db2 connect to GS_DB ; db2 -x "SELECT TABLE_NAME FROM SYSIBM.TABLES WHERE 1=1 AND TABLE_CATALOG='GS_DB' AND TABLE_SCHEMA = '$schema'" | { while read -r table ; do db2 connect to GS_DB; echo -e "start table: $table \n" ; db2 [email protected] "EXPORT TO $schema.$table.csv of del modified by coldel; SELECT * FROM $schema.$table " ; echo -e " stop table: $table " ; done ; } ; done ; } 


wc -l *.csv | sort -nr 
4185939 total 
446023 GOSALES.ORDER_DETAILS.csv 
446023 GOSALESDW.SLS_SALES_ORDER_DIM.csv