导入实用程序使用SQL INSERT语句向表、类型表或视图填充数据。如果接收导入数据的表或视图已包含数据,那么输入数据可替换现有数据,也可追加至现有数据。
IMPORT FROM filename OF { IXF | ASC | DEL | WSF }
[ LOBS FROM lob-path[{,lob-path}…] ]
[ XML FROM xml-path[{,xml-path}…] ]
[ MODIFIED BY filetype-mod … ]
[ METHOD{ L( col-start col-end[{,col-start col-end}…] )
[NULL INDICATORS ( col-position[{,col-position}…] )] |
N( col-name[{,col-name}…] ) |
P( col-position[{,col-position}…] )
}
]
[ XMLPARSE { STRIP | PRESERVE } WHITESPACE ]
[ XMLVALIDATE USING
{XDS [ DEFAULT schema-sqlid ]
[ IGNORE (schema-sqlid[{,schema-sqlid}…])]
[MAP
( (schema-sqlid,schema-sqlid)
[{(schema-sqlid,schema-sqlid)}…]
)
] |
SCHEMA schema-sqlid |
SCHEMALOCATION HINTS
}
]
[ allow { NO | WRITE } ACCESS ]
[ COMMITCOUNT {n | AUTOMATIC} ]
[ {RESTARTCOUNT | SKIPCOUNT} n ] [ ROWCOUNT n ] [ WARNINGCOUNT n ]
[ NOTIMEOUT ]
[ MESSAGES message-file ]
{ { INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE }
INTO {table-name[(insert-column,…)] | hierarchy-description} |
CREATE INTO { table-name[(insert-column,…)] |
hierarchy-description
{ AS ROOT TABLE | UNDER sub-table-name }
[ IN tablespace-name [ INDEX IN tablespace-name ]
[ LONG IN tablespace-name ]
]
}
}
filetype-mod:
COMPOUND=x、INDEXSCHEMA=schema、FORCEIN、INDEXIXF、IMPLIEDDECIMAL、
NOCHECKLENGTHS、NOEOFCHAR、NULLINDCHAR=x、RECLEN=x、STRIPTBLANKS、
STRIPTNULLS、NO_TYPE_ID、NODOUBLEDEL、LOBSINFILE、USEDEFAULTS、
CHARDELx、COLDELx、DLDELx、DECPLUSBLANK、DECPTx、DATESISO、
DELPRIORITYCHAR、IDENTITYMISSING、IDENTITYIGNORE、
GENERATEDMISSING、GENERATEDIGNORE、DATEFORMAT=x、TIMEFORMAT=x、
TIMESTAMPFORMAT=x、KEEPBLANKS、CODEPAGE=x、NOROWWARNINGS、
NOCHARDEL、NODEFAULTS、USEGRAPHICCODEPAGE、FORCECREATE、XMLCHAR、
XMLGRAPHIC、SECLABELCHAR 和 SECLABELNAME
hierarchy-description:
{ ALL TABLES | ( sub-table-name [(insert-column,…)],… ) } [IN]
HIERARCHY { STARTING sub-table-name | ( sub-table-name,… ) }
说明:
1、MODIFIED BY子句指定文件类型修饰符以更改数据格式,告诉IMPORT实用程序如何处理数据以改进性能。
2、缺省情况下,IMPORT实用程序直到导入成功才执行落实,但某些ALLOW WRITE ACCESS导入例外。虽然这会改变导入速度,但考虑到并行性、可重新启动性及活动日志空间注意事项,最好指定落实在导入期间进行。其中一种方法是将COMMITCOUNT参数设置为“automatic”,这会指示IMPORT在内部确定何时应执行落实。或者将COMMITCOUNT设置为特定数字,指示IMPORT在达到指定的已导入记录数时执行一次落实。
3、因为IMPORT实用程序是嵌入式SQL应用程序并且以内部方式执行SQL访存,所以应用于SQL操作的优化会同时应用于IMPORT。可使用compound文件类型修饰符以便一次插入指定数目的行,而不是按缺省方式逐行插入。如果预计导入期间会生成大量警告(并因此导致操作变慢),可指定norowwarnings文件类型修饰符以抑制有关被拒绝行的警告。
4、MESSAGES参数指定消息文件,在导入期间,会编写标准ASCII文本消息文件以包含与该操作相关的错误消息、警告消息和参考消息。可以在导入正在进行时访问消息文件,以对导入进度进行监视。如果导入操作失败,那么可使用消息文件来确定重新启动位置,原因是消息文件会指示成功导入的最后一行。注:如果针对远程数据库的导入操作生成的输出消息量超过60KB,那么该实用程序会保留前30KB和后30KB。
一、IMPORT的五种方式:
导入可使用五种方式,它们用于确定导入数据的方法。前三种方式为INSERT、INSERT_UPDATE和REPLACE,在目标表已存在的情况下使用。这三种方式都支持IXF、WSF、ASC和DEL数据格式。但是,只有INSERT和INSERT_UPDATE可与昵称配合使用。
INSERT |
将输入数据插入到目标表中而不更改现有数据 |
INSERT_UPDATE |
使用输入行的值更新具有匹配主键值的行,如果没有匹配行,那么会将已导入行插入到表中。 |
REPLACE |
删除所有现有数据并插入已导入数据,同时保留表和索引定义 |
另外两种方式为REPLACE_CREATE和CREATE,在目标表不存在时使用。它们只能与PC/IXF格式的输入文件配合使用,此格式包含要创建的表的结构描述。如果对象表具有自身以外的任何从属,那么不能以这些方式执行导入。建议不使用IMPORT的CREATE和REPLACE_CREATE方式,改用db2look实用程序。
REPLACE_CREATE |
删除所有现有数据并插入已导入数据,同时保留表和索引定义;如果目标表和索引不存在,那么创建目标表和索引 |
CREATE |
创建目标表和索引;可指定在其中创建新表的表空间名称 |
二、IMPORT工作步骤:
1、锁定表
根据是否允许对表进行并行访问,IMPORT会获取对现有目标表的独占(X)或非独占(IX)锁定。
2、查找和检索数据
IMPORT使用FROM子句来查找输入数据。如果命令指示XML或LOB数据存在,那么IMPORT会查找此数据。
3、插入数据
IMPORT会替换现有数据或将新的数据行添加至表。
4、检查约束和激发触发器
写入数据后,IMPORT会确保每个已插入行符合针对目标表定义的约束。有关被拒绝行的信息将写至消息文件。IMPORT还会激发现有触发器。
5、落实操作
IMPORT会保存所作更改并释放针对目标表的锁定。还可指定在导入期间定期落实。
三、IMPORT所需权限
凭借DATAACCESS权限可以执行任何类型的导入操作。以下是执行相应导入类型的其他权限:
INSERT |
CONTROL或INSERT和SELECT |
INSERT_UPDATE |
CONTROL或INSERT、SELECT、UPDATE、DELETE |
REPLACE |
CONTROL或INSERT、SELECT、DELETE |
REPLACE_CREATE |
目标表存在时:CONTROL或INSERT、SELECT、DELETE 目标表不存在时:CREATETAB(针对数据库)、USE(针对表空间),以及模式不存在时:IMPLICIT_SCHEMA(针对数据库)或模式存在时:CREATEIN(针对模式) |
CREATE |
CREATETAB(针对数据库)和USE(针对表空间),以及模式不存在时:IMPLICIT_SCHEMA(针对数据库)或模式存在时:CREATEIN(针对模式) |
示例:将sample数据库中的staff表导入到test数据库中。
D:\>db2 export to myfile.ixf of ixf messages msg.txt select * from staff --导出sample数据库中staff表数据
导出的行数:35
D:\>db2look -d sample -e -t staff -o staff.dml –-获得DDL
-- USER 是: *******
-- db2look 实用程序将只考虑指定的表
-- 正在创建表的 DDL
-- 输出被发送到文件: staff.dml
-- 正在自动绑定程序包 ...
-- 绑定成功
-- 正在自动绑定程序包 ...
-- 绑定成功
其中的DDL内容如下:
CREATE TABLE "******"."STAFF" (
"ID" SMALLINT NOT NULL ,
"NAME" VARCHAR(9) ,
"DEPT" SMALLINT ,
"JOB" CHAR(5) ,
"YEARS" SMALLINT ,
"SALARY" DECIMAL(7,2) ,
"COMM" DECIMAL(7,2) )
IN "USERSPACE1" ;
根据DDL,在test数据库中创建staff表。
D:\>db2 import from myfile.ixf of ixf messages msg2.txt insert into staff --向test数据库中的staff表导入数据
读取行数 = 35
跳过行数 = 0
插入行数 = 35
更新行数 = 0
拒绝行数 = 0
落实行数 = 35
D:\>db2 select * from staff --验证导入结果
id name dept job years salary comm
------ --------- ------ ----- ------ --------- ---------
10 Sanders 20 Mgr 7 98357.50 -
20 Pernal 20 Sales 8 78171.25 612.45
30 Marenghi 38 Mgr 5 77506.75 -
40 O'Brien 38 Sales 6 78006.00 846.55
50 Hanes 15 Mgr 10 80659.80 -
60 Quigley 38 Sales - 66808.30 650.25
70 Rothman 15 Sales 7 76502.83 1152.00
80 James 20 Clerk - 43504.60 128.20
90 Koonitz 42 Sales 6 38001.75 1386.70
100 Plotz 42 Mgr 7 78352.80 -
110 Ngan 15 Clerk 5 42508.20 206.60
120 Naughton 38 Clerk - 42954.75 180.00
130 Yamaguchi 42 Clerk 6 40505.90 75.60
140 Fraye 51 Mgr 6 91150.00 -
150 Williams 51 Sales 6 79456.50 637.65
160 Molinare 10 Mgr 7 82959.20 -
170 Kermisch 15 Clerk 4 42258.50 110.10
180 Abrahams 38 Clerk 3 37009.75 236.50
190 Sneider 20 Clerk 8 34252.75 126.50
200 Scoutten 42 Clerk - 41508.60 84.20
210 Lu 10 Mgr 10 90010.00 -
220 Smith 51 Sales 7 87654.50 992.80
230 Lundquist 51 Clerk 3 83369.80 189.65
240 Daniels 10 Mgr 5 79260.25 -
250 Wheeler 51 Clerk 6 74460.00 513.30
260 Jones 10 Mgr 12 81234.00 -
270 Lea 66 Mgr 9 88555.50 -
280 Wilson 66 Sales 9 78674.50 811.50
290 Quill 84 Mgr 10 89818.00 -
300 Davis 84 Sales 5 65454.50 806.10
310 Graham 66 Sales 13 71000.00 200.30
320 Gonzales 66 Sales 4 76858.20 844.00
330 Burke 66 Clerk 1 49988.00 55.50
340 Edwards 84 Sales 7 67844.00 1285.00
350 Gafney 84 Clerk 5 43030.50 188.00
35 条记录已选择。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。