1

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

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

当涉及到 INSERT 时,没有插入任何内容,因为没有创建表。无法编辑该文件,因为它很大(约 700 MB)。如何导入转储?

4

1 回答 1

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 的文件)。

于 2012-10-25T14:56:17.200 回答