㈠ ORACLE 更新大的表,每3000行commit一次

UPDATE C_TABLE C SET C.NAME1= C.NAME2 WHERE C.NAME2 IS NOT NULL AND ROWNUM <= 3000;
你的条件,C.NAME2 IS NOT NULL ,所能查询出的数据始终没变,再加上ROWNUM <= 3000,也是结果始终未变,要么第二次查询3000-6000,或者查询的字段NAME2发生变化,使得数据查询结果变化。

㈡ oracle 大数据量update优化方案

sql 写法有问题的,aa 表读了两次。
改写成如下试试
UPDATE aa

SET TRADE_STATUS = '0'
where exists (
select 1 from bb d where d.id= c.id and d.state= c.state
and d.DAY = '20150503'
) and c.TYPE = '1' AND c.PAYDATE is null;

bb 表上的 id 、 state 和 DAY 上应建组合索引,这样子查询效率很高。
aa 表上 TYPE 可以根据数据量考虑是否建索引;如果 TYPE =1 占比很小 (比如小于 1/30 建索引可能快些,否则 全表扫描 一次读取多个数据块;可能全表扫描效率更好)

㈢ 高分求助:oracle 大表更新,大约200万,insert和update太慢,如何解决

简单的看看搂主的描述 "需要从B表中一条一条去A表中核实"
我估计是用 游标来处理的。
如果用游标一行一行 FETCH , 性能可能要打点折扣。
这种情况下,可以尝试使用 BULK COLLECT 来批量加载。
下面是 Oracle 游标处理II - 使用BULK COLLECT 的例子。
http://hi..com/wangqing999/blog/item/2ea041cc0d4606037e3e6f20.html

又看了一下逻辑, 要是存在的话,更新,没有的话就插入。
如果没有其他的复杂的逻辑的话,那么用 MERGE 语句,可以直接处理掉。
下面是 MERGE 的例子
http://hi..com/wangqing999/blog/item/2879207af3e388370cd7da86.html

㈣ 用oracle怎么更新表中的全部数据

update table set 。。。。
不加where条件就是全表更新

㈤ oracle中如何全量update数据

createorreplaceprocerecreate_table(Ainvarchar2,Binvarchar2)as
v_sqlvarchar2(2000);
begin
v_sql:='droptable'||A;
executeimmediate'
v_sql';
v_sql:='createtableAasselect*from'||B;
executeimmediate'v_sql';--动态SQL为DDL语句
end;

不能delete和insert看来只能drop掉了

㈥ 如何提高ORACLE大数据表Update效率

1.把表上的取消

2.把表上的INDEX取消

但是依然很慢,无奈下找到这个:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6407993912330

在这个主题问答里,ORA官方提了一种处理的办法:

1.利用CREATE table as select xxxxx的办法来生成一新表T1

2.在T1上创建与目标表一样的索引

3.把目标表删除或RENAME(注意备份以备反悔)

4.把T1改名成目标表

试了一下,果然非常地快,我的任务差不多在2Min就完成了。

如csywdk.table_room是一张大表,要删除其中bakfwid在noNewYWFW20081205中的记录,且要更新bakfwid在imp_table_room中记录的ROOM_LOC为imp_table_room.room_loc:

(1)创建新表

create table tmp_new_table_room081205 as

select t1.ROOM_ID,t1.NEWROOMID,t1.BUILDID,t1.TFH,t1.DKH,t1.BUILD_NO,t1.LAYER_NO,t1.ROOM_NO,t1.ROOM_NAME,

decode(t2.bakfwid,null,t1.ROOM_LOC,t2.room_loc)

t1.ROOM_AREA,

t1.SURTYPE,t1.LAYER_NAME,t1.DEVDEP,t1.CELL,t1.DELFLAG,t1.QXXZ,t1.SJSJLSH,t1.FD,t1.ID,t1.BAKFWID

from csywdk.table_room t1 left join imp_table_room t2 on t1.bakfwid=t2.bakfwid

where not exists(select 1 from noNewYWFW20081205 t3 where t3.bakfwid=t1.bakfwid)

(2)创建备份表

create table Table_room081205 as

select * from csywdk.table_room

(3)替换原表

drop table sde.table_room

create table sde.table_room as

select * from tmp_new_table_room081205

㈦ oracle 如何处理更新大数据量

楼下的看清楚,有50k的照片,不管blob还是long raw处理起来都是很慢的
2G数据拷贝也不是秒级的操作。
你的pga对于你的数据过小,很容易导致大量而外i/o,操作最好是分批提交,不要一条sql写入。

㈧ 如何提高Oracle大数据表Update效率

ORACLE中如果表数据量很大(级或更大),update某个字段是很慢的(如我的HIS项目中更新历史业务流程表,160万条记录,用CURSOR来更新,1000条COMMIT一次,花了4天也没更新完),后来尝试过的改进办法有:
1.把表上的LOGGING取消
2.把表上的INDEX取消
但是依然很慢,无奈下找到这个:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:6407993912330
在这个主题问答里,ORA官方提了一种处理的办法:
1.利用CREATE table as select xxxxx的办法来生成一新表T1
2.在T1上创建与目标表一样的索引
3.把目标表删除或RENAME(注意备份以备反悔)
4.把T1改名成目标表
试了一下,果然非常地快,我的任务差不多在2Min就完成了。
如csywdk.table_room是一张大表,要删除其中bakfwid在noNewYWFW20081205中的记录,且要更新bakfwid在imp_table_room中记录的ROOM_LOC为imp_table_room.room_loc:
(1)创建新表
create table tmp_new_table_room081205 as
select t1.ROOM_ID,t1.NEWROOMID,t1.BUILDID,t1.TFH,t1.DKH,t1.BUILD_NO,t1.LAYER_NO,t1.ROOM_NO,t1.ROOM_NAME,
decode(t2.bakfwid,null,t1.ROOM_LOC,t2.room_loc)
t1.ROOM_AREA,
t1.SURTYPE,t1.LAYER_NAME,t1.DEVDEP,t1.CELL,t1.DELFLAG,t1.QXXZ,t1.SJSJLSH,t1.FD,t1.ID,t1.BAKFWID
from csywdk.table_room t1 left join imp_table_room t2 on t1.bakfwid=t2.bakfwid
where not exists(select 1 from noNewYWFW20081205 t3 where t3.bakfwid=t1.bakfwid)
(2)创建备份表
create table Table_room081205 as
select * from csywdk.table_room
(3)替换原表
drop table sde.table_room
create table sde.table_room as
select * from tmp_new_table_room081205
在这个问答里还提到一句ORA PL/SQL效率相关的话:
“能用一句语句处理的任务决不要用多句编程来实现”。
原来老是怕一句执行时,回滚段不够大,看来只能准备好硬盘为上策了

㈨ Oracle更新(update)某大数据量的表的最优方法(语句)请教。解决送分。

建议你通过某个条件把这150万条记录,分成多个部分,写个存储过程,依次执行,执行完一部分就提交一部分。
这样即即减少了对内存的要求,也防止玩意update出错,还要花费大量的时间在回滚上。