December 14, 2005
db_file_multiblock_read_count and Oracle IO size
作者:eygle
出处:http://blog.eygle.com
(把以前写的一点简单东西转在Blog上)
初始化参数db_file_multiblock_read_count 影响Oracle在执行全表扫描时一次读取的block的数量.
db_file_multiblock_read_count的设置要受OS最大IO能力影响,也就是说,如果你系统的硬件IO能力有限,即使设置再大的db_file_multiblock_read_count也是没有用的。
理论上,最大db_file_multiblock_read_count和系统IO能力应该有如下关系:
Max(db_file_multiblock_read_count) = MaxOsIOsize/db_block_size
当然这个Max(db_file_multiblock_read_count)还要受Oracle的限制,
目前Oracle所支持的最大db_file_multiblock_read_count 值为128.
我们可以通过db_file_multiblock_read_count来测试Oracle在不同系统下,单次IO最大所能读取得数据量:
我们可以看到,在以上测试平台中,Oracle最多每次IO能够读取128个Block,由于block_size为8k,也就是每次最多读取了1M数据.
$ sqlplus "/ as sysdba" SQL*Plus: Release 10.1.0.2.0 - Production on Wed Aug 11 23:43:52 2004 Copyright (c) 1982, 2004, Oracle. All rights reserved.
SYS AS SYSDBA on 11-AUG-04 >show parameter read_count NAME TYPE VALUE SYS AS SYSDBA on 11-AUG-04 >create tablespace dfmbrc Tablespace created. SYS AS SYSDBA on 11-AUG-04 >create table t tablespace dfmbrc as select * from dba_objects; Table created. SYS AS SYSDBA on 11-AUG-04 >insert into t select * from t; 9149 rows created. SYS AS SYSDBA on 11-AUG-04 >/ 18298 rows created. SYS AS SYSDBA on 11-AUG-04 >/ 36596 rows created. SYS AS SYSDBA on 11-AUG-04 >commit; Commit complete. SYS AS SYSDBA on 11-AUG-04 >alter session set db_file_multiblock_read_count=1000; Session altered. SYS AS SYSDBA on 12-AUG-04 >show parameter read_count NAME TYPE VALUE
Session altered. SYS AS SYSDBA on 11-AUG-04 >alter system flush buffer_cache; System altered. SYS AS SYSDBA on 11-AUG-04 >select count(*) from t; COUNT(*) SYS AS SYSDBA on 12-AUG-04 >@gettrace TRACE_FILE_NAME
|
系统平台为:
$ uname -a |
当然具体的,Oracle一次IO能读取多少block还和很多因素有关,比如存储是否连续,磁盘是否经过条带等方式划分,并且Oracle的
单次IO读取不能跨越Extent边界等.某些平台还和操作系统的参数设置有关.
大家可以测试一下不同的平台,Oracle的单次IO最多可以读取的Block数量.
Posted by eygle at 3:11 PM | Comments (1)
Gtalk升级也疯狂
作者:eygle
出处:http://blog.eygle.com
今天偶然看了一下Gtalk的目录,或然发现Gtalk已经升级了多次,而且每次升级都保留了一个升级文件,不知道Google用了什么删除机制,如果一直占用我的空间,那就真够过分了。

