2010-01-26 Tue
上一次只想到了逻辑逻辑层和物理连接层之间的三种关系, 等价(FIRST), 随机(RANDOM), 顺序(FAILOVER). 其实后面一直在思考, 阅读了一些相关文章, 糊思乱想了一通后, 又增加了两种访问方式.
按位置(POSITION)访问, 指程序提供一个标识位置的数, 然后与逻辑连接层的连接源数目进行取余操作, 根据余数来获取指定位置的数据源. 继续上一次中的四个MySQL的例子, 我们创建如下逻辑连接, 在访问时如果提供的值是5, 则最后取到的是5余4的位置, 即SLAVE1.
LOGICAL.DEFAULT=POSITION|MASTER,SLAVE1,SLAVE2,SLAVE3
按范围(RANGE)访问, 指程序提供一个标识位置的数, 然后与逻辑连接层的连接数据源进行比较操作, 按顺序找到指定位置的数据源. 继续上一次中的四个MySQL的例子, 我们创建如下逻辑连接, 在访问时如果提供的值是250, 则最后取到的是小于300的位置, 即SLAVE2. 同前面的按位置相比, 这个可以在增减数据源时, 将影响控制得更好.
LOGICAL.DEFAULT=POSITION|MASTER,SLAVE1,SLAVE2,SLAVE3
LOGICAL.DEFAULT.VALUES=100,200,300,400
在程序中, 可以根据业务特色提供这个标识位置的数, 然后在JDBC的访问URL中提供这个值, 访问代码如下所示.
try {
Connection db = DriverManager.getConnection("jdbc:anysql:default/250", null);
......
db.close();
}
catch (SQLException sqle)
{
......
}
接下来当然还会思考有没有新的方式了, 有了这些访问方式, 进一步抽像一下, 可以看看能不能将数据库当成一个磁盘(Database as Disk)来看, 写一个弱弱的DatabaseRaid类在实验室玩玩数据冗余.
Relative Posts:
作者:Fenng 发布在 dbanotes.net.
2010 年 1 月 21 日消息,欧盟已经无条件批准 Oracle 收购 Sun 的计划。接下来,尽管在有的国家或地区还会有所纠葛,但 Oracle 已经扫清了收购 Sun 的主要障碍。一代 IT 巨人 Sun 从此落幕。

