Author: mac

  • [zt]提问的艺术

    在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。 首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们思维的好问题。如若不然,我们还来干吗?如果你有值得我们反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼,可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“问得好!”是发自内心的大力称赞。 尽管黑客们有蔑视简单问题和不友善的坏名声,有时看起来似乎我们对新手,对知识贫乏者怀有敌意,但其实不是那样的。 我们不想掩饰对这样一些人的蔑视–他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间–他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。 我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。 我们在很大程度上属于志愿者,从繁忙的生活中抽出时间来解惑答疑,而且时常被提问淹没。所以我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的家伙,以便更高效的利用时间来回答胜利者的问题。 如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我们并没有要求你向我们屈服–事实上,我们中的大多数人最喜欢公平交易不过了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的文化中来。但让我们帮助那些不愿意帮助自己的人是没有 意义的。如果你不能接受这种“歧视”,我们建议你花点钱找家商业公司签个技术支持协议得了,别向黑客乞求帮助。 如果你决定向我们求助,当然不希望被视为失败者,更不愿成为失败者中的一员。立刻得到有效答案的最好方法,就是象胜利者那样提问 —— 聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。 提问之前 在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到: 通读手册,试着自己找答案。 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。 在网上搜索(个人推荐google~~)。 向你身边精于此道的朋友打听。 当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。 周全的思考,准备好你的问题,草率的发问只能得到草率的回答,或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。 小心别问错了问题。如果你的问题基于错误的假设,普通黑客(J. Random Hacker)通常会用无意义的字面解释来答复你,心里想着“蠢问题…”,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。 决不要自以为够资格得到答案,你没这种资格。毕竟你没有为这种服务支付任何报酬。你要自己去“挣”回一个答案,靠提出一个有内涵的,有趣的,有思维激励作用的问题–一个对社区的经验有潜在贡献的问题,而不仅仅是被动的从他人处索要知识–去挣到这个答案。 另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。“谁能给点提示?”、“我这个例子里缺了什么?”以及“我应该检查什么地方?”比“请把确切的过程贴出来”更容易得到答复。因为你显得只要有人指点正确的方向,你就有完成它的能力和决心。 怎样提问 谨慎选择论坛 小心选择提问的场合。如果象下面描述的那样,你很可能被忽略掉或者被看作失败者: 在风马牛不相及的论坛贴出你的问题 在探讨高级技巧的论坛张贴非常初级的问题;反之亦然 在太多的不同新闻组交叉张贴 用辞贴切,语法正确,拼写无误 我们从经验中发现,粗心的写作者通常也是马虎的思考者(我敢打包票)。回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。 正确的拼写,标点符号和大小写很重要。 更一般的说,如果你的提问写得象个半文盲,你很有可能被忽视。 如果你在使用非母语的论坛提问,你可以犯点拼写和语法上的小错–但决不能在思考上马虎(没错,我们能弄清两者的分别) 使用含义丰富,描述准确的标题 在邮件列表或者新闻组中,大约50字以内的主题标题是抓住资深专家注意力的黄金时机。别用喋喋不休的“帮帮忙”(更别说“救命啊!!!!!”这 样让人反感的话)来浪费这个机会。不要妄想用你的痛苦程度来打动我们, 别用空格代替问题的描述,哪怕是极其简短的描述。 蠢问题: 救命啊!我的膝上机不能正常显示了! 聪明问题: XFree86 4.1下鼠标光标变形,Fooware MV1005的显示芯片。 如果你在回复中提出问题,记得要修改内容标题,表明里面有一个问题。一个看起来象“Re:测试”或者“Re:新bug”的问题很难引起足够重视。另外,引用并删减前文的内容,给新来的读者留下线索。 精确描述,信息量大 谨慎明确的描述症状。 提供问题发生的环境(机器配置、操作系统、应用程序以及别的什么)。 说明你在提问前是怎样去研究和理解这个问题的。 说明你在提问前采取了什么步骤去解决它。 罗列最近做过什么可能有影响的硬件、软件变更。 尽量想象一个黑客会怎样反问你,在提问的时候预先给他答案。 Simon Tatham写过一篇名为《如何有效的报告Bug》的出色短文。强力推荐你也读一读。…

  • 使用OPATCH_DEBUG环境变量调试Opatch工具

    我们在使用opatch数据库补丁管理工具时可能碰到这样那样的问题,那么opatch工具是否存在一些调试选项以便我们了解更多的信息呢?同OUI工具一样,opatch存在一个debug选项,使用该选项我们仅需要设置OPATCH_DEBUG环境变量为TRUE就可以了,如: [oracle@rh2 OPatch]$ export OPATCH_DEBUG=TRUE [oracle@rh2 OPatch]$ ./opatch lsinventory ORACLE_HOME is set at OPatch invocation Machine Info: Linux rh2.oracle.com 2.6.32-100.0.19.el5 #1 SMP Fri Sep 17 17:51:41 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux _osArch is i386 _javaVMSpecVersion is 1.0 _javaVMSpecVendor is Sun Microsystems Inc. _javaVMSpecName is Java Virtual Machine Specification _javaVMVendor is Sun Microsystems Inc. _javaJRESpecVersion…

  • Pre-check while you are applying one-off patch

    Oracle Database的补丁除去我们最常见的Patch set大补丁集(就是那种动辄1、2个G的补丁包)外,还包括Critical Patch Update(CPU)和Patch Set Update(PSU),one-off Patch(一次性补丁);在数据库使用过程中出现某些问题后(最常见的是出现ORA-00600、ORA-07445错误),通过DBA与MOS的协作将问题定位到某个大版本上的具体Bug,如果该Bug在该版本上现有one-off patch的话,我们可以通过one-off patch的实施来解决问题,one-off patch具有如下特点: one-off patch的patch包一般都很小,因为它是为了修正一个或多个bug所特制,它一般只包含必要的inventory xml信息,以及和bug相关的共享库文件(一般是.o或者.a文件) one-off patch绝大多数是随需随制,一般是Oracle内部人员发现Bug或者客户在生产过程中遇到Bug后,向Oracle development开发部门提出patch building的Request ,开发人员接到building或backport的要求后会为客户系统指定的数据库版本和操作系统平台特制一个补丁(如果还没有的话);举例来说可能一个bug在Linux平台的10.2.0.4版本中已有one-off patch,但客户在Solaris Sparc 平台上10.2.0.3上碰到同样的bug,那么这个时候就可以提交SR要求Oracle开发部门backport这个patch 绝大多数one-off patch只需要用Opatch工具apply即可,不需要升级/修正数据字典,这一点和Patch set/CPU/PSU是不同的 one-off patch是针对某个特殊版本的,如10.2.0.4上的one-off patch只能针对10.2.0.4实施,而在10.2.0.4.8(10.2.0.4的PSU 8)上该one-off patch可能是一个conflicting Bug即有冲突的一次性bug补丁;针对这种情况Oracle一般会给出当前版本上的替代one-off patch,例如6996030″MERGE LABEL REQUEST ON TOP OF 10.2.0.4 FOR AUDIT TRAIL CLEAN-UP”是10.2.0.4上的一个one-off patch,但在10.2.0.4.4上6996030是一个conflicting bug存在冲突,这样我们就需要一个替代品、一个10.2.0.4.4上的Equivalent patch等价补丁,在我们的例子中这个patch是9650152 “MERGE REQUEST ON TOP OF 10.2.0.4.4 FOR BUGS 9589005 6805009…

  • Postgre SQL 9.1 beta:开源世界的礼物

    开源数据库产品Postgre SQL最新版本9.1的beta发布了,其开发者宣称这将会是划时代的一个版本,9.1将为我们带来企业级别的可靠性与数据完整性。Postgre SQL的核心开发小组成员Josh Berkus表示,即将到来的9.1版本引入了大量通过同步复制特性来完善数据库容错能力,使得数据库可以保证在主节点失败的情景中不丢失写操作。Berkus说:”在这个版本中,我们将提供Oracle DataGuard所能提供的所有特性,这将让如日本NTT等使用Oracle的公司从容地迁移到Postgre SQL上来”。 对于还在酝酿中的9.2版本,核心开发小组认为在他们试图提供更多容错与集群技术之前,首要的任务是完善最基础的同步复制功能,而后才有可能引入更为复杂的特性。 一个令人鼓舞的消息是EnterpriseDB公司正和NTT公司合作一个名为”PostgresXC”的项目,其目的为Postgre增加类似于Oracle RAC的功能,虽然在具体设计上2者存在区别。另一方面Postgres-R项目组获得了足够的资金,该项目致力于为Postgre SQL加入基于群组通信的集群功能,因为解决了后顾之忧该项目可能在今年发布新的版本。 Postgre SQL如果能成功引入Data Guard和RAC的相关功能,那么不失为一个功能丰富而又价格低廉的解决方案! 更多原始信息可以参考:PostgreSQL devs lift open source database to enterprise heights

  • ORACLE or Oracle?

    Oracle or ORACLE? 有人肯定要问这个单词的大小写也存在区别吗? 事实是还真的有不少的差别! 在常用术语”ORACLE server”中使用全部大写的字母,”ORACLE server”表示甲骨文数据库服务器,引申过来纯大写的”ORACLE”也代表其数据库服务器。 而首字母O大写其他小写的”Oracle”一般在表示Oracle甲骨文有限公司”Oracle Corp”时使用,引申过来这样的”Oracle”也代表公司。 所谓白马非马,我们可以这样说”Oracle”的外延比”ORACLE”大,而”ORACLE”的内涵比”Oracle”深! to be continued………

  • How does SGA/PGA allocate on AMM?

    Oracle 11g中引入了革命性的Automatic Memory Management(AMM)特性,通过该特性DBA只需要为Instance指定一个参数(memory_target),数据库软件就会根据SGA/PGA内存的实际使用统计信息来调优SGA/PGA内存区域的大小。从技术上说这是一个很cool的特性,可以说是Oracle所提倡的self_tuned即自身调优数据库软件大成的一个标志。但从另一方面来看,AMM也会给我们带来不少问题和困惑,DBA需要面对更多黑盒内隐藏的秘密了。 虽然我们无法彻底了解AMM的所有细节,但有一些关键性问题肯定会在我们使用AMM的过程造成许多的不确定性,在此我列出部分问题及其解答。 Question1:在使用AMM特性时,即设置了memory_target的情况下sga/pga内存区域默认各占百分之多少? Answer: 这个问题存在多种不同的情景: 1)设置memory_target的同时,设置了sga_target及pga_aggregate_target参数:这种情况下设置的sga_target与pga_aggregate_target之和不能大于memory_target;默认sga大小等同于sga_target设定的值,可以从V$memory_Dynamic_Components视图中查询到pga target的current size可能远大于pga_aggregate_target(这里查询出来的current size仅代表pga的一个目标值,不是pga当前实际占用的内存),一般来说这里的pga current size等于(memory_target-sga_target),显然pga target的最小值会是pga_aggregate_target,而sga的最小值为sga_target.在此前提下sga/pga内存区域有较小的灵活性,实际上仅当memory_target>sga_target+pga_aggregate_target的情况下,sga/pga才可能发生扩展(grow)和收缩(shrink) 2)设置memory_target的同时,设置了sga_target而未设置pga_aggregate_target参数:这种情况下Oracle会自动调优以上2个参数,pga_aggregate_target的初始值为(memory_target-sga_target),注意这里说的是初始值;这种情况下因为没有硬性地设置pga_aggregate_target,故而sga/pga内存区域有较大的灵活性去扩展(grow)和收缩(shrink)。更倾向于sga的扩展,当然这并不绝对。 3)设置memory_target的同时,设置了pga_aggregate_target而未设置sga_target:这种情况下Oracle会自动调优以上2个参数,sga_target的初始值为min(memory_target-pga_aggregate_target,sga_max_size),注意这里说的是初始值;类似于以上的情况因为没有硬性地设置sga_target,故而sga/pga内存区域有较大的灵活性去扩展(grow)和收缩(shrink)。更倾向于pga的扩展,当然这并不绝对。 4)仅仅设置了memory_target参数,Oracle会自动调优sga/pga内存区域,且没有任何最小值或默认值的约束。当在初始化分配操作系统内存的时候存在一个分配pga/sga的策略;该策略会在实例启动阶段(instance startup)为SGA分配memory_target 60%的内存(该比例受到隐藏参数_memory_initial_sga_split_perc Initial default sga target percentage with memory target的影响,该参数默认为60),而为PGA分配40%的内存。这种情况下sga/pga内存区域的游标最为灵活,可以不受限制地上下浮动,是真正意义上的AMM,但也最为危险! 5)没有设置memory_target参数,该情况下Oracle 11g的表现与10g中”一致”(并非完全一致,黑盒中藏了很多秘密,只是看上去这样,后面会提到) Question2:”我在10g就感到ASMM很不好用,产生了很多问题;我是个保守派,对11g中的AMM一定也不感兴趣。我要彻底禁用AMM和ASMM,在11g中是否只要设置sga_target和memory_target参数为零就ok了?” Answer: 在11.2.0.1之前的版本(包括11.1.0.7,11.1.0.6等)我们仅需要设置sga_target和memory_target参数为零就可以避免sga/pga内存区域的resize,但在Oracle 11g Release 2中引入了immediate memory allocation requests立即内存分配的特性,该特性会在automatic memory management被禁用的情况下始终生效,引入这一特性的直接目的是尽可能的避免ORA-04031错误的发生,一般来说该特性更多地表现出了其积极的一面,但如果你实际需要的是一块安宁的、如死水寂静的sga/pga内存区域的话,我们还是有办法禁用该immediate memory allocation requests特性的,这样可以彻底杜绝sga中内存组建resize的发生: SQL> col DESCRIB for a60 SQL> set linesize 200 pagesize 2000…

  • 解决Linux上11g的ORA-00845错误

    下午想把一个11.2.0.2实例的memory_target AMM内存初始化参数修改到2000M,改好后重启发现实例起不来了,出现了ORA-00845错误: [oracle@rh2 ~]$ [oracle@rh2 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Tue May 3 19:43:50 2011 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to an idle instance. SQL> startup nomount; ORA-00845: MEMORY_TARGET not supported on this system ======================= ALERT.LOG====================== Starting ORACLE instance (normal) WARNING: You are trying to use…

  • 解决UDE-31623错误一例

    一套Linux x86-64上的11.2.0.2数据库在使用data pump数据泵expdp工具导出时遭遇了ORA-31623错误,详细日志如下: [oracle@rh2 dbs]$ expdp system/password dumpfile=s01:sh.dmp schemas=sh Export: Release 11.2.0.2.0 – Production on Mon May 2 22:46:57 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 – 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining…

  • 解决ORA-27103:internal error错误一例

    一套Linux x86-64上的11.2.0.2数据库在startup启动阶段遭遇了ORA-27103:internal error内部错误,其出错日志如下: SQL> startup nomount; ORA-27103: internal error Linux-x86_64 Error: 2: No such file or directory Additional information: 9404423 Additional information: 2 oerr 27103 Usage: oerr facility error Facility is identified by the prefix string in the error message. For example, if you get ORA-7300, “ora” is the facility and “7300” is the error.…

  • SHMALL, SHMMAX and SGA sizing

    Question: I need to confirm my Linux kernel settings and also get pointers/explanation on how i need to properly setup my kernel for proper operation of the Oracle Server. My aim for the SR is not so much to get actual answers on how to set values. Rather, I need help to clear up the…