December 31, 2005
我的2005年
作者:eygle
出处:http://blog.eygle.com
2005年就这样匆匆而过,忍不住也要回头想想这一年来走过的路、经过的事、认识的人:
走过的路:
2005年走的最远的一次是去了上海、苏州、杭州、西塘和黄山。在这次旅行中,认识了上海的Sunny,见到了杭州的宝宝。当然最重要的,在苏州第一次做了朋友的伴郎,参加了一场盛大的婚礼。我也终于明白了典礼的神圣,那一切绝非形式。年底的时候,朋友当了爸爸,安安快乐的诞生。为了这个消息,在2005年的岁末,我着实欢喜了好多天。
经过的事:
公司在2005年登陆了纳斯达克,可是形势并非大家想象的那么乐观,在经历了调整布局之后,公司开始转型娱乐,签约了火爆整个夏天的超级女生张靓颖。身为一个凉粉,这是非常令我开心的一件事。还有同样在这个夏天,我去看了罗大佑的演唱会,这个老去的偶像依然可以让我热泪盈眶。也许我不再需要偶像,可是这一老一幼的两个人,都是那么的让我欣赏。
2005年,我经历了自己最灰暗的一段日子,长长的一段时间里,一直无法从低沉的情绪中走出来,我也终于失去了自己曾经认为是最为宝贵的东西。
认得的人:
这一年,仍然是通过网络认识了很多的朋友,Sunny、Julia、Selina都是从网络再到现实中的朋友。Julia教会了我什么是豁达与乐观,而最初只是去她那里参考她绘声绘色的相亲经历;Selina在冬天里带来了四个字:“风华正茂”,仿佛是要提醒我已经不再年轻。
就这样2005匆匆而去。
我尚未开始准备,2006年已经来临。Posted by eygle at 11:59 PM | Comments (7)
CBO RBO Oracle10g and Speed
作者:eygle
出处:http://blog.eygle.com
在Itpub上有朋友问到这样一个问题:
拿expert 的例子在10g上测验绑定变量的问题.
发现如果不使用绑定慢许多(这个没问题),我们的机器肯定要好于当时作者的机器,(但是)结果(却比作者慢很多)如下:不使用绑定变量要36.33秒..
使用绑定变量0.50秒..而作者的测试分别为:
不使用绑定变量14.86 seconds...
使用绑定变量1.27 seconds...
到底是什么原因差距这么大?
首先我们需要知道,使用绑定变量,降低硬解析,通常可以提高系统的性能。
对于这个问题,我们需要知道,从Oracle9i到Oracle10g,Oracle有一个非常显著的变化,那就是放弃RBO,全面引入了CBO。
正是这一变化导致了以上差异的存在。
在Oracle9i中,通常我们不会收集系统的统计信息,这使得对于all_objects的查询会使用RBO,而在Oracle10g中,缺省的会使用CBO优化器。
对于反复的硬解析,统计信息、柱状图信息的判断以及执行计划的选择使得性能急剧下降。
下面我的测试结果中,你可以清楚的看到这些差别,在增加了rule提示以后,速度明显增加:
1.不使用绑定变量
大约用了27秒
[oracle@danaly udump]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.1.0 - Production on Sat Dec 31 10:31:47 2005 Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> alter system flush shared_pool; System altered. SQL> set serveroutput on PL/SQL procedure successfully completed. |
2.增加Rule提示
只需16秒多一点.
SQL> declare PL/SQL procedure successfully completed. |
3.使用绑定变量
使用绑定变量方式速度非常的快,只需要.19秒。
SQL> declare PL/SQL procedure successfully completed. SQL> |
Posted by eygle at 3:27 PM | Comments (5)
December 30, 2005
谁偷走了一秒光阴?
作者:eygle
出处:http://blog.eygle.com
Julia发短信告诉我,今年将会有一个闰秒出现.在网上搜索了一下,居然是真的:
2005年7月4日,国际地球自转服务组织(IERS)发布C公报,协调世界时(UTC)将在2005年底实施一个正闰秒,即增加1秒。届时,所有的时钟将拨慢1秒。具体实施步骤如下:
UTC协调世界时:
23时59分59秒(2005年12月31日)
23时59分60秒(2005年12月31日)
00时00分00秒(2006年1月1日)
相应地,北京时间:
7时59分59秒(2006年1月1日)
7时59分60秒(2006年1月1日)
8时00分00秒(2006年1月1日)
世界时是基于地球自转的一种时间计量系统,原子时是基于原子物理技术的一种更加均匀的时间系统。由于两种时间尺度速率上的差异,一般来说1~2年会差1秒。我们日常生活所用的时间是协调世界时(UTC),它是一种折衷的时间尺度,用原子时的速率,而在时刻上逼近世界时,所用方法就是“闰秒”,也就是协调世界时和世界时之差即将超过±0.9秒时,就对协调世界时作一整秒的调整。
由于地球自转变慢,而引起到2005年底协调世界时和世界时之差即将越限,因此,国际地球自转服务组织宣布此次闰秒。
看到这则消息,忽然想起了以前看过的一部电影《偷天陷阱》,老帅哥肖恩·康纳利(Sean Connery)和凯瑟琳·泽塔-琼斯(Catherine Zeta-Jones) 共同演绎了一对偷天大盗,记得他们就是利用时间调整中时间差(“千年虫”),潜入吉隆坡银行,将八十亿美元转入己自己的帐户。
这一次时间差再次出现,可是还有人能利用这一秒的差异偷天换日么?
我们的DBA们,如果调整一秒的数据库时间,这个世界上又会发生什么呢?
我们的2006年的第一天将会多出了一秒钟,这一秒钟从何而来又将向何处去呢?
时间的历史
远古时期,人类以太阳的东升西落作为时间尺度,日出而作,日落而息。
公元前,我国人民发明了土圭日晷,一天差15分钟。据记载,公元前一干年左右的西周初期,就已经发明了最原始的计时器土圭,所测的一年时间,已接近于地球绕太阳公转的时间。后来发展为“圭表”。“日晷”大约发明于汉代以前,同土圭一样,都是观测阳光投影方向的计时器。我国目前发现最早的一件日晷出于汉代。
我国的北宋时期和一千多年前的希腊,都曾设计出水钟,精确到每日10分钟的误差;我国在公元前五世纪发明的“壶漏”(又称“漏壶”)是用漏水的方法,观测“刻箭”的昼夜计时器。
在六百多年前,机械钟问世.它将昼夜正式分为24小时;到了十七世纪,单摆用于机械钟,使计时精度提高近一百倍;到了20世纪的30年代,石英晶体震荡器出现,对于精密的石英钟,三百年只差一秒。1953年世界上第一台原子钟在美国研制成功,最终使时间误差减少为零!
在一秒钟,发生了些什么呢?
1秒钟 人呼吸93毫升空气
1秒钟 人的心脏跳动1次并将60毫升血液输送到体内
1秒钟 人鼻腔中的纤毛摆动4次
1秒钟 人的小肠里有170万个细胞发生新陈代谢
1秒钟 猎豹在草原上可飞奔28米
1秒钟 蚯蚓吞食0.17毫克的土壤
1秒钟 蜂鸟振翅55次
1秒钟 植物中生长最快的竹子长10微米
1秒钟 全球平均降雨420万吨
1秒钟 地球绕太阳转动29.8公里
1秒钟 深层海流在4000米深的海底向前流动10厘米
1秒钟 夏威夷群岛向日本靠近2.9纳米
1秒钟 地球从太阳接收486亿千瓦小时的能量
1秒钟 宇宙空间里有79个星体发生爆炸结束其“生命”
1秒钟 太阳系在银河系内运行220公里
1秒钟 全球排放的二氧化碳达39万立方米,相当于32栋体育馆的面积
1秒钟 地球表面的平均气温上升0.00000000167摄氏度
1秒钟 格陵兰岛的冰川融化1620立方米
1秒钟 全球大气中减少了可供140万人用1天(710号)的氧气
1秒钟 全世界使用252吨石化燃料,相当于63辆卡车的装载量
1秒钟 Ogallala地下蓄水层的水减少380立方米,相当于一个25米游泳池的容量
1秒钟 世界灌溉农田总面积增加870平方米,足以停放58辆汽车
1秒钟 全世界天然林消失5100平方米,相当于20个网球场的面积
1秒钟 地球上平均有0.002种生物灭绝,即在7分钟里就会有1种生物灭绝掉
1秒钟 中国新沙化的土地达78平方米,相当于48个榻榻米的面积
1秒钟 全世界耕地减少2300平方米,相当于3.45亩的面积
1秒钟 全世界生产4.7公斤氟利昂气体
Posted by eygle at 9:50 PM | Comments (8)
Oracle HowTo: How to deal with Ora-600 4193 error
作者:eygle
出处:http://blog.eygle.com
在解决2662错误之后,经常会出现Ora-00600 4193错误,经常可以在alert文件中看到的错误号类似:
Fri Dec 16 22:37:27 2005
Errors in file /opt/oracle/admin/conner/bdump/conner_smon_22817.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4193], [1171], [1187], [], [], [], [], []
Fri Dec 16 23:28:40 2005
Errors in file /opt/oracle/admin/conner/bdump/conner_smon_22817.trc:
ORA-00600: internal error code, arguments: [4193], [1171], [1187], [], [], [], [], []
4193错误通常是因为恢复时redo与undo不一致所导致。
Oracle的解释如下:
While backing out an undo record (i.e. at the time of rollback) we found a transaction id mis-match indicating either a corruption in the rollback segment or corruption in an object which the rollback segment is trying to apply undo records on.
This would indicate a corrupted rollback segment.
检查具体的Trace文件,可以发现类似如下错误:
*** 2005-12-16 20:54:53.496 |
由于是UNDO存在不一致,可以通过重建UNDO表空间来解决:
SQL> create undo tablespace undotbs2 Tablespace created. SQL> alter system set undo_tablespace=undotbs2 scope=both; System altered. SQL> shutdown immediate; Total System Global Area 114365800 bytes NAME TYPE VALUE SQL> drop tablespace undotbs1 including contents and datafiles; Tablespace dropped. |
至此,Ora-600 4193错误不再出现。
从alert文件中,可以看到自动控制文件备份生效:
Sun Dec 18 22:37:59 2005 |
Posted by eygle at 2:25 PM | Comments (3)
December 29, 2005
遭遇Referer Spam Too
作者:eygle
出处:http://blog.eygle.com
刚刚在车东的Blog上看到遭遇Referer Spam,检查一下自己的网站,发现同样存在类似问题,部分ip地址有大量的访问,然而流量却为0.
| ip地址 | Pages | Hints | Bandwidth |
| 64.193.62.232 | 5087 | 5087 | 0 |
| 69.73.166.108 | 2835 | 2835 | 0 |
再综合日志,的确同样遭遇了Reffer Spam,大量0流量的HEAD请求试图通过分析系统创造反向的referer.
不过对于我的网站,显然作恶者无法达到他们的目的.
64.193.62.232 - - [21/Dec/2005:17:54:07 +0800] "HEAD / HTTP/1.1" 200 |
为了避免这些流量对于Awstat统计的影响,修改了一下awstat的统计脚本:awstat.pl
注视以下一行:
$field[$pos_method] eq 'HEAD'
问题获得解决。
-The End-
Posted by eygle at 5:19 PM | Comments (2)
spam留言知几何?
作者:eygle
出处:http://blog.eygle.com
如果说网络上还有什么东西被所有人(垃圾制造者除外)深恶痛绝的,那也许就是SPAM留言;如果说2005年网络上有什么令我咬牙切齿,那么也是SPAM留言.
此前我的Blog就深受其苦,后来安装了Scode插件,开始我仍然允许不输入验证码的回复,这样我可以在Junk Comment中回收非Junk评论.可是一段时间以后,我不得不放弃了,因为每天去检查几百条垃圾留言也实在辛苦,所以,现在缺少认证码的留言会被直接放弃.
还有留言版上,也许你不知道每天会有多少无聊的人向我的留言版上粘贴垃圾.我增加了一个数据表用来过滤和存储SPAM回复,现在可以给大家看看.
从12.13日增加该功能之后:
mysql> select FROM_UNIXTIME(dateline) from spambook limit 1; |
共收到垃圾回复1885条:
mysql> select count(*) from spambook; |
平均每天有120条左右:
mysql> select DAYOFMONTH(FROM_UNIXTIME(dateline)) 'date' ,count(*) |
我们看看都是哪些无聊的人:
mysql> select distinct(username),count(*) ct |
Posted by eygle at 4:16 PM | Comments (0)
December 28, 2005
人生为什么?
作者:eygle
出处:http://blog.eygle.com
今天下午,正在面试的时候,一个很久没有联系的朋友来电话。
聊起最近的状况,她说她的目标马上就要实现。
7年以前她来北京的时候还只是一个初出校园的小姑娘,她的第一份工作是在一个学校里教书。
一个同事曾经郑重的对她说:你不属于这里,你应该去当主播,你应该上电视。
那时候看起来,这是一个非常遥远的梦。可是现在,她说:这个梦想马上就会实现。
然而没有惊喜,所有的感觉只剩下四个字:索然无味!
她说,没想过一路走来,曾经遥不可及的梦想就这样成为现实,也许自己有的就只是坚持,坚持朝这个方向,从没放弃。
从学校,到China Daily,再到CCTV,她一直在积蓄,并且逐渐起飞。
可是又怎么样呢?她说。
于是我又想起这样一个命题:人生为什么?
也许得不到的永远最美,也许过程永远最美,也许这个命题永远无解。
Posted by eygle at 11:01 PM | Comments (9)
December 27, 2005
My answer for-9个动态性能视图
作者:eygle
出处:http://blog.eygle.com
之前写过一个命题:列举你认为最重要的9个动态性能视图,在Itpub上有朋友忽然问这个问题答案.原来是在面试中被问及了这个问题.
实际上我提出的只是一个命题,答案肯定因人而异,而且这个问题的答案也无所谓对错.
但是通过答案我们的确可以看出一个人对数据库的认识和理解,看出他的侧重点,看出他的知识面.
进而,面试者可以通过你的回答进行更为深入的提问,从而来考察你的真实水平.在完善的面试下,真实的技术水平肯定是无法隐瞒的.
在命这个题的时候,我也没有想过自己的答案.
所以说9,是因为考虑到,数以1始,以9终,是以为极.
故有9之说
如果真要我想,大约列了9个,真还不好取舍:
v$session + v$session_wait (在10g里功能被整合,凑合算1个吧.)
v$process
v$sql
v$sqltext
v$bh (更宁愿是x$bh)
v$lock
v$latch_children
v$sysstat
v$system_event
这是我的答案,这里有小惠惠的答案,大家都来列一下,我们取下交集或许可以给彼此一个参考:)
看到别人的答案我们应该思考:给我这些视图,我能获得哪些信息?我能解决哪些问题?
然后,如果有机会和答题者讨论沟通,必然有不错的提高,三人行必有我师,学习也正是一个不断借鉴交流提升的过程.
谢谢大家!
Posted by eygle at 10:23 PM | Comments (7)
what is SMON_SCN_TIME ?
作者:eygle
出处:http://blog.eygle.com
SMON_SCN_TIME是Oracle数据库的系统表,用以进行辅助恢复等功能。
在Oracle9iR2中,SMON_SCN_TIME每5分钟被更新一次。
[oracle@jumper oracle]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Mon Dec 19 18:19:27 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; Session altered. SQL> select * from smon_scn_time where rownum <10; THREAD TIME_MP TIME_DP SCN_WRP SCN_BAS 9 rows selected. |
SMON_SCN_TIME记录5天的数据,也就是1440 ((5d x 24h x 12m = 1440) 条记录。
所以在Oracle9iR2中,表属性修改时间和flashback时间差至少应为5分钟。否则就会出现ORA-01466错误。
[oracle@jumper oracle]$ sqlplus eygle/eygle SQL*Plus: Release 9.2.0.4.0 - Production on Mon Dec 19 19:34:53 2005 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
19:34:58 SQL> col myscn for 9999999999999999 Table created. 19:35:00 SQL> exec :myscn := dbms_flashback.get_system_change_number(); PL/SQL procedure successfully completed. 19:35:00 SQL> print myscn; MYSCN 19:35:00 SQL> insert into eygle values(1); 1 row created. 19:35:00 SQL> commit; Commit complete. 19:35:00 SQL> exec :myscn := dbms_flashback.get_system_change_number(); PL/SQL procedure successfully completed. 19:35:00 SQL> print myscn; MYSCN 19:35:00 SQL> select * from eygle as of scn(:myscn); 19:41:10 SQL> select * from eygle as of scn(:myscn); 19:43:03 SQL> select dbms_flashback.get_system_change_number myscn from dual; MYSCN 19:43:15 SQL> select * from eygle as of scn 107374274944; C1 |
此时SMON_SCN_TIME中的信息如下:
19:45:11 SQL> select * from (select * from smon_scn_time order by time_dp desc) where rownum <5; THREAD TIME_MP TIME_DP SCN_WRP SCN_BAS |
在Oracle10g中,SMON_SCN_TIME表每6秒被更新一次。所以这个Flashback时间被缩小为6秒。
[oracle@danaly ~]$ sqlplus eygle/eygle SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 19 19:37:19 2005 Copyright (c) 1982, 2005, Oracle. All rights reserved.
19:37:22 SQL> col myscn for 9999999999999999 Table created. 19:37:22 SQL> exec :myscn := dbms_flashback.get_system_change_number(); PL/SQL procedure successfully completed. 19:37:22 SQL> print myscn; MYSCN 19:37:22 SQL> insert into eygle values(1); 1 row created. 19:37:22 SQL> commit; Commit complete. 19:37:22 SQL> exec :myscn := dbms_flashback.get_system_change_number(); PL/SQL procedure successfully completed. 19:37:22 SQL> print myscn; MYSCN 19:37:22 SQL> select * from eygle as of scn(:myscn);
SCN_TO_TIMESTAMP(16011230124) 19:38:50 SQL> select timestamp_to_scn('19-DEC-05 07.37.27.000000000 PM') MYSCN from dual;
MYSCN 19:39:02 SQL> select * from eygle as of scn 16011230125; C1 |
Posted by eygle at 8:19 PM | Comments (3)
December 26, 2005
A Gift:Oracle DW/BI 2006 Calendar
作者:eygle
出处:http://blog.eygle.com
上周,收到以一份Oracle DW/BI部门发来的2006年电子日历,虽然是电子的,感觉还是不错.
放在这里和大家分享,欢迎下载:)
数据库上加一点小雪花,看看Oracle的圣诞和新年祝福,别有一番盎然之意.
祝愿所有玩Oracle的朋友在新年里能够更上层楼.
Posted by eygle at 10:48 AM | Comments (4)
