垃圾邮件的生命力如此顽强
刚刚登陆MSN,提示有5封mail。我这个号码启用的时间不长,暂时还没怎么受到垃圾邮件的骚扰,所以一般还是点进去看看,而且这段时间不时的有人将应聘简历发到这个live.com的邮箱。
但是这次进去发现5封全是一样的垃圾邮件,内容基本都是“微软总裁盖茨大善心只要帮微软测试新一代邮件系统即可获得美刀”,google一下,居然是2006年度著名的垃圾邮件,甚至有文章认为该邮件的热度超过当年红火一时的史上最牛女秘书事件。
内容如下:
Dear Friends,
Please do not take this for a junk letter. Bill Gates is sharing his fortune. If you ignore this you will repent later. Microsoft and AOL are now the largest Internet companies and in an effort to make sure that Internet Explorer remains the most widely used program, Microsoft and AOL are running an e-mail beta test.
親愛的朋友們,
請不要把此郵件當作是垃圾郵件。比爾.蓋茨正在施捨他的財富。如果你無視此封郵件稍後你將會追悔莫及.Microsoft and AOL 是現今最大的因特網公司並致力於確保因特網Windows資源管理器依然是使用最廣的程序,Microsoft and AOL 正在進行E-mail第二個階段的測試。When you forward this e-mail to friends, Microsoft can and will track it (if you are a Microsoft Windows user) for a two week time period.
噹你把此e-mail轉送給你的朋友時,微軟將跟在兩周內蹤它(如果你是Microsoft Windows 的使用者)。For every person that you forward this e-mail to, Microsoft will pay you $245.00, for every person that you sent it to that forwards it on, Microsoft will pay you $243.00 and for every third person that receives it, you will be paid $241.00. Within two week! s, Microsoft will contact you for your address and then send you a cheque.
對於每一個轉發此mail給朋友的人,微軟將會付給你$245。對於每一個你轉發了的人,別人又繼續轉發的人,微軟將付給你$243並且每三個人收到此mail,你將會得及$241的付款。在兩周內,微軟將會聯繫你的地址並給你一張支票!
Don’t Know True Or False, Just Have a Try
这类邮件的内容,无非两种形式,一种威逼,一种利诱,在没有互联网之前,就有类似的纸质垃圾邮件传播过。有意思的是,这个到处转发的垃圾邮件里,满是诸如华硕,中兴,贝尔阿尔卡特等知名公司的员工邮箱甚至工号等信息,或许这些更有价值,难道这就是这类垃圾邮件的目的所在?呵呵
号外:李连杰在淘宝
今天上午,淘宝办公室,二楼,李连杰从身边走过,毫无预兆的^_^



ASM环境中有关磁盘的操作要慎重
这两天遇到一个ASM损坏的案例,环境是AIX,单机ASM,采用/dev/rhdiskn字符设备直接做为ASM Disk。损坏的diskgroup无法mount,alert中记录错误如下:
WARNING: cache failed to read fn=279 indblk=0 from disk(s): 6
ORA-15196: invalid ASM block header [kfc.c:7910] [endian_kfbh] [279] [2147483648] [6 != 0]
NOTE: a corrupted block was dumped to the trace file
System State dumped to trace file /u01/app/oracle/admin/+ASM/bdump/+asm_rbal_950452.trc
NOTE: cache initiating offline of disk 6 group 1
WARNING: offlining disk 6.4247132900 (DATA_0006) with mask 0x3
从报错中可以知道disk 6的某个block损坏了,kfbh.endian=6,本来应该等于0的。Trace file中可以找到损坏块的dump信息:
kfgbBind: binding kfgpn for group 1/0xA5A6EA25 (DATA)
kfgbRecoverCod: queued COD recovery for group 1/0xa5a6ea25 (DATA)
kfgbPeelWaitCIC: ignored, not rebalancing gn=1
kfgbRegister: registering group 2/0xA5F6EA26 (FLASH_RECOVERY_AREA)
kfgbBind: binding kfgpn for group 2/0xA5F6EA26 (FLASH_RECOVERY_AREA)
kfgbRecoverCod: queued COD recovery for group 2/0xa5f6ea26 (FLASH_RECOVERY_AREA)
kfgbPeelWaitCIC: ignored, not rebalancing gn=2
kfgbRebalanceCont: continuing-op COD for group 1/a5a6ea25lx (DATA)
kfgbRebalGrp: queued rebalance (power 1) for group 1/0xa5a6ea25 (DATA)
OSM metadata block dump:
kfbh.endian: 6 ; 0x000: 0x06
kfbh.hard: 162 ; 0x001: 0xa2
kfbh.type: 0 ; 0x002: KFBTYP_INVALID
kfbh.datfmt: 0 ; 0x003: 0x00
kfbh.block.blk: 113817841 ; 0x004: T=0 NUMB=0x6c8b8f1
kfbh.block.obj: 581177085 ; 0x008: TYPE=0x2 NUMB=0x40efd
kfbh.check: 262 ; 0x00c: 0x00000106
kfbh.fcn.base: 2627010571 ; 0x010: 0x9c95000b
kfbh.fcn.wrap: 33554432 ; 0x014: 0x02000000
kfbh.spare1: 76002 ; 0x018: 0x000128e2
kfbh.spare2: 581177083 ; 0x01c: 0x22a40efb
这个比disk header损坏更严重,disk header中包含的信息有限,重建一下就可以恢复了。而具体的块损坏,则不可避免的导致数据丢失。后来发现导致块损坏的原因,居然是disk 6,对应的/dev/rhdisk8,被错误加入到一个vg当中了,这明显是一次误操作导致磁盘数据被覆盖了。在ASM环境中,对于磁盘操作,需要慎重,一个disk的损坏可能导致整个diskgroup无法使用,而且由于file分布在很多disk上,一个disk的损坏也会导致很多file失效,使得找回数据更加困难。
当然,这也可以说明另外一个问题,就是ASM还没有获得OS的足够支持。如果OS能够正确的识别ASM的Disk Header,就能够禁止该类型的操作,至少要给出提示,Oracle要推广ASM,还有很长的路要走。这也告诉我们,在DBA的日常操作中,要注重设计的简单性,文档的规范性和可操作性,并且操作要严格的安装手册执行。下命令前多检查,执行完后多监控,良好的习惯比任何高超的技巧都要来得有效。
ASM中的X$表
ASM看起来像个黑盒子,因为我们从文档中得到的信息有限。实际上ASM Instance和Database Instance没有什么区别,Oracle只是修改了代码使得其专注于存储管理而已。所以一些研究Database Instance的方法在ASM中照样有效,比如sql trace和10046事件等,这可以帮助我们认识到ASM内部的一些东西。
select count(*) from v$asm_file;
alter session set sql_trace=false;
找到对应的trace file,可以发现有如下语句:
blksiz_kffil,blkcnt_kffil,filsiz_kffil,filspc_kffil,sftype_kffil,
decode(redun_kffil,17,'UNPROT',18,'MIRROR',19,'HIGH',
35,'PARITY',36,'PARITY',37,'PARITY',38,'PARITY'),
decode(bitand(fdflg_kffil, 2), 2, 'FINE', 'COARSE'),
crdate_kffil,mddate_kffil,
decode(thinned_kffil, 0, 'U', 4294967295, 'N', 'Y')
from x$kffil
where incarn_kffil <> 0 and number_kffil > 255
