oracle报错imp报错00008,Oracle imp导入数据时报IMP-00032与IMP-00008的解决方法

当尝试使用Oracle原始import工具(imp)导入大型数据时,可能会遇到IMP-00032(SQL语句超过缓冲区长度)和IMP-00008(导出文件中未识别的语句)错误。这通常由于DDL语句过长导致。解决方案是通过在imp命令中增加BUFFER参数的大小,例如设置为100000,以成功导入数据。
摘要由CSDN通过智能技术生成

Oracle imp导入数据时报IMP-00032与IMP-00008的解决方法

Symptoms

You try to import an export dump using the original import utility (imp) and received the errors:

IMP-00032: SQL statement exceeded buffer length

IMP-00008: unrecognized statement in the export file

Let's follow the next example that demonstrates this.

-- create a big table (with a large DDL, 1000 columns) in schema test

connect test/test

create table big_table

(

col000000000000000000000000001 varchar2(4000) not null,

col000000000000000000000000002 varchar2(4000) not null,

col000000000000000000000000003 varchar2(4000) not null,

col000000000000000000000000004 varchar2(4000) not null,

col000000000000000000000000005 varchar2(4000) not null,

col000000000000000000000000006 varchar2(4000) not null,

col000000000000000000000000007 varchar2(4000) not null,

col000000000000000000000000008 varchar2(4000) not null,

col000000000000000000000000009 varchar2(4000) not null,

col000000000000000000000000010 varchar2(4000) not null,

.... 1000 columns

col000000000000000000000001000 varchar2(4000) not null

);

-- insert one row into table

declare

i number := 1;

begin

insert into big_table values

(

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

lpad (to_char (i), 1000, '0'),

.... 1000 columns

lpad (to_char (i), 1000, '0')

);

commit;

end;

/

Export the table with:

#> exp test/test file=big_table.dmp tables=big_table

This ends with:

Export: Release 11.1.0.7.0 - Production on Mon Jun 22 11:52:53 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...

. . exporting table          BIG_TABLE           1 rows exported

Export terminated successfully without warnings.

Drop the table in schema TEST and import it back from written dump with:

#> imp test/test file=big_table.dmp tables=big_table

This ends with:

Import: Release 11.1.0.7.0 - Production on Mon Jun 22 11:53:55 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.01.00 via conventional path

import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set

. importing TEST's objects into TEST

IMP-00032: SQL statement exceeded buffer length

IMP-00032: SQL statement exceeded buffer length

IMP-00008: unrecognized statement in the export file:

R2(4000) NOT NULL ENABLE, "COL000000000000000000000000945" VARCHAR2(4000) NOT

NULL ENABLE, "COL000000000000000000000000946" VARCHAR2(4000) NOT NULL ENABLE, "C

OL000000000000000000000000947" VARCHAR2(4000) NOT NULL ENABLE, "COL0000000000000

00000000000948"...

IMP-00032: SQL statement exceeded buffer length

IMP-00008: unrecognized statement in the export file:

000000000000000000000000000000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000000000000000000000000000

00000000000000000000000000000000000000000000000000000000000000000000000000000000

000000000000000...

. importing TEST's objects into TEST

Import terminated successfully with warnings.

Cause

The internal BUFFER (default 32 KB, if not specified in imp command line) is also used to transfer the DDL statements from export dump file to Oracle server. If the DDL exceeds the BUFFER length, then IMP-32 is raised.

To obtain the DDL length run at export (source) site the statement:

select dbms_lob.getlength (dbms_metadata.get_ddl ('TABLE', 'BIG_TABLE', 'TEST')) "SQL_LENGTH" from dual;

SQL_LENGTH

----------

67270

1 row selected.

The length of the DDL statement is in this case 67270 bytes, which exceeds the default BUFFER length (30720 bytes ~ 32 KB).

Solution

Increase the BUFFER size:

#> imp test/test file=big_table.dmp tables=big_table buffer=100000

and the import succeeds:

Import: Release 11.1.0.7.0 - Production on Mon Jun 22 12:10:15 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V11.01.00 via conventional path

import done in WE8MSWIN1252 character set and AL16UTF16 NCHAR character set

. importing TEST's objects into TEST

. importing TEST's objects into TEST

. . importing table          "BIG_TABLE"          1 rows imported

Import terminated successfully without warnings.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值