数据库程序员面试分类真题19_第1页
数据库程序员面试分类真题19_第2页
数据库程序员面试分类真题19_第3页
数据库程序员面试分类真题19_第4页
数据库程序员面试分类真题19_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

数据库程序员面试分类真题19简答题1.

Oracle中的坏块指的是什么?正确答案:Oracle数据文件的坏块可以分为物理坏块和逻辑坏块。物理坏块指的是块格式本身已经损坏,块内的数据没有任何意义;逻(江南博哥)辑坏块指的是块内的数据在逻辑上存在问题,比如索引块的索引值没有按顺序排列导致的逻辑坏块。物理坏块一般是由于内存问题、OS问题、I/O子系统问题或硬件引起的,逻辑坏块一般是由OracleBug等原因引起的。

坏块通常是通过Oracle的ORA-01578错误报告出来的,详细的损坏描述会在告警日志中打印出来。可能的报错如下:

ORA-01578:ORACLEdatablockcorrupted(file#6,block#11)

ORn-01110:datafile6:'/u01/app/oracte/oradata/orcl/tbs01.dbf'

那么何时进行数据块的一致性检查呢?当一个数据块被读或写的时候,将对块进行一致性检查,检查的内容包括块的版本、比较块在Cache和BlockBuffer中的数据块地址,然后根据要求进行校验(Checksum)。

块的一致性检查由DB_BLOCK_CHECKSUM和DB_BLOCK_CHECKING两个初始化参数控制。DB_BLOCK_CHECKSUM是一种物理检查,只有在写入(DBWn常规写或用户进程直接路径写入)数据文件时,根据一个CHECKSUM算法计算数据块的校验和,然后写入数据块的一个特定位置,在读取块时再进行检验,主要是为了防止I/O硬件和I/O子系统的错误。DB_BLOCK_CHECKING参数主要用于数据块的逻辑一致性检查,但只是在块内,不包括块间的逻辑检查,用于防止在内存中损坏或数据损坏。[考点]RMAN

2.

Oracle中的坏块有哪些检测方法?正确答案:坏块的检测方法主要包括下表所示的几种。

[考点]RMAN

3.

BMR如何恢复坏块?正确答案:如果数据库只有很少的数据块被破坏,那么块介质恢复(BlockMediaRecovery,BMR)是较好的块恢复方法。BMR只能用于恢复物理损坏(PhysicalCorruptions),在数据文件联机时即可恢复相关坏块。BMR主要使用BLOCKRECOVER命令恢复坏块,该命令有以下三种使用方式:

1)使用“BLOCKRECOVERCORRUPTIONLIST;”命令恢复在V$DATABASE_BLOCK_CORRUPTION视图中报告的所有块。

2)使用“BLOCKRECOVERDATAFILE1BLOCK10;”命令恢复单个块,需要指定文件号和块号。

3)使用“BLOCKRECOVERTABLESPACETS_USERDBAXXX;”命令恢复某个表空间的坏块,需要指定表空间和数据块地址。

下面给出几个恢复示例。

①恢复3个数据文件的损坏块:

RMAN>BLOCKRECOVERDATAFILE2BLOCK12,13DATAFILE3BLOCK5,23,24DATAFILE4BLOCK20;

②从数据文件拷贝中恢复一系列块:

BLOCKRECOVERDATAFILE3BLOCK2,3,4TABLESPACEts_userDBA4194405,4194409,4194412fromDATAFILECOPY;

③从指定的TAG备份中恢复块:

RMAN>BLOCKRECOVERTABLESPACESYSTEMDBA4194404,4194405FROMTAG"weekly_backup";

④从用于恢复数据到两天以前的备份中还原、恢复SYSTEM表空间中的两个块:

RMAN>BLOCKRECOVERTABLESPACESYSTEMDBA4194404,4194405RESTOREUNTILTIME'sysdate-2';

⑤运行备份验证数据库,修复在V$DATABASE_BLOCK_CORRUPTION中记录的所有损坏块:

RMAN>BACKUPVALIDATEDATABASE;

RMAN>BLOCKRECOVERCORRUPTIONLIST;[考点]RMAN

