October 31, 2008
10g QMON Architecture及AQ_TM_PROCESSES
作者:eygle
出处:http://blog.eygle.com
在Oracle Database 10g中,如果你注意过,可能你已经发现AQ_TM_PROCESSES参数的设置已经发生了变化。
缺省的这个参数被设置为0,Oracle启动了自动调整:
SQL> show parameter aqNAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
SQL> select * from v$version;BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
在某些版本升级之后,你可能发现告警日志中存在以下警告:
WARNING:AQ_TM_PROCESSES is set to 0
Metalink Note:305662.1 中有这样一段详细描述:
Beginning with release 10.1, the architecture of the QMON processes has been changed to an automatically controlled coordinator slave architecture. The Queue Monitor Coordinator, ora_qmnc_, dynamically spawns slaves named, ora_qXXX_ , depending on the system load up to a maximum of 10 per instance. For version 10.1 onwards it is no longer necessary to set AQ_TM_PROCESSES when Oracle Streams AQ or Streams is used. However, if you do specify a value, then that value is taken into account but the number of processes can still be auto-tuned and so the number of running qXXX processes can be different from what was specified by AQ_TM_PROCESSES. If AQ_TM_PROCESSES is not specified in versions 10.1 and above, QMNC only runs when you have AQ objects in your database.
If should be noted that if AQ_TM_PROCESSES is explicitly specified then the process(es) started will only maintain persistent messages. For example if aq_tm_processes=1 then at least one queue monitor slave process will be dedicated to maintaining persistent messages. Other process can still be automatically started to maintain buffered messages. If you explicitly set aq_tm_processes = 10 then there will be no processes available to maintain buffered messages. This should be borne in mind on 10g systems which use Streams replication and from 10.2 onwards user enqueued buffered messages.
不过最近发现在10g中,自动的高级队列调度会存在问题,QMNC的动态协同存在问题。这段文字收次备忘。
Posted by eygle at 2:44 PM | Comments (0)
October 30, 2008
Oracle DBA 入门、进阶学习路线图
作者:eygle
出处:http://blog.eygle.com
经常有DBA朋友们向我咨询,如果打算进入DBA这一行,应该怎样入门,或者可以通过怎样一个路线图来进行学习。
关于这个主题,其实网络上已经有了一些内容可以参考。但是既然这么多朋友问题,我就将之前写好的一点内容发表出来。
算是对大家的一个回答,如果能够有所借鉴那是最好的。
我的这份路线图,是按照我写作的两本书来拟定出来的,因为这两本书也正是我学习、成长的路线。
参考一下我走过的路,我的总结与经验,也许大家能够有些许的收获。
那么路线图 真的是有一张图,这是我将《深入浅出Oracle》和《循序渐进Oracle》两本书的内容综合整理出来的,请看下图:
![]() |
当然除此之外,我推荐大家阅读一下我几本书的序言等,那里有我的心得与感言,可以作为学习的参考:
《深入浅出Oracle》一书序言
《循序渐进Oracle》一书序言
《Oracle数据库性能优化》一书序言
Oracle的学习贵在坚持,希望每个热衷于此的人都能够学有所成!
Posted by eygle at 11:21 AM | Comments (11)
October 29, 2008
不能忘却的纪念 - 职业生涯第一个项目竣工
作者:eygle
出处:http://blog.eygle.com
无论如何也要记录一下了。
刚刚在MSN上,一个以前的同事告诉我"上上周三(也就是10月15日)",以前我曾经奋斗过的一个软件开发项目终于竣工验收了!
我这么说,大家会不会晕?哪个项目啊?
注意,那是我大学毕业,参加工作,第一个参加的大型软件开发项目,我在那个项目组中奋斗了三个年头,然后我做了逃兵,来到了北京。
然而,终于,最后,这个项目画上了圆满的句号。
这真的是我职业生涯的第一个项目,据说我当年开发的程序,仍然有部分运行在客户的现场。
虽然这是一个旷日持久的项目,但是我仍然有很多好兄弟奋斗在项目现场,直到今天。
收到这个消息,真的是有一点激动,虽然我已经从刚毕业的一个毛头小伙子变成了今日Julia的老公、墨墨的爹地。
祝贺我的兄弟们,祝贺我曾经的项目组与项目团队。
祝愿他们有更好的项目大展宏图!
Posted by eygle at 10:46 AM | Comments (9)
TNS-12519 与 processes 参数设置
作者:eygle
出处:http://blog.eygle.com
今天遇到这样一个小问题,客户程序连接数据库遇到了TNS-12519错误:
TNS-12519: TNS:no appropriate service handler found
在监听器日志中也能看到这个错误信息。
这个错误以前还真是没有遇到过,Oracle文档提示:
ORA-12519: TNS:no appropriate service handler found
Cause: The listener could not find any available service handlers that are appropriate for the client connection.
Action: Run "lsnrctl services" to ensure that the instance(s) have registered with the listener, and are accepting connections.
检查了数据库的监听等一切正常,唯一的问题在于processes进程数量设置的太小,仅有40.
将这个参数修改为150,重启数据库一切恢复正常:
SQL> alter system set processes=150 scope=spfile;System altered.
此外在数据库的日志中还能够看到如下提示:
Tue Oct 28 20:01:25 2008
starting up 4 shared server(s) ...
Oracle Data Guard is not available in this edition of Oracle.
发现Oracle的告警日志信息提示越来越全面详尽。
Posted by eygle at 10:00 AM | Comments (0)
October 28, 2008
Oracle Express版本的数据库选件
作者:eygle
出处:http://blog.eygle.com
今天接触了一个Oracle10g Express Edition的数据库,这是第一次见识Express的生产版本。其Banner信息如下:
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
查看了一下Express版本的数据库选件,发现大部分都是False的:
SQL> select * from v$option order by value;
PARAMETER VALUE
-------------------------------------------------- --------------------
Partitioning FALSE
Export transportable tablespaces FALSE
Backup Encryption FALSE
Transparent Data Encryption FALSE
Data Mining Scoring Engine FALSE
Flashback Database FALSE
Flashback Table FALSE
Block Change Tracking FALSE
File Mapping FALSE
Streams Capture FALSE
Online Redefinition FALSE
PARAMETER VALUE
-------------------------------------------------- --------------------
Data Mining FALSE
Trial Recovery FALSE
Real Application Clusters FALSE
Advanced replication FALSE
Bit-mapped indexes FALSE
Parallel backup and recovery FALSE
Parallel execution FALSE
Point-in-time tablespace recovery FALSE
Fine-grained access control FALSE
Change Data Capture FALSE
Online Index Build FALSE
PARAMETER VALUE
-------------------------------------------------- --------------------
Coalesce Index FALSE
Managed Standby FALSE
Materialized view rewrite FALSE
Materialized view warehouse refresh FALSE
Database resource manager FALSE
Spatial FALSE
Visual Information Retrieval FALSE
Unused Block Compression FALSE
Fast-Start Fault Recovery FALSE
Duplexed backups FALSE
Java FALSE
PARAMETER VALUE
-------------------------------------------------- --------------------
Block Media Recovery FALSE
Fine-grained Auditing FALSE
Application Role FALSE
Enterprise User Security FALSE
Oracle Data Guard FALSE
Oracle Label Security FALSE
OLAP FALSE
Table compression FALSE
Join index FALSE
Parallel load TRUE
Plan Stability TRUE
PARAMETER VALUE
-------------------------------------------------- --------------------
Sample Scan TRUE
Instead-of triggers TRUE
Incremental backup and recovery TRUE
Objects TRUE
Connection pooling TRUE
Connection multiplexing TRUE
Proxy authentication/authorization TRUE
OLAP Window Functions TRUE
Transparent Application Failover TRUE
Database queuing TRUE
54 rows selected.
以上输出中,仅有12个为True的数据库功能选件。
Posted by eygle at 8:56 PM | Comments (5)
增加MT MTOnThisDay插件 - 显示历史记录
作者:eygle
出处:http://blog.eygle.com
今天,为Blog增加了一个插件,用于显示历史上同一天发布的文章。这个插件叫做MTOnThisDay,感觉很不错,有助于了解自己一年年走过的日子。
现在每篇BLog文章的末尾都会显示一个:历史上的今天... 一个列表项。
我使用了如下一段代码,生成这个列表,供参考:
<b><FONT color=#ff0000><i>历史上的今天...</i></FONT></b><br />最近MT的变化很少,我也已经很久没有修改网站的架构,感觉MT的确是强大,用来构建一个网站上绰绰有余的。
<MTOnThisDay>
<MTEntries>
<MTDateHeader>
>>
<a href="<$MTEntryLink archive_type="Daily"$>">
<b><$MTEntryDate format="%Y-%m-%d"$></b></a>文章:<br />
</MTDateHeader>
<div> <a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a><br /></div>
</MTEntries>
</MTOnThisDay>
Posted by eygle at 1:55 PM | Comments (0)
October 27, 2008
姥姥北京游之 - 鸟巢·水立方·天安门·王府井
作者:eygle
出处:http://blog.eygle.com
上周五,爸爸妈妈和姥姥一起来到北京,我在火车站将他们接回家里。
来北京,看一看天安门,一直是姥姥的一大心愿,老人家今年已经80岁,但身体依然硬朗,能吃能睡,健康乐观。
Julia和我非常支持将老人家带到北京,来看一看我们国家的首都,老人家的年纪比中华人民共和国还长。
老婆从网上租来了一辆轮椅,我们就可以推着姥姥到处走,节省老人家的体力。
以下是姥姥慈祥的照片,以及我们家中的三个女人:
想一想,东北老家,很多老人家一直向往北京,可是多数不能成行,在社会主义的今天,他们仍然无法圆一圆进京梦。
前几天看凤凰卫视,说香港政府每月给老人家发1000元补贴,作为敬老费用。
如果大陆有一天政府能够出资让70岁以上的老人都来一次进京游,那将是多么大的一件幸事。
老人是家中的宝,也是国家的宝吧,昨天看一则新闻,说开国元帅上将仅存吕正操了,老人家已经104岁,含饴弄孙其乐无穷。
而我们家的老人,也已经看到了四世同堂,这是一个家族的幸事。
而整个家族中,已经有多个离开了东北农村,来到了北京,并且立稳了脚跟,老人家也无比开怀。
25日全家去了鸟巢水立方,虽然老人家不太理解奥运会是什么概念,但是仍然对宏伟的建筑兴致勃勃。
在鸟巢体育馆中,老人家健步如飞,四处溜达,要我们不停追上去:
水立方奥运会时我们也没有进去,这次也是第一次进入:
当然老婆也很高兴:
格了一个时代的两个人,我妈妈的妈妈以及我儿子的妈妈:
27日,也就是今天,带着他们去了天安门,这是一个阳光明媚无比精彩的一天,老人家第一次到了天安门,看到了"毛主席"。
然后我们带着她上了天安门,告诉她哪里是毛主席讲话的地方,看一看天安门的历史,这是快乐的一天。
离开天安门我们去了王府井,在那里走一走是来到北京应该经历的一件事。
他们的感受我无法得知,但是这个上午,偷得浮生一日闲的我,感到无比惬意,在温暖的秋日的阳光下,悠闲的漫步在王府井大街上。
人并不太多,有很多外国友人悠闲走过,仿佛一走神就忘了自己身在何处。
趁自己还有时间,趁老人家还都康健,我们大家都应该带她们出来走走,看看他们曾经梦想的世界。
这是儿孙们应该负有的责任。
-The End-
Posted by eygle at 4:56 PM | Comments (13)
October 24, 2008
在Oracle Open World 2008上接受的采访
作者:eygle
出处:http://blog.eygle.com
关于Oracle Open World 2008还有些东西要补记拾遗一下。
在参加会议期间,作为Oracle ACE Director,一共接受了两次采访。Oracle的意图是通过对参会者的实时跟踪访问,将会议更加Live的传达出来。
所以当时在美国的Oracle公关部门,先是找到中国区的同事,索取我的电话号码,然后电话我约时间,于是有了几段我在美国OOW期间的视频。
不管怎样,这几段视频留下了我在美国时期的影像,这是美好的回忆。
第一段采访,问的是我对Oracle数据库Option的看法,因为最近Oracle在加强数据库选件的推广和销售。
在这个层面,我是有感而发的,在过去一年多间,我的确已经帮助很多用户实施了Oracle RAC集群技术,客户的确从中受益。
好像录制了多个版本,我在YouTube上就看到了2个版本,另外一个版本是:
在24日Larry的演讲之后,他们再次采访了我,让我谈一谈听了Larry演讲后的感受。
以下是我当时表达的一段观点,当时震撼出场的Hp Database Machine的确给了我很深的印象,现在我们期待的就是这样的产品能够更快的进入市场,让我们了解更多:
今天找到了这两段视频,收录在这里,算作一个纪念吧。
YouTube上更多视频链接: http://www.youtube.com/Oraclecn
-The End-
Posted by eygle at 2:44 PM | Comments (5)
《深入浅出Oracle》一书序言
作者:eygle
出处:http://blog.eygle.com
这几天在整理《深入解析Oracle》一书的序言以及后记等内容,忽然发现之前《深入浅出Oracle》一书的序言还没有发布出来。
今天整理一下,发布在这里。
其实我觉得一本书最重要的可能就是前言或者绪论部分,因为这部分是作者写作思路、写作目的、谋篇布局的概要体现,更可能包含作者最重要的学习历程或心理体验(至少我的书是如此),所以读书要先读序言,理解作者,然后和作者一起经历书的历程。
以下是《深入浅出Oracle》一书的序言部分。
-----------------------------------------------------------------------------------------------
绪 论
开始写这本书是在2006年3月3日,虽然这个三月三日不是那个三月三,但我还是觉得这是一个美好的日子。关于这个写作计划,已经制订了很久,手头也有了很多写好的篇章,但是关于全书的选题、框架一直没有一个很好构思,所以拖延了很久。
开始动笔时,打算写一本入门级的书,给初学者看,希望通过这本书把自己学习Oracle的方法和经验介绍给刚刚接触Oracle的朋友们。
可是动起笔来,发现很难把一本书控制在初学者的范畴,所以写起来难度就逐渐深入了下去,不过也好,符合我原来的想法。去年曾经计划写一本《Oracle诊断案例》的书,一直没有动笔,现在正好把两本书合为一本了。
这样写作出来每章的布局基本上分为三个部分,基础知识、进阶知识、结合实际的案例分析。基础知识部分可以作为初学者的入门参考,进阶部分则可以给广大Oracle技术爱好者作为深入学习的材料,案例分析作为实践部分希望对大家都能有所借鉴。
在本书的写作过程中,我一直希望和努力摆脱传统技术书籍要么基础知识、要么代码实例、要么特定版本的单一模式,将基础知识,深入研究,性能调整,诊断案例等相关内容,按照每章一根主线展开,从而能够使读者通过每一章的阅读,就能够对相关知识有一个纵向的深入认知。
在数据库版本方面,本书内容更涉及Oracle8i/Oracle9i/Oracle10g,将Oracle的版本变化、功能改进!一以贯之的展现出来,让大家看到这些变革的真正原因以及Oracle的不断技术创新。我们必须了解一项技术的来龙去脉,才能知道一个革新、一个新的特性的真正意义所在,所以,Oracle的很多知识是跨越版本而存在的。
书中贯彻的也是我一直主张的"由点到线再及面"的学习方法。特别是对于初学者,如果没有经过专门的培训和系统学习,那么自己通过实践的学习和思考就应当深入,在知识上,从某个角度来说,是"不患寡,而患不精深"。在我们遇到问题时,就应该不断深入研究,直至问题的核心本质,这样通过一个案例或实际问题的诊断学习和研究,我们就可以带动很多连带知识的学习,这样从一个点深入下去就形成一条线,再横向扩展就可以形成一个知识网,解决和研究的问题多了,就可以逐渐覆盖一个面,形成一个知识体系,这样慢慢的你就会觉得学习不再困难,而是一件得心应手的事情。
而且,认真思考和深入研究本身就是对DBA的一项基本素质要求。在网上经常被问及我的招聘要求,收录一点在这里给大家参考:
对于一个候选人来说,我希望他勤奋、严谨、具有钻研精神及独立思考能力。技术其实往往并不是我最关心的内容,因为具备了前面的素质之后,经过1~2年的锻炼,一个人绝对不会知道的太少。
我自己正是通过这样一条学习之路走过来的,也希望可以通过这本书将这个思想传达出来。
我愿意将我在《Oracle数据库性能优化》一书的序言中提到的一段话再次引用一下:
兴趣 + 勤奋 + 坚持 + 方法 ≈ 成功
很遗憾我不能给以上公式画上"=",但是无关紧要,只要具备了以上因素,我想我们每个人都会离成功不远了。
去年由我担任主编之一,ITPUB出品、人邮出版的《Oracle数据库性能优化》一书,在Dearbook举办的"2005年最权威的图书评选"活动中排名第9。这是对我的极大鼓励,也是我继续写作的动力所在。
然而独自写作一本书的压力是可想而知的,所以迟迟不肯动笔写作,一方面是因为构思的原因,一方面是觉得自己的所知和积累仍然有限,直到动笔以后,某一天,忽然觉得豁然开朗,整本书的体系结构和章节组织跃然纸上,于是就有了今天这本书。
这也是这本书先有了部分章节,后有名称的原因之一。
在开始本书的阅读之前,我想在这里介绍一下我所总结的"DBA生存之四大守则",这四大守则是我在长期的工作和学习过程中总结出来的,希望大家能够有所借鉴。
我列出的四大守则是:
1.备份重于一切
我们必需知道,系统总是要崩溃的,没有有效的备份只是等哪一天死!我经常开玩笑的说,唯一会使DBA在梦中惊醒的就是:没有有效的备份。
在进行重要的操作(如恢复尝试、升级操作等)之前,一定要做好备份,保留现场,以便必要时可以从头再来。
2.三思而后行
Think thrice before you act。
任何时候都要清楚你所做的一切,否则宁可不做!对于DBA来说,有时候一个回车,一条命令就会造成不可恢复的灾难,所以,你必需清楚确认你所做的一切,以及这些操作可能带来的后果,并且在必要时保护现场。
DBA切忌想当然。
3.rm是危险的
要知道在UNIX/Linux下,这个操作意味着你可能将永远失去后面的东西,所以,确认你的操作!!!
太多的人在 "rm -rf" 上悲痛欲绝,当年写下这条守则时,是一个凌晨被一个朋友吵醒,他说误操作rm -rf删除掉了200G的数据库,并且没有备份。
我当时能告诉他的只有一句话:要保持冷静.
4.你来制定规范
良好的规范是减少故障的基础。所以,作为一个DBA,你需要来制订规范,规范开发甚至系统人员,这样甚至可以规避有意或是无意的误操作,减少数据库的风险。
见过太多管理混乱的开发环境,经常出现程序员连错生产环境误操作的案例,所以规范实在是非常的重要。
不以规矩,不成方圆。
这四个守则有的部分是相互关联,密不可分的,希望每个DBA都能谨慎认真,少犯错误。
本书越临近出版,作者越是紧张,并且希望能够通过出版前的不断修正使得本书不断趋于完善。正如很多作者都说过的那样,一本书出版之后,就如同一个生命的诞生。这本书即将脱离我的控制,去经历它的历程,面对读者的评判,我能做的就是毫无保留的将自己的所知通过本书传达给读者,至于因作者水平所限而存在错漏之处,那也正是作者应该接受评判和指正之处。写作一本书,也正是一个学习的历程。
最后我要感谢好友冯春培(biti_rainy),他帮助我审阅了本书的4、5两章;感谢好友楼方鑫(dcba),他帮我审阅了本书的6、7两章;他们为我提出了很多宝贵的建议,使得本书更加趋于完善;当然还要感谢我的女友Julia,正是因为有了她的鼓励和支持,才有了我持续不断写作的动力,并且最终完成了本书。
本书最后定稿是在6月8日,那一天正好是我的生日。
盖国强 2006-6-8 于北京
此外《循序渐进Oracle》一书序言参考以下链接:
http://www.eygle.com/archives/2007/10/sbs_oracle_preface.html
-The End-
Posted by eygle at 11:31 AM | Comments (7)
October 22, 2008
《深入浅出Oracle》更名《深入解析Oracle》
作者:eygle
出处:http://blog.eygle.com
今天收到出版社寄来的合同,《深入浅出Oracle》的修订版就此尘埃落定。
与之前有所变化的是,经过深思熟虑以及同出版社的协商,新书的名称有了两个字的改变,新的名字是《深入解析Oracle》。
这个改变并不是随意的。
在很长一段时间里,我收到过很多建议或投诉,很多读者说这本书深则深矣,而浅出则未必。
更有一些读者买回去后,声称基本读不懂书中的内容。
有一些非常认真的读者甚至在往来的邮件里和我进行了非常认真细致的探讨。
这些探讨最终让我思考书名的问题,原本一个名称,只看作是一个符号就好了,而现在,这个符号的意义被不断放大。
既然如此,最终,索性我将"浅出"两个字替换为"解析","深度解析Oracle"是我和Kamus曾经举行过一个系列课程的名字,这个名字我也很喜欢。而且新书修订的内容大约占到了40%,新的名字也算是对这个劳动的献礼吧。
现在我希望,《深入解析Oracle》这个名字不会再引起一些误解,这本书本质上是一本较为深入的书,她对初学者的最初阅读会显得有点难,但是对于进阶学习和案例分析的参考书具有一定价值的。
虽然如此,深入浅出仍然是我钟情的一个名字,一种境界,这些在新书的序言中,我多有阐述。
不管怎样,希望你能喜欢,我为大家带来的 --- 《深入解析Oralce》!
Posted by eygle at 4:24 PM | Comments (23)

