首页 > Linux操作系统 > Linux操作系统 > 将数据加载到数据库中
将数据加载到数据库中
有数种方法可用于向 Oracle 数据库的表中加载数据。此处讨论其中的直接加载插入和 SQL*Loader 这两种方法。
SQL*Loader:
SQL*Loader 将数据从外部文件加载到 Oracle 数据库表中。SQL*Loader 包含一个功能强大的数据分析引擎,该引擎对数据文件中数据的格式几乎没有限制。
直接加载:
直接加载插入可用于在同一数据库中从一个表向另一个表复制数据。此方法绕过数据库缓冲区高速缓存直接将数据写入数据文件,从而加快了插入操作的速度。
串行直接加载:
--------------------------
SQL> create tablespace append_in
2 datafile 'C:\oracle\product\10.2.0\oradata\test\append_in.dbf' size 20M
3 extent management local uniform. size 100K;
表空间已创建。
SQL> create table emp_append tablespace append_in as select * from scott.emp where 1=2
表已创建。
SQL> insert /*+ append */ into emp_append nologging
2 select * from scott.emp;
已创建14行。
SQL> commit;
提交完成。
SQL> select * from emp_append;
---------------------------
并行直接加载:
---------------------------
SQL> alter session enable parallel dml;
会话已更改。
1 insert /*+parallel(emp_append,2)*/
2 into emp_append nologging
3* select * from scott.emp
SQL> /
已创建14行。
SQL> select count(*) from emp_append;
COUNT(*)
----------
28
---------------------------
用SQL*Loader输入数据和数据文件(适用于将数据从外部文件加载到 Oracle 数据库表中)
SQL> create tablespace parallel_in
2 datafile 'C:\oracle\product\10.2.0\oradata\test\parallel_in.dbf' size 10M
3 extent management local uniform. size 50K;
表空间已创建。
SQL> create table dept_parallel tablespace parallel_in as select * from scott.de
pt where 1=2;
表已创建。
SQL> spool c:\dept1.txt
SQL> select deptno || ',' || dname || ',' || loc from scott.dept;
DEPTNO||','||DNAME||','||LOC
---------------------------------------------------------------------
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
SQL> spool off
SQL> select count(*) from dept_parallel;
打开c:\dept1.txt,删除不必要的信息,保留为:
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
将下列内容添加到 c:\dept1.ctl
load data
infile 'dept1.txt'
into table dept_parallel
fields terminated by ','
(deptno,dname,loc)
开始菜单--运行--cmd--切换到C:\目录下:
C:\Documents and Settings\Administrator>cd c:\
C:\>sqlldr 'sys/oracle as sysdba' control=dept1.ctl log=deptlog.log
SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 12月 17 21:25:29 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
达到提交点 - 逻辑记录计数 3
达到提交点 - 逻辑记录计数 4
登录数据库:
C:\>sqlplus sys/oracle as sysdba
SQL> select count(*) from dept_parallel ;
COUNT(*)
----------
3
(少一条数据没有添加进去)
打开C盘找到deptlog.log文件,发现有错误信息(原来是有多余空格,手动清除空格后保存)
可以查看dept1.bad 文件,这里存放的是没有插入成功的数据
再执行:
C:\>sqlldr 'sys/oracle as sysdba' control=dept1.ctl log=deptlog.log
SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 12月 17 21:28:46 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL*Loader-601: 对于 INSERT 选项, 表必须为空。表 DEPT_PARALLEL 上出错
(这是因为没有给追加的命令)
打开c:\dept1.ctl:
load data
infile 'dept1.txt'
append --可用于将数据加载到非空的表中
into table dept_parallel
fields terminated by ','
(deptno,dname,loc)
再执行:
C:\>sqlldr 'sys/oracle as sysdba' control=dept1.ctl log=deptlog.log
SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 12月 17 21:30:57 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
达到提交点 - 逻辑记录计数 3
达到提交点 - 逻辑记录计数 4
登录数据库:
C:\>sqlplus sys/oracle as sysdba
SQL> select count(*) from dept_parallel ;
COUNT(*)
----------
7
(打开C盘找到deptlog.log文件,发现没有错误信息)
《完》
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21021875/viewspace-622744/ ,如需转载,请注明出处,否则将追究法律责任。