4.

如何确定坏块的对象名?正确答案:根据绝对文件号和块号确定数据块对象的SQL语句如下:

SELECTTABLESPACE_NAME,SEGMENT_TYPE,OWNER,SEGMENT_NAME,PARTITION_NAME

FROM

DBA_EXTENTSWHERE

FILE_ID=&FILE_IDAND&BLOCK_IDBETWEENBLOCK_IDANDBLOCK_ID+BLOCKS-1;

如下的SQL可以确定段占用的数据块:

SELECTDBMS_ROWID.ROWID_OBJECT(ROWID)OBJECT_ID,DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID)FILE_ID,

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)BLOCK_ID,

COUNT(1)COUNTS

FROMLHR.T_BC_LHRD

GROUPBYDBMS_ROWID.ROWID_OBJECT(ROWID),DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID),DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)

ORDERBYDBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID);

关于坏块需要注意以下几点:

1)对于受损的数据块,仅仅坏块上的数据无法被查询或读取,其余正常块的数据依旧可以使用。

2)对于受损的表对象进行聚合等相关运算时会收到错误提示,因为坏块上的数据无法被统计。

3)可以基于RMAN的备份文件实现块介质恢复,其数据文件无须OFFLINE,开销最小,影响最小。

4)对于多个数据块的损坏,先执行BACKUPVALIDATE校验数据库或相应的数据文件以便标记受损的坏块后,填充V$DATABASE_BLOCK_CORRUPTION后再使用命令“BLOCKREcovERCORRUPTIONLIST;”一次性恢复所有的坏块。

5)在缺省情况下,存在坏块的数据文件无法成功备份,也会导致自动备份脚本失败。[考点]RMAN

5.

如果发现有坏块,那么如何检索其他未坏的数据?正确答案:首先需要找到坏块的ID(dbv工具可以实现),假设坏块ID为<BID>,文件编号为<FID>。运行下面的SQL语句查找段名:

SELECTSEGMENT_NAME,SEGMENT_TYPE,EXTENT_ID,BLOCK_ID,BLOCKS

FROMDBA_EXTENTST

WHEREFILF_ID=<FID>AND<BID>BETWEENBLOCK_IDAND(BLOCK_ID+BLOCKS-1);

找到坏块所属的段名称,若段是一个表,则最好建立一个临时表,存放好的数据;若段是索引,则删除它,再重建。

CREATETABLEGOOD_TABLEASSELECTFROMBAD_TABLEWHEREROWIDNOTIN(SELECTROWIDFROMBAD_TABLEWHERESUBSTR(ROWID,10,6)=<BID>);

还可以使用诊断事件10231设置在全表扫描时跳过坏块,如下:

SQL>ALTERSYSTEMSETEVENTS'10231tracenamecontextforever,level10';

然后创建一个临时表GOOD_TABLE,将原表中除坏块的数据都检索出来:

SQL>CREATETABLEGOOD_TABLEASSELECT*FROMBAD_TABLE;

最后关闭诊断事件:

SQL>ALTERSYSTEMSETEVENTS'10231TRACENAMECONTEXTOFF';

事件10231的说明如下:

[oracle@rhe161hr~]$OeRRORA10231

10231,00000,"skipcorruptedblockson_table_scans_"

//*Action:suchblocksareskippedintablescans,andlistedintracefiles

关于ROWID的结构,还可以参考DBMS_ROWID.ROWID_CREATE函数。[考点]RMAN

6.

LogMiner是什么?其有哪些用途?正确答案:LogMiner工具可以轻松获得Redo日志文件(包含归档日志文件)中的具体内容,特别是该工具可以分析出所有对于数据库的DML操作(INSERT、UPDATE、DELETE等)语句。Oracle9i后还可以分析DDL语句,另外还可分析得到一些必要的回滚SQL语句。LogMiner的一个最重要的用途就是不用全部恢复数据库就可以恢复数据库的某个变化。该工具特别适用于调试、审计或者回退某个特定的事务。

