Oracle更新生产数据库

And*_*anu 2 sql oracle production-environment

场景:

  • 我有一个巨大的.csv文件(百万行).
  • 使用sqlldr(SQL Loader),我必须创建一个包含CSV中所有数据的临时表.
  • 在此之后,我必须对临时表进行一些处理(大写更新一些列等).
  • 在处理之后,我必须从临时表中获取每一行,进行一些额外的检查并将这些行插入另一个表中(在生产中大量使用).

您如何建议进行所有这些处理,以便我不会影响生产环境的整体性能?

(注意:我不应该预先处理.csv).

任何建议将受到高度赞赏!

Bob*_*ica 10

我知道你说你想要使用SQL Loader,但你可能想看看使用外部表,因为它可能会让事情变得更容易.您可以将外部表声明为类似的东西

create table EXTERNAL_HR_DATA (
    EMPNO    NUMBER(4),
    ENAME    VARCHAR2(10),
    JOB      VARCHAR2(9),
    MGR      NUMBER(4),
    HIREDATE DATE,
    SAL      NUMBER(7,2),
    COMM     NUMBER(7,2),
    DEPTNO   NUMBER(2))
    Organization external
        (type oracle_loader
         default directory testdir
         access parameters (records delimited by newline
                            fields terminated by ‘,’)
         location (‘emp_ext.csv’))
    reject limit 1000;
Run Code Online (Sandbox Code Playgroud)

这将允许您使用标准SELECT语句读取(但不更改)文件中的数据.然后,您可以从外部表中选择SELECT并直接将数据插入到'temp'表中,在INSERT期间至少进行一些编辑:

INSERT INTO TEMP_HR_DATA
  SELECT EMPNO,
         UPPER(TRIM(ENAME)),
         UPPER(TRIM(JOB)),
         MGR,
         HIREDATE,
         SAL,
         COMM,
         DEPTNO
    FROM EXTERNAL_HR_DATA;
Run Code Online (Sandbox Code Playgroud)

分享和享受.