oracle 快速插入大量数据

转载自:https://www.cnblogs.com/whylaughing/p/6037938.html

背景:无论在开发调试或者软件测试中,测试数据的准备是调试/测试执行前重要和必要的一个环节,因此以下几种方式可以快速插入大量数据:

第一种方法:

declare 
  -- Local variables here 
  m integer; 
begin 
  -- Test statements here

--输出开始时间 
  dbms_output.put_line('start:'||sysdate); 
  m:=0;

--循环插入的数据量 
  for i in 1..1000000 loop 
   m:=m+1; 
--插入语句,其中'admintest'||m, 为admintest后面加数字,以便标识每条记录都不一样

insert into KF_SEC_USER (USER_ID, GROUP_ID, EXTSYS_USER_ID, USER_NAME, USER_CNAME, PWD, MOBILE, PHONE, EMAIL, DESCRIPTION, ENABLED, HIS_ID, ROLES, TERMINAL_ID) 
values (sys_guid(), '001', null,'admintest'||m, 'admin', '96E79218965EB72C92A549DD5A330112', '13560316185', null, null, null, null, null, null, null);

    commit; 
  end loop; 
--输出结束时间 
  dbms_output.put_line('end:'||sysdate); 
end;

 

第二种方法:

--创建存储过程语句 
CREATE OR REPLACE PROCEDURE p_insert 
IS

--批量提交参数 
num NUMBER;  
BEGIN 
    FOR i IN 1..10000000 LOOP

--插入语句 
       insert into USERINFO (ID, NAME, AGE, ADDRESS, OCCUPATION_NAME) 
values (1, 'ouhy', 25, '广东省佛山市南海区XXXX公司', '测试工程师);   --执行插入 
        num:=num+1;

  --5000笔提交一次,分批量提交,及时释放redo log buffer 
        IF Mod(num,5000)=0 THEN 
           COMMIT; 
        END IF; 
    END LOOP; 
END;

--执行语句

begin 
  p_insert; 
commit; 
  end;

补充:

补充:LGWR的作用是把日志缓存区的数据从内存写到磁盘的REDO文件里,完成数据库对象创建、更新数据等操作过程的记录。
当buffer cache中的数据块被修改后,服务器进程生成redo数据并写入到redo log buffer中。当满足以下条件时,LGWR会将redo log buffer中的条目开始写入在线重做日志:
LGWR进行写操作的情况:
1.用户进程提交一个事务(Commit)
2.日志缓冲区达到1/3范围,或者包含了1MB的缓存重做日志数据
3.要求LGWR切换日志文件
4.出现超时(3秒钟内未活动,则进行一次写操作。)
5.DBWR需要写入的数据的SCN号大于LGWR 记录的SCN号,DBWR 触发LGWR写入
可以使用如下命令查看日志文件位置:
SQL>select group#,member from v$logfile;
posted @ 2018-03-06 20:20  潇雨随缘  阅读(1622)  评论(0编辑  收藏  举报