LogMiner工具既可以用来分析在线日志,也可以用来分析离线日志文件,既可以分析本身自己数据库的重做日志文件,也可以用来分析其他数据库的重做日志文件。当分析其他数据库的重做日志文件时,需要注意的是,LogMiner必须使用被分析数据库实例产生的字典文件,而不是安装LogMiner的数据库产生的字典文件,另外,必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。源数据库(SourceDatabase)平台必须和分析数据库(MiningDatabase)平台一样。

Oracle通过LogMiner工具对Redo日志进行挖掘,显示出一系列可读的信息,该过程称为日志挖掘。LogMiner通过V$LOGMNR_CONTENTS视图显示Redo日志中的信息。

总的说来,LogMiner工具的主要用途有:

1)跟踪数据库的变化。可以离线地跟踪数据库的变化,而不会影响在线系统的性能。

2)回退数据库的变化。回退特定的变化数据,减少Point-In-TimeRecovery的执行。

3)优化和扩容计划。可通过分析日志文件中的数据以分析数据的增长模式。

4)确定数据库的逻辑损坏时间,准确定位操作执行的时间和SCN。

5)确定事务级要执行的精细逻辑恢复操作,可以取得相应的Undo操作。

6)执行后续审计。[考点]RMAN

7.

LogMiner的数据字典分为哪几种?正确答案:为了完全地转换Redo日志中的内容,LogMiner需要访问一个数据库字典。LogMiner使用该字典将Oracle内部的对象标识符和数据类型转换为对象名称和外部的数据格式。没有字典,LogMiner将使用十六进制字符显示内部对象ID。LogMiner提供了3种提取字典文件的方式:

1)将字典文件提取为一个FlatFile(平面文件或中间接口文件)。

2)将字典文件提取为Redo日志。

3)使用OnlineCatalog(联机日志)。[考点]RMAN

8.

LogMiner工具如何跟踪DDL语句?正确答案:当LogMiner被启动时,它会自动创建自己的内部字典。如果源字典是FlatFile字典或Redo日志中的字典,则可以使用DDL_DICT_TRACKING参数来跟踪DDL语句。DDL跟踪默认是关闭的。为了打开这一功能,可以在启动LogMiner时使用DDL_DICT_TRACKING参数:

SQL>EXECUTEDBMS_LOGMNRSTART_LOGMNR(OPTIONS=>DBMS_LOGMNR.DDL_DICT_TRACKING);

当使用DDL_DICT_TRACKING时,需要注意如下几点:

1)当使用联机目录(OnlineCatalog)时,也就是当使用DICT_FROM_ONLINE_CATALOG参数时,是不能使用DDL_DICT_TRACKING选项的。

2)使用DDL_DICT_TRACKING时,要求数据库处于OPEN状态。

尽量为LogMiner的表提供一个单独的表空间。默认情况下LogMiner的表是创建在SYSTEM表空间中的。使用DBMS_LOGMNR_D.SET_TABLESPACE可以在一个单独的表空间中重建这些LogMiner的表:SQL>EXECUTEDBMS_LOGMNR_D.SET_TABLESPACE('logmnrts$');。[考点]RMAN

9.

有哪些方法可以过滤LogMiner工具产生的数据?正确答案:可以使用COMMITTED_DATA_ONLY参数来只显示那些被提交的事务:

SQL>EXECDBMS_LOGMNR.START_LOGMNR(OPTIONS=>DBMS_LOGMNR.COMMITTED_DATA_ONLY);

当使用这一参数时,LogMiner将所有的DML操作按照事务的关系组合在一起。这些事务按照它们被提交的顺序显示出来。可以使用SKIP_CORRUPTION参数来忽略Redo日志中的所有错误:

SQL>EXECUTEDBMS_LOGMNR.START_LOGMNR(OPTIONS=>DBMS_LOGMNR.SKIP_CORRUPTION);

可以使用STARTTIME和ENDTIME参数按照时间过滤数据,还可以使用STARTSCN和ENDSCN参数按照SCN来过滤数据:

EXECDBMS_LOGMNR.START_LOGMNR(STARTSCN=>23573690,ENDSCN=>23632671,OPTIONS=>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG+DBMS_LOGMNR.CONTINUOUS_MINE);

