- 浏览: 243524 次
最新评论
oracle插入大量数据
1.生成大量的随机测试数据
create table mytest as
select rownum as id,
to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as ins_time,
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.string('x', 20) random_string
from dual
connect by level <= 10000;
SQL> col RANDOM_STRING for a30
SQL> select * from mytest where ROWNUM <5;
ID INS_TIME RANDOM_ID RANDOM_STRING
---------- ------------------- ---------- ------------------------------
1 2015-12-23 16:37:49 31 DFJXXVY82FH5FZBLRQGG
2 2015-12-23 16:37:50 54 PJXQG3QNYI3K7NXTCQS2
3 2015-12-23 16:37:51 86 B3RWA8H1VH3683WMNLUH
4 2015-12-23 16:37:52 34 MN438B2ETLSJBLT57IY7
1、利用Oracle特有的“connect by”树形连接语法生成测试记录,“level <= 10”表示要生成10记录;
2、利用rownum虚拟列生成递增的整数数据;
3、利用sysdate函数加一些简单运算来生成日期数据,本例中是每条记录的时间加1秒;
4、利用dbms_random.value函数生成随机的数值型数据,本例中是生成0到100之间的随机整数;
5、利用dbms_random.string函数生成随机的字符型数据,本例中是生成长度为20的随机字符串,字符串中可以包括字符或数字。
create table ta as
select rownum as id, dbms_random.string ('x', 20) name from dual connect by level <= 100000;
SQL> col name for a30
SQL>select * from ta where rownum<10
ID NAME
---------- ------------------------------
1 DLM4OQ0RDZ6HNHKTJTDG
2 BA1TCAPE5WT1O03TKKKE
3 4A4W1JBJHFCOUQIQWCIU
4 MTT1Z9B8247N3HCDTDDU
5 Q22ZNBSLCLN7EEG4JF44
6 NJ7KXP1N3VKNELT95LMC
7 VYFGIORNXHHHWKFOR4NQ
8 7C8R7HGKZ3GEEKK67Z7V
9 6I50G0C6PH0DYV32GW0I
9 rows selected.
2.如何快速插入:
SQL> set timing on
SQL> create table tb(id int,name varchar2(20));
SQL> insert into tb select * from ta;
100000 rows created.
Elapsed: 00:00:00.86
使用hint缩短插入时间
SQL> insert /*+Append*/ into tb select * from ta;
100000 rows created.
Elapsed: 00:00:00.13
3.如何批量提交:
1)模拟逐行提交效率(ta表有10w行数据,tb表为空)
DECLARE
BEGIN
FOR cur IN (SELECT * FROM ta) LOOP
INSERT INTO tb VALUES cur;
COMMIT;
END LOOP;
END;
/
PL/SQL procedure successfully completed.
Elapsed: 00:00:16.38 --16s的时间
2)模拟批量提交效率(ta表有10w行数据,tb表为空)
truncate table tb;
DECLARE
v_count NUMBER;
BEGIN
FOR cur IN (SELECT * FROM ta) LOOP
INSERT INTO tb VALUES cur;
v_count := v_count + 1;
IF v_count >= 1000 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
/
PL/SQL procedure successfully completed.
Elapsed: 00:00:07.89 ---7s的时间
数据量小的时候,差别可能不大,但数据量大的时候,就能明显看到区别了。
3)另一种高速提交的方法(使用游标)
DECLARE
CURSOR cur IS
SELECT * FROM ta;
TYPE rec IS TABLE OF ta%ROWTYPE;
recs rec;
BEGIN
OPEN cur;
WHILE (TRUE) LOOP
FETCH cur BULK COLLECT
INTO recs LIMIT 100;
FORALL i IN 1 .. recs.COUNT
INSERT INTO tb VALUES recs (i);
COMMIT;
EXIT WHEN cur%NOTFOUND;
END LOOP;
CLOSE cur;
END;
/
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.62 ---1s的时间都不要
说明:频繁的COMMIT会引起大量Redo Log的物理I/O,会极大的限制数据库的性能。因此,为提高数据库性能,尽可能的批量提交。
1.生成大量的随机测试数据
create table mytest as
select rownum as id,
to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as ins_time,
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.string('x', 20) random_string
from dual
connect by level <= 10000;
SQL> col RANDOM_STRING for a30
SQL> select * from mytest where ROWNUM <5;
ID INS_TIME RANDOM_ID RANDOM_STRING
---------- ------------------- ---------- ------------------------------
1 2015-12-23 16:37:49 31 DFJXXVY82FH5FZBLRQGG
2 2015-12-23 16:37:50 54 PJXQG3QNYI3K7NXTCQS2
3 2015-12-23 16:37:51 86 B3RWA8H1VH3683WMNLUH
4 2015-12-23 16:37:52 34 MN438B2ETLSJBLT57IY7
1、利用Oracle特有的“connect by”树形连接语法生成测试记录,“level <= 10”表示要生成10记录;
2、利用rownum虚拟列生成递增的整数数据;
3、利用sysdate函数加一些简单运算来生成日期数据,本例中是每条记录的时间加1秒;
4、利用dbms_random.value函数生成随机的数值型数据,本例中是生成0到100之间的随机整数;
5、利用dbms_random.string函数生成随机的字符型数据,本例中是生成长度为20的随机字符串,字符串中可以包括字符或数字。
create table ta as
select rownum as id, dbms_random.string ('x', 20) name from dual connect by level <= 100000;
SQL> col name for a30
SQL>select * from ta where rownum<10
ID NAME
---------- ------------------------------
1 DLM4OQ0RDZ6HNHKTJTDG
2 BA1TCAPE5WT1O03TKKKE
3 4A4W1JBJHFCOUQIQWCIU
4 MTT1Z9B8247N3HCDTDDU
5 Q22ZNBSLCLN7EEG4JF44
6 NJ7KXP1N3VKNELT95LMC
7 VYFGIORNXHHHWKFOR4NQ
8 7C8R7HGKZ3GEEKK67Z7V
9 6I50G0C6PH0DYV32GW0I
9 rows selected.
2.如何快速插入:
SQL> set timing on
SQL> create table tb(id int,name varchar2(20));
SQL> insert into tb select * from ta;
100000 rows created.
Elapsed: 00:00:00.86
使用hint缩短插入时间
SQL> insert /*+Append*/ into tb select * from ta;
100000 rows created.
Elapsed: 00:00:00.13
3.如何批量提交:
1)模拟逐行提交效率(ta表有10w行数据,tb表为空)
DECLARE
BEGIN
FOR cur IN (SELECT * FROM ta) LOOP
INSERT INTO tb VALUES cur;
COMMIT;
END LOOP;
END;
/
PL/SQL procedure successfully completed.
Elapsed: 00:00:16.38 --16s的时间
2)模拟批量提交效率(ta表有10w行数据,tb表为空)
truncate table tb;
DECLARE
v_count NUMBER;
BEGIN
FOR cur IN (SELECT * FROM ta) LOOP
INSERT INTO tb VALUES cur;
v_count := v_count + 1;
IF v_count >= 1000 THEN
COMMIT;
END IF;
END LOOP;
COMMIT;
END;
/
PL/SQL procedure successfully completed.
Elapsed: 00:00:07.89 ---7s的时间
数据量小的时候,差别可能不大,但数据量大的时候,就能明显看到区别了。
3)另一种高速提交的方法(使用游标)
DECLARE
CURSOR cur IS
SELECT * FROM ta;
TYPE rec IS TABLE OF ta%ROWTYPE;
recs rec;
BEGIN
OPEN cur;
WHILE (TRUE) LOOP
FETCH cur BULK COLLECT
INTO recs LIMIT 100;
FORALL i IN 1 .. recs.COUNT
INSERT INTO tb VALUES recs (i);
COMMIT;
EXIT WHEN cur%NOTFOUND;
END LOOP;
CLOSE cur;
END;
/
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.62 ---1s的时间都不要
说明:频繁的COMMIT会引起大量Redo Log的物理I/O,会极大的限制数据库的性能。因此,为提高数据库性能,尽可能的批量提交。
发表评论
-
ETL工具--kettle简介
2016-02-24 11:21 0oracle ETL工具---数据迁移 常用的有:OWB(o ... -
oracle 游标实例
2015-12-31 17:23 1228oracle游标 游标-----内存 ... -
10053事件分析
2015-12-25 17:37 8161)10053介绍: 10053 事件是oracle 提供的用 ... -
oracle绑定变量学习
2015-12-25 17:01 1621绑定变量(binding variable) ... -
oracle 绑定变量
2015-12-24 17:26 0关键词: 绑定变量(binding variable),共享池 ... -
ORA-03113:end-of-file on communication channel
2015-12-23 14:32 1179测试上面的一个库 plsql报错:shared memory ... -
oracle分区表【转】
2015-12-23 14:20 465oracle分区表 1.表空间及 ... -
迁移数据文件到ASM【转】
2015-12-23 11:53 8001.迁移数据文件到ASM 1) ... -
adrci命令
2015-12-23 11:46 3107一、adrci说明 在oracle11g中,dump ... -
用户+角色+权限
2015-12-21 17:58 925角色与用户权限的学习 ... -
oracle database link
2015-12-21 17:08 908目前我的数据库里只有tinadb一个实例,要创建db link ... -
oracle回收站
2015-12-21 14:22 461oracle回收站 1.drop table books; ... -
使用nid修改sid和dbname
2015-12-21 15:29 810如非必要,不建议在生产库上对dbid进行修改 1、修改dbi ... -
rman模拟故障恢复实验
2015-12-18 16:08 1188补充1:restore database和recover da ... -
rman命令学习-tina(下)
2015-12-18 16:07 1191五、rman删除 delete命令 删除相关的 ... -
rman命令学习-tina(上)
2015-12-18 16:06 921RMAN学习-tina rman的功能非常强大,下面我们来一 ... -
oracle profile介绍
2015-12-16 17:34 656profile文件的介绍: Oracle系统中的profi ... -
oracle缩小表空间
2015-12-18 16:59 1795oracle缩小表空间: oracle常用的此类命令Alte ... -
oracle数据库的启动和关闭【转】
2015-12-16 15:02 1176数据库的启动和关闭 Or ... -
oracle的主要进程
2015-12-16 14:21 1293[size=small]oracle的主要进程 Oracle实 ...
相关推荐
根据给定文件的信息,“Oracle插入大量数据”的主题围绕着几种有效的策略展开,旨在提升Oracle数据库在大数据量场景下的性能表现。 ### 高速存储设备的应用 首先提及的是采用高速的存储设备来提升读写能力。EMC和...
数据库做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条 SQL快速生成大量的测试数据的方法。 产生测试数据的SQL如下...
通过优化这一过程,可以显著提升应用程序的性能,特别是在处理大量数据时。以下是对“java批量插入Oracle数据方法”的深入解析,包括代码示例及其背后的原理。 ### 一、Java批量插入Oracle数据方法概览 在Java中,...
oracle 批量插入数据存储过程。亲测好用。支持 plsql ,toad,等数据库分析软件。主要包括变量的定义,循环及游标的使用等, 亲测好用
此方法将大量数据一次性加载到PL/SQL表变量中,然后逐条插入。 七、文件导入 在实际操作中,可能需要从外部文件(如`.sql`文件)导入数据。比如`ts_code_20110316.sql`和`ts_msg_20110316.sql`这样的文件,通常包含...
- 考虑到性能和效率,对于大量数据的插入或更新操作,可以采用批处理方式,一次执行多条记录的操作,减少数据库交互次数,提高整体性能。 总之,向Oracle数据库插入或更新Clob大段文本是一个涉及SQL语句构建、参数...
在数据库操作中,批量插入大量数据是常见的性能优化策略,特别是在大数据处理或系统初始化时。批量插入能够显著减少网络通信次数,提升效率,降低数据库事务的开销。本例展示了如何在4秒内高效地插入10万条数据,...
当插入大量相似数据时,使用绑定变量能有效防止SQL语句硬解析,提高执行效率。例如,使用PL/SQL匿名块,将大字段作为参数传递。 4. **使用流接口**: 对于非常大的字段,可以利用Oracle的流API(PLS_INTEGER型...
在C#.NET中批量插入大量数据到数据库是一个常见的任务,特别是在处理诸如从Excel文件导入数据等场景时。这里,我们将探讨如何使用C#.NET高效地完成这个任务,并提供一个简单的示例来说明整个过程。 首先,我们需要...
在Oracle数据库管理中,有时我们需要向数据库表中插入大量的随机数据来进行测试、演示或者数据模拟分析等工作。本篇文章将详细介绍如何利用自定义的Oracle函数来实现这一功能。 #### 自定义Oracle函数 为了实现向...
3. **FORALL**:在收集了大量数据后,可以使用FORALL语句一次性将它们插入到数据库中,避免了循环中的单次插入,提高了性能。 4. **绑定变量**:在Oracle中,绑定变量可以用来提高查询性能,减少解析次数。在批量...
### Java代码实现Oracle...这种方式相比于逐条插入数据,可以显著提升插入速度,特别是在需要插入大量数据的情况下效果更加明显。同时,通过禁用自动提交和批量处理的方式,减少了网络往返次数,进一步提高了执行效率。
而Oracle数据库则是一种关系型数据库管理系统,用于存储、管理和检索大量结构化数据。 要将Excel数据导入Oracle,主要有以下几种方法: 1. **使用SQL*Loader**:Oracle的SQL*Loader是批量加载数据的强大工具。你...
在Oracle数据库中插入图片涉及到BLOB(Binary Large Object)数据类型,这是Oracle用来存储大量二进制数据,如图片、音频或视频文件等的一种方式。本文将详细介绍如何在Oracle数据库中插入、查询和管理图片。 首先...
Oracle大数据量操作性能优化是指在处理大量数据时,如何提高 Oracle 数据库的性能。该优化技术涉及到多个方面,包括分区、Direct Insert、并行和排序处理等。 分区是 Oracle 中的一种优化技术,可以将大型表分割成...
在Oracle数据库管理中,生成大量测试数据是进行性能测试、数据建模以及验证查询效率等场景下不可或缺的一环。本文将深入探讨如何利用一条SQL语句在Oracle中快速生成10万条测试数据,这对于数据库管理员和开发人员来...
5. **第三方工具**:如Data Generator for Oracle,可以生成符合特定模式的大量数据,包括模拟日期、字符串、数字等。 测试数据的质量直接影响到测试的覆盖率和准确性。因此,创建测试数据时应考虑以下几点: - **...
在处理大量数据时,性能优化显得尤为重要。可以考虑将数据分块读取,或者使用Oracle的批量插入功能。此外,如果Excel文件非常大,还可以考虑先将数据导出为CSV文件,然后通过SQL*Loader等工具快速导入到Oracle数据库...
批量同步则是在特定时间点进行一次性的大量数据迁移,比如在业务低峰期。 对于“mysql-oracle数据同步”这个主题,我们可以采用以下几种方法: 1. **使用ETL工具**:Extract, Transform, Load(ETL)工具如...
这种方法适用于需要插入大量数据的情况,并且可以通过循环结构灵活控制插入的数据量。 ```sql DECLARE v_index NUMBER := 1; -- 定义变量用于记录当前插入的序号 BEGIN LOOP IF v_index 设置插入的上限为5000条 ...