EXPORT 实用程序概述
EXPORT 实用程序使用一条 SQL SELECT 语句或 XQUERY 语句将数据从数据库表提取到一个文件中。数据可以被导出到 DEL、IXF 或 WSF 文件中。建议在 export 中包括 MESSAGES 子句,以捕获导出过程中遇到的错误、警告和包含有用信息的消息。
要想成功地调用 EXPORT 实用程序,必须拥有 SYSADM 或 DBADM 权限,或者拥有 EXPORT 命令中所访问的表或视图上的 CONTROL 或 SELECT 特权。
对于 DB2 9.1 中新引入的基于标签的访问控制(LBAC)支持,需要注意 LBAC 凭证,它可能允许也可能不允许访问受保护的行和/或列。当从一个包含受保护行的表中导出数据时,LBAC 凭证可能限制被导出的行。如果您不具备对某个行的读访问权限,那么就不能导出这个行。这种情况下并不会给出任何错误或警告。然而,如果 LBAC 凭证不允许读取导出中包含的一个或多个受保护的列,那么导出将失败,并返回一个错误。
我们来看看一个简单的导出的例子。下面的命令将 SELECT 语句的结果导出到一个 DEL 格式的文件中。消息文件 msg.out 用于记录有用的信息和遇到的错误或警告:
EXPORT TO myfile.del OF DEL
MESSAGES msg.out
SELECT staff.name, staff.dept, org.location
FROM org, staff
WHERE org.deptnumb = staff.dept;
--------------------------------------------------------------------------------
回页首
文件类型修饰符
在前面的例子中,数据被提取到一个 DEL 格式的文件中。默认情况下,列值之间以逗号(,)隔开,字符串以双引号(")括起来。如果被提取的数据已经包含逗号和双引号,那么会怎么样呢?在这种情况下,导入或装载实用程序不可能确定哪些符号是实际的数据,哪些符号是分界符。为了定制 EXPORT 如何操作,可以使用 MODIFIED BY 子句,并指定您想用文件类型修饰符更改哪些方面。下面是带 MODIFIED BY 子句的 EXPORT 命令:
EXPORT TO file_name OF file_type
MODIFIED BY file_type_modifiers
MESSAGES message_file
select_statement
在 Command Reference Guide 中的 EXPORT 小节下,可以找到文件类型修饰符的完整列表。下面列出了一些常用的修饰符:
chardelx
指定 x 作为新的单字符字符串分界符。默认值是一个双引号(")。
coldelx
指定 x 作为新的单字符列分界符。默认值是一个逗号(,)。
codepage=x
指定 x (一个 ASCII 字符串)作为输出数据的新的码页(code page)。在导出操作期间,字符数据被从应用程序码页转换成这种码页。
timestampformat="x"
x 是源表中时间戳的格式。
考虑这个例子:
EXPORT TO myfile.del OF DEL
MODIFIED BY chardel! coldel@ codepage=1208 timestampformat="yyyy.mm.dd hh:mm tt"
MESSAGES msg.out
SELECT * FROM schedule
前面的命令按照以下方式将 SCHEDULE 表中的数据导出到 DEL 格式的文件中:
字符串以感叹号(!)括起来。
列之间以 @ 符号分隔开。
将字符串转换成码页 1208。
SCHEDULE 表中用户定义的时间戳的格式为 yyyy.mm.dd hh:mm tt。
--------------------------------------------------------------------------------
回页首
用 LOBSINFILE 修饰符导出大型对象
当导出包含大型对象列的表时,默认情况下只能导出 LOB 数据的前 32 KB。对象的这一部分与其他列数据放在同一个文件中。为了完整地导出 LOB 数据,并将它们与其他列数据分别存储在不同的文件中,必须使用 LOB 选项。在 DB2 V9.1 中,可以指定是将多个 LOB 值连接起来并导出到同一个输出文件中,还是将每个 LOB 值导出到一个单独的文件中。
下面是一个带 LOBSINFILE 修饰符的 EXPORT 命令,该修饰符将导致导出实用程序将多个 LOB 值写到同一个输出文件中。
EXPORT TO file_name OF file_type
LOBS TO lobfile_directory_1, lobfile_directory_2, ...
LOBFILE lobfilename
MODIFIED BY LOBSINFILE
MESSAGES message_file
select_statement
LOBS TO 子句指定 LOB 文件将被存储到的目录。如果没有发现 LOBS TO 子句,那么 LOB 数据将被存储到当前的工作目录。注意,在前面的命令中,可以指定不止一个路径作为 LOB 文件目标目录。每个 LOB 路径至少有一个文件,每个文件至少包含一个 LOB。
有时候需要使用用户指定的文件名来标识被提取出来的 LOB 文件。LOBFILE 子句可以用于这一目的。每个 LOB 文件将有一个序列号作为文件扩展名(例如 lobfile.001、lobfile.002、lobfile.003 等)。
当指定 LOBS TO 或 LOBFILE 选项时,将隐式地激活 LOBSINFILE 行为。但是,最好显式地指定 LOBSINFILE 修饰符,以避免与 LOBSINSEPFILES 修饰符行为混淆,稍后会谈到后一种修饰符。
--------------------------------------------------------------------------------
回页首
LOB Location Specifier
当使用 LOBSINFILE 修饰符导出大型对象时,会生成一个 LOB Location Specifier (LLS),后者将被存储在导出输出文件中。LLS 是一个字符串,用于表明在哪里可以找到 LOB 数据。LLS 的格式为 filename.ext.lob.nnn.mmm/。我们来更详细地看看这个格式:
filename.ext.lob 是包含 LOB 数据的文件的文件名。ext 是一个序列号,如前所述。
nnn 是大型对象在 LOB 文件中的偏移位置,以字节计。
mmm 是大型对象的长度,以字节计。
例如,resume.001.lob.1257.2415/ 表明大型对象位于 resume.001.lob 文件中,实际的 LOB 数据从文件的第 1257 个字节开始,其长度为 2,415 个字节。
为了清楚地说明 LLS 的用法,可以看看下面的例子。
EXPORT TO empresume.del DEL
LOBS TO d:\lob1\
LOBFILE resume
MODIFIED BY LOBSINFILE
MESSAGES msg.out
SELECT * FROM emp_resume
--------------------------------------------------------------------------------
回页首
使用 LOBSINSEPFILES 修饰符导出大型对象
如前面的小节所示,您还可以选择完整地导出 LOB 数据并将它们分别存储在单独的文件中。前面描述的 LOB 选项还是一样的,不同的是这里使用了 LOBSINSEPFILES 修饰符。
下面是使用 LOBSINSEPFILES 修饰符的一个例子。
EXPORT TO empresume.del DEL
LOBS TO d:\lob1\
LOBFILE resume
MODIFIED BY LOBSINSEPFILES
MESSAGES msg.out
SELECT * FROM emp_resume
上面的 EXPORT 命令将把 LOB 数据写入到具有 resume.ext.lob 文件名的文件中(即 resume.001.lob、resume.002.lob、resume.003.lob 等),这些文件都位于 LOB 路径 d:\lob1 中。
--------------------------------------------------------------------------------
回页首
导出 XML 数据
随着 DB2 9.1 中引入了本地 XML 支持,导出实用程序也被扩展,以支持 XML。如果没有指定任何与 XML 相关的选项而导出一个表(用 XML 数据定义的),那么相关的 XML 数据将被写入到与导出的其他关系数据分开的一个或多个文件中。让我们看一个例子。下面的 EXPORT 命令是在 PRODUCT 表上发出的,该表中定义了一个 XML 列:
EXPORT TO prodexport.del DEL
MESSAGES msg.out
SELECT * FROM product
在这个例子中,导出实用程序将生成两个输出文件。其中一个输出文件是 prodexport.del,该文件将包含表中的关系数据和 XML data specifier (XDS)。
XDS 是用名为 "XDS" 的一个 XML 标记表示的字符串。它具有一些属性,用于描述关于列中实际的 XML 数据的信息。下面是 XDS 字符串中可能出现的一些属性:
FIL 指定包含 XML 数据的文件的文件名。
OFF 指定 XML 数据在 FIL 属性指定的文件中的字节偏移量。
LEN 指定 FIL 属性中指定的文件中的 XML 数据的字节长度。
SCH 指定用于验证 XML 文档的 XML 模式的全限定 SQL 标识符。下一屏中将讨论这个属性。
从前面 prodexport.del 的内容中可以看出,第一个 XML 数据存储在 prodexport.del.001.xml 中,从 0 字节偏移位置开始,长度为 252 个字节。
在这个例子中,导出实用程序生成的另一个文件是 prodexport.del.001.xml,该文件包含 XML 内容。导出的每个 XML 数据都被连接在一起写入到这个文件中。下面是 prodexport.del.001.xml 文件的内容。
--------------------------------------------------------------------------------
回页首
使用 XML 选项和修饰符导出 XML 数据
与导出大型对象一样,您可以指定被导出 XML 文档的存储路径,还可以指定输出文件的文件名。考虑下面的例子:
EXPORT TO prodexport.del DEL
XML TO d:\xmlpath
XMLFILE proddesc
MODIFIED BY XMLINSEPFILES XMLNODECLARATION XMLCHAR
XMLSAVESCHEMA
MESSAGES msg.out
SELECT * FROM product
在这个例子中,PRODUCT 表的关系数据被导出到 prodexport.del 文件。然后,所有 XML 数据都被写入到 XML TO 子句指定的目录 d:\xmlpath 中。包含 XML 数据的文件被命名为 proddesc.ext.xml,其中 ext 是一个序列号(例如 proddesc.001.xml、proddesc.002.xml、proddesc.003.xml 等)。基本文件名是用 XMLFILE 选项定义的。
您也许还注意到,这个例子中使用了一些修饰符。下面对所有与 XML 相关的修饰符作一个总结。
XMLINSEPFILES 导致导出实用程序将导出的每个 XML 文档写入到不同的 XML 文件中。
XMLNODECLARATION 表明导出 XML 数据无需使用 XML 声明标记。默认情况下,XML 标记被写在 XML 文档的开头,并包括一个编码属性。
XMLCHAR 表明 XML 数据以字符码页编码。默认情况下,XML 数据是以 Unicode 编码的。当使用这个修饰符的时候,使用的是 codepage 文件类型修饰符或应用程序码页。
XMLGRAPHIC 表明无论是 codepage 文件类型修饰符还是应用程序码页,导出的 XML 数据将以 UTF-16 码页编码。注意,这个例子中没有使用 XMLGRAPHIC。
我们要介绍的最后一个选项是 XMLSAVESCHEMA。当插入一个 XML 文档时,可以用一个 XML 模式对其进行验证。XMLSAVESCHEMA 选项导致导出实用程序还保存用于每个导出的 XML 数据的 XML 模式。那个模式的全限定 SQL 标识符将被存储为相应的 XML data specifier(XDS)中的一个 SCH 属性。注意,如果没有用 XML 模式验证导出的 XML 文档,或者该模式对象不再存在于数据库中,那么相应的 XDS 中将不包括 SCH 属性。
下面显示了前面的导出例子的结果。
--------------------------------------------------------------------------------
回页首
用一个 XQuery 导出 XML 数据
EXPORT 命令还允许指定一个 XQuery 语句,使导出实用程序将一个 XQuery 的结果导出到一个 XML 文件中。我们来看看下面的例子。
EXPORT TO custexport.del DEL
XML TO d:\xmlpath
XMLFILE custphone
MODIFIED BY XMLINSEPFILES XMLNODECLARATION
MESSAGES msg.out
SELECT XMLQUERY ('$doc/customerinfo/phone' PASSING INFO AS "doc") FROM customer
前面例子中的 XQuery 返回存储在 CUSTOMER 表的 XML 列 INFO 下的每个客户的电话号码。这里讨论的所有 XML 选项和修饰符都适用于 XQuery 语句。因此,这个例子将为 XQuery 的每个结果生成单独的 XML 文档。这个文件存放在 d:\xmlpath 中,并且以 custphone.ext.xml 命名,其中 ext 是一个序列号。此外,文档中不包括 XML 声明标记。
下面是导出的一个 XML 文档的内容。
--------------------------------------------------------------------------------
回页首
从 Control Center 中导出
除了从 DB2 命令行执行 EXPORT 命令外,还可以使用 Control Center 进行导出。从 Control Center 这个工具中,可以指定导出实用程序支持的所有选项和子句,例如大型对象和 XML 数据。如下图所示,Schedule 选项卡允许您创建一个任务,并调度在给定时间运行的导出。