EXECDBMS_LOGMNR.START_LOGMNR(STARTTIME=>'2015-06-0311:10:12',ENDTIME=>'2015-06-0311:13:06',OPTIONS=>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG+DBMS_LOGMNR.CONTINUOUS_MINE);[考点]RMAN

10.

请描述LogMiner的操作步骤。正确答案:一个典型的LogMiner的操作包含如下步骤:

1)进行初始化设置。开启附加日志,设置LogMiner的表空间,设置UTL_FILE_DIR参数的值。

2)提取一个字典。将字典文件提取为FlatFile或Redo日志,或者直接使用OnlineCatalog。

3)指定需要分析的Redo日志文件。利用DBMS_LOGMNR.ADD_LOGFILE来添加日志。

4)开始LogMiner。执行DBMS_LOGMNR.START_LOGMNR来启动LogMiner。

5)查询V$LOGMNR_CONTENTS视图。

6)结束LogMiner。通过执行EXECUTEDBMS_LOGMNR.END_LOGMNR来结束分析。[考点]RMAN

11.

什么是BBED?它有哪些作用?正确答案:BBED(BlockBrowerandEditor)是用来直接查看和修改Oracle数据块的一个内部工具,它可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有用。因为该工具不被Oracle服务支持,所以,默认是没有生成可执行文件的,在使用前需要编译生成。

虽然BBED可以在数据库打开的状态下进行修改,但是建议在做任何修改操作之前先关闭数据库,这样可以避免CHECKPOINT进程重写BBED对BLOCK的修改,也避免Oracle在BBED修改完成之前读BLOCK或声明BLOCK为CORRUPT,从而导致一系列的ORA-600内部错误。

BBED的默认密码为blockedit。[考点]RMAN

12.

如何查看Oracle数据库的字符集?正确答案:数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTERSET)和国家字符集(NATIONALCHARACTERSET)。国家字符集实质上是为Oracle选择的附加字符集,主要作用是增强Oracle的字符处理能力。国家字符集在Oracle9i中进行了重新定义,只能在UNICODE编码中的AL16UTF16和UTF8中选择,默认值是AL16UTF16。

有多种办法可以查看数据库的字符集,但是作者一般使用USERENV来查看数据库的字符集,如下:

SYS@lhrdb>SELECTUSERENV('LANGUAGE')数据库字符集FROMDUAL;

数据库字符集

------------------------------

AMERICAN_AMERICA.ZHS16GBK

另外,也可以通过如下的视图来获取Oracle的数据库字符集:

SELECT*FROMNLS_DATABASE_PARAMETERS;--数据库服务器字符集,来源于PROPS$

SELECT*FROMNLS_INSTANCE_PARAMETERS;--客户端字符集,来源于V$PARAMETER

SELECT*FROMNLS_SESSION_PARAMETERS;--会话字符集,来源于V$NLS_PARAMETERS,表示会话自己的设置,可能是会话的环境变量或者是由ALTERSESSION完成,如果会话没有特殊的设置,将与NLS_INSTANCE_FARAMETERS一致

SELECT*FROMV$NLS_PARAMETERS;

SELECT*FROMSYS.PROPS$;

客户端的字符集要求与服务器一致,才能正确显示数据库的非ASCII字符。如果多个设置存在,那么优先级是ALTERSESSION>环境变量>注册表>参数文件。字符集要求一致,但是语言设置却可以不同。[考点]RMAN

13.

如何查看Oracle支持哪些字符集?正确答案:可以查询视图V$NLS_VALID_VALUES来获取Oracle数据库支持的字符集,从下面的SQL可以看出大约支持200多种字符集:

[考点]RMAN

14.

如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?正确答案:总体来说有两种方式来获取:第一,利用系统包DBMS_METADATA包中的GET_DDL函数来获取;第二,利用exp或expdp来获取。

如果想去掉表的存储参数(例如,INITIAL、NEXT、FREELISTS等参数),那么可以使用DBMS_METADATA包中的函数SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',FALSE)来完成。使用DBMS_METADATA.GET_DDL需要注意以下问题:

1)DBMS_METADATA.GET_DDL()包内的参数都要大写,否则会报ORA-31600:invalidinputvaluetableforparameterOBJECT_TYPEinfunctionGET_DDL的错误。

2)是否查的当前用户的DDL语句,若不是则需要加上对象的属主信息即SCHEMA参数。

3)若在SQL*Plus中显示不全,则需要setlong9999。[考点]RMAN

15.

如何正确地删除表空间数据文件?正确答案:可以使用如下的命令删除一个表空间里的数据文件:

ALTERTABLESPACETS_DD_LHRDROPDATAFILEn;--n为数据文件号

ALTERTABLESPACETS_DD_LHRDROPDATAFILE'/tmp/ts_dd_lhr01.dbf;

关于该命令需要注意以下几点:

1)该语句会删除磁盘上的文件并更新控制文件和数据字典中的信息,删除之后的原数据文件序列号可以重用。

2)该语句只能是在相关数据文件ONLINE的时候才可以使用。如果对应的数据文件已经是OFFLINE,那么仅针对字典管理表空间(Dictionary-ManagedTablespace,DMT)可用,而对于本地管理表空间(LocallyManagedTablespace,LMT)不能使用,否则会报错“ORA-03264:cannotdropoffiinedatafileoflocallymanagedtablespace”。如果数据文件是RECOVER状态,那么该命令依然不能使用。

3)不能删除一个表空间中第一个添加的数据文件,否则会报错,形如“ORA-03263:cannotdropthefirstfileoftablespaceTS_DD_LHR”。

4)若一个表空间只包含一个数据文件,则不能删除该数据文件,否则会报错,形如“ORA-03261:thetablespaceTS_DD_LHRhasonlyonefile”。

5)数据文件必须为空,否则会报ORA-03262:thefileisnon-empty。需要注意的是,non-empty的含义是有EXTENT被分配给了TABLE,而不是该TABLE中有无ROWS,此时若是使用“DROPTABLEXXX;”是不行的,必须使用“DROPTABLEXXXPURGE;”或者在已经使用了“DROPTABLEXXX;”的情况下,再使用“PURGETABLE"XXX表在回收站中的名称";”来删除回收站中的该表,否则空间还是不释放,数据文件仍然不能DROP。

6)不能删除SYSTEM表空间的数据文件,否则报错“ORA-01541:systemtablespacecannotbebroughtoffiine;shutdownifnecessary”。

需要注意的是,据官方文档介绍说,处于READONLY状态的表空间数据文件也不能删除,但经过实验证明,其实是可以删除的。[考点]RMAN

16.

OFFLINE和OFFLINEDROP的区别有哪些?正确答案:在删除数据文件时可以使用如下的命令(其中的“'FILE_NAME'”也可以用文件号替代):

ALTERDATABASEDATAFILE'FILE_NAME'OFFLINE;

ALTERDATABASEDATAFILE'FILE_NAME'OFFLINEFORDROP;--FOR也可以省略

需要注意的是,该命令不会删除数据文件,只是将数据文件的状态更改为RECOVER。OFFLINEFORDROP命令相当于把一个数据文件置于离线状态,并且需要恢复,并非删除数据文件。数据文件的相关信息还会存在数据字典和控制文件中。

对于归档模式而言,“OFFLINEFORDROP”和“OFFLINE”没有什么区别,因为Oracle会忽略FORDROP选项,OFFLINE之后还需要进行RECOVER才可以ONLINE。

对于非归档模式而言,只能执行“OFFLINEFORDROP”。若不加FORDROP选项,则会报错“ORA-01145:offiineimmediatedisallowedunlessmediarecoveryenabled”。因为非归档模式没有归档文件来进行RECOVER操作。如果OFFLINE之后,速度足够快,联机Redo日志文件里的数据还没有被覆盖掉,那么在这种情况下,还是可以进行RECOVER操作的。[考点]RMAN

17.