再看看升级文件的大小:
C:\Program Files\Google\Google Talk>dir /s |grep exe |
Posted by eygle at 12:47 PM | Comments (2)
2005-12-14:EMC DISK Warning
作者:eygle
出处:http://blog.eygle.com
昨晚就开始收到EMC 磁盘警告:
# navicli -h 172.16.9.5 getlog -100|grep 11 |
这是一块ATA盘,看来接下来就等这块盘什么时间坏了:
$ navicli -h 172.16.9.5 getdisk 0_3_11 |
Posted by eygle at 10:10 AM | Comments (5)
December 13, 2005
Oracle10g Materialized View enhanced
作者:eygle
出处:http://blog.eygle.com
今天Kamus在Gtalk上让我帮忙测试,是关于物化视图的:
- truncate分区以后,物化视图快速刷新出错
- drop分区以后,物化视图快速刷新出错
测试Oralce9i的情况:
SQL> create table T_PART Table created. 1 row created. SQL> insert into t_part values(1,25,3); 1 row created. SQL> insert into t_part values(1,18,3); 1 row created. SQL> commit; Commit complete. SQL> create materialized view log on t_part with rowid; Materialized view log created. SQL> create materialized view mv_t_part refresh with rowid as select * from t_part; Materialized view created. SQL> select * from t_part; C1 C2 C3 SQL> select * from mv_t_part; C1 C2 C3 SQL> alter table t_part truncate partition t_p2; Table truncated. SQL> exec dbms_mview.refresh('mv_t_part','f');
* |
这里出现错误。
ORA-32313 REFRESH FAST of "string"."string" unsupported after PMOPs
Cause: A Partition Maintenance Operation (PMOP) has been performed on a detail table, and the specified materialized view does not support fast refersh after PMOPs.
Action: Use REFRESH COMPLETE. You can determine why your materialized view does not support fast refresh after PMOPs using the DBMS_MVIEW.EXPLAIN_MVIEW() API.
再来测试Oracle10g的:
[oracle@danaly ~]$ sqlplus eygle/eygle SQL*Plus: Release 10.2.0.1.0 - Production on Tue Dec 13 22:10:15 2005 Copyright (c) 1982, 2005, Oracle. All rights reserved.
Table created. SQL> insert into t_part values(1,2,3); 1 row created. SQL> insert into t_part values(1,25,3); 1 row created. SQL> insert into t_part values(1,18,3); 1 row created. SQL> create materialized view log on t_part with rowid; Materialized view log created. SQL> create materialized view mv_t_part refresh with rowid as select * from t_part; Materialized view created. SQL> select * from t_part; C1 C2 C3 SQL> select * from mv_t_part; C1 C2 C3 SQL> alter table t_part truncate partition t_p2; Table truncated. SQL> exec dbms_mview.refresh('mv_t_part','f');
PL/SQL procedure successfully completed. |
看来在物化视图方面,Oracle10g的确已经增强。
Posted by eygle at 11:14 PM | Comments (1)
赏画:展子虔之游春图
作者:eygle
出处:http://blog.eygle.com
祖国大陆现存最古老的一幅山水画作品,相传是隋代画家展子虔(约公元550—604年)的《游春图》,目前藏于故宫博物院。
此画为绢本,青绿设色,高43厘米,宽80.5厘米,画上有宋徽宗( 公元1101—1125年)题写的“展子虔游春图”六个字。相传这幅画为展子虔所作的唯一真迹。从画上题记钤印可知,该画在北宋时收入宫内府,元代为鲁国大长公主所有,明代由严嵩收藏,清代再度入宫,此画在《钤山堂书画记》中有著录,可以说是一幅流传有序的中国早期山水画艺术珍品。
《游春图》以春游为主题,画幅虽不大,却场面开阔。在明媚的春光里,人们纵情游乐,远处青山叠翠,湖水融融。画中人物或乘骑于山径,或泛舟于湖上,姿态各异,生动有趣。远山浮翠,白云缭绕,树发新枝,嫩绿初露,桃花绽开,绿草如茵,好一派春和景明的景色。
《游春图》的出现,标志着中国山水画的逐渐成熟。在此之前,山水画大多是作为人物的背景 而出现的,基本上是“人大于山,水不容泛”的画法。《游春图》则能:“写江山远近之势尤工, 故咫尺有千趣”。
对这幅画,今天的专家们看法各异。傅熹年先生根据画中人物头上戴的幞头、建筑部件形制等论证它并非隋代原作,而是北宋摹本。王去非先生认为是唐中叶以后作品。而张伯驹先生则保留其为展子虔原作的观点。
展子虔历北齐、北周,入隋为朝散大夫、帐内都督。曾在洛阳、长安、扬州等地的寺院画过许多壁画。善画故事、人马、山水、楼台;人物的描法细致,后再用色晕开人物的面部,神彩意度极为深致。据记载,他的《仙山楼阁图》以青绿勾勒为主,笔调甚为细密,后人称他为“唐画之祖”。美史史家称顾恺之、陆探微、张僧繇、展子虔为唐以前杰出的四大画家。
以下为游春图全貌:
Posted by eygle at 8:32 PM | Comments (1)
The Network is The Computer
作者:eygle
出处:http://blog.eygle.com
今天上午参加了绿色的飞跃 SUN公司的新产品发布会,在此会议上,SUN公司正式推出他们的UltraSparc T1处理器。可是我不得不说一句的是,这真是一次失败的大会。首先是我根本没收到SUN发来的邀请函,在注册时不得不拿出手机给人看我收到的提醒短信。结果我发现很多人都在那里展示手机(回到公司时,发现邀请函终于躺在桌子上了)。![]()
会场也极为简陋,密密麻麻的椅子,没有桌子,也没有水,甚至SUN公司没有准备笔,每人发的一张反馈表基本上没法填写。会场的麦克只有固定在讲台上的,演讲者只要站直身子(都怪那个老外长得太高了),或者稍稍转身,声音就再也听不清楚了。而且更让我奇怪的是,第一排是SUN公司的参会者座位,还没到一半的时候,基本上位子已经空了,你们自己的人都不关心,还怎么叫别人关注呢?
我跟同事戏称,还是Oracle办活动的经验多,每次都准备的十分妥贴。
会半的时候,我们选择了提前退场。
此前已经关注了UltraSparc T1处理器,这次了解了一点其他的内容:
1998年,一群SUN高级工程师离开SUN成立Afara,在UltraSPARCII技术的基础上设计了第一版的UltraSPARC T1。SUN于2002年收购Afara,并将其设为T1基地。
原来UltraSparc T1处理器还有这样一段历程。
Posted by eygle at 2:06 PM | Comments (0)
December 12, 2005
Oracle Diagnostics:Why sysdate is fixed?
作者:eygle
出处:http://blog.eygle.com
今天一个朋友在MSN上问到一个问题:为什么我的SYSDATE不变了?
他查询SYSDATE的值一直停留在2005-03-01 11:41:15。感觉很奇怪。
忍不住指导他研究一下,先是从系统级诊断,发现没有问题。
再从数据库角度来诊断,发现:
select current_date from dual; 的输出是正确的,而
select sysdate from dual; 却是不正确的。
猜测是某个参数导致了系统日期被固化,让他传来alert文件,果然发现了一个此前未注意到的参数: FIXED_DATE,
core_dump_dest = /u01/app/oracle/admin/unicode/cdump |
文档上的解释为:
FIXED_DATE
|
Parameter type |
String |
|
Syntax |
|
|
Default value |
There is no default value. |
|
Parameter class |
Dynamic: |
FIXED_DATE enables you to set a constant date that SYSDATE will always return instead of the current date. This parameter is useful primarily for testing. The value can be in the format shown above or in the default Oracle date format, without a time.
找到了这个参数也就找到了答案!
Posted by eygle at 11:21 PM | Comments (2)
How to maintain Oracle10g Recyclebin?
作者:eygle
出处:http://blog.eygle.com
从Oracle10g开始,Oracle引入了flashback drop的新特性,这个新特性,允许你从当前数据库中恢复一个被drop了的对象。在执行drop操作时,现在Oracle不是真正删除它,而是将该对象自动将放入回收站。对于一个对象的删除,其实仅仅就是简单的重令名操作。
所谓的回收站,是一个虚拟的容器,用于存放所有被删除的对象。在回收站中,被删除的对象将占用创建时的同样的空间,你甚至还可以对已经删除的表查询,也可以利用flashback功能来恢复它, 这个就是flashback drop功能。
这个功能虽然可以极大的简化误drop导致的恢复操作,但是长时间的积累可能会导致大量的空间占用(虽然Oracle具有自己的清理机制),很多时候我们需要手工介入去清理回收站。本文主要介绍清理回收站的几种方法.
1.大量累计的空间占用
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.3.0
OWNER OBJECT_NAME CREATETIME DROPTIME 750 rows selected SQL> |
2.不同用户在回收站的对象
SQL> select owner,count(*) from dba_recyclebin group by owner; OWNER COUNT(*) 6 rows selected. |
3.我们可以指定删除某些特定对象
|
SQL> purge table common.T_SERVICE_CODE_INFO; Table purged. |
4.指定清除某个表空间的所有回收站对象
SQL> purge tablespace common; Tablespace purged. SQL> select owner,count(*) from dba_recyclebin group by owner; OWNER COUNT(*) |
5.以SYSDBA身份可以清除所有回收站对象
|
SQL> purge dba_recyclebin; DBA Recyclebin purged. SQL> select owner,count(*) from dba_recyclebin group by owner; no rows selected |
6.禁用recyclebin
如果我们不希望使用Oracle的recyclebin,可以通过参数禁用这个特性。
在Oracle10gR1中,通过修改一个隐含参数:_recyclebin 为False可以禁用这个特性:
SQL> set linesize 132 NAME VALUE ISDEFAULT ISMOD ISADJ 1 row selected. |
在Oracle10gR2中,recyclebin变成了一个常规参数,可以在session/system级动态修改:
[oracle@danaly ~]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 12 15:34:56 2005 Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> show parameter recyclebin NAME TYPE VALUE SQL> alter session set recyclebin=off; Session altered. SQL> alter session set recyclebin=on Session altered. SQL> alter system set recyclebin=off; System altered. SQL> alter system set recyclebin=on; System altered. |
Posted by eygle at 3:45 PM | Comments (3)
Definer and Invoker Rights
作者:eygle
出处:http://blog.eygle.com
在Oracle8i以前,所有已编译存储对象(包括packages, procedures, functions, triggers, and views)只能以定义者(Definer)身份解析运行;从Oracle8i开始,Oracle引入调用者(invoker)权限,使得对象可以以调用者身份和权限执行。
定义者(Definer)指编译存储对象的所有者.
调用者(Invoker)指拥有当前会话权限的模式,这可能和当前登录用户相同或不同(alter session set current_schema 可以改变调用者Schema).
TOM在他的《Expert One on One》的第23章曾经详细介绍这一特性,本文引用Tom的一个例子用于说明Definer and Invoker权限。
1.以Eygle用户(definer)创建2个过程
$ sqlplus eygle/eygle SQL*Plus: Release 9.2.0.4.0 - Production on Sun Dec 11 11:39:27 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> create or replace procedure definer_proc Procedure created. SQL> Grant succeeded. SQL> Procedure created. SQL> Grant succeeded. |
注意invoker权限的本质是引入了AUTHID CURRENT_USER子句,通过此句Oracle得以使用invoker身份编译执行对象。
2.以test用户(invoker)身份执行
SQL> connect test/test PL/SQL procedure successfully completed. SQL> exec eygle.invoker_proc PL/SQL procedure successfully completed. |
注意只有使用invoker者权限执行时,Schema才转换为TEST.
SQL> alter session set current_schema = system; Session altered. SQL> exec eygle.definer_proc PL/SQL procedure successfully completed. SQL> exec eygle.invoker_proc PL/SQL procedure successfully completed. SQL> |
Posted by eygle at 12:08 PM | Comments (3)
December 11, 2005
The Waiting Life
作者:eygle
出处:http://blog.eygle.com
忽然就想到这个词:等待人生。
昨天Coolyl说东直门的"黄记煌"餐厅味道不错,推荐我和Biti,宝宝三个人去吃。我打了个车就杀向东直门,到的时候看见Coolyl和Biti两个穿着皮衣站在门口晃悠,我说干嘛,两个门神一样;他们说等你,我说鬼才信。往屋子里一看,原来有N多人在里面排队。小小一个店面,门厅里挤满了排队的人。
这一等足足等了有40分钟,我们笑说,已经很久没有这么等过位子了,等吃饭的时候一定会觉得特别香美吧。
果然味道没有让我们失望,他们称道的"三汁焖锅"的确与众不同,而且买单时大家又觉得价钱极为公道,3个人不到150元,人均不过50元的标准。
今天下午,约好了在奥体东门的"蟹老宋"为Biti送行。
桔子第一个赶到,我只好匆匆赶过去,发现也够夸张,同样很多人在排队。寒冷的天气反而助长了大家吃饭的热情,然后居然发现今天是那里6折的最后一天。
终于等到位子,大吃一顿,打了折也居然只有150元左右。
Biti是下午5:00的飞机,这一次希望飞机没有晚点,能够准时赶回杭州去。
我们一生中有多少时间是在等待呢?有哪个妙手懂得优化人生这个复杂系统呢?而又有多少人能用最短的时间等到他/她的Ms./Mr. Right 呢?
这些问题可能永远没有人能够回答。
Posted by eygle at 10:25 PM | Comments (9)
