数据库程序员面试分类真题19.docx
数据库程序员面试分类真题19倚答题1. Oracle中的坏块指的是什么?正确答案:Oracle数据文件的坏块可以分为物理坏块和逻辑坏块。物理坏块指的是块格式本身已经损坏,块内的数据没有任何意义:逻(江南博哥)辑坏块指的是块内的数据在逻辑上存在问题,比如索引块的索引值没有按顺序排列导致的逻辑坏块。物理坏块一般是由于内存问题、OS问题、I/O子系统问题或硬件引起的,逻辑坏块一般是由OracleBUg等原因引起的。坏块通常是通过OraeIe的ORA-Ol578错误报告出来的,详细的损坏描述会在告警日志中打印出来。可能的报错如下:ORA-O1578:ORAC1.Edatablockcorrupted(fiIe#6,block#11)ORn-Ol1IOidatafile6/u01apporacteoradataorcltbsl.dbf,那么何时进行数据块的一致性检直呢?当一个数据块被读或写的时候,将对块进行一致性检查,检查的内容包括块的版本、比较块在CaCh。和BIOCkBUffer中的数据块地址,然后根据要求进行校验(CheCkSUm).块的一致性检查由DBB1.0CKCHECKSUM和DBB1.OCKQIECKlNG两个初始化参数控制。DBB1.OCKCHECKSUM是一种物理检查,只有在写入(DBWn常规写或用户进程宜接路径写入)数据文件时,根据一个CHECKSUM算法计算数据块的校验和,然后写入数据块的一个特定位置,在读取块时再进行检验,主要是为了防止1/0硬件和1/0了系统的错误。DBB1.OCK.CHECKING参数主要用于数据块的逻辑一致性检查,但只是在块内,不包H块间的逻辑检查,用于防止在内存中损坏或数据损坏。考点RMAN2. Oracle中的坏块有哪些检测方法?正确答案:坏块的检测方法主要包括卜表所示的几种。方法I)FS中:dhfil.!hr*st01,dbfblocksize=8l922)ASM中:SdbVfie=÷DATA般喻朋施I2H99Ml:即邂三MRdoHi.朋R此联、嬲文件和RMANW.娘肝酬文件懒教正,(b丽R令行如,一1£林文件的触块,二是豌朋在生正反时;5要自由的怖由包括SYWSDRtSK和SYSSYS_USER_SEGS)UWid零1命令文好憎叫名的文件反胡酬口侬FR需忑黑黑粽-畸蠢畸SEGMENTNAMEqBC1.HR',对连接文件摩跳实则政务懿文物甑.艘牌DBVRFY如麻限薪后醐施解f含飕名的文件,3)甑段.料加end&幽枷跑ID或蜥在(如)瞅睚女蟒倒减备作为林旅虏么我撼蜥In醯文算段头懿第:证存相在ASM中的贵兴件,瓦么能留院用"ZK影方:dbvuse油5yStaT*gme11l#36.12130嫌不龌即名解外舷就到DBV三8:USERlDmusbuSpedfitdfctOSMIito摭第ANA1.YZE令黜分析紫鼾棘,Mtmm翱!懒触,mmmmm帆vt,vnTAillUZWVovrcWmEAIw1.YZE它也磔欣个胸制婕i三国坏的OAM1.YZH辎濡JM-但行#块枚但自足不会斥记趣为CoRRUP1.版院果保存在USHlDUMP_DEST豚询用户TRACE文件中对N讪邛块)我执厅导出发作,会收到相关的SSK版(ORA-OIJ78).卬坏触好会发财根理包括HWM(酩峨)肚的槌、索引中存确械,髅?财睇的极.肝这相娥,料明颇设须燃复修妫耀奸,施卜.酬½a方法;旗1:朋侬I怖通过联IOBI施多舸雎导出酬依让Ondc%轴撕的块,10231l0rade的标filft.即位全和喇魁加蝴懿块,只导出包含旧做的JHMZfift三,眦导出的表射招人用我从百触源I)眦IOBI施怀_aplpabks三TBC.1.HRfile=T,BC-1.HIlSQ1.>ahSyJtonseicMI0231tracecameCo叱Ufccn,htlIff;2)觑HttniWyft;SQ1.>ahJysemsetCCe='10231tractoamccorutfwmrJevdV;方法2:蜩DB电REPAIR祢亩麻饿.ttffiDBMS_R£PAIR处耳腋触曲Oraefe做换耳胡掾撕除削浦曲时候会蒯掷潮戈通型:SQ1.>EXECDBMSREWHISK1PCORRbHB1.OCKS(U双TAB1.ENAMERAcKUPVAIIDMEDXrAFl1.E12;RMAw炖麒壮湛飘.蛾的贾蟒中包含Backupvalidaitdaarase有时bE么总会或利给说BACKUPVAUDATcCHEeK1.OGICA1.DATABASEARCHIVaoGAU;考点RMAN3. BMR如何恢复坏块?正确答案:如果数据库只有很少的数据块被破坏,那么块介质恢复(BlOCkMediaRecovery,BMR)是较好的块恢复方法。BMR只能用于恢复物理损坏(PhySiCalCorruptions),在数据文件联机时即可恢复相关坏块。BMR主要使用Blockrecover命令恢复坏块,该命令有以下三种使用方式:1)使用aB1.OCKRECOVERCORRUPTION1.lST;”命令恢复在VSDATABASE_B1.OeK.CORRUPTION视图中报告的所有块。2)使用aB1.OCKRECOVERDATEI1.E1B1.OCK10;”命令恢复单个块,需要指定文件号和块号。3)使用"B1.OCKRIiCOVERTAB1.ESPACETSJJSERDBAXXX;"命令恢熨某个表空间的坏块,需要指定表空间和数据块地址。下面给出几个恢复示例。恢复3个数据文件的损坏块:Rman>Blockrecoverdatafile2block12,13datafile3block5,23,24DTFI1.E4B1.OCK20;从数据文件拷贝中恢复一系列块:Blockrecoverdtfile3block2,3,4tablespacets_userdb4194405,4194409,4194412fromDATAFI1.ECOPY;从指定的TAG备份中恢复块:RMAN>blockrecovertablespacesystemdba4194404,4194405fromTAGwweekly-backup*:从用于恢夏数据到两天以前的备份中还原、恢熨SYSTEM表空间中的两个块:RVAN>blockrecoverTAB1.ESPACEsystemdba4194404,4194405restoreUNTI1.TIME,sysdate-2,:运行备份验证数据库,修复在V$DATABASEB1.OCKCoRRUpTION中记录的所有损坏块:RMAN>BCKUPVA1.IDATEDATABASE;RMN>B1.OCKRECOVERCORRUPTION1.IST:考点RMAN4. 如何确定坏块的对象名?正确答案:根据绝;寸工件号和块号确定数据块对象的SQ1.语句如下:SE1.ECTTAB1.ESPACE_NAME,SEGMENTjrYPE,OWNER,SEGMENT_NAME,PARTITION_NAMEFROMDBA_EXTENTSWHEREFI1.E_ID=&FI1.E_IDAND&BI.OCK_IDBETWEENB1.OCK,IDANDB1.OCK,ID+B1.OCKS-1;如下的SQ1.可以确定段苫用的数据块:SE1.ECTDBMSROWID.ROWIDOBJECT(ROWID)OBJECTID,DBMSROWID.ROWIDRE1.ATIVEFNO(ROWID)FI1.E_ID,DBMS_RoWID.ROWID_B1.OCK_NUMBER(ROWID)B1.OCKID,COUNT(I)COUNTSFROM1.HK.T_BC_1.HRDGROUPBYDBMS_ROWID.ROWID_OBJECT(ROWlD),DBMS_ROWID.ROW1D_RE1.ATIVE_ENO(ROWID),DBMS_ROWID.ROWTD_B1.OCK一NUMBER(ROWID)ORDERBYDBMS.ROWID.ROWID_B1.OCK_NUMBER(ROWID);关于坏块需要注意以下几点:D对于受损的数据块,仅仅坏块上的数据无法被查询或读取,其余正常块的数据依旧可以使用。2)对于受损的表对象进行聚合等相关运算时会收到错误提示,因为坏块上的数据无法被统计。3)可以基于RMAN的备份文件实现块介质恢复,其数据文件无须OFF1.INE,开销最小,影响最小。4)对于多个数据块的损坏,先执行BACKUPVA1.lDATE校验数据库或相应的数据文件以便标记受损的坏块后,填充V$DATABASE_B1.OCK工ORRUPTloN后再使用命令"B1.OCKREcovERCORRUpTION1.IST;"一次性恢复所有的坏块。5)在缺省情况下,存在坏块的数据文件无法成功备份,也会导致自动备份脚本失败。考点RMAN5. 如果发现有坏块,那么如何检索其他未坏的数据?正确答案:首先需要找到坏块的ID(dbv工具可以实现),假设坏块ID为VBID>,文件编号为VFID>.运行下面的SQ1.语句查找段名:SE1.ECTSEGMENT_NAME,SEGMENT_TYPE,EXTENT_1D,B1.OCK_ID,B1.OCKSEROMDBA_EXTENTSTWHEREFI1.F-ID=<F11)>AND<BID>BETWEENB1.OCK,11)AND(B1.OCK,ID+B1.OCKS-1);找到标块所属的段名称,若段是一个表,则最好建立一个临时表,存放好的数据;若段是索引,则删除它,再重:建.CREATETAB1.EGOOD_TAB1.EASSE1.ECTFROMBADAB1.EWHEREROWIDNOTIN(SE1.ECTROWIDFROMBAD.TAB1.EWHERESUBSTR(ROWIf)t10,6)=<BID>);还可以使用诊断事件10231设置在全表扫描时跳过坏块,如下:SQ1.>A1.TERSYSTEMSETEVENTS,10231tracenamecontextforever,level10'然后创建一个临时表GooDJAB1.E,将原表中除坏块的数据都检索出来:SQ1.>CREATETAB1.EGoODJTAB1.ESSE1.ECT*FROMBADJAB1.E;最后关闭诊断事件:SQ1.>A1.TEKSYSTEMSETEVENTS,10231TRACENAMECONTEXTOFF'事件10231的说明如下:oraclerhel61hr-$OeRROK1023110231,00000,"skipcorruptedblockson_table_scans_*/*Action:suchblocksareskippedintablescans,andlistedintracefiles关于ROwID的结构,还nJ以参考DBvSROWlD.ROWIDCREATE函数。考点RMAN6. 1.ogMiner是什么?其有哪些用途?正确答案:1.ogMiner工具可以轻松获得Kedo日志文件(包含归档日志文件)中的具体内容,特别是该工具可以分析出所有对于数据库的DM1.操作(INSERT、UPDATE、DE1.ETE等)语句。Oracle9i后还可以分析DD1.语句,另外还可分析得到些必要的回滚SQ1.语句。1.ogMiner的一个最重要的用途就是不用全部恢复数据库就可以恢夏数据库的某个变化。该工具特别适用于调试、审计或者回退某个特定的事务。1.ogMincr工具既可以用来分析在线日志,也可以用来分析离线日志文件,既可以分析本身自己数据库的重做日志文件,也可以用来分析其他数据库的重做日志文件。当分析其他数据库的重做日志文件时,需要注意的是,1.ogMiner必须使用被分析数据库实例产生的字典文件,而不是安装1.ogMiner的数据库产生的字典文件,另外,必须保证安装1.ogviner数据库的字符集和被分析数据库的字符集相同。源数据库(SourceDatabaSe)平台必须和分析数据库(MiningDatabaSe)平台一样。Oracle通过1.ogMiner工具对Redo日志进行挖掘,显示出一系列可读的信息,该过程称为日志挖掘。1.ogViner通过V$1.oGMXRCONTENTS视图显示Redo日志中的信息。总的说来,1.ogMiner工具的主要用途有:1)跟踪数据库的变化。可以离线地跟踪数据库的变化,而不会影响在线系统的性能。2)回退数据库的变化。回退特定的变化数据,减少PointTn-TimCRecovery的执行。3)优化和扩容计划。可通过分析日志文件中的数据以分析数据的增长模式。4)确定数据库的逻辑损坏时间,准确定位操作执行的时间和SCNe5)确定事务级要执行的精细逻辑恢复操作,可以取得相应的Undo操作。6)执行后续审计。考点RMAN7. 1.ogMiner的数据字典分为哪几种?正确答案:为了完全地转换Rcdo日志中的内容,1.ogMiner需要访问一个数据库字典。1.ogMiner使用该字典将Oracle内部的对象标识符和数据类型转换为对象名称和外部的数据格式。没有字典,1.ogMiner将使用十六进制字符显示内部对象【D。1.ogMiner提供了3种提取字典文件的方式:1)将字典文件提取为一个FlatFile(平面文件或中间接口文件)。2)将字典文件提取为Redo日志。3)使用OnIineCatalOg(联机口志)。考点RMAN8. 1.ogMiner工具如何跟踪DD1.语句?正确答案:当1.ogMiner被启动时,它会自动创建自己的内部字典。如果源字典是FIatFiIe字典或Redo日志中的字典,则可以使用DDlj)ICTJRACKING参数来跟踪DD1.语句。DD1.跟踪默认是关闭的。为了打开这一句能,可以在启动1.ogVinCr时使用DD1._D【CT_TRACKING参数:SQ1.>EXECUTEDBMS1.OGMNRSTART1.OGMNR(OPTlONS=>DBMS1.OGMNR.DD1.DICTTRACKING):当使用DD1.DICTTRACKING时,需要注意如卜几点:1)当使用联机目录(OnIineCatalog)H,也就是当使用DICT_FROM_ON1.INE_CATA1.OG参数时,是不能使用DD1.DICTJ'RACKING选项的。2)使而DDkDlCTJRACKING时,要求数据库处宇OBEN状态。尽量为1.ogMiner的表提供一个单独的表空间。默认情况下1.ogMiner的表是创建在SYSTEM表空间中的。使用DBMS_1.OGMR_D.SETjrAB1.ESPACE可以在一个单独的表空间中重建这些1.ogMiner的袤:SQ1.>EXECUTEDBMS_1.OGMNR_D.SET_TAB1.ESPACEClogmnrts$');。考£RMAN9. 有哪些方法可以过滤1.ogMiner工具产生的数据?正确答案:可以使用COVMlTTED_DATA_O1.Y参数来只显示那些被提交的事务:SQ1.>EXECDBMS1.oGMNR.STARTI.0GMNR(0PTI0NS=>DBMSI.OGMNR.COMMITTEDDATAON1.Y);当使用这一参数时,1.ogMiner将所有的DM1.操作按照事务的关系组合在一起。这些事务按照它们被提交的顺序显示出来。可以使用SKIPloRR1.PTION参数来忽略Redo口志中的所有错误:SQ1.>EXECUTEDBMS,OGMNR.START_1.OGMNR(OPTIONS=>DBMS_1.OGMNR.SKIP_CORRUPTlON);可以使用STARTTIME和ENDTIME参数按照时间过滤数据,还可以使用Startscn和endscn参数按照scn来过滤数据:EXECDBMSJOGMNR.STARTJ.OGMNR(STARTSCN=>23573690,ENDSCN=>23632671,OPTIONS=>DBMS1.oGbNR.DICTFROMON1.INECATA1.oG+DBMS1.OGMNR.CONTINUOUSMINE):EXECDBMSI,OGMNR.START1.OGMNR(STARTTIME=>>2015-06-0311:10:12,ENDTIME=>>2015-06-0311:13:06,OPTIONS=>DBMS_1.OGMXR.DICTJ'ROM_ON1.INE_CATA1.OG+DBMS_1.OGMNR.CONTINUOUS_MINE);考扁RMAN10. 请描述1.ogMiner的操作步骤。正确答案:一个典型的1.ogMiner的操作包含如下步骤:1)进行初始化设置。开启附加日志,设置1.ogMiner的表空间,设置UTjFluU)IR参数的值。2)施取一个字典。将字典文件提取为FIaIFile或RCdo日志,或者直接使用OnlineCatalogo3)指定需要分析的Redo日志文件。利用DBMS1.OGMNR.ADD1.OGFl1.E来添加日志。4)开始1.ogMinero执行DBMS-1.MNR.STARTJOGMNR来启动1.ogMinere5)查询V$1.OGMNR.CONTENTS视图。6)结束1.ogViner。通过执行EXECUTEDBVSlOGMNR.END_1.oGMNR来结束分析。考点RMAN11. 什么是BBED?它有哪些作用?正确答案:BBED(BlockBrowcrandEditOr)是用来直接查看和修改OraCle数据块的一个内部工具,它可以直接修改OraCIC数据文件块的内容,在一些极端恢夏场景下比较有用。因为该工具不被OraClC服务支持,所以,默认是没有生成可执行文件的,在使用前需要编译生成。虽然BBED可以在数据库打开的状态卜进行修改,但是建议在做任何修改操作之前先关闭数据库,这样可以避免CHECKPOINT进程重写BBED对B1.OCK的修改,也避免Oracle在BBED修改完成之前读B1.OCK或声明B1.OCK为CORRUPT,从而导致一系列的ORA-600内部错误。BBED的默认密码为blockedit考点RMAN12. 如何查看Oracle数据库的字符集?正确答案:数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTERSET)和国家字符集(NATlOM1.CHARACTERSET)o国家字符集实质上是为OraCIe选择的附加字符集,主要作用是增强Oraele的字符处理能力。国家字符集在OraeIe9i中进行了重新定义,只能在UNICODE编码中的A1.16UTF16和UTF8中选择,默认值是1.16UTF16o有多种办法可以查看数据库的字符集,但是作者一般使用USERENV来查看数据库的字符集,如下:SYS©lhrdbSE1.ECTUSERENV.('1.ANGUAGE')数据库字符集FROMDUA1.;数据库字符集AMER1CAN_AMER1CA.ZHS16GBK另外,也司以通过如下的视图来获取Oracle的数据库字符集:SE1.ECT*FROMN1.S_DATABASE_PARAVETERS;一数据库服务器字符集,来源于PROPS$SE1.ECT*IROMN1.SINSTANCEPARAvETERS;一客户端字符集,来源于vsparmeterSE1.ECT*FROMN1.SSESSIONPARAMETERS;一会话字符集,来源于V$1.S_PARAMETERS,表示会话Fl己的设置,可能是会话的环境变量或者是由A1.TERSESSION完成,如果会话没有特殊的设置,将与N1.SNSTANCE_FARAMETERS一致SE1.ECT*1ROMVSN1.S.PARAMETERS;SE1.ECT*1ROMSYS.PROPSS;客户端的字符集要求与服务器一致,才能正确显示数据库的非ASCII字符。如果多个设置存在,那么优先级是A1.rERSESSIONA环境变量注册表参数文件。字符集要求一致,但是语言设置却可以不同。考点RMAN13. 如何查看Oracle支持哪些字符集?正确答案:可以杳询视图V$N1.S_VA1.ID_VA1.UES来获取OraeIC数据库支持的字符集,从下面的SQ1.可以看出大约支持200多种字符集:sseihr*>Selecttparametir.2 COUNT(T.VA1.UE)3 FROMVSN1.SM1.ID_VA1.UEST4 GROUPBYT跃RAMEE5 HAVINGCOUKniVA1.UE)>1;P三l三CaiXnT.VA1.因E67三l三98三87(HWCI三T247考点RMAN14. 如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?正确答案:总体来说有两种方式来获取:第一,利用系统包DBMS.METADATA包中的GET_DD1.函数来获取:第二,利用exp或expdp来获取。如果想去掉表的存储参数(例如,INITIA1.、NEXT、FREE1.ISTS等参数),那么可以使用DBMS.METADATA包中的函数SETjrRANSFORN1.PARAM(DBMS.METADATA.SESSION_TRANSFORM,STORAGE',FA1.SE)来完成。使用DBvSMETADATA.GETDD1.需要注毒以卜问题:DDBMSMETADATA.GETDD1.o包内的参数都要大写,否则会报ORA-31600:invalidinputvaluetableforparameterOBJECTTYPEinfunctionGETDD1.的错误。2)是否查的当前用户的DD1.语句,若不是则需要加上对象的属主信息即SCHEMA参数。3)若在SQ1.*Plus中显示不全,则需要Setlong99990考点RMAN15. 如何正确地删除式空间数据文件?正确答案:可以使用如下的命令删除一个表空间里的数据文件:A1.TERTAB1.ESPACETS_DD_1.HRDROPDATAFI1.En;-n为数据文件号A1.TERTAB1.ESPACETS_DD_1.HRDROPDATAFI1.E,/tmp/ts_dd_lhr01.dbf;关于该命令需要注意日下兀点:1)该语句会删除磁盘上的文件并更新控制文件和数据字典中的信息,删除之后的原数据文件序列号可以重用。2)该语句只能是在相关数据文件ON1.INE的时候才可以使用。如果对应的数据文件已经是OFF1.INE,那么仅针对字典管理表空间(Dictionary-ManagedTablespace,DMT)可用,而对于本地管理表空间(1.OCaIlyManagedTablespace,1.MT)不能使用,否则会报错“0R-03264:cannotdropofflinedatafiIeoflocallymanagedtablespace"。如果数据文件是RECoVER状态,那么该命令依然不能使用。3)不能删除一个表空间中第一个添加的数据文件,否则会报错,形如0RA-03263:cannotdropthefirstfileoftablespaceTS_DD_1.HR"°4)若一个表空间只包含一个数据文件,则不能删除该数据工件,否则会报错,形如“ORA-03261:thetablespaceTS_DD_1.HRhasonlyonefile"°5)数据文件必须为空,否则会报ORA-O3262:thefileisnon-empty0需要注意的是,non-empty的含义是有EXTENT被分配给了TAB1.E,而不是该TAB1.E中有无RowS,此时若是使用“DROPTAB1.EXXX;,是不行的,必须使用“DROPTAB1.EXXXPURGE;”或者在已经使用了mDROPTAB1.EXXX;"的情况下,再使用“PURGETAB1.E"XXX表在回收站中的名称";”来删除回收站中的该表,否则空间还是不释放,数据文件仍然不能DRoP。6)不能删除SYSTEM表空间的数据文件,否则报错“ORA-01541:systemtablespacecannotbebroughtoffiine;shutdownifnecessaryn。需要注意的是,据官方文档介绍说,处于READON1.Y状态的表空间数据文件也不能删除,但经过实验证明,其实是可以删除的。考点RMAN16. OFF1.INE和OFF1.INEDROP的区别有哪些?正确答案:在删除数据文件时可以使用如卜的命令(其中的“'FI1.ENAME'”也可以用文件号替代):A1.TERDATABASEDATAFI1.E,FI1.E_NAME'OFF1.INE:A1.TERDATABASEDTAHI1.E'FI1.E_NAME'OHE1.INEFORDROP;-FoR也可以省略需要注意的是,该命令不会删除数据文件,只是将数据文件的状态更改为RECOVEROOFF1.INEFORDROP命令相当于把一个数据文件置于离线状态,并且需要恢梵,并非删除数据文件。数据文件的相关信息还会存在数据字典和控制文件中。对于归档模式而言,“OFF1.INEFORDROP”和“OFF1.INE”没有什么区别,因为OraClC会忽略FORDROP选项,OFF1.INE之后还需要进行REa)VER才可以OX1.INEo对于非归档模式而言,只能执行“OFF1.INEFORDROPw0若不加FORDROP选项,则会报错"ORA-Ol145:offiineinunediatedisallowedunlessmediarecoveryenabled"因为非归档模式没有归档文件来进行RECOVER操作。如果OFF1.INE之后,速度足够快,联机Red。口志文件里的数据还没有被覆盖掉,那么在这种情况下,还是可以进行RECOVER操作的。考点RMAN17. OS级别删除了数据文件后如何恢复?正确答案:若使用了“A1.TERDATABASEDATA11I,ENOFF1.INEDROP;*,命令,则并不会删除数据文件,这个时候可以先ON1.INE后再用“A1.TERTAB1.ESPACEXXXDROPDATAFI1.EN;”删除。如果执行“A1.TERDATABASEDATAFI1.ENOFF1.INEDROP;"后并在OS级别删除了数据文件,那么首先需要使用A1.TERDATABASECREATEDATAFI1.ENS,tmptsddlhr02.dbf,来添加一个数据文件,然后再执行RECovER并ON1.lNE后再用“A1.TERTAB1.ESPACEXXXDROPDATAFI1.EN:"命令删除。如果产生的口志文件已经丢失,那么目标文件就不能再恢复了,这个时候只能删除表空间了,命令为“DROPTAB1.ESPACEXXXINC1.UDINGCONTENTSANDDATAFI1.ES;"°考点RMAN18. 与DRA相关的命令和视图有哪几个?正确答案:在RMAN中可以使用如下命令:Dlistfailure:列出DRA记录的故障。2)advisefailure:显示建议修复的选项。3)repairfailure:使用RMAN的建议和关闭故障。4)changefailure:更改状态或关闭故障。与DRA相关的视图有:DVSIRFAI1.URE:所有故障的列表,包括已关闭的故障(IiStfailure命令的结果)。2)VSIR!ANUA1._CHECK1.1ST:手动建议的列表(advisefailure命令的结果)。3)V$IR_REPAIR:修且列表(advisefailure命令的结果)。4) V$IR_FAI1.URE_SET:故障和建议标识符的交叉引用。考点RMAN19. 归档和非归档模式之间的不同点是什么?它们各自的优缺点是什么?正确答案:在OraCle据库操作中,数据库可以设置为归档模式和非归档模式。归档模式保存所有的事务日志,包括在线日志和归档日志,而非归档模式没有归档日志。归档模式是指可以备份所有的数据库事务并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点,但是非归档模式可以带来数据库性能上的少许提高,因为非归档模式没有归档口志。利用RMAN备份数据库,若是归档模式则可以在OPEN状态下备份,若是非归档模式则不能在OPEN状态下备份。考点RMAN20. 在控制文件丢失且无备份的情况下如何恢第?正确答案:重建控制文件,在重建控制文件之前,需要使用包DBMSjMCKUP_RESTORE来抽取数据文件,其实面试官主要想看求职者是否知道有这个包的存在而已。考点RMAN21. imp工具的ignore参数有什么作用?正确答案:OraCIe在恢复数据的过程中,当恢复某个表时,如果该表已经存在,就要根据ignore参数的设置来决定如何操作。若ignore为Y时,则Oracle不执行CREATETAB1.E语句,直接将数据插入表中。如果插入的记录违背了约束条件(例如主键约束),那么出错的记录不会插入,但合法的记录会添加到表中;若ignore为N时,则Oracle不执行CREATETAB1.E语句,同时也不会将数据插入表中,而是忽略该表的错误,继续恢熨下一个表,默认值为N。考点RMAN22. 在Undo表空间数据文件丢失的情况卜如何恢复?正确答案:恢复大约可以分为3种情况:有备份,这种情况下直接采用备份的文件进行恢复即可:无备份但是有完整的归档文件存在,这种情况下可以使用命令“A1.TERDATABASECREATEDATAFI1.E文件号AS,u01apporacleoradatalhrdbundotbs01.dbf'size50m;”来创建丢失的Und。文件,然后使用“RECOVERDATAFI1.E文件号;”进行数据库文件恢复即可;无备份,归档文件丢失,在这种情况下的恢熨比较熨杂。首先应该切换Undo表空间到一个新建的Undo表空间中,并设置原有表空间的管理模式为手动管理模式,然后将隐含参数“J)FF1.lNE_RO1.1.BACK_SEGMENTS”设置为TRUE,一些关键性的命令如下:AIJERSYSTEMSETUM)OJAB1.ESPACE=UNDoTBS2SCoPE=SPFI1.E;A1.TERSYSTEMSETUM)C1.MANAGEMENT=MANUA1.SCoPE=SPFI1.E;A1.TERSYSTEMSEzrJ)FF1.lNE_Ro1.1.BACK_SEGMENTS"=TRUESC0PD=SPFI1.E;A1.TERSYSTEMSET"CORRUPTEDRO1.I.BACKSEGMENTS*=*SYSSM1.1S,SYSSMU2$'SCoPE=SPFI1.E;CREATEUNDOTAB1.ESPACEUNDOTBS1DTFI1.E,u03apporacte/oradata/ora1024gundotbs01.dbf,SIZE50MUTOEXTENDON;A1.TERSYSTEMSETUM(1.TAB1.ESPACE=UNDOTESlSCoPE=SPFI1.E;A1.TERSYSTEMSETUNDO_MANAGEMENT=AUTOSCOPE=SPEI1.E;A1.TERSYSTEMRESET*_OBF1.1NE_RO1.1.BACK_SEGMENTS*SCOPE=SPEI1.ESID='*'A1.TERSYSTEMRESET"CORRUPTED.ROU,BACK_SEGMENTS"SCOPE=SPFI1.ESID='*'考点RMAN23. RMN可以跨版本或跨平台执行还原或复制命令吗?正确答案:一般会被问到,能使用更高版本的Oracle还原或复制旧版本的数据库吗?答案是可以跨高版本恢复,但是有很多限制条件,而且不支持RMAN夏制(Duplicate),因为该功能会在恢复之后尝试自动打开数据库时失败。RMAX可将在较旧的数据库版本上进行的备份还原到较新的版本中,但是旧的备份必须是在9.2或更高版本的数据库中进行的。对于跨小版本的恢复很容易,例如从11.2.0.1恢熨到I1.2.0.3版本的数据库,可以依次还原SPFl1.E、控制文件和数据文件,然后恢熨数据库,使用STARTUPUPGRADE命令打开数据库,最后使用CatUPgrd.sql脚本对失效的对象进行编译即可。对于跨大版本的恢熨有很多限制条件,例如从102.0.2恢复到11.2.0.3版本的数据库,恢复步骤和小版本一样,打开数据库的时候可以使用命令:"A1.TERDATABASEOPENRESET1.OGSUPGRADE;,.将OraCIeIOg恢复到OraCIellg±,需要满足2个条件:必须在OraCIeIog上先执行脚本“?/rdbms/admin/UtIUII2i.sql”,然后再进行备份,否则RESTORE之后的升级将失败;OraeleIOg的版本必须大于10.2.0.2,即Oracle采用RMAN恢复到高版本的数据库依然要遵循Oracle数据库的升级流程图,如下图所示。需要注意的是,与此相似的问题,还有如卜几个:DRMAN支持在两个不同的补程序集之间进行还原或复制吗?答案是支持,该情况和上面介绍的RMAN的跨版本恢复是一样的。2)RMAN支持在同一操作系统的不同版本之间进行还原或复制吗?答案是支持。3)OracIe的位(bit)级别(32位或64位)不匹配时,可以进行还原或复制吗?在执行还原或恢复时,最好保持相同的位版本。但是,除使用复制命令(duplicate)外,使用相同的操作系统平台允许在Oracle位级别(32位或64位)之间进行还原和核熨。需要注意的是,这可能只适用于特定的操作系统,例如Windows.1.inuxo如果要使用32位软件运行64位数据库(或反之),那么在恢复结束之后必须要使用utlirp.sq1脚本转换数据库位版本。如果不运行UtIirP.sql脚本,那么将会出现错误"ORA-06553:P1.S-801:INTERNA1.ERROR56319,04)可以将更高版本的备份还原到较早版本的Oracle吗?例如,把数据库从10.2升级至11.2之后,在成功升级并在I1.2上运行几天之后,并对11.2数据库进行了新的备份。这时,能否将I1.2的备份集恢复到10.2版本的数据库中吗?答案是,如果在升级后从未增加COMP