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
--------------------------------------------------------------------------------
回页首
导出 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 选项卡允许您创建一个任务,并调度在给定时间运行的导出。