OS级别删除了数据文件后如何恢复?正确答案:若使用了“ALTERDATABASEDATAFILENOFFLINEDROP;”命令,则并不会删除数据文件,这个时候可以先ONLINE后再用“ALTERTABLESPACEXXXDROPDATAFILEN;”删除。如果执行“ALTERDATABASEDATAFILENOFFLINEDROP;”后并在OS级别删除了数据文件,那么首先需要使用“ALTERDATABASECREATEDATAFILENAS'/tmp/ts_dd_lhr02.dbf';”来添加一个数据文件,然后再执行RECOVER并ONLINE后再用“ALTERTABLESPACEXXXDROPDATAFILEN:”命令删除。如果产生的日志文件已经丢失,那么目标文件就不能再恢复了,这个时候只能删除表空间了,命令为“DROPTABLESPACEXXXINCLUDINGCONTENTSANDDATAFILES;”。[考点]RMAN

18.

与DRA相关的命令和视图有哪几个?正确答案:在RMAN中可以使用如下命令:

1)listfailure:列出DRA记录的故障。

2)advisefailure:显示建议修复的选项。

3)repairfailure:使用RMAN的建议和关闭故障。

4)changefailure:更改状态或关闭故障。

与DRA相关的视图有:

1)V$IR_FAILURE:所有故障的列表,包括已关闭的故障(listfailure命令的结果)。

2)VSIR_MANUAL_CHECKLIST:手动建议的列表(advisefailure命令的结果)。

3)V$IR_REPAIR:修复列表(advisefailure命令的结果)。

4)V$IR_FAILURE_SET:故障和建议标识符的交叉引用。[考点]RMAN

19.

归档和非归档模式之间的不同点是什么?它们各自的优缺点是什么?正确答案:在Oracle数据库操作中,数据库可以设置为归档模式和非归档模式。归档模式保存所有的事务日志,包括在线日志和归档日志,而非归档模式没有归档日志。归档模式是指可以备份所有的数据库事务并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点,但是非归档模式可以带来数据库性能上的少许提高,因为非归档模式没有归档日志。利用RMAN备份数据库,若是归档模式则可以在OPEN状态下备份,若是非归档模式则不能在OPEN状态下备份。[考点]RMAN

20.

在控制文件丢失且无备份的情况下如何恢复?正确答案:重建控制文件,在重建控制文件之前,需要使用包DBMS_BACKUP_RESTORE来抽取数据文件,其实面试官主要想看求职者是否知道有这个包的存在而已。[考点]RMAN

21.

imp工具的ignore参数有什么作用?正确答案:Oracle在恢复数据的过程中,当恢复某个表时,如果该表已经存在,就要根据ignore参数的设置来决定如何操作。若ignore为Y时,则Oracle不执行CREATETABLE语句,直接将数据插入表中。如果插入的记录违背了约束条件(例如主键约束),那么出错的记录不会插入,但合法的记录会添加到表中;若ignore为N时,则Oracle不执行CREATETABLE语句,同时也不会将数据插入表中,而是忽略该表的错误,继续恢复下一个表,默认值为N。[考点]RMAN

22.

在Undo表空间数据文件丢失的情况下如何恢复?正确答案:恢复大约可以分为3种情况:①有备份,这种情况下直接采用备份的文件进行恢复即可;②无备份但是有完整的归档文件存在,这种情况下可以使用命令“ALTERDATABASECREATEDATAFILE文件号AS'/u01/app/oracle/oradata/lhrdb/undotbs01.dbf'size50m;”来创建丢失的Undo文件,然后使用“RECOVERDATAFILE文件号;”进行数据库文件恢复即可;③无备份,归档文件丢失,在这种情况下的恢复比较复杂。首先应该切换Undo表空间到一个新建的Undo表空间中,并设置原有表空间的管理模式为手动管理模式,然后将隐含参数“_OFFLINE_ROLLBACK_SEGMENTS”设置为TRUE,一些关键性的命令如下:

ALTERSYSTEMSETUNDO_TABLESPACE=UNDOTBS2SCOPE=SPFILE;

ALTERSYSTEMSETUNDO_MANAGEMENT=MANUALSCOPE=SPFILE;

