导航:首页 > 网络数据 > oracleinsert大数据

oracleinsert大数据

发布时间:2022-12-28 02:40:30

1. Oracle中怎么插入大数据量记录

1、你的同步方式是insert还是update,还是两者都有? 2、你是从jcpttest同步到test,还是反过来?还是两者都有?内 3、如果单纯的从一个实例容中的一张表,插入到另一个实例中的一张表,不会有数据丢失问题的,建议你查看数据库性能方面的问题。 4、单主键,插入时是不是有重复记录?所以丢弃掉了。你怎么确定数据丢失严重?select count(*) from test;确认的数据量?如果遇到重复的肯定就丢弃掉了。

2. oracle 大数据插入效率问题

select * from mytable t where 1=1 and t.name='abc'
select * from mytable t where t.name='abc'

我实例测试了一来下,这两句执自行效率结果是一样的

对于上面千万数据集我觉得你的方法很好了。
如果说最快的话你只能删除表重建,如:
Create table B as
select * from A
这应该是最快的了。但是不知道是否能符合你的要求

3. 浅谈Oracle中大数据量表的管理

简介

随着信息业的发展 在企业级数据库应用中 经常会有一些几十GB 上百GB的数据表 这些大数据量表的设计 维护及其备份都是数据库管理中的重点及其难点 本文就从设计 维护及其备份方面探讨一下大数据量表的管理

设计

大表时效性

大数据量表的数据量一般来说是跟时间成正比的 时间越久 数据量越大 在设计阶段首先要考虑这些大表的时效性

通常情况 在一定的时间区间 数据的访问频度比较大 超过这个区间 数据的访问频度极小 这个时间区间根据不同的应用类型而不同 通常是几个月 超过这个时间区间的数据可以认为是历史数据 数据访问的可能性不打 在企业应用中 并不是所有的数据都需要保留在生产数据库中 对于这些历史数据 可以考虑离线存放 或者是存放在另外的数据库中 比如数据仓库等

大表的时效性可以通过在表上加时间戳列来实现

使用分区表

Oracle 以后提供了分区表的功能 分区表可以把一个表的数据从物理和逻辑上分割成小的区域 Oracle支持非常大的分区表 一个对象可以允许多达 个分区 对于大表来说 使用分区表是首选方案 分区表可以改善表的维护 备份 恢复及查询性能

分区表有 种分区方式

n Range Partitioning

n Hash Partitioning

n Composite Partitioning

n List Partitioning

对于有时效性的大表 可以采用按时间分区的 Range Partitioning表 例如按天分区的分区表

CREATE TABLE Test(

DATATIME DATE NOT NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

P NUMBER NULL

CONSTRAINT PK_TEST PRIMARY KEY (datatime p p ) USING INDEX LOCAL TABLESPACE USERINDEX

)

PARTITION BY RANGE (DATATIME)

