通过sqlplus导入大型SQL转储

时间:2012-10-25 14:50:21

标签: sql oracle oracle10g sqlplus dump

有.sql格式的转储,要导入到服务器。从工具只有sqlplus。问题是sqlplus要求在每个CREATE TABLE为/之后且仅在/开始创建表之后。转储看起来像这样:

DROP TABLE ...;
CREATE TABLE ...;
INSERT INTO ...;
...
DROP TABLE ...;
CREATE TABLE ...;
INSERT INTO ...;
...
...

当涉及INSERT时,没有插入任何内容,因为没有创建表。编辑文件是不可能的,因为它是一个大(~700 MB)。如何导入转储?

1 个答案:

答案 0 :(得分:2)

给定文件/tmp/foo.sql:

CREATE TABLE foo (
    a integer primary key,
    b integer
);

INSERT INTO foo VALUES (1, 2);

运行sqlplus:

$ sqlplus user/pass@db @/tmp/foo

SQL*Plus: Release 11.2.0.2.0 Production on Thu Oct 25 10:54:39 2012

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


Connected to:
Oracle9i Release 9.2.0.4.0 - 64bit Production
JServer Release 9.2.0.4.0 - Production


Table created.


1 row created.

SQL>

听起来你已经在某处设置了分隔符/。将其更改回;

如果您需要编辑文件,可以使用perl -p -E "s/pattern/replacement/" oldfile.sql > newfile.sql或类似文件进行编辑。 (或者,老实说,许多编辑器可以在具有许多GB RAM的现代机器上处理700MB文件。)