November 30, 2005
Oracle HowTo:如何Shrink Undo表空间,释放过度占用的空间
作者:eygle
出处:http://blog.eygle.com
环境:OS:Red Hat Enterprise Linux AS release 4 (Nahant)
DB:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
一台Oracle10gR2数据库报出如下错误:
ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX ORA-1653: unable to extend table SYSMAN.MGMT_SYSTEM_ERROR_LOG by 8 in tablespace SYSAUX |
登陆检查,发现是SYSAUX表空间空间用尽,不能扩展,尝试手工扩展SYSAUX表空间:
alter database datafile '+ORADG/danaly/datafile/sysaux.266.600173881' resize 800m Tue Nov 29 23:31:38 2005 ORA-1237 signalled during: alter database datafile '+ORADG/danaly/datafile/sysaux.266.600173881' resize 800m... |
出现ORA-1237错误,提示空间不足。这时候我才认识到是磁盘空间可能被用完了.
是谁"偷偷的"用了那么多空间呢(本来有几十个G的Free磁盘空间的)?
检查数据库表空间占用空间情况:
SQL> select tablespace_name,sum(bytes)/1024/1024/1024 GB 2 from dba_data_files group by tablespace_name 3 union all 4 select tablespace_name,sum(bytes)/1024/1024/1024 GB 5 from dba_temp_files group by tablespace_name order by GB; TABLESPACE_NAME GB ------------------------------ ---------- USERS .004882813 UNDOTBS2 .09765625 SYSTEM .478515625 SYSAUX .634765625 WAPCM_TS_VISIT_DETAIL .9765625 HY_DS_DEFAULT 1 MINT_TS_DEFAULT 1 MMS_TS_DATA2 1.375 MMS_IDX_SJH 2 MMS_TS_DEFAULT 2 IVRCN_TS_DATA 2 TABLESPACE_NAME GB ------------------------------ ---------- MMS_TS_DATA1 2 CM_TS_DEFAULT 5 TEMP 20.5498047 UNDOTBS1 27.1582031 15 rows selected. |
不幸的发现,UNDO表空间已经扩展至27G,而TEMP表空间也扩展至20G,这2个表空间加起来占用了47G的磁盘空间,导致了空间不足。
显然曾经有大事务占用了大量的UNDO表空间和Temp表空间,Oracle的AUM(Auto Undo Management)从出生以来就经常出现只扩展,不收缩(shrink)的情况(通常我们可以设置足够的UNDO表空间大小,然后取消其自动扩展属性).
现在我们可以采用如下步骤回收UNDO空间:
1.确认文件
SQL> select file_name,bytes/1024/1024 from dba_data_files
2 where tablespace_name like 'UNDOTBS1';
FILE_NAME
--------------------------------------------------------------------------------
BYTES/1024/1024
---------------
+ORADG/danaly/datafile/undotbs1.265.600173875
27810
|
2.检查UNDO Segment状态
SQL> select usn,xacts,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
2 from v$rollstat order by rssize;
USN XACTS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
---------- ---------- --------------------- ---------------------- ----------
0 0 .000358582 .000358582 0
2 0 .071517944 .071517944 0
3 0 .13722229 .13722229 0
9 0 .236984253 .236984253 0
10 0 .625144958 .625144958 0
5 1 1.22946167 1.22946167 0
8 0 1.27175903 1.27175903 0
4 1 1.27895355 1.27895355 0
7 0 1.56770325 1.56770325 0
1 0 2.02474976 2.02474976 0
6 0 2.9671936 2.9671936 0
11 rows selected.
|
3.创建新的UNDO表空间
SQL> create undo tablespace undotbs2; Tablespace created. |
4.切换UNDO表空间为新的UNDO表空间
SQL> alter system set undo_tablespace=undotbs2 scope=both; System altered. |
此处使用spfile需要注意,以前曾经记录过这样一个案例:Oracle诊断案例-Spfile案例一则
5.等待原UNDO表空间所有UNDO SEGMENT OFFLINE
SQL> select usn,xacts,status,rssize/1024/1024/1024,hwmsize/1024/1024/1024,shrinks
2 from v$rollstat order by rssize;
USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
---------- ---------- --------------- --------------------- ---------------------- ----------
14 0 ONLINE .000114441 .000114441 0
19 0 ONLINE .000114441 .000114441 0
11 0 ONLINE .000114441 .000114441 0
12 0 ONLINE .000114441 .000114441 0
13 0 ONLINE .000114441 .000114441 0
20 0 ONLINE .000114441 .000114441 0
15 1 ONLINE .000114441 .000114441 0
16 0 ONLINE .000114441 .000114441 0
17 0 ONLINE .000114441 .000114441 0
18 0 ONLINE .000114441 .000114441 0
0 0 ONLINE .000358582 .000358582 0
USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
---------- ---------- --------------- --------------------- ---------------------- ----------
6 0 PENDING OFFLINE 2.9671936 2.9671936 0
12 rows selected.
|
再看:
11:32:11 SQL> /
USN XACTS STATUS RSSIZE/1024/1024/1024 HWMSIZE/1024/1024/1024 SHRINKS
---------- ---------- --------------- --------------------- ---------------------- ----------
15 1 ONLINE .000114441 .000114441 0
11 0 ONLINE .000114441 .000114441 0
12 0 ONLINE .000114441 .000114441 0
13 0 ONLINE .000114441 .000114441 0
14 0 ONLINE .000114441 .000114441 0
20 0 ONLINE .000114441 .000114441 0
16 0 ONLINE .000114441 .000114441 0
17 0 ONLINE .000114441 .000114441 0
18 0 ONLINE .000114441 .000114441 0
19 0 ONLINE .000114441 .000114441 0
0 0 ONLINE .000358582 .000358582 0
11 rows selected.
Elapsed: 00:00:00.00
|
6.删除原UNDO表空间
11:34:00 SQL> drop tablespace undotbs1 including contents; Tablespace dropped. Elapsed: 00:00:03.13 |
7.检查空间情况
由于我使用的ASM管理,可以使用10gR2提供的信工具asmcmd来察看空间占用情况.
[oracle@danaly ~]$ export ORACLE_SID=+ASM [oracle@danaly ~]$ asmcmd ASMCMD> du Used_MB Mirror_used_MB 21625 21625 ASMCMD> exit |
空间已经释放。
Posted by eygle at 11:28 AM | Comments (12)
November 29, 2005
One Story About Love
作者:eygle
出处:http://blog.eygle.com
今天讲一个故事吧.
嗯
从前呢
有两只兔子
一只大的,一只小的
有一天,哦,差点忘了.
大兔子是男人
小兔子是女人
它们是一对的
就是雌雄傍地走,安能辨我雌雄那种
大兔子哄小兔子睡觉,小兔子睁着眼睛问大兔子:“大兔子, 你知道我爱你有多深吗?”
大兔子想了想说:“不知道呢,你说说看。”
小兔子:有我身高那么深。
大兔子想了想:那我爱你,有我身高那么深。
小兔子:可是呢,我爱你,有我跳起来高那么深。
大兔子也跳了一下:那我爱你有那么深。
小兔子:我爱你有到了小河边那么深。
大兔子摸摸小兔子的头:我爱你有过了小河,再翻过那座小山那么深。
小兔子急了:我爱你有到月亮那么远那么深。
大兔子摸着小兔子的皮毛,轻轻地说:好了,睡吧,乖,我爱你。
小兔子睡了,大兔子心里想:傻宝宝,我爱你有到了月亮再返回来那么深。
。。。。。。
大兔子跟小兔子的故事,不是那么结束的,大兔子走了,从此没有人在夜里给小兔子讲故事。也不会有人版大兔子小兔子的故事,也不会有大肚橙,大接吻鱼和小接吻鱼的故事。
所有童话生于爱情,死与幻灭。
Posted by eygle at 10:46 PM | Comments (6)
November 28, 2005
Tools:Windows Service Install/Remove Wizard
作者:eygle
出处:http://blog.eygle.com
在windows上,特别是在多次安装和删除了Oracle以后,可能你会在服务里看到很多多余的Service存在。
当然我们可以通过删除注册表或其他一些手段来清理这些服务,但是可能稍嫌复杂。
实际上微软提供过一个小工具:Windows Service Install/Remove Wizard,可以用于安装/移除一个服务。