ALTERSYSTEMSET"_OFFLINE_ROLLBACK_SEGMENTS"=TRUESCOPD=SPFILE;

ALTERSYSTEMSET"_CORRUPTED_ROLLBACK_SEGMENTS"='_SYSSMU1$','_SYSSMU2$'SCOPE=SPFILE;

CREATEUNDOTABLESPACEUNDOTBS1DATAFILE'/u03/app/oracte/oradata/ora1024g/undotbs01.dbf'SIZE50MAUTOEXTENDON;

ALTERSYSTEMSETUNDO_TABLESPACE=UNDOTES1

SCOPE=SPFILE;

ALTERSYSTEMSETUNDO_MANAGEMENT=AUTO

SCOPE=SPFILE;

ALTERSYSTEMRESET"_OFFLINE_ROLLBACK_SEGMENTS"SCOPE=SPFILESID='*';

ALTERSYSTEMRESET"_CORRUPTED_ROLLBACK_SEGMENTS"SCOPE=SPFILESID='*';[考点]RMAN

23.

RMAN可以跨版本或跨平台执行还原或复制命令吗?正确答案:一般会被问到,能使用更高版本的Oracle还原或复制旧版本的数据库吗?答案是可以跨高版本恢复,但是有很多限制条件,而且不支持RMAN复制(Duplicate),因为该功能会在恢复之后尝试自动打开数据库时失败。RMAN可将在较旧的数据库版本上进行的备份还原到较新的版本中,但是旧的备份必须是在9.2或更高版本的数据库中进行的。对于跨小版本的恢复很容易,例如从恢复到版本的数据库,可以依次还原SPFILE、控制文件和数据文件,然后恢复数据库,使用STARTUPUPGRADE命令打开数据库,最后使用catupgrd.sql脚本对失效的对象进行编译即可。对于跨大版本的恢复有很多限制条件,例如从恢复到版本的数据库,恢复步骤和小版本一样,打开数据库的时候可以使用命令:“ALTERDATABASEOPENRESETLOGSUPGRADE;”。将Oracle10g恢复到Oracle11g上,需要满足2个条件:①必须在Oracle10g上先执行脚本“@?/rdbms/admin/utlu112i.sql”,然后再进行备份,否则RESTORE之后的升级将失败;②Oracle10g的版本必须大于,即Oracle采用RMAN恢复到高版本的数据库依然要遵循Oracle数据库的升级流程图,如下图所示。

需要注意的是,与此相似的问题,还有如下几个:

1)RMAN支持在两个不同的补丁程序集之间进行还原或复制吗?答案是支持,该情况和上面介绍的RMAN的跨版本恢复是一样的。

2)RMAN支持在同一操作系统的不同版本之间进行还原或复制吗?答案是支持。

3)Oracle的位(bit)级别(32位或64位)不匹配时,可以进行还原或复制吗?在执行还原或恢复时,最好保持相同的位版本。但是,除使用复制命令(duplicate)外,使用相同的操作系统平台允许在Oracle位级别(32位或64位)之间进行还原和恢复。需要注意的是,这可能只适用于特定的操作系统,例如Windows、Linux。如果要使用32位软件运行64位数据库(或反之),那么在恢复结束之后必须要使用utlirp.sql脚本转换数据库位版本。如果不运行utlirp.sql脚本,那么将会出现错误“ORA-06553:PLS-801:INTERNALERROR[56319]”。

4)可以将更高版本的备份还原到较早版本的Oracle吗?例如,把数据库从10.2升级至11.2之后,在成功升级并在11.2上运行几天之后,并对11.2数据库进行了新的备份。这时,能否将11.2的备份集恢复到10.2版本的数据库中吗?答案是,如果在升级后从未增加COMPATIBLE参数,那么可以进行此类还原。在本例中,如果11.2数据库始终是在COMPATIBLE为10.2的情况下运行,那么可以将11.2数据库的备份还原到10.2实例中,然后再执行降级过程(ALTERDATABASEOPENRESETLOGSDOWNGRADE;)。如果数据库已经在COMPATIBLE为11.2的

温馨提示

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

最新文档

评论

0/150

提交评论