/************************************************************************************/
informix 外部表
/************************************************************************************/
1 創建空間
touch llogdbs plogdbs tmpdbs1 tmpdbs2 test_01 test_02
chmod 660 *
onspaces -c -d plogdbs -o 0 -s 512000 -p /opt/83dbsnew/plogdbs
onspaces -c -d llogdbs -o 0 -s 2048000 -p /opt/83dbsnew/llogdbs
onspaces -c -d tmpdbs -o 0 -s 1024000 -p /opt/83dbsnew/tmpdbs1 -t -k 16
onspaces -a tmpdbs -p /opt/83dbsnew/tmpdbs2 -o 0 -s 1024000
onspaces -c -d test -p /opt/83dbsnew/test_01 -o 0 -s 2048000 -k
2 添加物理日誌
onparams -p -s 500000 -d plogdbs -y
3 添加邏輯日誌
for i in {1..15} ; do onparams -a -d llogdbs -s 200000; done
4 刪除ROOTDBS 的 日誌
1)連續執行7次
onmode –l
2) 執行手工CKPT
onmode –c
3) 刪除ROOTDBS 的 日誌
$ for i in {1..6} ; do onparams -d -l $i -y ; done
5 創建數據庫
create database test in test with buffered log;
6 準備數據
create table t1(col1 int ,col2 varchar(20),col3 varchar(20),col4 varchar(20),col5 datetime year to second);
--添加數據存儲過程
drop procedure if exists sp_Add_data;
create procedure sp_Add_data()
define i int;
define v_while int;
let i=0;
let v_while=0;
while v_while=0
let i=i+1;
if i=10000000 then
let v_while=1;
end if;
insert into t1 values(i,'col2'||i,'col3'||i,'col4'||i,sysdate);
end WHILE;
end procedure;
--添加數據
execute procedure sp_Add_data();
--設置隔離級別,讀數據
set isolation to dirty read;
--導出數據
unload to /home/informix/t1.unl select * from t1;
[informix@node1 ~]$ du -sh t1.unl
616M t1.unl
7 使用外部表導入數據
drop table t1;
create table t1(col1 int ,col2 varchar(20),col3 varchar(20),col4 varchar(20),col5 datetime year to second);
1) 切割源文件:
$split -l 1000000 t1.unl
2)重命名數據文件,給外部表使用:
$j=1; for i in {a..j}; do mv "xa"$i t$j.unl; let j=j+1; done
3) 導入數據 shell腳本,具體如下:
# vi imp_unl.sh
/**********************************************************************************************/
#Author:xilai
#Version:0.8
#
usage()
{
cat <<!
Usage:
./imp_unl.sh -d dbname -t tabname -f /path/filename
!
exit 1
}
#[ $# -ne 6 ]&&usage
while getopts d:t:f: arg;do
case $arg in
d)
db=$OPTARG;;
t)
tab=$OPTARG;;
f)
fn=$OPTARG;;
\?)
usage;;
esac
done
[ ${db}t = t -o ${tab}t = t -o ${fn}t = t ]&&usage
mkdir -p log
LOGFILE=log/${tab}_load.log
echo -e "Table:$tab\t Begin at $(date '+%F %T')" >> ${LOGFILE}
dbaccess -e -m ${db}<< ! >> ${LOGFILE} 2>&1
drop table if exists ${tab}_ext;
create external table ${tab}_ext sameas ${tab}
using
(datafiles("DISK:/home/informix/load/t%r(1..10).unl"),
format "delimited",
DELIMITER "|",
express,
rejectfile "/tmp/${tab}.err",
maxerrors 10000
);
truncate table ${tab};
alter table ${tab} type(raw);
!
onmode -c
bt=$(date +%s)
dbaccess -e -m ${db}<< ! >> ${LOGFILE} 2>&1
set pdqpriority 100;
set environment IFX_BATCHEDREAD_TABLE '1';
insert into ${tab} select * from ${tab}_ext;
alter table ${tab} type(standard);
--drop table ${tab}_ext;
!
et=$(date +%s)
let t=et-bt
echo -e "Table:$tab\t Load Complete at $(date '+%F %T').\tUsed:$t s" >>${LOGFILE}
/**********************************************************************************************/
4) 腳本授權
# chmod +x imp_unl.sh
5)導入數據
數據導入的命令行如下:$time ./imp_unl.sh -d gdb(數據庫名稱) -t test_1g(導入對應的表名) -f abc(不需要調整)
# time ./imp_unl.sh -d test -t t1 -f abc
6) 導出腳本
# vi exp_unl.sh
/**********************************************************************************************/
#Author:xilai
#Version:0.8
#
usage()
{
cat <<!
Usage:
./exp_unl.sh -d dbname -t tabname -f /path/filename
!
exit 1
}
#[ $# -ne 6 ]&&usage
while getopts d:t:f: arg;do
case $arg in
d)
db=$OPTARG;;
t)
tab=$OPTARG;;
f)
fn=$OPTARG;;
\?)
usage;;
esac
done
[ ${db}t = t -o ${tab}t = t -o ${fn}t = t ]&&usage
mkdir -p log
LOGFILE=log/${tab}_load.log
echo -e "Table:$tab\t Begin at $(date '+%F %T')" >> ${LOGFILE}
dbaccess -e -m ${db}<< ! >> ${LOGFILE} 2>&1
drop table if exists ${tab}_ext;
create external table ${tab}_ext sameas ${tab}
using
(datafiles("DISK:/tmp/test%r(1..10).unl"),
format "delimited",
DELIMITER "|",
express,
rejectfile "/tmp/${tab}.err",
maxerrors 10000
);
alter table ${tab} type(raw);
!
onmode -c
bt=$(date +%s)
dbaccess -e -m ${db}<< ! >> ${LOGFILE} 2>&1
set pdqpriority 100;
set environment IFX_BATCHEDREAD_TABLE '1';
insert into ${tab}_ext select * from ${tab};
--alter table ${tab} type(standard);
--drop table ${tab}_ext;
!
et=$(date +%s)
let t=et-bt
echo -e "Table:$tab\t Load Complete at $(date '+%F %T').\tUsed:$t s" >>${LOGFILE}
/**********************************************************************************************/
7) 腳本授權
# chmod +x exp_unl.sh
8) 導出數據的命令行如下,數據被導出到/tmp/test*.unl文件中:
# time ./exp_unl.sh -d test -t t1 -f abc
/**********************************************************************************************
外部表的格式
/**********************************************************************************************/
格式: including delimited and fixed ASCII, and IBM Informix internal.
1 including delimited
create external table ${tab}_ext sameas ${tab}
using
(datafiles("DISK:/home/informix/load/t%r(1..10).unl"),
format "delimited",
DELIMITER "|",
express,
rejectfile "/tmp/${tab}.err",
maxerrors 10000
);
-rw-rw-rw- 1 informix informix 64560494 Jun 27 09:26 test9.unl
2 fixed ASCII
CREATE EXTERNAL TABLE ext_source_fix
(
empid CHAR(5) EXTERNAL CHAR(5),
empname VARCHAR(40) EXTERNAL CHAR(40),
empaddr VARCHAR(100) EXTERNAL CHAR(100)
)
USING(
FORMAT 'FIXED',
DATAFILES
("DISK:/home/informix/load/fix.unl")
);
3 IBM Informix internal.(比 including delimited and fixed ASCII 格式 速度快, 文件SIZE 大 )
create external table ${tab}_ext sameas ${tab}
using
(datafiles("DISK:/tmp/test%r(1..10).unl"),
format "INFORMIX",
rejectfile "/tmp/${tab}.err",
maxerrors 10000
);
-rw-rw-rw- 1 informix informix 75028800 Jun 27 09:33 test9.unl
/**********************************************************************************************/
外部表使用PIPE
使用PIPE 將一個實例中的表導入到另一個實例
/**********************************************************************************************/
1 創建PIPE
[informix@node1 load]$ mkfifo /home/informix/load/pipe1
或
[informix@node1 load]$ mknod /home/informix/load/pipe2 p
[informix@node1 load]$ ll
total 0
prw-rw-r-- 1 informix informix 0 Jun 27 11:03 pipe1
prw-rw-r-- 1 informix informix 0 Jun 27 11:03 pipe2
--使用多個PIPE
onmode -p +2 FIFO
2 創建數據表
源表:
CREATE TABLE source_data_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
);
insert into source_data_table values('111','aa1','tt1');
insert into source_data_table values('112','aa2','tt2');
insert into source_data_table values('113','aa3','tt3');
insert into source_data_table values('114','aa4','tt4');
insert into source_data_table values('115','aa5','tt5');
insert into source_data_table values('116','aa6','tt6');
--源表對應的外部表
CREATE EXTERNAL TABLE ext_source_data_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
)
USING
(DATAFILES
(
'PIPE:/home/informix/load/pipe1'
));
目標表:
CREATE TABLE destin_data_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
);
目標表對應的外部表:
CREATE EXTERNAL TABLE ext_destin_data_table
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
)
USING
(DATAFILES
(
'PIPE:/home/informix/load/pipe2'
));
redirects data from pipe1 to pipe2:
[informix@node1 ~]$ cat /home/informix/load/pipe1 > /home/informix/load/pipe2
--目標端:
> INSERT INTO destin_data_table SELECT * FROM ext_destin_data_table;
6 row(s) inserted.
Elapsed time: 7.404 sec
--源端
> INSERT INTO ext_source_data_table SELECT * FROM source_data_table;
6 row(s) inserted.
Elapsed time: 0.991 sec
/**********************************************************************************************/
使用多個PIPE
在一個機器上使用多個PIPE 會更加慢
/**********************************************************************************************/
1 創建PIPE
[informix@node1 load]$ for i in {1..2} ; do mkfifo /home/informix/load/pipe1_$i ; done
[informix@node1 load]$ for i in {1..2} ; do mkfifo /home/informix/load/pipe2_$i ; done
[informix@node1 load]$ ll
total 0
prw-rw-r-- 1 informix informix 0 Jun 27 14:45 pipe1_1
prw-rw-r-- 1 informix informix 0 Jun 27 14:45 pipe1_2
prw-rw-r-- 1 informix informix 0 Jun 27 14:45 pipe2_1
prw-rw-r-- 1 informix informix 0 Jun 27 14:45 pipe2_2
--使用多個PIPE
onmode -p +4 FIFO
2 創建數據表
源表:
create table t1(col1 int ,col2 varchar(20),col3 varchar(20),col4 varchar(20),col5 datetime year to second);
execute procedure sp_Add_data();
--源表對應的外部表
drop table ext_t1;
CREATE EXTERNAL TABLE ext_t1
SAMEAS t1
USING
(DATAFILES
(
'PIPE:/home/informix/load/pipe1_1',
'PIPE:/home/informix/load/pipe1_2'
));
目標表:
create table dest_t1(col1 int ,col2 varchar(20),col3 varchar(20),col4 varchar(20),col5 datetime year to second);
目標表對應的外部表:
drop table ext_dest_t1;
CREATE EXTERNAL TABLE ext_dest_t1
SAMEAS dest_t1
USING
(DATAFILES
(
'PIPE:/home/informix/load/pipe2_1',
'PIPE:/home/informix/load/pipe2_2'
));
redirects data from pipe1 to pipe2:
[informix@node1 ~]$ cat /home/informix/load/pipe1_1 > /home/informix/load/pipe2_1
[informix@node1 ~]$ cat /home/informix/load/pipe1_2 > /home/informix/load/pipe2_2
--目標端:(此結果是使用一對PIPE 的結果,使用2對PIPE 時間很長)
> INSERT INTO dest_t1 SELECT * FROM ext_dest_t1;
10000000 row(s) inserted.
--源端 (此結果是使用一對PIPE 的結果,使用2對PIPE 時間很長)
> INSERT INTO ext_t1 SELECT * FROM t1;
10000000 row(s) inserted.
Elapsed time: 1827.934 sec
[informix@node1 load]$ onstat -g ioq
GBase 8s Database Server Version 12.10.FC4G1AEE -- On-Line -- Up 00:19:48 -- 847684 Kbytes
AIO I/O queues:
q name/id len maxlen totalops dskread dskwrite dskcopy
fifo 0 0 4 4 0 0 0
drda_dbg 0 0 0 0 0 0 0
sqli_dbg 0 0 0 0 0 0 0
adt 0 0 0 0 0 0 0
msc 0 0 1 6 0 0 0
aio 0 0 5 205 25 0 0
pio 0 0 1 48 0 48 0
lio 0 0 1 15414 0 15414 0
gfd 3 0 99 2199 1575 624 0
gfd 4 0 132 22396 12229 10167 0
gfd 5 0 1 6 5 1 0
gfd 6 0 4 5 1 4 0
gfd 7 0 2 3 1 2 0
gfd 8 0 1 6758 6757 1 0
gfd 10 0 3 5559 5559 0 0
gfdwq 10 0 0 0 0 0 0
gfd 12 0 0 0 0 0 0
gfdwq 12 0 4 2788 0 2788 0
/**********************************************************************************************/
外部表使用FORMAT 'FIXED'
/**********************************************************************************************/
[informix@node1 load]$ finderr 26180
-26180 Missing external column type column-name.
The CREATE EXTERNAL TABLE statement is missing the external-column-
type information. This information is required for tables that describe
FIXED format files.
Add the column-type information and resubmit the statement.
26179: FIXED or DELIMITED columns must be external CHAR type empname.
Error in line 4
Near character position 40
1 創建數據表
CREATE TABLE source_fix
(
empid CHAR(5),
empname VARCHAR(40),
empaddr VARCHAR(100)
);
insert into source_fix values('111','aa1','tt1');
insert into source_fix values('112','aa2','tt2');
insert into source_fix values('113','aa3','tt3');
insert into source_fix values('114','aa4','tt4');
insert into source_fix values('115','aa5','tt5');
insert into source_fix values('116','aa6','tt6');
--對應的外部表
--format FIXED
CREATE EXTERNAL TABLE ext_source_fix
(
empid CHAR(5) EXTERNAL CHAR(5),
empname VARCHAR(40) EXTERNAL CHAR(40),
empaddr VARCHAR(100) EXTERNAL CHAR(100)
)
USING(
FORMAT 'FIXED',
DATAFILES
("DISK:/home/informix/load/fix.unl")
);
> INSERT INTO ext_source_fix SELECT * FROM source_fix;
6 row(s) inserted.
[informix@node1 load]$ more fix.unl
111 aa1 tt1 1
12 aa2 tt2 11
3 aa3 tt3 114
aa4 tt4 115
aa5 tt5 116
aa6 tt6
[informix@node1 load]$
-rw-rw-rw- 1 informix informix 870 Jun 27 15:41 fix.unl
--format delimited
create external table ext_source_delimited sameas source_fix
using
(datafiles("DISK:/home/informix/load/fix_delimited.unl"),
format "delimited",
DELIMITER "|",
express,
rejectfile "/tmp/${tab}.err",
maxerrors 10000
);
> INSERT INTO ext_source_delimited SELECT * FROM source_fix;
-rw-rw-rw- 1 informix informix 78 Jun 27 15:43 fix_delimited.unl
-rw-rw-rw- 1 informix informix 870 Jun 27 15:41 fix.unl
[informix@node1 load]$ more fix_delimited.unl
111|aa1|tt1|
112|aa2|tt2|
113|aa3|tt3|
114|aa4|tt4|
115|aa5|tt5|
116|aa6|tt6|
/**********************************************************************************************/
外部表 3種 FORMAT 比較
/**********************************************************************************************/
--1 format INFORMIX
dbaccess -e -m ${db}<< ! >> ${LOGFILE} 2>&1
drop table if exists ${tab}_ext;
create external table ${tab}_ext sameas ${tab}
using
(datafiles("DISK:/tmp/test%r(1..10).unl"),
format "INFORMIX",
rejectfile "/tmp/${tab}.err",
maxerrors 10000
);
alter table ${tab} type(raw);
!
[informix@node1 ~]$ time ./exp_unl.sh -d test -t t1 -f abc
real 0m19.557s
user 0m0.041s
sys 0m0.011s
-rw-rw-rw- 1 informix informix 74959200 Jun 27 15:47 test10.unl
-rw-rw-rw- 1 informix informix 74959200 Jun 27 15:47 test1.unl
-rw-rw-rw- 1 informix informix 74959200 Jun 27 15:47 test2.unl
-rw-rw-rw- 1 informix informix 74959200 Jun 27 15:47 test3.unl
-rw-rw-rw- 1 informix informix 75019200 Jun 27 15:47 test4.unl
-rw-rw-rw- 1 informix informix 75028800 Jun 27 15:47 test5.unl
-rw-rw-rw- 1 informix informix 75028800 Jun 27 15:47 test6.unl
-rw-rw-rw- 1 informix informix 75028800 Jun 27 15:47 test7.unl
-rw-rw-rw- 1 informix informix 75028800 Jun 27 15:47 test8.unl
-rw-rw-rw- 1 informix informix 75028800 Jun 27 15:47 test9.unl
[informix@node1 ~]$ du -sh /tmp/test*
72M /tmp/test10.unl
72M /tmp/test1.unl
72M /tmp/test2.unl
72M /tmp/test3.unl
72M /tmp/test4.unl
72M /tmp/test5.unl
72M /tmp/test6.unl
72M /tmp/test7.unl
72M /tmp/test8.unl
72M /tmp/test9.unl
--2 format delimited
dbaccess -e -m ${db}<< ! >> ${LOGFILE} 2>&1
drop table if exists ${tab}_ext;
create external table ${tab}_ext sameas ${tab}
using
(datafiles("DISK:/tmp/test%r(1..10).unl"),
format "delimited",
DELIMITER "|",
express,
rejectfile "/tmp/${tab}.err",
maxerrors 10000
);
alter table ${tab} type(raw);
!
[informix@node1 ~]$ time ./exp_unl.sh -d test -t t1 -f abc
real 1m36.747s
user 0m0.040s
sys 0m0.017s
-rw-rw-rw- 1 informix informix 64511159 Jun 27 15:51 test10.unl
-rw-rw-rw- 1 informix informix 64560490 Jun 27 15:51 test1.unl
-rw-rw-rw- 1 informix informix 64560470 Jun 27 15:51 test2.unl
-rw-rw-rw- 1 informix informix 64560494 Jun 27 15:51 test3.unl
-rw-rw-rw- 1 informix informix 64560494 Jun 27 15:51 test4.unl
-rw-rw-rw- 1 informix informix 64560494 Jun 27 15:51 test5.unl
-rw-rw-rw- 1 informix informix 64560494 Jun 27 15:51 test6.unl
-rw-rw-rw- 1 informix informix 64560521 Jun 27 15:51 test7.unl
-rw-rw-rw- 1 informix informix 64560501 Jun 27 15:51 test8.unl
-rw-rw-rw- 1 informix informix 64560471 Jun 27 15:51 test9.unl
[informix@node1 tmp]$ du -sh test*
62M test10.unl
62M test1.unl
62M test2.unl
62M test3.unl
62M test4.unl
62M test5.unl
62M test6.unl
62M test7.unl
62M test8.unl
62M test9.unl
--3 format FIXED
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
create table t1(col1 int ,col2 varchar(20),col3 varchar(20),col4 varchar(20),col5 datetime year to second);
drop table ext_EXTERNAL;
CREATE EXTERNAL TABLE ext_EXTERNAL
(
col1 int EXTERNAL CHAR(10),
col2 varchar(20) EXTERNAL CHAR(20),
col3 varchar(20) EXTERNAL CHAR(20),
col4 varchar(20) EXTERNAL CHAR(20),
col5 date EXTERNAL CHAR(10)
)
USING(
FORMAT 'FIXED',
DATAFILES
("DISK:/home/informix/load/fix.unl")
);
insert into ext_EXTERNAL select * from t1;
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
dbaccess -e -m ${db}<< ! >> ${LOGFILE} 2>&1
drop table if exists ${tab}_ext;
create external table ${tab}_ext (
col1 int EXTERNAL CHAR(10),
col2 varchar(20) EXTERNAL CHAR(20),
col3 varchar(20) EXTERNAL CHAR(20),
col4 varchar(20) EXTERNAL CHAR(20),
col5 date EXTERNAL CHAR(10)
)
using
(datafiles("DISK:/tmp/test%r(1..10).unl"),
format 'FIXED',
express,
rejectfile "/tmp/${tab}.err",
maxerrors 10000
);
alter table ${tab} type(raw);
!
[informix@node1 ~]$ time ./exp_unl.sh -d test -t t1 -f abc
real 0m23.887s
user 0m0.045s
sys 0m0.005s
-rw-rw-rw- 1 informix informix 79948000 Jun 27 16:03 test10.unl
-rw-rw-rw- 1 informix informix 79948000 Jun 27 16:03 test1.unl
-rw-rw-rw- 1 informix informix 79981360 Jun 27 16:03 test2.unl
-rw-rw-rw- 1 informix informix 80017520 Jun 27 16:03 test3.unl
-rw-rw-rw- 1 informix informix 80017520 Jun 27 16:03 test4.unl
-rw-rw-rw- 1 informix informix 80017520 Jun 27 16:03 test5.unl
-rw-rw-rw- 1 informix informix 80017520 Jun 27 16:03 test6.unl
-rw-rw-rw- 1 informix informix 80017520 Jun 27 16:03 test7.unl
-rw-rw-rw- 1 informix informix 80017520 Jun 27 16:03 test8.unl
-rw-rw-rw- 1 informix informix 80017520 Jun 27 16:03 test9.unl
[informix@node1 tmp]$ du -sh test*
77M test10.unl
77M test1.unl
77M test2.unl
77M test3.unl
77M test4.unl
77M test5.unl
77M test6.unl
77M test7.unl
77M test8.unl
77M test9.unl
informix 外部表
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
informix ontape
/***********************************************************************/i
yutonging2016
2020-06-16 03:20:14
informix 多實例安裝
/***********************************************************************/i
yutonging2016
2020-06-16 03:20:13
informix LIST
yutonging2016
2020-06-16 03:20:13
informix-安裝
yutonging2016
2020-02-24 02:07:08
informix-dbexport-dbimport
yutonging2016
2020-02-24 02:07:07
informix gis 數據處理
yutonging2016
2018-08-28 13:47:21
informix 分頁
yutonging2016
2018-08-28 13:47:19
informix sds 搭建
yutonging2016
2018-08-28 13:47:19
informix 分片表
yutonging2016
2018-08-28 13:47:14
informix-dbschema
yutonging2016
2018-08-28 13:47:14