Chinaunix首页 | 论坛 | 博客
  • 博客访问: 197773
  • 博文数量: 21
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-05 21:34
文章分类

全部博文(21)

文章存档

2008年(1)

2006年(20)

我的朋友

分类: Oracle

2006-04-25 23:22:41

 表空间的并发处理:

oracle之所以能支持TB级以上的数据,其中有一个非常重要是采用表空间管理。何谓表空间呢?表空间就是通常所说的存储区域,一个表空间可以包含多个数据文件,一个数据文件最大一般是(32G,不同的系统是不同的,FAT324G)所以当表空间满时,可以增大数据文件或增加数据文件。数据文件该怎么设置才是合理呢?1.尽可能每一个数据文件不要太大,因为Oracle一般情况下是并发性处理的,所以在写入时可以对多个数据文件进行写入,并发操作。2.表空间在建立不要写日志,因为这影响到系统的处理。3.每一个数据文件2G或者是4G的这样设置是最好的。例如下面的脚本创建表空间:

CREATE TABLESPACE "ORA"

    NOLOGGING

    DATAFILE 'FILEPATH\ORA1.ora' SIZE 2048M,

    'FILEPATH\ORA2.ora' SIZE 2048M EXTENT MANAGEMENT

LOCAL UNIFORM SIZE 1024K SEGMENT SPACE MANAGEMENT  AUTO

 

表空间一般情况不设为自己动增长,因为这样有好处也有坏处,好处:保证系统的处理效率,由于对于大的系统,例如数据仓库。坏处:万一数据量增大,这会出错。这就要求管理员时常监控着表空间的变化,如果到达某一程度应该采用增加数据文件。

 

Sql的并发处理:

下面是语句是oracle不用写日志,加快了处理时间
insert /*+append*/ into table_name select/values

 

下面语句是并行处理(5个并行,表内并行):
sql>alter session enable parallel dml;
sql> insert /*+parallel(table_name,5) */ into table_name select/values;

 

如果要update的目标表比较大(上千万),那么可么通过rownum分批update例如:
begin
while iloop
update /*+parallel(table_name,5) */ table_name set column_name=values where 
commit;
i:=i+1;
start:=end+1;
end:=end+next;
end loop;

上面的update5个并行(表内并行)n是表示要分多少批来处理,这和 wherecondiction有密切联系。

 

 

2006-04-25 23:35 于北京通州

 

 

 

阅读(2534) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~