一步一步操作很简单易用,且极其小巧。
这个工具来自Windows Resource Kit包,你也可以从以下本站链接下载:
Download file
Posted by eygle at 8:54 PM | Comments (3)
November 26, 2005
Itpub "Oracle Performance Tuning" WorkShop
作者:eygle
出处:http://blog.eygle.com
1.今天是北京此次Oracle Performance Tuning培训的第一天,还是有几个熟悉的面孔,通过培训已经结识了不知道多少个朋友:)
2.人很多,有30多个人,教室里已经座无虚席,也许是Pub很久没有开课的原因,大家都聚集到这一次来.
3.中午一起吃饭的四个人,居然都是SP行业里面的.也许这个行业最大的贡献是为社会提供了更多的就业机会.
4.很久没讲课,一天下来很辛苦,想早早睡觉了...
5.感谢大家对于ITPUB已经我个人的支持
Posted by eygle at 7:51 PM | Comments (0)
November 25, 2005
Oracle HowTo:如何在Linux上扩展SGA超过1.7G
作者:eygle
出处:http://blog.eygle.com
今天一台Linux服务器扩展了一下内存,达到4G,开发的人自己修改了一下SGA结果数据库无法启动了.启动不了时,出的错误是这个样子的:
[oracle@neirong oracle]$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Fri Nov 25 15:43:26 2005
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-27123: unable to attach to shared memory segment
Linux Error: 22: Invalid argument
Additional information: 1
Additional information: 458753
SQL> exit
Disconnected
在32位平台上,缺省的SGA最大只能扩展到1.7G,如果需要支持更大的内存,就需要降低mapped_base,重新Link Oracle软件.
俺的平台为:
[oracle@neirong bdump]$ cat /etc/redhat-release
Red Hat Enterprise Linux AS release 3 (Taroon Update 2)
|
简单操作如下:
cd $ORACLE_HOME/rdbms/lib
cp ksms.s ksms.s.bak ( if u have a ksms.s file)
genksms -s 0x12000000 > ksms.s
make -f ins_rdbms.mk ksms.o
make -f ins_rdbms.mk ioracle
此处先备份ksms.s文件,如果编译过程中出现错误,保证操作可以被恢复:
恢复步骤大致如下:
cd $ORACLE_HOME/rdbms/lib以下是操作日志:
cp ksms.s.bak ksms.s (if u have backup ksms.s file)
genksms > ksms.s
make -f ins_rdbms.mk ksms.o
make -f ins_rdbms.mk ioracle
[oracle@neirong dbs]$ cd $ORACLE_HOME/rdbms/lib
[oracle@neirong lib]$ genksms -s 0x12000000 > ksms.s
[oracle@neirong lib]$ make -f ins_rdbms.mk ksms.o
[oracle@neirong lib]$ make -f ins_rdbms.mk ioracle
- Linking Oracle
rm -f /opt/oracle/product/9.2.0/rdbms/lib/oracle
gcc -o /opt/oracle/product/9.2.0/rdbms/lib/oracle -L/opt/oracle/product/9.2.0/rdbms/lib/
-L/opt/oracle/product/9.2.0/lib/ -L/opt/oracle/product/9.2.0/lib/stubs/
-Wl,-E `test -f /opt/oracle/product/9.2.0/rdbms/lib/skgaioi.o && echo
/opt/oracle/product/9.2.0/rdbms/lib/skgaioi.o` /opt/oracle/product/9.2.0/rdbms/lib/opimai.o
/opt/oracle/product/9.2.0/rdbms/lib/ssoraed.o /opt/oracle/product/9.2.0/rdbms/lib/ttcsoi.o
/opt/oracle/product/9.2.0/lib/nautab.o /opt/oracle/product/9.2.0/lib/naeet.o
/opt/oracle/product/9.2.0/lib/naect.o /opt/oracle/product/9.2.0/lib/naedhs.o
/opt/oracle/product/9.2.0/rdbms/lib/config.o -lserver9 -lodm9 -lskgxp9 -lskgxn9 -lclient9
-lvsn9 -lwtcserver9 -lcommon9 -lgeneric9 /opt/oracle/product/9.2.0/rdbms/lib/defopt.o
-lknlopt `if /usr/bin/ar tv /opt/oracle/product/9.2.0/rdbms/lib/libknlopt.a | grep
xsyeolap.o > /dev/null 2>&1 ; then echo "-loraolap9" ; fi`
-lslax9 -lpls9 -lplp9 -lserver9 -lclient9 -lvsn9 -lwtcserver9 -lcommon9 -lgeneric9
-lknlopt -lslax9 -lpls9 -lplp9 -ljox9 -lserver9 -locijdbcst9 -lwwg9
`cat /opt/oracle/product/9.2.0/lib/ldflags` -lnsslb9 -lncrypt9 -lnsgr9 -lnzjs9
-ln9 -lnl9 -lnro9 `cat /opt/oracle/product/9.2.0/lib/ldflags` -lnsslb9 -lncrypt9
......
mv -f /opt/oracle/product/9.2.0/bin/oracle /opt/oracle/product/9.2.0/bin/oracleO
mv /opt/oracle/product/9.2.0/rdbms/lib/oracle /opt/oracle/product/9.2.0/bin/oracle
chmod 6751 /opt/oracle/product/9.2.0/bin/oracle
|
此后数据库可以以超过1.7G的SGA区设置启动:
SQL> startup
ORACLE instance started.
Total System Global Area 2685476820 bytes
Fixed Size 454612 bytes
Variable Size 1073741824 bytes
Database Buffers 1610612736 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
|
Posted by eygle at 5:06 PM | Comments (5)
November 24, 2005
绿色的飞跃 SUN公司的新产品发布会
作者:eygle
出处:http://blog.eygle.com

