加载数据

来源:互联网 发布:mac 个人文件夹改名 编辑:程序博客网 时间:2024/05/17 21:46

oracle数据库插入数据到表里有2种方法:
1.传统的插入方式:充分使用高水位下的空闲空间
create table bt AS select * from all_objects WHERE 1=0;
INSERT INTO bt SELECT * FROM all_objects;
2.直接路径(短路)插入方式:使用高水位上的空间
INSERT /*+ append */  INTO bt SELECT * FROM all_objects;

直接装载插入:
可正常(串行)或并行插入:并行插入到分区表时,每个分区只能有一个进程;并行插入非分区表时,每个进程分配一个临时segment,commit后由一个协调进程将data合并写入表segment;
可插入分区表、非分区表
可关闭logging

加上/*+ append */就是直接装载插入:
insert /*+ append */ into  xxwz //append意为告诉oracle插入在高水位上的空间,blobk to block
nologging //不起作用,nologging无效,必须alter table hr.employees NOLOGGING;
select * from xxwz_old;
commit;

创建分区表
create table emp
(empno int,
ename varchar2(20)
)
partition by HASH(empno)
(partition part1,
 partition part2
)
产生3个表,一个总表,2个子分区表,数据插入2个子分区表上,可2个进程并发插入。


开启并行插入
alter session enable parallel DML;
并行插入
insert /*+PARALLEL(hr.employees,2) */      //2个并发对应2个子分区表
into hr.employees NOLOGGING     //nologging无效,必须alter table hr.employees NOLOGGING;
select * from hr.old_employees;

set autot on stat开启sql语句执行产生的统计信息

SQL*Loader插件
Bad file:不满足要求的数据错误信息放在这
Discard file:完全不满足基本的数据要求的放在这
Log file:不指定自动生成跟control文件名相同名字以..log结尾的日志文件
control file
datafile


1.把要打入的数据写在控制文件里
在demo1.ctl文件里编写
LOAD DATA
INFILE *
INTO TABLE DEPT
FIELDS TERMINATED BY ','  //数据以为逗号隔开
(DEPTNO,DNAME,LOC)
BEGINDATA
1,Sales,Hengyang
2,Accounting,Hengyang
3,Finance,Hengyang

在cmd打命令
sqlldr userid=u1/bbk control=demo1.ctl log=demo.log

2.把数据独立为data文件
在demo1.ctl文件里编写
LOAD DATA
INFILE demo.data
INTO TABLE DEPT
FIELDS TERMINATED BY ','  //数据以为逗号隔开
(DEPTNO,DNAME,LOC)

在demo.data文件里编写
1,Sales,Hengyang
2,Accounting,Hengyang
3,Finance,Hengyang

在cmd打命令
sqlldr userid=u1/bbk control=demo1.ctl log=demo.log

一般通过shell程序调用sqlloader脚本
判断数据导入状态:Exit Code退出码

原创粉丝点击