代码之家  ›  专栏  ›  技术社区  ›  JLLMNCHR

如何在Oracle中将大型表导出/假脱机到文件

  •  1
  • JLLMNCHR  · 技术社区  · 6 年前

    在Oracle中,将大表(4300万条记录)导出/假脱机到单个文件的方便方法是什么?

    (一旦我们获得导出的文件,目的是在Solaris和kshell中运行的Shell脚本中处理它,但这是另一个历史记录)。

    我们的第一次尝试生成了一个空文件:

    SET   NEWPAGE       0;
    SET   LINESIZE    169;
    SET   PAGESIZE      0;
    SET   VERIFY      OFF;
    SET   TERMOUT     OFF;
    SET   COLSEP       '';
    SET   FEEDBACK    OFF;
    SET   HEADING     OFF;
    
    SPOOL THE_MONSTER_FILE.txt;
    
    SELECT
        a.field1, a.field2, b.field1, b.field2
    FROM
        tableA a, tableB b,
    WHERE
        a.id = b.id(+);
    
    SPOOL OFF;
    COMMIT;
    EXIT;
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Matheus Canon    6 年前

    可以将结果集导出到CSV文件中。创建一个shell脚本,让它在后台运行,如下所示:

    #!/bin/bash
    cat <<EOF > THE_MONSTER_SCRIPT.sql
    SET COLSEP ;
    SET HEADSEP OFF
    SET VERIFY OFF
    SET HEADING OFF
    SET ECHO OFF
    SET FEEDBACK OFF
    SET LONG 2000000000
    SET LINESIZE 1000
    SET PAGESIZE 0
    SET TRIMSPOOL ON
    
    SPOOL THE_MONSTER_FILE.csv;
    
    SELECT
        a.field1, a.field2, b.field1, b.field2
    FROM
        tableA a, tableB b,
    WHERE
        a.id = b.id(+);
    
    SPOOL OFF
    
    EXIT
    EOF
    
    nohup sqlplus system/password@INSTNAME @THE_MONSTER_SCRIPT.sql &
    

    如果结果集中的任何列的值中有列分隔符,则必须用双引号将列括起来,用两个双引号替换列值中的双引号。例子:

    /*
     * ----------------
     * | col1  | col2 |
     * ----------------
     * | a"a;a | aaa  |
     * | bbb;b | b"b  |
     * ----------------
     */
    

    将变成:

    /*
     * "a""a;a";"aaa"
     * "bbb;b";"b""b"
     */
    
        2
  •  0
  •   Mr. Bhosale    6 年前

    在SSIS软件包的帮助下,您可以轻松完成这项工作。

    检查链接 Here .