ORACLE大数据表Update处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE大数据表Update处理相关的知识,希望对你有一定的参考价值。
参考技术AORACLE中如果表数据量很大(M级或更大) update某个字段是很慢的(如我的HIS项目中更新历史业务流程表 万条记录 用CURSOR来更新 条MIT一次 花了 天也没更新完) 后来尝试过的改进办法有
把表上的LOGGING取消
把表上的INDEX取消
但是依然很慢 无奈下找到这个
在这个主题问答里 ORA官方提了一种处理的办法
利用CREATE table as select xxxxx的办法来生成一新表T
在T 上创建与目标表一样的索引
把目标表删除或RENAME(注意备份以备反悔)
把T 改名成目标表
试了一下 果然非常地快 我的任务差不多在 Min就完成了
如csywdk table_room是一张大表 要删除其中bakfwid在noNewYWFW 中的记录 且要更新bakfwid在imp_table_room中记录的ROOM_LOC为imp_table_room room_loc:
( )创建新表
create table tmp_new_table_room as
select t ROOM_ID t NEWROOMID t BUILDID t TFH t DKH t BUILD_NO t LAYER_NO t ROOM_NO t ROOM_NAME
decode(t bakfwid null t ROOM_LOC t room_loc)
t ROOM_AREA
t SURTYPE t LAYER_NAME t DEVDEP t CELL t DELFLAG t QXXZ t SJSJLSH t FD t ID t BAKFWID
from csywdk table_room t left join imp_table_room t on t bakfwid=t bakfwid
where not exists(select from noNewYWFW t where t bakfwid=t bakfwid)
( )创建备份表
create table Table_room as
select * from csywdk table_room
( )替换原表
drop table sde table_room
create table sde table_room as
select * from tmp_new_table_room
在这个问答里还提到一句ORA PL/SQL效率相关的话
能用一句语句处理的任务决不要用多句编程来实现
lishixinzhi/Article/program/Oracle/201311/18980
Oracle事务处理
名词解释
DML:Data Manipulation Language (数据库操纵语言) 例如:DELETE、INSERT、UPDATE、SELECT
DDL:Data Definition Language(数据库定义语言) 例如:CREATE、ALTER、DROP、
DCL: Data Control Language (数据库控制语言) 例如:GRANT、REVOKE、DENY
1.按照组成方式
Oracle数据库的事务可以有以下几种组成方式:
- 一个或多个DML
- 一个DCL语句
- 一个DDL语句
2.事务按照启动方式
- 显示事务
Oracle 11g中事务是隐式自动开始的,它不需要用户显示的执行开始事务语句
- 隐性事务
打开隐性事务设置开关后,执行下一条SQL语句的时候自动启动一个新事务,并且每关闭一个事务时,下一条SQL语句又自动启动一个新事务,直到关闭了隐性事务的设置开关。
- 自动提交事务
此处是SQL Server默认模式。当一条有效的SQL语句执行后,成功了便自动提交,如果失败了,那么将自动回滚并返回错误信息。
改变事务的模式只影响当前数据库连接,不影响其他连接中的事务
Oracle事务结束
当下列事件发生的时候结束:
- 用户执行了COMMIT语句(提交)
- 用户执行了ROLLBACK语句(回滚)
- 用户执行了DDL语句(自动提交)
- 用户执行了DCL语句(自动提交)
- 用户正常退出SQL*Plus(自动提交)
- 用户非正常退出SQL*Plus(自动回滚)
- 系统奔溃,包括硬件或软件故障(自动回滚)
以上是关于ORACLE大数据表Update处理的主要内容,如果未能解决你的问题,请参考以下文章