(via)
人们谈论起 Sun,总要说起这家伟大公司曾经的辉煌。Solaris、Java、SPARC、NFS......
很多人知道 Sun 是 Stanford University Network 的缩写,不过 Sun 的创始人并不全来自斯坦福大学,虽说 Vinod Khosla 、Andy Bechtolsheim 与 Scott McNealy 三个斯坦福的毕业生是 Sun 的发起人,稍后加入的 Bill Joy 大神则来自伯克利,他尽管不是发起人,但也是公司创始人。对于创始人中的 Andy Bechtolsheim ,必须要多说一嘴,多年之后,是他给了 Google 两位年轻的创始人第一笔 10 万美元的天使投资。
二月创建的公司,当年七月份就已经盈利,这是因为 Andy Bechtolsheim 在成立公司之前就已经设计处了 Sun 的第一代工作站。Sun 工作站在当时可以说无敌于业界,十余年间就卖掉了 1 百万套。而到了 1995 年 Java 推出的时候,简直让业界疯狂,我还记得当初的报纸写到"几乎一夜之间互联网动了起来",这是 Sun 对业界最大的贡献。尽管 Sun 的品牌在将来或许消失,但是 Java 仍将继续改变这个世界。
公司创建四年之后成功 IPO,股票代码 SUNW ,最早代表 Sun Workstations ,这是 SUN 早期现金牛产品,后来解释为 Sun Worldwide,而到了 2007 年,则更改为 JAVA。这个更迭多少意味着 Sun 的无奈。Solaris 工作站已是明日黄花。在第一波互联网泡沫破灭前,Sun 市值一度超过 2000 亿美金,这是个惊人的数字。互联网上运行的服务器有 35% 跑在 Sun 的服务器上。彼时,Sun 自诩 "We are the dot in the .com",可惜 Sun 后来的志向 "We're the Dot in Web 2.0" 未能实现,壮志未酬。
除却 Java 之外,Sun 在其它方面的产品创新几乎都有 Bill Joy 的功劳(其实 Java 项目也有他的推动),这位号称在一个周末重写 BSD 内核的大神,在 Unix 操作系统领域带来惊人的成就,对业界产生无与伦比的影响,甚至他一个周末写就的编辑器 vi 都是很多 Unix 用户离不开的工具。Bill Joy 在 2003 年从 Sun 出走(据说与麦克尼利不和),他的离去给 Sun 蒙上了一层阴影,从此后,Sun 在 Unix 方面鲜有有创新(这几年数来数去也只有 ZFS 算有点影响力了)。Bill Joy 在离开 Sun 之后转投纳米技术、机器人学等领域,在软件技术方面未有大的动作,但说不定这天才什么时候杀个回马枪呢。
Sun 创造了 Java ,却无法从这个金矿上赚钱。以往的分析往往认为 Sun 卖硬件卖得太舒服了,没能够及时转型。这倒的确是很重要的一方面。而另一方面是开源社区(甚至 IBM )都比 Sun 更能赢得用户的心。而 IBM ,更是抛出了 Eclipse(日蚀)项目以及后来联合其它公司成立了 Eclipse 基金,这实际上是用免费策略断了任何公司想在 Java IDE 上盈利的念头(当然主要针对 Sun)。Sun 在硬件服务器领域和 IBM 争夺市场,而 IBM 则在 Java 上断了 Sun 的后路,除此之外,IBM 亦大力扶植 Linux,甚至鼓励用户将大型机迁移到 Linux 环境下,一方面节约遗留系统维护成本,一方面硬件照卖,这是很高明的一招。
反观 Sun ,在 Linux 渐成燎原之势的时候,应对战略相当的失误,与 IBM 拥抱开源截然不同的是,Sun 采取冷眼旁观。等到 Jonathan Schwartz 主政时期,力主推出 OpenSolaris 策略虽说是一步好棋,但是时过境迁,为时晚矣。试想如果在 Linux 崭露头脚的时候,Solaris 就能够开源或者是 Sun 能援助一臂之力,那说不定就是另一番天地了。
Sun 在收购策略上一直是走弥补硬件产品线的策略,大多数收购并不成功,收购 StorageTek 花费的 41亿美元似乎是绝对的赔本买卖。收购 MySQL 虽说被业界看好,甚至 Jonathan Schwartz 称收购 Sun 是"现代软件史上最重要的并购案",可没想到仅仅一年的时间,Sun 自己也被卖掉。到现在,MySQL 仍前途未卜。
说起 Sun ,当然绕不开执掌 Sun 帅印长达 22 年之久的斯科特·麦克尼利(Scott Mcnealy)。Sun 成也麦克尼利,败也麦克尼利,说到底,他毕竟是一个商人,一个刚愎自用的商人,对于 IT 大势的判断仍然比盖茨差几个段位。Sun 的四位创始人当中,他其实是没有任何技术背景的。"网络就是计算机" 据说并不是他提出的想法,而是 Sun 的第五位员工的灵光乍现。麦克尼利给中国用户的更多印象是对微软的抵制和对盖茨的敌意,这一点倒是和拉里埃利森是一路人。一个人成功的时候,大家看到的都是他的光环;一旦失败,大家都会去指责他的缺点。
现在有一个公司颇像辉煌时期的 Sun ,那就是 Google。
"一代人来,一代人走,大地永存,太阳升起,太阳落下,太阳照常升起。"
--EOF--
说起 Bill Joy ,在 2000 年曾经发表过 2 篇影响深远的文章:
- Why the future doesn't need us
- Design For The Digital Revolution As computers change the world, we need to make sure the new world works for humans.
第一篇广为流传,而第二篇似乎少为人知。这两篇文章现在看来,仍然像一位先知对未来作出的预言。这一年,Bill Joy 46 岁。
最近文章|Recent Articles
本站赞助商:豆瓣网
评论数(0)|添加评论 | 最近作者还说了什么? Follow Fenng@Twitter
本文网址:http://www.dbanotes.net/review/oracle_sun.html
DBA Notes 理念: 用简约的技术取得最大的收益...
Sat Jan 23 02:01:00 2010
Errors in file /CMP/saptrace/background/cmp_m000_26819.trc:
ORA-00081: address range [0x600000000009C450, 0x600000000009C454) is not readable
ORA-07445: exception encountered: core dump [$cold_qerfxArrayMaxSize()+7456] [SIGBUS] [Invalid address alignment] [0x00000002C] [] []
经过Metalink文档:386727.1 确认,这是一个Bug,仅见于HP-UX Itanium环境,在10.2.0.3中修正,一般不会带来严重影响。
在跟踪文件中记录了更为详尽的信息:
ksedmp: internal or fatal error
ORA-07445: exception encountered: core dump [$cold_qerfxArrayMaxSize()+7456] [SIGBUS] [Invalid address alignment] [0x00000002C] [] []
Current SQL statement for this session:
INSERT INTO wrh$_bg_event_summary
(snap_id, dbid, instance_number, event_id, total_waits,
total_timeouts, time_waited_micro)
SELECT /*+ ORDERED USE_NL(E) */
:snap_id, :dbid, :instance_number, e.event_id,
SUM (e.total_waits), SUM (e.total_timeouts),
SUM (e.time_waited_micro)
FROM v$session bgsids, v$session_event e
WHERE bgsids.TYPE = 'BACKGROUND' AND bgsids.SID = e.SID
GROUP BY e.event_id
不同的环境触发的SQL可能不同,但是通常ORA-07445和ORA-00081同时出现。
这是由于C编译器的问题导致的:
The problem is reported in <<bug:5382798>> and found to be an issue with the C compiler used on HP Itanium to compile the Oracle 10.2 code.
相应的Patch是: Patch:5442780
-The End-
相关文章|Related Articles
- 遭遇 ORA-7445 kkofkrproratestat 错误
- Oracle 10.2.0.3的Ora-1461 / Smg-3500错误
- ORA-07445 kprball()+483错误之原因分析
- BUG带来的BUG-kjdrpkey2hv: called with pkey
- SAP系统中的Bug 5376783 dbms_space高物理读
评论数量(0)|Add Comments
本文网址:http://www.eygle.com/archives/2010/01/ora-07445_cold_qerfxarraymaxsize.html
restore validate controlfile;
restore validate database;
验证命令会建议备份的存在性、完好性和可恢复性,帮助我们确认备份的有效与否。
比如验证控制文件和参数文件:
RMAN> restore validate controlfile;验证全备份一般会很慢,谨慎试验:
Starting restore at 25-JAN-10
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=388 devtype=DISK
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /opt/oracle/product/db10g/dbs/c-1341966532-20100125-01
channel ORA_DISK_1: restored backup piece 1
piece handle=/opt/oracle/product/db10g/dbs/c-1341966532-20100125-01 tag=TAG20100125T094817
channel ORA_DISK_1: validation complete, elapsed time: 00:00:02
Finished restore at 25-JAN-10
RMAN> restore validate spfile;
Starting restore at 25-JAN-10
using channel ORA_DISK_1
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /opt/oracle/product/db10g/dbs/c-1341966532-20100116-00
channel ORA_DISK_1: restored backup piece 1
piece handle=/opt/oracle/product/db10g/dbs/c-1341966532-20100116-00 tag=TAG20100116T033113
channel ORA_DISK_1: validation complete, elapsed time: 00:00:02
Finished restore at 25-JAN-10
RMAN> restore validate database;验证命令并不会真正执行恢复,所以可以减去异机测试等的麻烦。
Starting restore at 25-JAN-10
using channel ORA_DISK_1
data file 22 will be created automatically during restore operation
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /data3/ordrbak/orderfullback_order_20100124_4691
channel ORA_DISK_1: restored backup piece 1
piece handle=/data3/ordrbak/orderfullback_order_20100124_4691 tag=order
channel ORA_DISK_1: validation complete, elapsed time: 00:02:36
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /data3/ordrbak/orderfullback_order_20100124_4692
channel ORA_DISK_1: restored backup piece 1
piece handle=/data3/ordrbak/orderfullback_order_20100124_4692 tag=order
channel ORA_DISK_1: validation complete, elapsed time: 00:01:45
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /data3/ordrbak/orderfullback_order_20100124_4693
channel ORA_DISK_1: restored backup piece 1
piece handle=/data3/ordrbak/orderfullback_order_20100124_4693 tag=order
channel ORA_DISK_1: validation complete, elapsed time: 00:00:26
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /data3/ordrbak/orderfullback_order_20100124_4694
channel ORA_DISK_1: restored backup piece 1
piece handle=/data3/ordrbak/orderfullback_order_20100124_4694 tag=order
channel ORA_DISK_1: validation complete, elapsed time: 00:00:56
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /data3/ordrbak/orderfullback_order_20100124_4695
channel ORA_DISK_1: restored backup piece 1
piece handle=/data3/ordrbak/orderfullback_order_20100124_4695 tag=order
channel ORA_DISK_1: validation complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /data3/ordrbak/orderfullback_order_20100124_4696
channel ORA_DISK_1: restored backup piece 1
piece handle=/data3/ordrbak/orderfullback_order_20100124_4696 tag=order
channel ORA_DISK_1: validation complete, elapsed time: 00:00:04
channel ORA_DISK_1: starting validation of datafile backupset
channel ORA_DISK_1: reading from backup piece /data3/ordrbak/orderfullback_order_20100124_4697
channel ORA_DISK_1: restored backup piece 1
piece handle=/data3/ordrbak/orderfullback_order_20100124_4697 tag=order
channel ORA_DISK_1: validation complete, elapsed time: 00:00:07
failover to previous backup
data file 22 will be created automatically during restore operation
Finished restore at 25-JAN-10
-The End-
相关文章|Related Articles
- 一个TB级数据库的备份时间及备份记录
- 使用RMAN进行排除表空间备份
- Oracle10g备份集压缩新特性(Backupset Compression)
- 使用Oracle10g新特性简化数据库镜像COPY
- Oracle10g如何释放flash_recovery_area,解决ORA-19815错误
评论数量(2)|Add Comments
本文网址:http://www.eygle.com/archives/2010/01/rman_validate_backup.html
2010-01-25 Mon
作者:Fenng 发布在 dbanotes.net.
这是我接触 Oracle 这么多年来最有趣的一件事儿。
刚才在邮件列表中看到一位叫做 Dennis Yurichev 的安全研究人员提及在 ORACLE.EXE 这个文件代码中包含有 Radiohead 乐队 Creep 这首歌的歌词,立刻验证了一下,果然:
$ strings oracle.exe | grep radiohead
I'm a creep, I'm a winner, what the hell am I doing here.
I don't belong here - radiohead
没错,真的是 Creep 这首歌的歌词。Radiohead 颇受 Geek 程序员的喜爱。看得出加入这段代码的程序员对这份工作并不是很满意..."what the hell am I doing here"...
另外,原歌词是 I'm a weirdo(古怪的人),而不是 winner ,估计是随手写错了。
这位 Dennis Yurichev 还给出了伪代码:
#define STRING "I'm a creep, I'm a winner, what the hell am I doing here.I don't belong here - radiohead"
kfasSelfTest_update() { kfasOpen (...);
somestruct.somevalue=STRING;
kfasUpdate (somestruct);
kfasClose (...); newstruct=kfasOpen (...); if (strncmp (newstruct.somevalue, STRING, ...)!=0) { // raise error 99999? kserec1(99999, 1, ...); kserec2(99999, 1, ..., STRING, 1, ...); return 0; };
kfasClose (...);
return 1;
};
据说是 10.2.0.1 之后才有,可能和 Oracle ASM 特性有关,不知道这是 Oracle 哪一位程序员的杰作...
--EOF--
我最喜欢的 Radiohead 作品还是 Paranoid Android ...
最近文章|Recent Articles
本站赞助商:豆瓣网
评论数(5)|添加评论 | 最近作者还说了什么? Follow Fenng@Twitter
本文网址:http://www.dbanotes.net/geek/oracle_radiohead.html
DBA Notes 理念: 用简约的技术取得最大的收益...
我们先来看buffer header的具体结构:

接着,我们再来看跟
buffer cache的管理有关的5个LIST,这些LIST可以简单的认为就是存储了上述buffer header结构的双向指针链表(doubly linked lists),这5个LIST分别是:LRU LIST:
Buffers containing block images being used
LRU AUXILIARY LIST:
Buffers ready to be used for I/O or CR build,在实例启动的时候,当前实例的buffer cache中的所有buffer都会被链接到LRU AUXILIARY LIST中,当oracle要从datafile中读一个block到buffer cache中来的时候,首先就会去扫描LRU AUXILIARY LIST,如果此时LRU AUXILIARY LIST非空,则直接把从datafile中读到的那个block拷到LRU AUXILIARY LIST上那个buffer header所链接的buffer cache block中,同时把这个buffer header再挪到LRU LIST中;如果此时LRU AUXILIARY LIST为空,则表明当前没有free block,此时就需要去扫描LRU LIST。
WRITE LIST:
Dirty Buffers requiring I/O,当LRU AUXILIARY LIST为空的时候,oracle需要去扫描LRU LIST,当扫到一个block,发现它的Flag是dirty的时候,oracle会把这个block所对应的buffer header从LRU LIST移到WRITE LIST。
CHECKPOINT QUEUE LIST:
Dirty Buffers requiring I/O,当buffer cache中的block第一次变为dirty的时候,它首先一定会在LRU LIST中存在,并且其Flag会被标记为dirty。同时,oracle会把这个block添加到CHECKPOINT QUEUE LIST中。
WRITE AUXILIARY LIST:
Dirty Buffers with I/O in progress,当DBWR需要写dirty block的时候,oracle会把那些dirty block从WRITE LIST移到WRITE AUXILIARY LIST,然后开始写。写完了,会把已经写完的dirty block从CHECKPOINT QUEUE LIST中删掉,同时把这些block再从WRITE AUXILIARY LIST移到LRU AUXILIARY LIST。
简单总结一下,oracle中buffer cache管理最简单的流程就是:
oracle首先会去LRU LIST中找,看看要找的block是否已经缓存在buffer cache中,找到了就直接用;找不到就再去LRU AUXILIARY LIST中找free block,如果找到了(即LRU AUXILIARY LIST非空),就去datafile中把要读的那个block拷到LRU AUXILIARY LIST上那个buffer header所链接的buffer cache block中,同时把这个buffer header再挪到LRU LIST中;如果找不到(即此时LRU AUXILIARY LIST为空),则表明当前没有free block,此时就需要去扫描LRU LIST,因为要找一个buffer header来reuse。此时,在扫描LRU LIST的过程中,当扫到一个buffer header,且发现它的Flag是dirty的时候,oracle会把这个buffer header从LRU LIST移到WRITE LIST;当WRITE LIST达到一定的阀值,DBWR会写这些buffer header所指向的dirty block,当DBWR需要写dirty block的时候,oracle会把那些dirty block所对应的buffer header从WRITE LIST移到WRITE AUXILIARY LIST,然后开始写。写完了,会把已经写完的dirty block所对应的buffer header从CHECKPOINT QUEUE LIST中删掉,同时把这些dirty block所对应的buffer header再从WRITE AUXILIARY LIST移到LRU AUXILIARY LIST,如此循环往复,生生不息!
音乐榜
《大事》左小祖咒 /《城市》张悬 / 《Forever Road》曾轶可 /《县城记》五条人 /《嘎调》嘎调乐队
电影榜
《不能没有你》戴立忍 / 《风声》高群书、陈国富 /《上访》赵亮 /《十月围城》陈德森 /《我的唐朝兄弟》杨树鹏
http://www.infzm.com/topic/bang2009.shtml
图书 非虚构类
《一个大国的崛起与崩溃:苏联历史专题研究(1917-1991)》主编:沈志华
《聂绀弩旧体诗全编》注解、集评: 侯井天
《民主的细节》作者:刘瑜
《问史求信集》作者:阎长贵、王广宇
《七十年代》主编:北岛、李陀
图书 虚构类
《蛙》 莫言 /《河岸》 苏童 /《格萨尔王》 阿来 / 《金山》 张翎 /《风和日丽》 艾伟
电视
《蜗居》 滕华弢 /《潜伏》 姜伟、付玮 / 改版后的央视新闻频道 中央电视台 /《天天向上》 湖南卫视 /《凤凰大视野》 凤凰卫视
这一章是老杨(Yangtingkun)所著,目前的版本是我编辑整理后的章节,出版印刷的版式有所不同。老杨的勤奋与著作之丰近2年间无人能及,这本书非常幸运的是邀请到他一展所长。我非常期待老杨将来能够再出版独立著作,对自己进行总结。
好了,现在发布 《Oracle DBA手记》- 第二章 下载链接,希望大家支持。
-The End-
相关文章|Related Articles
- 《Oracle DBA手记》一书到货上架
- IBM小型机的内存deconfigured - 数据库之风险
- 《Oracle DBA手记》一书勘误表
- 《Oracle DBA手记》- 24小时小样到手
- 《Oracle DBA手记》- 第一章PDF版本下载
评论数量(2)|Add Comments
本文网址:http://www.eygle.com/archives/2010/01/yangtingkun_oraclenotes.html






