云和恩墨大讲堂电子第二期_第1页
云和恩墨大讲堂电子第二期_第2页
云和恩墨大讲堂电子第二期_第3页
云和恩墨大讲堂电子第二期_第4页
云和恩墨大讲堂电子第二期_第5页
已阅读5页,还剩124页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子期第二期风云再起何时起-2016寄语魔术与数学-Gauss和PoincareOracleRAC下的连接管理11gR2RACSCAN 云和:云和()简称,专注数据服务,以学院:学院是云和旗下的培训事业专业的训练保证就业,目前已经发为国内数据库领域培训品牌基于Orce、MySL和oop体系提供认证、技能等全方位的培训云和大讲堂是什么云和大讲堂是云和公司旗下的技术平台,目前包含线上的群、QQ群,定期(每周至少两次)的;巡回的线下的技术研讨会议;的精品文章和定期电子期。云和大讲堂集合公司专家团队资源,邀请业界专家助力,针对业内最佳实践组织技术交流会,“Oracle技术嘉年华”是一年一度的数据关注我

-风云再起起何时在过去很长一段时间,Oracle数据库产品的未来一直倍受关注,这甚至影响到了现实,从我的个人观察来看,Oracle2014方面是由于国内“去IOE”的甚嚣尘上,一方面是因为这一阶段是Oracle新产品的空档期,彼时OracleDatabase12.1已经推出,OracleCloud尚未崛起;然而在2015OracleIOE”在国内渐渐淡去,另外一方面大家也认识到没有Oracle数据库的Cloud并不完整,理性化的思考让以沉稳著称的Oracle再次回归到重心中来;而我相信,在2016年OracleDatabase12.2发布之后,OraclePublicCloud和腾讯合作落户中国之后,Oracle必将市场风云再起。援引一段我 DB-Engines于1月5日发布了2015年度DBMS,在这个上OracleDBMSMongoDBCassandra度冠军得主是MongoDB。DB-Engines按月度和发布数据库流行度数据,下图是当前的流行度,我们看292个。OracleisthedatabasemanagementsystemthatgainedmorepopularityinourDB-EnginesRankingwithinthelastyearthananyoftheother290monitoredsystems.WethusdeclareOracleastheDBMSoftheYear在DB-Engines的三年中,Oracle是DBMS领域的者,虽然Oracle的积分有所波动,但是在2015年,Oracle呈现出上升趋势,2015是Oracle56.9MongoDB是55.1,在、的榜上MongoDB曾经是冠军。在DB-Engines的项目上,Oracle的岗位要求在LinkedIn上非常活跃,并且在相对弱项的区域如StackOverflow和 上,Oracle的讨论也追赶上来。正如我们感受到的一样,Oracle的云发力,产品面拓展开来,再次激活了市Oracle-目云和大讲堂是什么 关注我 编辑寄 目 Oracle11gDataGuard环境中的归档管 删繁就简-云 的一道面试题解 典型案例:Oracle数据库中超700TB的LOB用SQL解一道有趣的数学题:Gauss和 -用SQL解析神奇的牌魔术 查询初始化参数的方 盘点2015年度被低估的几个中间件(JavaEE应用服务器)安全.........................69OracleRAC环境下的连接管 Oracle11gR2RAC高可用连接特性–SCAN详 Oracle11gDataGuard(网名老熊OracleACE总监,ACOUG会Oracle10Oracle数据库技术顾在Oracle数据库领域具有深厚的理论基础、丰富的实践经验、有大量省级电信行业系统性能优化成功案例,对于IT系统的架构也有深入理解。独立开发了Oracle数据库紧急恢复软件ODU,能够在数据库损坏并且没有备份的情况下直接解析数据块进行数据恢复。ODU量超过20TB。在11g里面,随着ASM、RAC、DataGuard(包括ActiveDataGuard)的成熟,使用RAC+ASM+DataGuard来越成为一种可靠的、Oracle11gDataGuard环境中的归档日志。DataGuard也需要它。在早期版本的DataGuard环境中,常常着不能随意使用RMAN删除归档日志,否则同样会导致Data需要重新搭建在使用RMAN备份后,如果归档没有被传送或应用到备库上,那么导致DataGuard需要的归档日志被删除。备库的归档日志不需要花精力去自动删除已经应用过的归档幸运的是,在11g环境里面,上述的几点很容易就满足,那就是只需要恢复区(flashrecoveryarea),老实说,一直不太明白为什么取名叫闪回恢复区,难道是因为10g有了数据库闪回功能?在RAC中,快速恢复区最好是置放在ASM上。为快速恢复区指定合适的空间。首先我们需要预估一个合理的归档留时间长。比如由于备份系统问题或DataGuard备库问题、等,需要归档保留的时间长度。假设是24小时,再评估一下在归档量最大的24小时之内,会有多少量的归档?一般来说是在批量数据处理RAC说是所有节点在这24时的归档量之和。最后为快速恢复区指定需要的空间量,比通过参数db_recovery_file_dest_size指定快量;如果主库归档容量压力大,备库能否的归档日志以便以通过备库来备份归档日志。对主库和备份使用RMAN配置归档删除策略:CONFIGUREARCHIVELOGDELETION TOAPPLIEDONALL设置,实现的效果如下:归档日志如果没有应用到备库,那么在RMAN中使用backup....deleteinputsall和deletearchivelogall不会将归档日志删除。但但是请注意如果是使用delete 如果归档日志已经应用到了备库,那么在RMAN中使用backupdeleteinputsall和deletearchivelogall常情况下,由于归档日志可能很快应用到DataGuard,所以在RMAN份之后可以正常删除归档日志。RMAN不需要使用特别的备份,也不必担心人为不使用。deletearchivelogall命备库的归档日志到快速恢复区备库的快速恢复区空间紧张时现备库的归档日志完全自动管如果由于备份异常或DataGuard在快速恢复区空间紧张时,空间。但是如果归档日志没有应用到DataGuard,那么归档日志不注意上面最后一点,当快速恢复区空间紧张时,rae开始删除归档日志,删除的条件还包括归档日志已用到备库,这种情况下如果归档志还没有备份,也会被删除掉。这问题是,文档中描述的快速恢复空间紧张,具体是指什么时间?也快速恢复区的空间消耗多少百分的时候才算是空间紧张?在MS文章《Fsengdetdnthefashrvyr,ssagesntheatogtedOrceanaedfefna>(ocID .1)》里面有提到,空间使用率达到%以后就开始删除文件(归档日志)。rce在往快速恢复区文件时,其步骤大概是这样的:Orce估计需要的空间大小(),前的占用空间大小相加,看是否超过了%,如果超过了,那么就回收空间(间以够用为原则)(库),这里的问题是,假设快速恢复区设定了200G空间,那么在使用到80%,也就是160G的时候就开始回收空间。那么我们在估算空间时,就应该上浮20%。比如我们要求保留24小时归档,这24小时之内归档量最大是200G,那么我们应该为快速恢复区设置240G左右的容量。%的比率能够更改吗以便延迟re案是肯定的。没有相应的数据库参数来设定,但是可以通过来设置,号是23:oerroerrora19823,00000,"softlimitrecoveryareaspacepressure// ://*Cause:Setonallinstancestoalterrecoveryareaspace trigger//*Action:level1to100indicatesthepercentagewhenthe pressurehastobe下面是一个测试测试环境:主库是OracleforLinux两节点RAC,备库是其日志大小为512MB,快速恢复区指定的大小为16GB。当前主库的FRA(快速恢复区)的使用率已经接近于CONTROL000REDO0ARCHIVEDBACKUP01IMAGE000FLASHBACK000FOREIGNARCHIVED000在主库上创建一个表,并插入一行数据createcreatetablet1(idnumber,namechar(1000))tablespaceTBS_USERS;insertintot1values(1,'a');然后执行下在的测试代foriin1..300000endloop;/这段代码产生的日志量大690MB左右SQL>SQL>select*fromv$sesstatwheresid=155andSID 多次执行上述代码,发现FRA(快速恢复区)的空间使用率基本上在左右。alert日志也有相应的删除较早的归档日志的信ThuThuJan0212:28:50Thread1advancedtologsequence981(LGWRCurrentlog#12seq#981mem#0:Currentlog#12seq#981mem#1:ThuThuJan0212:28:50LNS:Standbyredologfileselectedforthread1sequence981fordestinationThuJan0212:28:50DeletedOraclemanagedfileDeletedOraclemanagedfileArchivedLogentry2645addedforthread1sequence980ID dest现在我们利用19823将这个比率调到95%看看会是什么样子SQL>SQL>altersystemsetevent='19823tracenamecontextforever,level95'scope=spfilesid='*';志,而是到接近95%的空间使用率时再开始删除归档日志:CONTROL000REDO0ARCHIVEDBACKUP01IMAGE000FLASHBACK000REDO0ARCHIVEDBACKUP01IMAGE000FLASHBACK000FOREIGNARCHIVED000从上面的最后一次对$recoyrausage的查询数据可以看到,此时空间利用率达到了9%,离95%已经很接近(日志的大小是MB%,如果在快速恢复区里面多一个文件就会超过%)。接下来这个比率调整到50%,看看是什么结果然后重启主库。再运行上面的测试代码,发现re在删除归档日志,但是每次均删除的日志只需要容纳要新增的文件即可,不会一下子删除到使利用率到%以下:CONTROL000REDO0ARCHIVEDBACKUP01IMAGE000FLASHBACK000然后一直使用altersystemswitchlogfile行一次,Oracle删除一个归档日志,到最后快速恢复区的空间利用率到接近于50%。ThuJan0212:56:29 CONTROL000REDO0ARCHIVEDBACKUP01IMAGE000FLASHBACK000因此,我们可以了解nt93的用途。对于空间容量比较小的主机,但是希望归档能够尽量保留在快速恢复区,以便留有足够的备份时间窗口,那么可以考虑把这个百分比调整到更大,比如9%,%等。删繁就简-云和的一道面试题解OracleACEACOUGKamusUTDBA关注OracleOracleRAC个人博客: 题目是:请将emp.empno=7369的记录ename字段修改为其实题目的设计非常简单,一个RAC双节点的实例环境,面试人的是实2,而我们在实例1使用selectforupdate将EMP表加SQL>SELECT*FROMempFOR 此时2,如果执行以下SQL句尝ename段,必然 这道面试题中包含的知识点有如何找到产生行锁的产生堵塞的会话,是不是可以kill掉;在获得可以kill掉进程的确认回复后,正确杀掉另一个实例上的进程这道题我们期待可以在5分钟之内获得解决,实际上大部分应试者在分钟以后都完全没有头绪注意:其实Oracle的任何复杂问题处理,都可以是由删繁就简的步骤逐层推演出来的,保持清醒的思路,对于DBA的工作非常重要。正确的思路和解法应该如下是什么等待呢?可以通过SESSION等待去获取这些信息SQL>SQL>SELECTWHEREs.sql_id=SQL.sql_idANDSQL.sql_textLIKE'updateempsetSIDUSERNAME79enq:TX-ROWLOCKcontentionENMOTECHUPDATEemp查找查找得知等待是enq:TX–rowlockcontention,行锁,接下视图就可以迅速定位blocker,通过BLOCKING_INSTANCE和BLOCKING_SESSION字段即可。 上述方法是最简单的,如果是使用更传统的方法,实际上也并不难, 00064030SID 2790617360第三个知识点是考核作为乙方的谨慎,即使你查到了blocker,是不是该直接kill掉,必须要先征询客户的意见,确认之后才可以杀掉清除清除serail#,这是killsession须输入的参数 如果是11gR2数据库,那么直接在实例2中加入@1参数就可以杀掉1的会话10g,那么登入1执行killsession操作再检查之前被阻塞的更新会话,可以看到已经更新成功1ROW对于熟悉整个故障解决过程的人,或者具备清晰思路的DBA,5分钟之内对于TX在v$lock图中显示的ID1ID2什么意思释可以从v$lock_type视图中获取。usn<<16|slot所以ID1务的USN+SLOT,而ID2是事SQN。这些可以从v$transaction视图中获得验证。SQL>SELECTXIDUSN,XIDSLOT,XIDSQNFROMv$transactionWHERE 9 如何和ID1=589854andID2=26267对应呢?XIDSQN=26267ID2=26267直接就对应了,没有问题。那么ID1=589854是如何对应10进制,的16进制9就是十进制的9,也就是XIDUSN=9,而位的16制1E换为10制是30,也就是XIDSLOT=30文章写到这里,忽然感觉网上那些呵成的故障诊断其实挺误人的只需要给一个参数,运行一下出故障原因。所以很少人愿意再去研究这个为什么这么写,各个之间的联系是如何环环相扣的。所以当你不再使用自己的笔记本,不迅速找到你赖以生存的那些,你还能一步一步地解决故障吗?典型案例:Oracle700TBLOBOracleACEACOUGEygle地区首位OracleACE和ACE总监,曾获评"2006年中国首届杰出数据15他地区最著名的Oracle技术推广者之一,专著《深入解析Oracle》、《循序渐进Oracle》等书籍受到Oracle技术者的广泛好评;主编撰写的《OracleDBA手记》系列作品是Oracle技术者们和技术的重要书籍。2009年,创建了云和,致力于为中国数据库用户提供专业的数据库服务;2010年,与OracleACEKamusACOUG(Oracle),OracleOracle是否适合大量的非结构化数据?典型的成功案例是怎样的前一段就有朋友向我咨询这样的问题,就Oracle大对象(LOB)的能力、性能和成功案例,我咨询了Oracle提供了一个成功案例在此分 eTrustSangerInstitute)是世界上最重使用Oracle数据库LOB形式生物信息,数据是容量超过了700TB。MPSA是其中的一个系统,数据库使用的是Oracle11g,采用的SecureFiles方式,以下是几年前的公开数据说明,当时的数据容量是512TB,每周增长4~5TB。的数据库系统系统架构,采用的是Oracle标准的体系,RAC集群,ASM,生产中心是2套4节点的RAC集群,灾备中心是一套4节点RAC集群。灾备和读写分离架构通过Datauard和灾备站点各部署了一套物理备库,目前的一个项目是:组SecureFilesOracleDatabase11g一个新特性,旨在为文件或非结可以说SecureFiles集外部文件与数据库LOB方法的优点于一身,可以下图是Oracle文档上给出的性能对比数据···(rederickSanger,1918年8月13日-2013年11月19),是一位英国生物化学家,曾经在890得化学奖,是第四位两度奖,以及唯一获得两次化学早于1918年8月13日出生于英国格洛斯特郡,父亲是一位医生。从高中(BryanstonSchool)毕业后,进入了大学圣学院,并于1939年完成自然科学文学士 但后来转而对生物化学感,而在当时也正好有许多早期的生物化学先驱。在1943年获得哲学博士 。他在1940年时与特·琼·豪(MargaretJoanHowe)结婚,他们育有两个儿子和一个女儿蛋白质与DNA序列研在1955年将胰岛素的胺基酸序列完整地定序出来,同时证明蛋白质具有明确构造。他利用自己新发现的试剂,也就是2,4-二硝基氟苯(4dntoforozne)这项研究使他单独获得了测定DNA序列,这种方法也称做「双去氧终止法」(Dideoxyterminationmethod)或是「法」。两年之后,他利用此技术成功定序出Φ-X174噬菌体(PhageΦ-X174)的组序列。这也是首次完整的组定序工作。他所发明的PCRDNA子和DNA聚合酶使DNA链得以展开,再利去氧核苷酸(dideoxynucleotides)DNADNA这项研究后来成为人类组计画等研究得以展开的关键之一,并使于1980年再度获得化学奖,与合作研究的沃特·吉尔伯特,以及另一团队的保罗·伯格(PaulBerg)也一同获奖。第二座奖使他成为继玛莉·居礼、莱纳斯·,以及·巴丁之后的第四位两度获奖者。到了1979年,又与吉尔伯特和伯格一同获得哥伦比亚大学的路易莎·格罗斯·霍维茨奖(LouisaGrossHorwitzPrize)。 eTrust)和医学研究理事(MedicalResearchCouncil),于1993年成立了中心(SangerCentre),这座研究机构现在称为(SangerInstitute),地点位于英国,是世界上进行组研究的主要机构之一。2007年,维康提供英国生物化学学会高级咨询顾问,OracleACE总监,ACOUG专ITPUBOracle据库管理版版主人称"杨长老",数年如一日坚持进行Oracle术研究与写作,号称"Oracle百科全书",在自己的博客上发表了超过3000篇文章。2007Oracle公司授予ACE号个人博客:用SQL为解析一道数学Oracle的SQL语句功能强大,它可以实现一些你意想不到的功能。比而使用SL来求解则要简单得多。且看用一个SL解析一道数学难题这是一个流传已久的故Gauss和Poincare在相遇了,上帝说:都是人间最伟大的数学家,那我来出道题考考谁。我在左手写一个大于1小于100的数,在右手同样写一个大于1小于100的数,然后把他们的和写在Gauss手上,把积写在Poincare手上,看看能不能猜出这两个数字Gauss看了手上的数字,说:“我不知道这两个数字是几,可我保PoincarePoincare看了手上的数字,说:“我原来的确不知道那两个数字是几,Gauss说:“那我也知道了。”以以下是来 百科关于两位数学家的简要介·卡尔·弗里德里希·高斯(英语:Gauss;1777年4月30日年2月23日),德国著名数学家、物理学家、天文学家、大地测量学家。定理、及算术-几何平均数。16年,9岁的高斯得到了一个数学史上儒勒·昂利·庞加莱(法语:JulesHenriPoincaré,18544291912717),法国最伟大的数学家之一,理论科学家和科学学家。庞加莱被公认是19世纪后和20世纪初的数学家,是继高斯之后对于数学及其应用具有全面知识的最后一个人。对数学,数学物这道题给出的已知条件十分隐蔽,首先来分析一下已知条件根据题意,最终所求的是两个数字,而这两个数字的范围是在1和100之间。对于Gauss来说他知道两个数之和,而不知道两个数的积,但是Gauss却肯定的说,他保证Poincare道这两个数是什么。这句话就很有举个例子,如果两个数分别是3和7,那么这两个数之积就是21。由于这两个数都是大于1的,因此两个数乘积为21的只有3和7这一种可能。如果Poincare中的21,那么Poincare定可以确定这两个数是什么,因此对于Gauss言,手中的值肯定不可能10(37两个数的和)。如果这个值是10,那么这两个数就有可能是37,而当然这只是举了一个例子,如果归纳一下就是说,对于auss而言,所这个条件,他才能确认oincare不知道这两个数是什么。对于Poincare来说,他开始并不知道两个数是什么,但是Gauss说出了他的推断之后,Poincare居然知道了这两个数是什么。这说明由于息,Gauss也可以唯一的确定这两个数了。SQLSQL给出最终的结果,然后描述一下这个SQL的思路如下:SQL>SQL>WITHT_NUM(SELECTROWNUM+1NUMFROMDUALCONNECTBYLEVEL<SELECTA,(14((A.NUM+B.NUMA.NUM*B.NUMCOUNT(*)OVER(PARTITIONBYA.NUM*B.NUM)FROMT_NUMA,T_NUMWHEREA.NUM<))WHEREMUL_M!=))WHEREMUL_P=ANDVALUE= SQL有点长,下面简单分析一下3131A.NUMA.NUM+B.NUMA.NUM*B.NUMCOUNT(*)OVER(PARTITIONBYA.NUM*B.NUM)FROMT_NUMA,T_NUMWHEREA.NUM<)首先从SQL的最内层开始分析,这一层很简单,构造符合大于1小100的两个数的积,得到所有的可能性根据题目的描述,第一个数是2,第二个数是3的情况,与第一个数是3,第二个数是2没有区别,所以这层SQL在连接时加上了限制条件A>B,这样可以去掉重复的结果。在SELECT列表中分别列出A、B两个数值,以及两个数值之和(A+)、两个数值之积(A),还通过分析函数计算所有可能性中两个数之和与当前两个数之和相等的组合的个数,以及所2323(A.NUMA.NUM+B.NUMA.NUM*B.NUMCOUNT(*)OVER(PARTITIONBYA.NUM*B.NUM)FROMT_NUMA,T_NUMWHEREA.NUM<))接着看第二层SL,除了列出A和BA和B之和、A和B数之积的组合的最小个数。这样描述确实很抽象,不过没有关系,马上要1414((A.NUMA.NUM+B.NUMA.NUM*B.NUMCOUNT(*)OVER(PARTITIONBYA.NUM*B.NUM)FROMT_NUMA,T_NUMWHEREA.NUM<))WHEREMUL_M!=)AB数,更关键的是这里进行了过滤,在第二层得到的MUL_M不等于1。GaussPoincare都不是唯一的。在SQL中表示的结果就是MIN(MUL_P)OVER(PARTITIONBYTOTAL)!=1。随后要解决的问题就是Poincare说他原来并不知道两个数分别是什么,而当Gauss以唯一确定这两个数是什么了,数学描述就是两个数乘积分组后值相同的个数是1。在SQL中的表示也就是最外层SQL的限制条件MUL_P=1。随后还有最后一个条件,就是Gauss这时也知道了两个数是什么,说明Gauss根据PoincareSQLCOUNT(DECODE(MUL_P11OVER(PARTITIONBYTOTAL1MUL_P1PoincareGauss一种情况满足MUL_P的值为1。SQLSQL-用SQL解析神奇的牌魔术老你用SQL解释经典的牌魔一个偶然的机会在电视上看到一个有关牌的魔术,觉得很有意思。首先描述一下这个魔术,有的话,可以按照这个方法试一试从一副牌中随意抽取21张牌。让观众从这些牌中随意选择一张,这20张牌中,然后任意洗牌。下面开始进行发牌的工作,发牌和普通的发牌规则一样。将牌发成叠,每7。将每叠牌依次展示给观众,要求观众确认目标牌3的之后将3合在一起,将包含目标牌的一叠放在其他两叠牌中间。注意然后再次发牌,和刚才完全一样,还是将牌发成3。让对方确认目标牌放到另外两叠牌的中间。下面神奇的时刻到来了:从这叠牌的上面每次拿起一张,每拿起一张牌的同时要说一句话:“你要相信魔术你的牌是牌就是目标牌了。SQLSQL看了这个魔术,不禁有点手痒,既DBA身,就用SQL示一下SQL>SQL>WITHA(SELECTROWNUMPFROMDUALCONNECTBYLEVEL<=7+(7+66(7+789FROM解释一下这个1到21。而后将牌按照发牌的顺序分成3份,于是这张牌的位置变为CEIL(P/3)。由于在魔术表演的过程中,目标牌所在的那一叠牌会放在置要增加7。魔术中上面的步骤重3,因此在SQL这个过程也重复3终SQL回的结果就是目标21不同初始位置所对应的魔术结束时刻不过SQL只是演示了结果,并没有给出为什么会出现这种结果的答案,下面通过数学简单分析一下:由于第一次平均分的时候这张牌的位置是任意的,所以这次平均分的意义不大。这次平均分的目的只是将目标牌的那一份放到中间的位置。所以可以认为这张牌在中间位置第1到7就是7+p。下面将牌分成三份,然后将目标牌堆放到中间,这时这张牌7p3。最后再重复一次这个动作,最终结果变为:7+7++p33。对上面的表达式进行通分计算后,结果变成(7*9+7*3+7+p)/9,进一步简化变成(91p)/9,最后变成了101+p)/9,而p位置17,也就是说无论取何值,(1+p)/9都不会大于1,所以最终的结果是11。最后,应该修改一下魔术中语:“你要相信数学你的牌是”查询初始化参数的方法很多,比如SHOWPARAMETER,或查询V$PARAMETER等,这里简单总结一下。首先初始化参数的设置的方法就有很多种:可以通过ALERSYSEMSETSCPE=MEMRY的方式仅设置内存的修改,也可以通过ALERSYSEMSETSCPE=SPFILE只修改SPFILE的值,当然也可以同时修改SPFILE和MEMRY中的设置。还有一种初始化参数可以设置延迟生OrceRAC所幸Oracle提供的查询初始化参数方法也有很多种:SHOWPARAMETERS、SHOWSPPARAMETERS、CREATEPFILE、是SHOWSPPARAMETERS是SQLPLUS具提供的方法,用来查询当前会话生效的SPFILE参数包含的初始化参数。这个命令在11g以后sqlplus版本中有效CREATEPFILE命令不像其他方法那样直观,这种方法可以将SPFILE中PFILESPFILE中或当前内存中设置了哪些初始化参数。观得多。在1g以后的版本允许CREAEPFILERMEMRY。V$PARAMETER视图提供了当前会话可见的初始化参数的设置,如果像RAC据库的所有实例的设置,可以查GV$PARAMETERPRAETE2视图和ARMEER同样的,对于RAC环境可以查询GPARAMETER2视图。SYSEMPARAMETERGSSMPRAETERV$SYSTEM_PARAMETER2视图与V$SYSTEM_PARAMETER视图的V$PARAMETER2图与V$PARAMETER的关系一样,都是对V$SPPARAMETER记录了来自SPFILE文件中初始化参数。如果参数在SPFILE件中没有设置,则字ISSPECIFIED应的值FALSE。同样可以查询GVSPPARAMETER参数来显示RAC环境所有实例的设置。V$PARAMETERV$PARAMETER和V$PARAMETER2这个区别同样适用于V$SYSTEM_PARAMETERSQL>SQL>SELECTNAME,VALUEFROMSELECTNAME,VALUEFROM SQL>SELECTNAME,VALUEFROMSELECTNAME,VALUEFROM V$PARAMETERV$SYSTEM_PARAMETER一般在查询初始化参数的时候都习惯性的使用SHOWPARAMETER,也就是查询V$PARAMETER图,但是有些时候查询这个视图得到的结果 SQL>selectname,valuefromwherename= SQL>SQL>selectname,from 这是如果在会话级修改query_rewrite_enabled这个初始化参数SQL>showparameter SQL>selectname,valuefromwherename= SQL>selectname,valuefromwherename= 可以看到,showparameter和查询v$parameter视图的结果都是上一篇描述这两个视图的时候就提到了,V$PARAMETER视图反映的是初始化参数在当前会话中生效的值,而V$SYSTEM_PARAMETER反映的再来看看延迟参数修改的情况SQL>selectname,fromwherename= SQL>selectname,fromwherename= SQL>altersystemsetrecyclebin=offdeferredscope=SQL>selectname,fromwherename= SQL>selectname,fromwherename= 结果和前面的恰好反过来,v$parameter视图中的结果没有发生变化,而v$system_parameter图的结果变成OFF。这是因为延迟修改对v$parameter图结果不变,而对于系统而言,初始化参数已经改变,而且所有新建会话的参数也会改变v$system_parameter图的SQL>SQL>CONNSQL>selectname,fromwherename= SQL>selectname,fromwherename= 根据这两个例子,利用V$PARAMETER图获取系统的启动初始化参数是确的,应该从V$SYSTEM_PARAMETER视图来获取。RACRAC环境下初始化参数的查SOWPARAMETER看到的初始化参数,那么这个参数导致是全局设置还是当前实例设置的,是从这个命令中看不到的。虽然OracleGV$开头的初始化参数,可以用来查询两个实例上的一个简单的例子 SQL>altersystemsetopen_cursors=500scope=bothsid=SQL>OracleDatabase11gEnterpriseEditionRelease.064bitWithWiththePartitioningRealApplicationClustersOLAPDataMiningandRealApplicationTestingoptions断开SQL>setinstanceOracleDatabase11gRelease.0-ProductionSQL>connsysassysdba SQL>altersystemsetopen_cursors=400scope=bothsid=SQL>OracleDatabase11gEnterpriseEditionRelease.064bitProductionWiththePartitioning,RealApplicationClusters,OLAP,DataMiningSQL>setinstanceOracleDatabase11gRelease.0-ProductionSQL>conn/assysdba现在来看看不同的查询方法得到的结果SQL>selectname,2from3wherename='open_cursors'; SQL>selectinst_id,name,2from3wherename='open_cursors';INST_IDNAME 12 SQL>selectsid,name,fromwherename= 似乎除了看不到全局设置外,GV$PARAMETER参数和时候只修改了spfile或只修改了memory参数,结果就会不同:SQL>altersystemsetopen_cursors=600scope=memorysid=SQL>altersystemsetopen_cursors=700scope=spfilesid=SQL>selectname,valuefromv$parameterwherename= SQL>selectinst_id,name,fromwherename='open_cursors';INST_IDNAME SQL>selectsid,name,valuefromv$spparameterwherename= 从上面的对比就可以看出,通过GV$视图的结果和SPFILE中包含的除了上面介绍的几种视图之外,CREATEPFILE也是一个不错的选择,在10g以前只能CREATEPFILEFROMSPFILE,得到的结果类似于对VSPPARAMETER视图的查询,而11g增加了CREATEPFILEFROMMEMORY选项,这个得到的结果类似于从视图获取的查询GV$SPPARAMETERGV$SPPARAMETER参数的其实这里还有一个问题,就是GV$SPPARAMETER是否有意义。因为V$SPPARAMETE参数本身就包含了SID,SPFILE本身就包含了所的SPFILE来进行启动,这时GV$SPPARAMETER视图中获取结果,才是真正各个实例SPFILE中设置的结果。这样说比较难以理解,看一个简单的例1open_cursors2open_cursorsSQL>selectsid,name,2from3wherename='open_cursors';SIDNAMEVALUE*open_cursorsSQL>selectinst_id,sid,name,2from3wherename='open_cursors';INST_IDSIDNAMEVALUE1*open_cursors1test1open_cursors1test2open_cursors2*open_cursors2test1open_cursors2test2open_cursorsSQL>selectinst_id,name,2from3wherename='spfile';INST_IDNAMEVALUE1spfile2spfile下面里面内存中参数来创建SPFILE,并利用新建的SPFILE来启动当前实SQL>$vi/export/home/oracle/inittest1.ora"/export/home/oracle/inittest1.ora"[Newfile]$vi/export/home/oracle/inittest1.ora"/export/home/oracle/inittest1.ora"[Newfile]"/export/home/oracle/inittest1.ora"[Newfile]2lines,44characters$ORACLE例程已经启动。TotalSystemGlobalArea FixedSize VariableSize DatabaseBuffers RedoBuffers 下面检查spfile中的SQL>selectinst_id,name,fromwherename='spfile';INST_IDNAMEVALUEspfileSQL>selectinst_id,name,valuefromwherename='open_cursors';INST_IDNAMEVALUESQL>selectsid,name,fromwherename=SIDNAMEtest1open_cursorsSQL>selectinst_id,sid,name,2from3wherename='open_cursors';INST_IDSIDNAMEVALUE2*open_cursors2test1open_cursors2test2open_cursors1test1open_cursors1test2open_cursors可以看到,由于两个实例采用了不同的SPFILE,导致两个实例上设置的在上面的例子中,两个实例上真正的参数设置查询方式SQL>SQL>selectinst_id,sid,name,2from3wherename=4andsubstr(sid,-1)=INST_IDSIDNAME2test2open_cursors1test1open_cursors如如何判断一个初始化参数的来判断数据库启动是否启用了SPFILE很简单,只需要通过SHOWPARAMETERSPFILE命令就可以看到:NAMETYPEspfileNAMETYPEspfilestring但是判断一个初始化参数是否由SPFILE设置,并不是那么容易首先V$SPPARAMETER里面包含了所有可以设置初始化参数的记录SQL>SQL>selectsid,fromgroupbySID*test2test1不过这个问题并不难解决,对于通过SPFILE指定的参数,V$SPPARAMETER图中的ISSPECIFIED的值为TRUE,如果在SPFILE中没有指定,则这个值为FALSE。fromv$spparametergroupbyisspecified;ISSPECCOUNT(*)TRUEFALSESQL>selectsid,name,valuefromv$spparameterwhereisspecified='TRUE'andnamenotlike'\_%'escapeSIDNAMEprocesses150 log_archive_dest_1cluster_databasecluster_database_instancestest1thread1test2threadtest1undo_tablespaceUNDOTBS1test2undo_tablespaceUNDOTBS2test1instance_number1test1remote_login_passwordfileSHAREDtest2remote_login_passwordfileEXCLUSIVEplsql_warningsquery_rewrite_enabledoptimizer_dynamic_samplingskip_unusable_indexes36上面就列出了SPFILE中所有指定的参数,不过并不以为SPFILE中设置的比如在使用PFILE指定SPFILE参数的方式启动时,PFILE里面可以在SQL>selectsid,name,fromwherename='open_cursors';SIDNAMEVALUESQL>altersystemresetopen_cursorsscope=spfilesid=SQL>altersystemsetopen_cursors=SQL>selectsid,name,fromwherename='open_cursors';SIDNAMEVALUE*open_cursors下面通过修改inittest1.ora参数,在spfile参数前面,加open_cursorsORACLEORACLE Fixed Variable Redo SQL>selectname,fromNAMESQL>selectsid,name,value,fromSIDNAMEVALUE*open_cursors500检查当前的数据库设置可以发现,虽然当前SPFILE中open_cursors级的初始化参数,导致系统当前的参数设置和SPFILE中的设置并不相同CREATECREATEPFILE的方法检查初始化参其实还有法更加的一目了然,就是CREATEPFILE的方式:spfilestringSQL>hostmore/export/home/oracle/inittest1.oratest2.db_cache_size=test1.db_cache_size=test2.java_pool_size=test1.java_pool_size=test2.large_pool_size=test1.test1.oracle_base='/data/oracle'#ORACLE_BASEsetfromenvironmenttest2.oracle_base='/data/oracle'#ORACLE_BASEsetfromenvironmenttest2.pga_aggregate_target=test1.pga_aggregate_target=test2.sga_target=test1. test1.shared_io_pool_size=0test2.shared_pool_size=test1.shared_pool_size=test2.streams_pool_size=0test1.streams_pool_size=0 使用了这个语句,所有的SPFILE中设置的初始化参数设置都一目了然除了CREATEPFILEFROMSPFILE11g增加CREATEFROMMEMORY项,使得用户可以直接从数据库当前生效的参数来生成PFILE文件,利用这个方法,就可以解决上一篇文章最后介绍的PFILE中设置的实例级参数覆盖SPFILE中数据库级参数的情况:SQL>hostmore#Oracleinit.oraparameterfilegeneratedbyinstancetest1on06/12/200915:18:46test1.db_cache_size=500Mtest2.*.*.*.oracle_base='/data/oracle'#ORACLE_BASEsetfrom*.*. test1.shared_pool_size=224Mtest2.*. *._sqltune_category_parsed='DEFAULT'#parsed #logbuffer rce用于自动调整的双下划线参数也不奇怪,问题是大部分都是rceOrce隐患参数的好办法。个实例的设置,对比上面的PEN_CURSRS参数的设置和下面查询的结果就可以发现这个问题:SQL>SQL>selectsid,name,fromwherename='open_cursors';SIDNAMEVALUE**open_cursorstest1open_cursorsSQL>selectinst_id,name,valuefromgv$system_parameterwherename='open_cursors';INST_IDNAMEVALUE显然CREATEPFILESPFILE的设置并不相符,下面修改一下初始化参数OPEN_CURSORS的值:SQL>SQL>altersystemsetopen_cursors=从这个结果可以看到,CREAEPFILE获取的PFILE只对当前实例有效,虽然获取的结果包含多个实例的设置,但是这些设置可能和其他实例上的真正设置并不相符。如如何判断一个初始化参数是否是默认参OracleV$SYSTEM_PARAMETER中提供了一个列ISDEFAULT,SQL>SQL>selectname,value,isdefaultfromv$system_parameterwherename='open_cursors';NAMEVALUEopen_cursorsopen_cursors400fromgroupbyTRUEFALSE根据这个结果可以看到,数据库中绝大部分的初始化参数设置都是默认值SQL>selectname,value,fromwherename='undo_retention';NAMEVALUEISDEFAULTundo_retention900TRUESQL>selectsid,name,valuefromwherename='undo_retention';SIDNAMEVALUE*SQL>altersystemsetundo_retention=SQL>selectname,value,fromwherename='undo_retention';NAMEVALUEISDEFAULTundo_retention900TRUESQL>selectsid,name,valuefromwherename='undo_retention';SIDNAMEVALUE对于手工设置的初始化参数与系统默认值相同的情况,通v$system_parameter视图是无法区分的同样通过查询V$SPPARAMETER视图检查SPFILE的设置也确,因为初始化参赛可能是通过PFILE设置的,或者是实例启动后由ALTERSYSTEM命令进行过修改。对于这种情况,其实上一篇文章中介绍的CREATEPFILEFROMSQL>SQL>selectsid,name, fromwherenamenotlike'/_%'escapeSIDNAMEtest1spfiletest1sga_targetnNtest1db_block_sizetest1log_archive_configtest1log_buffertest1cluster_database_instances3test1db_create_file_dest+DATAtest1thread1test1db_test1plsql_warningsDISABLE:ALLtest1audit_file_dest/data/oracle/admin/test/adumptest1audit_trailDBtest1db_nametesttest1open_cursors400test1optimizer_modeALL_ROWStest1query_rewrite_enabledTRUEtest1pga_aggregate_target245Mtest1skip_unusable_indexesTRUEtest1diagnostic_dest/data/oracle已选择32行。而事实上,当数据库CREATEPFILEFROMMEMORY令Oracle创建PFILE的数据源就是V$SYSTEM_PARAMETER4这个的,就是通过alt文件检查数据库加载的所有非默认值的初始化参数。SQL>SatJun1315:20:032009 backgroundprocessFBDAShuttingdowninstance:furtherlogonsdisabledSatJun1315:20:052009 backgroundprocessCJQ0 backgroundprocessQMNC backgroundprocessMMNL Shuttingdowninstance(immediate)Licensehighwatermark=6ALTERDATABASECLOSENORMALSatJun1315:20:102009SMON:disablingtxrecoverySMON:disablingcacherecoverySatJun1315:20:102009ShuttingdownarchiveprocessesArchivingisdisabled...SatJun1315:20:19SatJun1315:20:222009SomealertmessageshavebeensuppressedbecausetheywereproducedtooearlyStartingORACLEinstance(normal)Interfacetype1ce1configuredfromOCRforuseasaclusterinterconnectWARNINGcouldnotbetranslatedtoanetworkaddresserror1Interfacetype1ce0configuredfromOCRforuseasapublicinterfaceWARNINGcouldnotbetranslatedtoanetworkaddressWARNING:Noclusterinterconnecthasbeenspecified.DependingonthecommunicationdriverconfiguredOracleclustertrafficmaybedirectedtothepublicinterfaceofthis mendsthatRACclustereddatabasesbeconfiguredwithaprivateinterconnectforenhancedsecurityandPickedlatch- SCNscheme3Autotuneofundoretentionisturnedon.LICENSE_MAX_USERS=0SYSauditingisStartingupORACLERDBMSVersion:.0.Usingparametersettingsinserver-sidepfileSystemparameterswithnon-defaultvalues:processes=sga_target=740Mcontrol_files="+DATA/test/controlfile/current.529. db_block_size=8192log_archive_config=""cluster_database=TRUEcluster_database_instances=3db_create_file_dest="+DATA"thread=1undo_tablespace="UNDOTBS1"undo_retention=900instance_number=1remote_login_passwordfile="SHARED" =""audit_file_dest="/data/oracle/admin/test/adump"audit_trail="DB"db_name="test"open_cursors=500pga_aggregate_target=245MClustercommunicationisconfiguredtousethefollowinginterface(s)forthisinstanceclusterinterconnectIPCversion:OracleUDP/IP(generic)IPCVendor1proto2SatJun1315:20:23PMONstartedwithpid=2,OSid=19138SatJun1315:20:232009VKTMstartedwithpid=4,OSid=19140atelevatedSatJun1315:20:24DIAGstartedwithpid=6,OSid=19144SatJun1315:20:242009DBRMstartedwithpid=8,OS...Completed:ALTERDATABASEOPENSatJun1315:20:412009StartingbackgroundprocessCJQ0SatJun1315:20:412009CJQ0startedwithpid=64,OSschedulernNn检查alert文件的方法不但可以获取当前实例所有非默认初始化参数的信(JavaEE在过去的一年里,中间件(JaaEE应用服务器)相关的几个安全被利用的越来越多地出现在的视野中,从前几年发现、修复后又不断出现新问题的ApacheStruts2注入,到今年非常火爆的Jaa反序列化,还有一直就没消停过的SS(跨站)和SSRF(服务端请求)、Web应用弱,中间件(Java应用服务器)的安全状况需要愈加关注和防护云和作为专业的服务公司,已经就这些形成了专业全面的解决方我们取得联络。以下就这几个常用的中间件(JavaEE应用服务器)相关的安全进行危害等级:影响面积:较大(涉及WebLogic、WebSphere、JBoss大多数版背景:2015年11月6日,FoxGloveSecurity安全团队的来版的WebLogic、WebSphere、JBoss、Jenkins、OpenNMS这些大名鼎鼎的Java应用软件,实现代码执行。然而早在2015的128,GabrielLawrencegeblChrisFrohofffrohoff)在AppSecCali出了一个报告,报告中介绍了用的Java库来实现任意代码执行,由此可见一斑,该已在各种黑色中流传了一段时间,恐怕已经有不少的被下描述:者可以利用ApacheCommonsCollections这个常用的Java库随意执行代码,而WebLogic、WebSphere、JBoss、Jenkins、OpenNMS等产品中均使用了ApacheCommonsCollections这个开源类库组件。简单来讲,就是不需要知道WebLogic、WebSphere、JBossJavaps.Java序列化就是把对象转换成字节流,便于保存在内存、文件、可查了解已被通报的公司,下面为部分披露信息截WeblogicUDDIExplorerXSS(跨站)和SSRF(服务端请求危害等级:影响面积:大(几乎涵盖所有WebLogic版本,特别是对公网开放访描述:者利用WebLogicUDDIExplorer(发布和查找WebService用的)可窥探内网的IP地址和端口开放情况。可查了解已被通报的公司。下面为部分披露信息截图本地文件包含(LFI)引起的WebLogicServer进程耗尽CPU资源最危害等级:描述:者利用类似下面的本地文件包含(LFI)请WebLogicServer(9.0-GET/portal/..%5C..%5C..%5C..%5C..%5C..%5C..%5C..%5Cetc/passwdHTTP/1.1查看本地的文件 列表或内容,还可以上传文件WebLogicServer进程将会耗尽所在主机的CPU资源:上述一些在互联网上已有很多利用工具,总是有些”好事之徒”进一些友好的、不友好的探测,影响正常的生产工作和企业形象。消除已知的、未知的安全隐患刻不容缓其是对互联网开放权限的系统。云和已针对中间件可能发生的形成了体系的安全保障服务云云定制开性能优盘IO、应用,提升系统整体性能系统测安全加迁移服 企业内OracleRACOracleACEDirector,ACOUG专对Oracle据库的体系结构有深入了解;深入理解Oracle数据库的深入了解Oracle据库的备份恢复机制,熟Oracle各种备份方法;深入了解Oracle数据库性能优化机制,特别是在SQL优化方面有体系化的深入研究(《基于Oracle的SQL优化》作者)。近年来专注于软件架构和数据库性能优化,涉猎领域不再局限于数据库个人博客 ConnectTimeLoadBalancing、RuntimeConnectionLoadBalancing、ConnectTimeConnectionFailover和RuntimeConnectionFailover,以及里面所涉及到的TAF、ONS、FCF、FAN、LBA等诸多知识点。本文主要是针对OracleRAC11gR2环境下的连接管理,但同时也会对比说明OracleRAC10gR2/9iR2,以体现他们所谓“连接管理”,主要体现在Loadalanng和Faioer两方面。rceRACR2下的Loadaaning和Faioer,根据是否使用了事先已经存在的连接(如连接池中的连接)又分为ConntieLoadalanng、RuntieConntonoadaancng、ConntTeConntonaor和RuntieConntonaor这4种类型,凡是带上了“Rt了连接池。一、首先来介绍ConnectTimeConnectionConnectTimeConnectionFailover是指不从连接池中取得已有连接而是直接连接Oracle据库时FailoverOracleRAC11gR2ConnectTimeConnectionFailover非常容易实现的,只需要在相关的tnsnames.ora中指定多个vip,同时指定FAILOVER=ON就好了。)这里客户端进程首先会尝试连接RAC1-vip,如果连不上,则会尝试Oracle数据库时的Failover,不仅适用于RAC环境,也适用于DataGuard环境。如下所示:)OracleRAC11gR2引入了SCAN(SingleAccessName),并且客户端缺省是通过SCAN来连接整个RAC环境的,如下是SCAN的如上图所示,如果使用了DNS或者GNS(GridNamingService),那么最多可以有3SCANVIP3SCANListener;如果没有使用DNS或者GNS,而是选择使用hosts件,则只1SCANVIP1个SCANListener。这里假设在tnsnames.ora中这样配置(DESCRIPTION=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MySCAN)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=RAC11g)))严格意义上说,只有在RAC境有1个以上SCANVIP时候,上时候,如果其中的一个SCANVIP连不上,则马上会尝试另外SCANVIP当使用了hosts件来SCANVIP时候,即在整个RAC境只有1个SCANVIP的情况下,Failover其实也存在,只不过这种情况下FailoverSCANVIP在的节点宕掉后,SCANVIP会和相关的SCANListener一起整体Failover到其他节点,只不过这个Failover需要时间,而客户端需要等待这个Failover程完毕后才能重新连上RAC。二、接下来介绍RuntimeConnectionRunteConntonFaorFaior。这个已存在的连接,可能是连接池中正在用的连接,也可能是不通过连接池、直接通过CI客户端(如sqpus)连上rae数据库后的连接。RuntimeConnectionFailover,就是指在连接已经存在的情况下,如果Oracle数据库端出现了异常的情况(比如Service宕了、Instance了、Session断了)而导致已有连接中断,怎样Failover的问题。有两种来实现RuntimeConnectionFailover,分别为(TransparentApplicationFailover)FCF(FastConnection首先来介绍TAF。TAF有如下一些知识点需要我们注意1 它可以 端的tnsnames.ora中的连接串里定义,也可以server的service义,只不过service的设置会取 (override)客户端tnsnames.ora中的设置:客户端可以这样设置TAF:(DESCRIPTION=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MySCAN)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME= srvctlmodifyservice-dRAC11g-s-qTRUE-PBASIC-eSELECT-z180-w5-jLONG具体各个参数的含义可参见如释:Usage:srvctlmodifyservice-d<db_unique_name>-s<service_name>[-c{UNIFORM|SINGLETON}][-P{BASIC|PRECONNECT|NONE}][-l[PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]][-y{NONE|SERVICE_TIME|THROUGHPUT}][-e{NONE|SESSION|SELECT}][--d Uniquenameforthe-s -c{UNIFORM|SINGLETON}Servicerunsoneveryactiveserverintheserverpoolhostingthisservice(UNIFO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论