昨天刚刚提到UltraSparc T1处理器 SUN的新起点,今天就收到SUN的注册邀请函:
又值硕果累累的金秋时节,Sun公司再一次载满丰硕的技术成果,为您奉上“绿色的飞跃 -- Sun公司突破科技创新,缔造IT环保时代的全线新产品发布会”,隆重展现其在网络计算上的又一个重要里程碑。...如何让客户不断提高网络计算的优势性能与获利,更是 Sun 公司多年来一直追求的目标。如今,IT技术的“绿色时代”正昂首阔步地向我们挺进!...
本次发布会上,Sun 公司将向您介绍基于领先世界的海量吞吐多线程“CoolThreads”芯片所设计的最新UltraSPARC服务器,其革命性的性能价格比与“绿色”节能创新都是业界的创举。由Sun公司创始人之一所设计的基于AMD Opteron 64位处理器的系列服务器,更赋予了俗称行业标准的服务器以一个全新的定义,可最优化地运行所有x86领域的操作系统。而UltraSPARC IV+芯片的优异性能与兼容性,实现了对客户的最佳投资保护,可以用相同的成本,在不间断业务营运的情况下,瞬间成倍地提升数据中心性能。....
有意前往的朋友可以在以下网站进行报名:http://cn.sun.com/event/NC05Q4/.
届时让我们一睹SUN的新技术风采.
Posted by eygle at 11:03 AM | Comments (1)
November 23, 2005
UltraSparc T1处理器 SUN的新起点
作者:eygle
出处:http://blog.eygle.com
今天在网上看到一则关于SUN的消息,其基于CoolThreads技术的UltraSparc T1即将推出,SUN对这一处理器充满信心并寄予厚望。
在心里一直对SUN是有偏爱的,这几年一直在大量使用SUN的主机,SUN与Oracle的兼容性远远优于IBM、HP。希望SUN的路能走得更远,能在这一市场上继续同IBM,HP竞争下去。
2005年11月14日,Sun Microsystems公司宣布推出UltraSPARC T1处理器,其原来的编码名称为“Niagara”(尼亚加拉)。在今年12月6日Sun的季度网络计算会议上,Sun可能会推出基于该处理器的系统。
UltraSparc T1主频1.2GHz,最大功耗72W,远低于Intel双核Xeon的135W和AMD双核Opteron的95W。UltraSparc T1拥有八个处理核心,每核心均可同时处理四个线程。SUN将CMT(chip multi-threading,芯片多线程)技术称为“CoolThreads”,并已经为此申请了名为CoolThreads的专利。
《Discover Magazine》2005年8月号曾有一段充满诗意的描述:这一突破性芯片采用了具有专利权的CoolThreads芯片多线程技术,并充分发挥世界上最先进的操作系统 Solaris 10 的多线程特性,成为世界上第一个“绿色经济型”处理器:研究显示,UltraSPARC T1处理器的性能可以使全球的Web服务器的数目减半,大幅度地削减能源需求,这与多植了100万英亩的树木以减少二氧化碳的排放量有同样的效果。
自从互联网时代蓬勃发展以来,Sun作为第三大服务器制造商就一直没有找到状态,目前公司已经被惠普和IBM远远的抛在了身后。在今年第二季度中,Sun全球范围服务器产品营收下滑了5.3%,仅仅为13.7亿美元。与此同时,IBM和惠普分别增长了4.1%和11.5%。希望这一款处理器能够拯救SUN于危难之中.
Posted by eygle at 3:36 PM
November 22, 2005
为了社会的和谐 请大家注意安全
作者:eygle
出处:http://blog.eygle.com
前几天,签批了一个特殊的报废申请,那位同事大约是这样写的:
11月x日晚19:30分左右,下班后行走至广州天河...附近,遭遇摩托车洗劫,被抢笔记本一个,手机一部,现金若干...
奋起直追,没能追上.
后面还附了一份复印的报案记录.
首先我们想说的是,这种情况,就不要奋起直追了,安全第一.
然后在资产处理上,公司没有针对相关情况的规定,讨论了一下,最后特例予以报废处理,财务是需要处置这笔损失的(别的公司呢?类似情况如何处理?).
忽然想到了前几天收到一个朋友转发的邮件,内容是IBM 公司最新的出差安全守则.
其中很多都是金玉之言,转录在这里,供大家参考,同时提醒大家,年底来到,一定要注意安全:
IBM 公司最新的出差安全守则
敬爱的员工们,防患临街抢夺和偷窃财物这样的犯罪行已经成为了每一位员工必须正视的安全问题,在广州、深圳和乌鲁木齐已有类似案例发生在我们员工身上。为了您自身的安全和所携带物品的安全,当您前往案发率较高的城市出差时,请随时保持高度的警惕性。
为了使您避免成为类似案件的受害者,当您出差之前,务必阅读下列的安全提示。并且在出差途中务必遵守下列安全提示的内容:
您的安全由整理行装那一刻开始
若非必要,请不要携带笔记本电脑外出
当您在案发率高的地区出差时,尽量使自己低调一些,避免使用单肩的印有IBM Logo的手提电脑包携带您的笔记本电脑,最好使用双肩的休闲背包或者袋子,使人看上去不太引人注目
若非必要,避免携带过多的现金和贵重物品
请不要将手机挂在脖子上或别在腰部等显而易见的部位,因为这样会导致您成为犯罪份子的作案对象户外
外出时,请不要佩带您的IBM胸卡
当您要外出时,尽可能的提前安排汽车接送服务。这样能通过减少你暴露在街道的时间从而降低您受害的风险
尽可能的结伴同行请不要沿着一些能令摩托车轻易接近您的道路旁行走,尽量避免在黑暗和僻静的地方行走,时刻关注您身边环境的变化,特别是当有陌生人接近你时
请不要在街上边走边用手机聊天,因为这样会分散您的注意力和警惕性当您走近一些街上的陌生人时,包括地摊小贩和行乞者以及宣传单派送人员,请不要停留或驻足聊天
当您面临危险时,请勿与罪犯抵抗。
放弃你的贵重物品,须知您的钱财远不及您的生命来得重要在乘坐公共交通工具时,如巴士/地铁/计程车,请勿站在靠近车门位置用手机聊天
请时刻注意您周围的一些可疑活动
请尽量不要随着人流争强座位。当您全神贯注于争强最后一个座位时,您不会容易感觉到您的包已经被打开、随身物品已被窃。站着总好过成为一个受害者
请勿将您的贵重物品(特别是手提电脑)放置在行李架上,全程留意和关注你的贵重物品的去向当您自驾车或者乘坐计程车出差时,切记要保持车门上锁,把车窗摇起至顶点并把贵重物品放置在不容易被看见的地方
一般的作案手法是,犯罪份子在您行车缓慢又或因交通堵塞而停在路上时,通过没锁上的车门或车窗,下手抢夺车上的财物在机场时
在办理登机或离开手续之时,请时刻关注和留意您所携带物品的去向请直接前往机场的安全区,例如登机门
机场的失窃案件往往发生在一瞬间,经常发生在当您将物品放置在地面之时、打电话之时、使用ATM机之时、或在物品安全检查处时,所以请保持高度警惕在酒店时
当您办理入住登记或离开手续时,请密切关注您所携带物品的去向酒店内的失窃案件往往发生在一瞬间,当您将物品放置在前台的地面、大堂休息处、餐馆或者酒吧时,请保持高度警惕
请使用酒店的保险柜去保护您的手提电脑和贵重物品,例如现金、护照等
请保持您的房门始终上好保险锁。当有访客敲门时,请使用保险锁开门,并确认访客身份
请在大堂会见您的来访者,尽量避免在房间会客
酒店的洗手间属于公共区域,每个人都可以自由进入。当您带着手提电脑和贵重物品进入洗手间时,请密切留意身边的陌生人,尤其是当洗手间位于一个比较隐蔽的角落当您不幸成为受害者,请立即向当地警方和IBM安全人员报案
Posted by eygle at 10:25 PM | Comments (8)
体验微软live免费邮局服务
作者:eygle
出处:http://blog.eygle.com
近日,微软通过新推出的live.com网站开始提供免费邮局服务.
只要我们拥有自己的域名,就可以通过在domains.live.com进行简单的设置获得以自己域名为后缀的免费邮局。
整个注册过程有三个步骤:
第一步输入你想要登记的域名
第二个步骤需要确定你的管理邮箱
第三个步骤是进行配置,在你的域名提供商出添加MX记录.
验证成功之后就完成了注册.
这里发现微软的网页还存在很多问题,经常在跳转时无法成功sign in.
第一次试的时候根本无法进入第三个步骤,等一段时间才再恢复正常.
完成以上步骤之后,就可以添加以你的域名为后缀的邮箱了.
这个邮件服务基于Hotmail免费邮箱的服务平台,可以为每个域名创建最多20个邮箱。
我创建的第一个邮箱自然就是eygle#eygle.com
Posted by eygle at 7:57 PM | Comments (0)
November 19, 2005
Oracle初学者入门指南-索引是干什么用的?
作者:eygle
出处:http://blog.eygle.com
关于索引是什么的最简单的比喻是,索引之于表数据如同目录之于一本书。通过目录的页码我们可以快速的定位一个内容,同样通过索引记录的rowid我们可以快速的定位一条数据。
如同目录很难针对书中每个字词一样,索引也很难针对所有字段。
我们通常索引最能代表章节,记录属性的内容。
索引并非总能带来性能提升,但是通常情况下,索引能加快访问,所以建表的时候,你一定要知道还有索引这样一类对象。
下面这个案例是我们绝对不应该和不想看到的。
今天一个部门报数据库巨慢无比,上去看了一下,抓到如下的SQL:
SQL> select sql_text 2 from v$sqltext a 3 where a.hash_value = ( 4 select sql_hash_value from v$session b 5 where b.sid='&sid' 6 ) 7 order by piece asc 8 / SQL_TEXT ---------------------------------------------------------------- select * from i_cm_power t WHERE T.SJH='13911xxxxx6' |
检查了一下该查询访问的数据表,居然一个索引都没有:
SQL> select index_name from dba_indexes where table_name=upper('i_cm_power');
INDEX_NAME
------------------------------
|
没有索引意味着,即使为了获取这一条记录,Oracle也必须对5.28G的一个表进行全表扫描,如果不慢那就怪了:
SQL> col segment_name for a20
SQL> select segment_name,bytes/1024/1024/1024
from dba_segments where segment_name=upper('i_cm_power');
SEGMENT_NAME BYTES/1024/1024/1024
-------------------- --------------------
I_CM_POWER 5.28173828125 |
创建一个索引再说:
SQL> create index idx_i_cm_power_sjh on i_cm_power(sjh);
Index created.
Elapsed: 00:20:50.73
SQL> col segment_name for a20
SQL> select segment_name,bytes/1024/1024 MB
2 from dba_segments where segment_name=upper('idx_i_cm_power_sjh');
SEGMENT_NAME MB
-------------------- ----------
IDX_I_CM_POWER_SJH 1360
SQL> |
无疑这个索引对于这样的简单查询是大有益处的:
SQL> select * from i_cm_power t WHERE T.SJH='13911xxxxx6';
Elapsed: 00:00:00.07
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'I_CM_POWER'
2 1 INDEX (RANGE SCAN) OF 'IDX_I_CM_POWER_SJH' (NON-UNIQUE)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
6 consistent gets
0 physical reads
0 redo size
1022 bytes sent via SQL*Net to client
503 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed |
然而在实际中,你需要考虑更多的因素。
增加索引会占用更多的存储空间;索引的维护会增加数据库的负担,如果有海量的数据加载,可能会极大影响性能...
所以事实可能总是比你想象的更复杂,你只有知道的更多...
Posted by eygle at 9:53 AM | Comments (3)
