有些用户需要把IQ从AIX或HP平台迁移到Linux平台,由于AIX和HP采用大端字节序,而Linux是采用小端字节序,所以不能使用backup、restore方法进行迁移,只能把表数据导出,然后导入到目标平台的方法实现。在使用文本方式导出数据时,在指定列分隔符或行结束符时有可能会同表中数据发生冲突,IQ提供了二进制方式导出和导入数据的方法可以解决这一问题。
下面以HP平台(大端字节序)到 Linux(小端字节序)迁移为例,说明使用二进制数据文件方式实现表级快平台迁移的方法:
1. 把HP-UX64 Itanium平台上(即大端字节序,big endian)的一个IQ数据库表lineitem中的数据导出到一个二进制格式文件中。导出方法如下(即iq server端重定向方法):
--打开server端重定向功能
SET TEMPORARY OPTION Temp_Extract_Name1 = 'lineitem_binary.dat';
--设置表输出为二进制格式的文件
SET TEMPORARY OPTION Temp_Extract_Binary = 'on';
SET TEMPORARY OPTION Temp_Extract_Swap = 'off';
--把表中的记录输出到lineitem_binary.dat文件中
SELECT * FROM lineitem;
--关闭server端重定向
SET TEMPORARY OPTION Temp_Extract_Name1 = '';
2. 在另一台Suse Linux机器上导入lineitem_binary.dat文件中的数据(前提是lineitem表已经建好)。load table语句如下:
LOAD TABLE lineitem
( l_orderkey BINARY WITH NULL BYTE,
l_partkey BINARY WITH NULL BYTE,
l_suppkey BINARY WITH NULL BYTE,
l_linenumber BINARY WITH NULL BYTE,
l_quantity BINARY WITH NULL BYTE,
l_extendedprice BINARY WITH NULL BYTE,
l_discount BINARY WITH NULL BYTE,
l_tax BINARY WITH NULL BYTE,
l_returnflag BINARY WITH NULL BYTE,
l_linestatus BINARY WITH NULL BYTE,
l_shipdate BINARY WITH NULL BYTE,
l_commitdate BINARY WITH NULL BYTE,
l_receiptdate BINARY WITH NULL BYTE,
l_shipinstruct BINARY WITH NULL BYTE,
l_shipmode BINARY WITH NULL BYTE,
l_comment BINARY WITH NULL BYTE )
FROM '/apps/data/lineitem_binary.dat'
FORMAT BINARY
STRIP OFF
QUOTES OFF
ESCAPES OFF
BYTE ORDER HIGH;
COMMIT;
说明:
(1) 当使用load table装载二进制文件时必须使用"BINARY WITH NULL BYTE",并且要使用FORMAT BINARY子句;
(2) BYTE ORDER LOW表示二进制文件是从"小端字节序(Little-endian)"平台上的IQ数据库生成的;BYTE ORDER HIGH表示二进制文件是
从"大端字节序(Big-endian)"平台上的IQ数据库生成的。
阅读(3724) | 评论(3) | 转发(1) |