我们有时需要在达梦数据库和异构数据库间进行快速的数据迁移,因此,如何将达梦数据库中的表导出至平面文本文件,或将平面文本文件中的数据快速导入至表中就显得尤为关键了。
下面我将简单做一个实验,将达梦数据库中含有 LOB 大字段的表导出至平面文件,从平面文件导入至数据库表中。
0. 在达梦数据库中构建实验环境(创建表空间、用户、测试表)
disql SYSDBA/Dameng123@192.168.56.11:5236
create tablespace TESTTBS datafile '/dm8/data/DAMENG/TESTTBS01.DBF' size 32 autoextend on;
create user TEST identified by Dameng123 default tablespace TESTTBS default index tablespace TESTTBS;
exit
disql TEST/Dameng123@192.168.56.11:5236
SQL>
drop table T_LOB;
create table T_LOB(c1 int, c2 varchar(20), c3 blob, c4 clob);
insert into T_LOB values (1, 'aaa', 0xABC1234567890DE, 'This is one');
insert into T_LOB values (2, 'bbb', 0xABC1234567890DE, 'This is two');
insert into T_LOB values (3, 'ccc', 0xABC1234567890DE, 'This is three');
commit;
select * from T_LOB;
2. 导出表数据
创建导出目录
mkdir /dm8/fldr
创建导出、导入表的控制文件
cat /dm8/fldr/fldr_lob.ctl
========================================================
LOAD DATA
INFILE '/dm8/fldr/t_lob.txt'
INTO TABLE TEST.T_LOB
FIELDS '|'
(C1,C2,C3,C4)
========================================================
导出表数据至平面文件,LOB字段会导出成二进制文件
dmfldr test/Dameng123@192.168.56.11:5236 control=\'/dm8/fldr/fldr_lob.ctl\' lob_directory=\'/dm8/fldr\' mode=\'out\' lob_file_name=\'t_lob.lob\' log=\'/dm8/fldr/fldr_lob_out.log\'
查看导出日志
cat /dm8/fldr/fldr_lob_out.log
3. 清空表数据
disql TEST/Dameng123@192.168.56.11:5236
SQL>
truncate table T_LOB;
select * from T_LOB;
exit
4. 从平面文件导入数据库至表
dmfldr test/Dameng123@192.168.56.11:5236 control=\'/dm8/fldr/fldr_lob.ctl\' lob_directory=\'/dm8/fldr\' mode=\'in\' lob_file_name=\'t_lob.lob\' log=\'/dm8/fldr/fldr_lob_in.log\'
查看导入日志
cat /dm8/fldr/fldr_lob_in.log