(PARTITION Test_ VALUES LESS THAN (TO_DATE( YYYY MM DD ))

(PARTITION Test_ VALUES LESS THAN (TO_DATE( YYYY MM DD ))

……

);

对于按时间分区仍然不能满足性能需求的表 还可以根据应用需求 使用子分区对表进一步细化

应用设计中 要充分利用分区表的特性 对大表的访问要完全避免全表访问 缩小访问范围 在查询条件中 尽量使用分区的列

维护

大表的维护工作比较繁琐 索引的维护 存储空间的维护 历史数据的清理等等 使用分区表可以简化大表的维护工作 但是如果表很多的话 手动的创建 删除分区也是一件很繁琐 而且容易出错的事情

此章节以按天分区的分区表为例讨论大表的自动维护

分区表的命名规则

分区表分区的命名应当按照一定的规则命名 以利于自动维护的实现 本例采用按天分区的分区表 分区的命名方式为TABLENAME_YYMMDD 例如 TEST表的 年 月 日的分区命名为TEST _

维护字典

在数据库中创建维护字典表 存放需要自动维护的分区表的信息 包括表名 schema 表的类型 数据在数据库中的保留时间等信息

Table Name: H_RETENTION

Column Type Null? Description

tablename Varchar ( ) Not null 表名

schemaname Varchar ( ) Not null Schema

typeid Varchar ( ) Not null 表类型 PARTITION NORMAL …

retention Number( ) Not null 该表的保存天数

自动创建分区

对于按时间分区的分区表 若不能及时创建新的数据分区 会导致数据无法插入到分区表的严重后果 数据库会产生报错信息ORA : inserted partition key does not map to any partition 插入失败

创建分区可以手工创建 也可以根据维护字典 通过系统的任务调度来创建分区 通常是在月底创建下个月的分区

自动创建分区实现如下

/**************************************************************************

Program Name:Add_Partition

Description:

创建某个用户下个月的所有分区

***************************************************************************/

PROCEDURE add_partition (v_schema IN VARCHAR )

IS

CURSOR c_td_table

IS

SELECT tablename

FROM h_retention

WHERE typeid = PARTITION

AND schemaname = UPPER (v_schema)

ORDER BY tablename;

v_cur BINARY_INTEGER;

v_int BINARY_INTEGER;

v_partition VARCHAR ( );

v_date DATE;

v_days NUMBER;

sql_stmt VARCHAR ( ); String used to save sql statement

err_msg VARCHAR ( );

BEGIN

v_date := TRUNC (ADD_MONTHS (SYSDATE ) MM );

v_days :=

TO_NUMBER (TO_CHAR (LAST_DAY (ADD_MONTHS (SYSDATE )) DD ));

v_cur := DBMS_SQL open_cursor;

FOR v_table IN c_td_table

LOOP

v_date := TRUNC (ADD_MONTHS (SYSDATE ) MM );

v_partition := v_table tablename;

FOR i IN v_days

LOOP

BEGIN

sql_stmt :=

ALTER TABLE

|| v_schema

||

|| v_table tablename

|| ADD PARTITION

|| v_partition

|| _

|| TO_CHAR (v_date YYMMDD )

||

|| VALUES LESS THAN (TO_DATE(

|| TO_CHAR (v_date + YYYY MM DD )

|| YYYY MM DD )) ;

DBMS_SQL parse (v_cur sql_stmt DBMS_SQL native);

v_int := DBMS_SQL EXECUTE (v_cur);

EXCEPTION

WHEN OTHERS

THEN

err_msg :=

v_partition

|| : Create

|| TO_CHAR (v_date YYMMDD )

|| partition unsuccessfully! Error Information:

|| SQLERRM;

log_insert (err_msg); You can define your own log_insert function

MIT;

END;

v_date := v_date + ;

END LOOP;

END LOOP;

DBMS_SQL close_cursor (v_cur);

END;

自动删除过期分区

为了释放存储空间并提高大表的性能 要从数据库中删除大表中过期的历史数据 删除操作可以手工执行 也可以通过系统的任务调度来自动删除 分区表数据删除只需要删除相应的数据分区 与delete相比 有如下好处

u 速度快

u 占用回滚表空间少

u 产生日志量少

u 释放空间

如果有global的索引 删除分区后需要重建索引

自动删除分区实现如下

lishixin/Article/program/Oracle/201311/18275

4. oracle怎么批量insert数据

80万条,直接执行不就可以了吗?
比如你的数据在tablename2中。
insert into tablename1(c1,c2,...)
slect * from tablename2(ca,cb,...);
不知道你的数据现在在哪里,如果在别处的话,就用代码呗。或者用procere吧。
可以读一条插一条,80万数据也不是很多呀。
代码大概这样吧:
sprintf(str_sql,insert into tablename1(c1,c2,c3,..) values (:v1,:v2,:v3,..));
EXEC SQL prepare s1 from :str_sql;
EXEC SQL EXECUTE s1 USING a1,a2,a3...;
不知道我说的对你有用不,但愿能帮助你,就是担心我没有搞清楚,是要直接在PLSQL中执行的话,我觉得就直接插入就可以了呀。

5. oracle 大量数据insert操作怎么提高效率

1、使用hint提示:/*+append*/,减少redo的生成
2、临时disable掉表上的索引,约束,触发器等
3、系统压力不大多cpu情况下,可以考虑开并发
4、可以考虑单独建一个回滚段给这个事务使用

6. Oracle insert插入超400字段

用clob即可。
不过插入超过4000字符的字符串的话,需要用读文件方式来插入,即把这个超过4000的字符串写入一个文件中,然后插入这个文件到clob字段中,可以查查clob插入的有关资料。

7. 如何向Oracle数据库表中进行大数据量的插入并提交

一次折腾几千万的话, 那么设置一下, 有 20W了, 就自动提交一下。
set autocommit on;
set autocommit 200000;

然后,假如你回的目标数据库, 是归档的答话, 可以

INSERT /*+ append */ INTO 目标表 nologging SELECT * FROM 源表@DBLINK;

commit;
set autocommit off;

假如你的 目标表 上面, 有 索引的话, 建议先删除 索引。
等 上面的 INSERT 语句执行完毕后, 再重建索引。

8. 在Oracle中,通过一个INSERT ALL语句批量插入数据

Oracle:
INSERT ALL
INTO A(field_1,field_2) VALUES (value_1,value_2)
INTO A(field_1,field_2) VALUES (value_3,value_4)
INTO A(field_1,field_2) VALUES (value_5,value_6)
SELECT 1 FROM DUAL;

在Mybatis中使用
<insert id="insertData" parameterType="java.util.List"
useGeneratedKeys="false">
INSERT ALL
<foreach item="item" index="index" collection="list">
INTO T_GZL_BZ
(
ID,
JGH,
JGMC,
DW,
JGLX,
BZLB,
JGZWLB,
EDGZL,
ZGGZL,
BZ,
CJRBH,
CJRXM,
CJSJ,
SFSZ
) VALUES
(
#{item.id,jdbcType=VARCHAR},
#{item.teacherId,jdbcType=VARCHAR},
#{item.teacherName,jdbcType=VARCHAR},
#{item.departmentId,jdbcType=VARCHAR},
#{item.teacherType,jdbcType=VARCHAR},
#{item.compilationCategory,jdbcType=VARCHAR},
#{item.jobCategory,jdbcType=VARCHAR},
#{item.ratedWorkload,jdbcType=NUMERIC},
#{item.maxWorkload,jdbcType=NUMERIC},
#{item.remark,jdbcType=VARCHAR},
#{item.creator,jdbcType=VARCHAR},
#{item.creatorName,jdbcType=VARCHAR},
#{item.createTime,jdbcType=DATE},
#{item.settings,jdbcType=VARCHAR}
)
</foreach>
SELECT 1 FROM DUAL
</insert>

mapper:
/**
* @param createList
* @return
*/
int insertData(@Param("list") List<WorkloadStandardDto> createList);

9. oracle 如何复制大数据量的数据

Oracle 9/10
可以使用 exp 导出 Imp 导入

===== 导出、导入 单个表的情况。

导出 TEST_MAIN,TEST_SUB 这2个表
EXP test/test@源数据库 file=test.dmp tables=(TEST_MAIN,TEST_SUB)

导入 TEST_MAIN,TEST_SUB 这2个表
IMP test2/test2@目标数据库 file=test.dmp tables=(TEST_MAIN,TEST_SUB)

==============================

Oracle 10g 开始, 新增数据泵工具 导出导入 的工具.

前面需要一些 环境配置

数据泵工具导出的步骤:
1、创建DIRECTORY
create directory dir_dp as 'C:/OracleData'

2、授权
Grant read,write on directory dir_dp to obpos;

EXPDP 按表导出:

EXPDP obpos/obpos tables="OBPOS"."ROOM","OBPOS"."ROOMBOOKD" mpfile=expdp_Room.dmp logfile=expdp_Room.log directory=dir_dp job_name=my_job

授权
Grant read,write on directory dir_dp to test;

IMPDP 按表导入:
impdp obpos/obpos mpfile=obpos.dmp logfile=obpos.log directory=dir_dp tables=MR_USER job_name=my_job

10. oracle的大量数据insert操作怎么提高效率

1、使用hint提示:/*+append*/,减少redo的生成x0dx0a2、临时disable掉表上的索引,约束,触发器等x0dx0a3、系统压力不大多cpu情况下,可以考虑开并发x0dx0a4、可以考虑单独建一个回滚段给这个事务使用

阅读全文

与oracleinsert大数据相关的资料

热点内容
excel如何合并两格数据 浏览:424
求一个好看的qq分组 浏览:850
intsum编程是什么意思 浏览:782
没有大数据如何贷款 浏览:29
衣服补丁是哪个文件 浏览:234
docker映射路径文件 浏览:280
多文件格式支持多级权限管控 浏览:907
什么网站能翻译中文 浏览:677
查看win10数字激活 浏览:324
车商悦怎么下载app 浏览:797
有人微信骚扰我老婆 浏览:47
dxe文件数据如何导入cad 浏览:988
vb字体标准还原代码 浏览:394
乐高机器人编程属于什么类 浏览:102
iphone4s固件怎么区分 浏览:953
win10用不了钉钉 浏览:202
xp系统硬盘安装win10系统安装教程 浏览:616
万象会员资料保存哪个文件 浏览:800
json文件的读取数据 浏览:463
js字符串中加法 浏览:685

友情链接