Oracle 9i临时LOB对象过多使用临时表空间的一个错误设计

这是一个在Oracle 9i上的Bug, 问题发现于数据库从8i升级到9i时, 发现占用了大量的临时段. 与其说是Bug, 更不如说Oracle故意如此, 因为Oracle说这不是Bug, 而是其设计上如此. 我们在一个Session中做实验(9i)就可以了, 你可以想象一下如果你有几百个会话都在调用有临时LOB对象的角本, 而TEMP表空间的UNIFORM SIZE设得又比较大时, 总共需要多少临时空间?.

ASQL> declare
    2  a clob;
    3 begin 
    4  a := ‘abc’;
    5 end;
    6 /

Procedure executed.

ASQL> ora sort

SID USERNAME BLOCKS TABLESPACE SEGTYPE  
— ——– —— ———- ——– 
547 ANYSQL      128 TEMP01    LOB_DATA 
  
1 rows returned.

    在Oracle 8i中试验一下:

ASQL> declare
    2  a clob;
    3 begin
    4  dbms_lob.createtemporary(a,true);
    5  dbms_lob.write(a,3,1,’abc’);  
    6 end;
    7 /

Procedure executed.

ASQL> ora sort

0 rows returned.

    在OLTP中, 一般大量的会话都是Cache起来的, 也就是说登上来后不会马上退出的, 而这个Bug是说CLOB变量占用的临明表表空的空间不会释放, 在上面的例子(9i)中, 虽然PL/SQL已经执行完毕, 但空间并没有释放, 这时如果大量的会话上来, 而临表表空间的Inital Extent较大的话, 就会浪费大量的空间了. 这个问题在8i中并不存在. 新版本总是伴随着新的Bug, 这话总是没错.


链接:http://www.anysql.net/oracle/oracle9i_lob_temp.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值