我需要将一个 dashdb 数据库中的一些表复制到单独的 dashdb 数据库中。通常我会从一个导出 CSV 文件并使用 Web 控制台将其加载到另一个中,但是一个表特别有一个 CLOB 列,因此我们需要导出到 ixf + lob 文件然后导入它。不幸的是,我看不到任何简单的方法来做到这一点,因为看起来 clpplus 只能导出到数据库所在的服务器(我无权访问),而且我看不到任何方法来获取它导出 lob 文件。有谁知道如何最好地做到这一点?
2 回答
另一种选择是将带有 LOB 的表导出到本地计算机,然后导入另一个 dashDB。
将 dashDB 表导出到本地客户端的一种方法是在客户端机器上的 DB2 命令行处理器 (CLP) 中运行 EXPORT 命令。为此,您需要安装 IBM Data Server Runtime Client,然后在客户端中对 dashDB 数据库进行编目,如下所示:
CATALOG TCPIP NODE mydash REMOTE dashdb-txn-small-yp-lon02-99.services.eu-gb.bluemix.net SERVER 50000;
CATALOG DATABASE bludb AS dash1 AT NODE mydash;
CONNECT TO dash1 USER <username> USING <password>;
现在,让我们导出名为“mytable”的表,以便将 LOB 列写入单独的文件:
export to mytable.del of del
lobfile mylobs
modified by lobsinfile
select * from mytable;
此导出命令生成文件 mytable.del 和 mylobs.001.lob。文件 mytable.del 包含指向文件 mylobs.001.lob 的指针,这些指针指定每个值的偏移量和长度。
如果 LOB 数据太大而无法放入单个文件中,则会创建其他文件 mylobs.002.lob、mylobs.003.lob 等。
请注意,导出的数据将以未压缩的形式从 dashDB 发送到您的本地客户端,这可能需要一些时间,具体取决于数据量。
如果 .DEL 和 .LOB 文件驻留在客户端计算机上,例如您的笔记本电脑或本地服务器,您可以使用 IMPORT 命令将这些文件摄取到具有 LOB 列的表中。在 CLP 中,您将首先连接到要加载到的 dashDB 数据库。
假设原始表已导出到文件 mytable.del 和 mylobs.001.lob,并且这些文件现在位于您的客户端计算机上的目录 /mydata 中。然后此命令会将数据和 LOB 加载到目标表中:
IMPORT FROM /mydata/mytable.del OF DEL
LOBS FROM /mydata
MODIFIED BY LOBSINFILE
INSERT INTO mytable2;
这个 IMPORT 命令可以在您的客户机上的 DB2 命令行处理器中运行。
如果 CLOB 值实际上小于 32K,您可以尝试将它们转换为 VARCHAR 值,作为您提供给 EXPORT 的 SELECT 语句的一部分。
如果您确实需要导出 LOB 文件,您可以将它们写入 dashDB 实例内的用户主目录,然后使用 /home REST API 下载文件,例如使用 curl:https ://developer.ibm.com/static/site -id/85/api/dashdb-analytics/