
解决方法很多!意思是给v_run_duration这个变量赋值,等于sysdate-v_sysdate的差把并转成秒,如sysdate=2012-7-3,v_sysdate=2012-7-2,那v_run_duration=round(('2012-7-3'-'2012-7-2')246060,0)=round(1246060,0)=86400秒其中round的作用是四舍五入到多少位,现在是0,所以四舍五入到个位,比如round(60237,2)表示四舍五入到小数点第二位,所以是6024
pctfree 块中保留用于UPDATE *** 作的空间百分比,当数据占用的空间达到此上限时,新的数据将不能再插入到此块 中;
每个块都有一个块首部。这个块首部中有一个事务表。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的INITRANS 设置指定。对于表,这个值默认为2(索引的INITRANS 也默认为2)。事务表会根据需要动态扩展,最大达到MAXTRANS 个条目(假设块上有足够的自由空间)。所分配的每个事务条目需要占用块首部中的23~24 字节的存储空间。注意,对于Oracle 10g,MAXTRANS 则会忽略,所有段的MAXTRANS 都是255。
也就是说,如果某个事物锁定了这个块的数据,则会在这个地方记录事务的标识,当然那个事务要先看一下这个地方是不是已经有人占用了,如果有,则去看看那个事务是否为活动状态。如果不活动,比如已经提交或者回滚,则可以覆盖这个地方。如果活动,则需要等待(闩的作用)
所以,如果有大量的并发访问使用的这个块,则参数不能太小,否则资源竞争将导致系统并发性能下降。
测试了一下ORACLE 并发事务的时候的块分配和ITL 管理,
略去大部分的测试过程,大概的结果小结如下:
1 INITRANS =1 时 并发多个INSERT 事务(本次测试最多5个)的时候并不会由于ITL的争用而等待组塞,ORACLE 采取的策略是每个INSERT事物分配不同的一些块来使用,这样各个会话之间就不会产生冲突,除非段没有多余的块(次种情况与本次的主题无关)
2INITRANS =1 时并发多个UPDATE事务(本次测试最多7个)的时候也不会由于ITL的争用而导致等待产生,此时ORACLE除了使用默认的ITL之外,另外动态扩展所需要的ITL,紧紧在非常极端的情况下才会出现等待,(当然应用层面的死锁或等待与本主题无关)。
1) 该BLOCK没有FREE空间了,注意FREE参数的设置不能太小。
2) 该块使用的ITL总数,超过该块允许的ITL的最大值min(round(block_size05/24) - 2 ,255) 。
要达到这样的极端情况实际的生产情况是很难的,应该比业务SQL的死锁出现的概率更小。
ROUND( 数值,精度 );
1、函数形式: ROUND( 数值,精度 );
2、功能介绍: Round函数是用来对相关数值按照要求进行指定精度的 进行四舍五入;
3、参数介绍:参数1表示要转化的数据一定是数值类型;
参数2表示的要返回结果的小数位数,是整数。
精度的地方写2
在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来,并不是一件难事。常用的方法是:Select to_number(to_char(sysdate,'yyyy')) from dual,而实际上,oracle本身有更好的方法,那就是使用Extract函数,使用方法是:Select Extract(year from sysdate) from dual,这种方法省掉了类型转换,看上去更加简洁。相应的,要取得月份或日,可以用select extract (month from sysdate) from dual和select extract (day from sysdate) from dual。
此方法获得的结果,是数值型的,你可以设置一个方法测试一下。
以上就是关于oracle问题:v_run_duration:=round((sysdate-v_sysdate)*24*60*60,0);这是什么意思全部的内容,包括:oracle问题:v_run_duration:=round((sysdate-v_sysdate)*24*60*60,0);这是什么意思、请问oracle表空间下面几个参数是什么呢意思啊,谢谢、oracle怎么保留小数点2位等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)