没腿的鸟 发表于 2024-6-14 21:59:02

Oracle面试总结

1.体系结构

1.1 DATA BLOCK,EXTENT和SEGMENT的区别是什么?

答案:DATA BLOCK是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的DATA BLOCK就构成了EXTENT。一个数据库对象拥有的全部EXTENT被称为该对象的SEGMENT。
1.2 在Oracle中,数据块、Redo日志块及控制文件数据块的大小分别是多少?如何查询?

1)数据块(Data Block),是读写数据文件的最小单元,默认是8KB,可以通过SQL语句“SELECT FILE#,NAME,BLOCK_SIZE FROM V                                 D                         A                         T                         A                         F                         I                         L                         E                         ;                         ”查询,单元为                         B                         Y                         T                         E                         。                         2                         )                         R                         e                         d                         o                         日志数据块(                         R                         e                         d                         o                         L                         o                         g                         B                         l                         o                         c                         k                         ),大小一般即是操纵系统的系统块的大小,一般为                         512                         或                         4096                         ,可以通过                         S                         Q                         L                         语句“                         S                         E                         L                         E                         C                         T                         B                         L                         O                         C                         K                         S                         I                         Z                         E                         F                         R                         O                         M                         V                              DATAFILE;”查询,单元为BYTE。 2)Redo日志数据块(Redo Log Block),大小一般即是操纵系统的系统块的大小,一般为512或4096 ,可以通过 SQL语句“SELECT BLOCKSIZE FROM V                  DATAFILE;”查询,单元为BYTE。2)Redo日志数据块(RedoLogBlock),大小一般即是操纵系统的系统块的大小,一般为512或4096,可以通过SQL语句“SELECTBLOCKSIZEFROMVLOG;”或“SELECT LEBSZ FROM X                                 K                         C                         C                         L                         E                         ;                         ”查询,单元为                         B                         Y                         T                         E                         。                         3                         )控制文件数据块(                         C                         o                         n                         t                         r                         o                         l                         F                         i                         l                         e                         B                         l                         o                         c                         k                         ),默认为                         16                         K                         B                         ,可以通过                         S                         Q                         L                         语句“                         S                         E                         L                         E                         C                         T                         B                         L                         O                         C                                 K                            S                                  I                         Z                         E                         F                         R                         O                         M                         V                              KCCLE;”查询,单元为BYTE。 3)控制文件数据块(Control File Block),默认为16KB,可以通过SQL语句“SELECT BLOCK_SIZE FROM V                  KCCLE;”查询,单元为BYTE。3)控制文件数据块(ControlFileBlock),默认为16KB,可以通过SQL语句“SELECTBLOCKS​IZEFROMVCONTROLFILE;”查询,单元为BYTE。
1.3 行链接和行迁徙有什么区别?

答案:当一行的数据过长而不能存储在单个数据块中时,可能发生两种事变:行链接(Row Chaining)或行迁徙(Row Migration)。
1)行链接(Row Chaining):当第一次插入行时,由于行太长而不能容纳在一个数据块中时,就会发生行链接。在这种情况下,Oracle会利用与该块链接的一个或多个数据块来容纳该行的数据。行链接常常在插入比较大的行时才会发生,比方包含LONG、LONG ROW、LOB等类型的数据。在这些情况下,行链接是不可制止的。行链接通常由INSERT操纵引起。
2)行迁徙(Row Migration):当一个行上的更新操纵导致当前的数据增长以致于不能再容纳在当前块,这个时间就需要举行行迁徙,在这种情况下,Oracle将会迁徙整行数据到一个新的数据块中。一个行迁徙意味着整行数据都将会移动,原始的数据块上仅仅保存的是指向新块的一个地点信息。发生行迁徙的时间行的ROWID不会改变。行迁徙的情况主要是由于表上的PCTFREE参数设置过小导致,以是必须设置一个合适的PCTFREE参数。可以利用exp/imp工具导入导出来处理行迁徙。行迁徙通常由UPDATE操纵引起。
1.4 如何解决ORA-04030和ORA-04031错误?

1)是否仍然有足够的可用内存?
2)是否设置了操纵系统限制?
3)是否设置了Oracle限制?
4)哪个历程需要的内存过多?
1.5 历程mman、mmnl和mmon这3个历程的作用分别是什么?

1)MMAN(Memory Manager Process,内存管理历程)历程会随着时间推移,根据系统负载的变革和内存需要,自动调解SGA中各个组件的内存大小。
2)MMON(Manageability Monitor Process,可管理性监视器历程)和它的slave历程(Mnnn)主要用来维护AWR信息和各种与可管理性相关的背景任务,详细包括:①启动slave历程Mnnn去做AWR快照。若MMON历程HANG住,则AWR不可用。②当某个测量值(metrics)超过了其度量阀值(threshold value)时发出ALERT告警。③为近来改变过的SQL对象捕获指标信息。
3)MMNL(Manageability Monitor Lite Process)将SGA中的ASH(Active Session History)Buffer中的统计资料写到磁盘。当ASH Buffer满的时间MMNL会把它写到磁盘上。
1.6 什么是查抄点?如何调优查抄点?

(1)什么是查抄点? 一般所说的查抄点是一种将内存中的已修改数据块与磁盘上的数据文件举行同步的数据库事件(Event),是Oracle在数据库一致性关闭、实例恢复和Oracle基本操纵不可缺少的机制。
(2)查抄点调优 查抄点的主要任务就是催促DBWn革新脏块,假如DBWn革新脏块时的等候事件太多,那么就说明脏块太多、存储设备的写速度太慢,或者就是增量查抄点的频率设置不合理。DBWn写脏块的等候事件是db file parallel write。假如系统增量查抄点频率很低,系统大量产生该事件,在清除了存储设备写性能的题目后,那么应该将增量查抄点频率设置得高一些。反之,假如增量查抄点频率本身很高,若出现了db file parallel write事件,则说明查抄点频率太高了。
1.7 什么是大文件表空间(Bigfile Tablespace)?

答案:从Oracle 10g开始推出了大文件表空间的概念,即表空间从Oracle 10g以后就分为两种类型,小文件表空间(Smallfile Tablespace)和大文件表空间(Bigfile Tablespace)。所谓大文件表空间最显著的特点就是一个表空间只能对应一个数据文件。大文件表空间虽只对应一个数据文件,但数据文件对应的最大体积大大增长,可以达到32TB。传统的小文件表空间中每个数据文件最大文件大小为32G,但每个小文件表空间理论上能够包括1024个数据文件,以是,小文件表空间的最大值为32TB大小。以是,理论上小文件表空间和大文件表空间总容量相同。
1.8 本地管理表空间(LMT)和字典管理表空间(DMT)的特点有哪些?

字典管理表空间(Dictionary Managed Tablespace,DMT),它是Oracle 8i及以前版本利用的一种表空间管理模式,不过在Oracle 8i及以后的版本中仍然保存有该特性。DMT是通过数据字典管理表空间的空间利用(其实是管理区)。每当分配或取消分配区后,Oracle服务器会更新数据字典中的相应表。用于管理的两个数据字典表分别是:UET                                 (                         U                         s                         e                         d                         E                         x                         t                         e                         n                         t                         s                         )和                         F                         E                         T                              (Used Extents)和FET                  (UsedExtents)和FET(Free Extents)。DMT是为了实现向后兼容而提供的,建议利用本地管理的表空间。
**本地管理表空间(Locally Managed Tablespace,LMT)**是从Oracle 8i出现的一种新的表空间的管理模式,通过位图来管理表空间的空间利用(其实是管理区)。位图中的每个位都对应于一个块或一组块。Oracle 在分配区或释放区后可以重新利用,Oracle 服务器通过更改位图值来显示块的新状态。LMT 在Oracle 9i及以后版本中成了默认选项。
1.9 Redo日志文件(Redo Log Files)的作用是什么?

答案:Redo日志文件包含全部的数据库变革汗青记录,比方全部的DML变革(INSERT、UPDATE、DELETE和SELECT FOR UPDATE)和全部DDL语句造成的数据字典对象的更改及递归语句的更改等,以是,日志文件可以最大限度地包管数据的一致性与安全性。当发生提交动作时,背景历程 LGWR 将Redo日志缓冲区中的数据刷到Redo日志文件里。
1.10 Oracle系统历程主要有哪些,作用是个啥?


[*]数据写历程(DBWR):负责将更改的数据从数据库缓冲区高速缓存写入数据文件
[*]日志写历程(LGWR):将重做日志缓冲区中的更改写入在线重做日志文件
[*]系统监控 (SMON): 查抄数据库的一致性如有须要还会在数据库打开时启动数据库的恢复
[*]历程监控 (PMON): 负责在一个Oracle 历程失败时清算资源
[*]查抄点历程(CKPT):负责在每当缓冲区高速缓存中的更改永世地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
[*]归档历程 (ARCH):在每次日志切换时把已满的日志组举行备份或归档
[*]恢复历程 (RECO): 包管分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;
[*]作业调理器(CJQ ): 负责将调理与实行系统中已定义好的job,完成一些预定义的工作.
1.11 Oracle Undo相关面试题

1.11.1 请描述什么是Oracle Undo?

Oracle数据库创建和管理用于回滚或撤消对数据库的更改的数据。
这些信息主要包括交易举动的记录,主要是在交易被提交之前。
这些记录统称为undo。
1.11.2 请描述UNDO的作用?

1.回滚事务。
2.实例恢复。
实例恢复过程中,想通过redo记录对checkpoint之后的脏块队列举行前滚操纵。
对于全部未提交的脏块,oracle根据undo的前镜像举行回滚(行级别的逻辑反操纵),重新将内存中缓存的相关数据脏块换为非脏块。
3.提供一致性读。
实行查询时,服务器历程扫描这个表中的数据块时,会把每个数据块ITL槽中最大的SCN与查询SCN举行比较,假如比查询SCN小则说明这个数据块没有被修改服务器历程直接举行数据读取即可。
假如数据块ITL槽中的SCN大于查询SCN那么说明这个数据块在发起查询后被修改了,需要借助undo去获取发起查询谁人时候数据块的数据。
4.闪回部分相关操纵
1.11.3 请描述对UNDO Retention的理解?

undo_retention表示已经提交或回滚的事物在UNDO EXTENT中保存的时间;
1.11.4 请描述ORA-01555错误原因和解决思绪。

构建一致性读时,需要的undo数据已经被覆盖。
通常原因如下:
(1)SQL语句实行时间太长。
(2)UNDO表空间过小。
(3)事务量过大。
(4)过于频繁的提交。
比如对一个块上的10行数据,每次修改1行并提交,就会对这个块天生10次UNDO镜像数据。
(5)导致实行SQL过程中举行一致性读时,SQL实行后修改的前镜像(即UNDO数据)在UNDO表空间中已经被覆盖,不能构造一致性读块(CR blocks)。
建议:
(1)增长UNDO表空间大小。
(2)增长undo_retention 时间,默认只有15分钟。
(3)优化出错的SQL,减少查询的时间,首选方法。
(4)制止频繁的提交。
1.11.5 如何找到ORA-01555对应的SQL

How to find the complete SQL statement caused ORA-1555 :
If the Database was not restarted after the error ORA-1555 , so the Statement can be obtained from :
select SQL_TEXT from v$sqlarea where SQL_ID=‘’;
If the Database was restarted after the error ORA-1555 and an AWR snapshot was gathered before the restart , so the Statement can be obtained from :
select SQL_TEXT from DBA_HIST_SQLTEXT where SQL_ID=‘’;
1.11.6 请描述ORA-30036错误原因和解决思绪。

ORA-30036:unable to extend segment by 8 in undo tablespace ‘UNDOTBS1’
当当前UNDO表空间没有更多可用空间用于活动事务时,将报告ORA-30036错误。
UNDO空间分配按以下顺序举行:
 1.在没有活动事务的UNDO段中分配数据块。Oracle尝试将事务分发到全部UNDO段。
 2.假如找不到UNDO段,则oracle会尝试将脱机UNDO段联机并利用它。
 3.假如没有要联机的UNDO段,则创建一个新的UNDO段并利用它。
 4.假如空间不允许创建undo段,那么我们尝试重用现有undo段中过期的区段。
对于与UNDO段/extent关联的正在运行的事务,假如它需要更多的UNDO空间,则:
 1.假如当前extent有更多可用块,则利用下一个已准备好分配给该extent的可用块。
 2.假如当前区段没有空闲块,并且该段的下一区段已过期,则在下一区段中包装该区段并返回第一个区段。
 3.假如下一个extent尚未过期,则从UNDO表空间获取空间。假如有可用的扩展数据块,则将其分配给UNDO段,并返回新扩展数据块中的第一个块。
 4.假如没有可用的extent,则从脱机UNDO段举行窃取。从脱机UNDO段取消分配数据块,并将其添加到当前UNDO段。返回数据块的第一个空闲块。
 5.从联机UNDO段窃取。从联机UNDO段取消分配数据块,并将其添加到当前UNDO段。返回数据块的第一个空闲块。
 6.在UNDO表空间中扩展文件。假如文件可以扩展,则向当前UNDO段添加一个区段,然后返回块。
 7.否则,尝试从自己的UNDO段重用未过期的区段。假如全部扩展数据块当前都很忙(它们包含未提交的信息),请转至步骤8。否则,请换行到下一个扩展数据块。
 8.从脱机UNDO段随机窃取未过期的数据块。假如失败,则尝试联机UNDO段以供重用。
 9.假如上述操纵都失败,则返回ORA-30036无法将段扩展%s(在UNDO表空间“%s”中)
1.11.7 如何评估所需UNDO大小?

How To Size UNDO Tablespace For Automatic Undo Management (Doc ID 262066.1)
调解UNDO表空间的大小需要三个数据。
Sizing an UNDO tablespace requires three pieces of data.
(UR) UNDO_RETENTION in seconds
(UPS) Number of undo data blocks generated per second
(DBS) Overhead varies based on extent and file size (db_block_size)
所需的undo空间计算如下:
The undo space needed is calculated as:
UndoSpace = UR * (UPS * DBS)
以下公式计算每秒天生的峰值undo块:
The following formula calculates the peak undo blocks generated per second:
SELECT undoblks / ((end_time - begin_time) * 86400) “Peak Undo Block Generation”
  FROM v                                 u                         n                         d                         o                         s                         t                         a                         t                                                   W                         H                         E                         R                         E                         u                         n                         d                         o                         b                         l                         k                         s                         =                         (                         S                         E                         L                         E                         C                         T                         M                         A                         X                         (                         u                         n                         d                         o                         b                         l                         k                         s                         )                         F                         R                         O                         M                         v                              undostat  WHERE undoblks = (SELECT MAX(undoblks) FROM v                  undostat WHEREundoblks=(SELECTMAX(undoblks)FROMvundostat);
列竣事时间和开始时间是日期数据类型。
减去日期数据类型后,结果值为两个日期之间的天数。
要将天转换为秒,需要将86400乘以一天中的秒数(24小时60分钟60秒)。
Column END_TIME and BEGIN_TIME are DATE data types. 
When DATE data types are subtracted, the resulting value is the # of days between both dates. 
To convert days to seconds, you multiply by 86400, the number of seconds in a day (24 hours * 60 minutes * 60 seconds).
以下查询计算处理峰值撤消活动所需的字节数:
The following query calculates the number of bytes needed to handle a peak undo activity:
SELECT (UR * (UPS * DBS)) AS “Bytes”
  FROM (SELECT value AS UR FROM v                                 p                         a                         r                         a                         m                         e                         t                         e                         r                         W                         H                         E                         R                         E                         n                         a                         m                         e                                 =                            ′                                  u                         n                         d                                 o                            r                                  e                         t                         e                         n                         t                         i                         o                                 n                            ′                                  )                         ,                                                      (                         S                         E                         L                         E                         C                         T                         u                         n                         d                         o                         b                         l                         k                         s                         /                         (                         (                         e                         n                                 d                            t                                  i                         m                         e                         −                         b                         e                         g                         i                                 n                            t                                  i                         m                         e                         )                         ∗                         86400                         )                         A                         S                         U                         P                         S                                                       F                         R                         O                         M                         v                              parameter WHERE name = 'undo_retention'),        (SELECT undoblks / ((end_time - begin_time) * 86400) AS UPS           FROM v                  parameterWHEREname=′undor​etention′),    (SELECTundoblks/((endt​ime−begint​ime)∗86400)ASUPS     FROMvundostat
         WHERE undoblks = (SELECT MAX(undoblks) FROM v                                 u                         n                         d                         o                         s                         t                         a                         t                         )                         )                         ,                                                      (                         S                         E                         L                         E                         C                         T                         b                         l                         o                         c                                 k                            s                                  i                         z                         e                         A                         S                         D                         B                         S                                                       F                         R                         O                         M                         d                         b                                 a                            t                                  a                         b                         l                         e                         s                         p                         a                         c                         e                         s                                                       W                         H                         E                         R                         E                         t                         a                         b                         l                         e                         s                         p                         a                         c                                 e                            n                                  a                         m                         e                         =                                                          (                         S                         E                         L                         E                         C                         T                         U                         P                         P                         E                         R                         (                         v                         a                         l                         u                         e                         )                                                           F                         R                         O                         M                         v                              undostat)),        (SELECT block_size AS DBS           FROM dba_tablespaces          WHERE tablespace_name =                (SELECT UPPER(value)                   FROM v                  undostat)),    (SELECTblocks​izeASDBS     FROMdbat​ablespaces     WHEREtablespacen​ame=        (SELECTUPPER(value)         FROMvparameter
                 WHERE name = ‘undo_tablespace’));
对于利用调优撤消保存的10g及更高版本,请利用以下查询: 
For 10g and Higher Versions where Tuned undo retention is being used,please use below query:
SELECT (UR * (UPS * DBS)) AS “Bytes”
  FROM (select max(tuned_undoretention) AS UR from v                                 u                         n                         d                         o                         s                         t                         a                         t                         )                         ,                                                      (                         S                         E                         L                         E                         C                         T                         u                         n                         d                         o                         b                         l                         k                         s                         /                         (                         (                         e                         n                                 d                            t                                  i                         m                         e                         −                         b                         e                         g                         i                                 n                            t                                  i                         m                         e                         )                         ∗                         86400                         )                         A                         S                         U                         P                         S                                                       F                         R                         O                         M                         v                              undostat),        (SELECT undoblks / ((end_time - begin_time) * 86400) AS UPS           FROM v                  undostat),    (SELECTundoblks/((endt​ime−begint​ime)∗86400)ASUPS     FROMvundostat
         WHERE undoblks = (SELECT MAX(undoblks) FROM v                                 u                         n                         d                         o                         s                         t                         a                         t                         )                         )                         ,                                                      (                         S                         E                         L                         E                         C                         T                         b                         l                         o                         c                                 k                            s                                  i                         z                         e                         A                         S                         D                         B                         S                                                       F                         R                         O                         M                         d                         b                                 a                            t                                  a                         b                         l                         e                         s                         p                         a                         c                         e                         s                                                       W                         H                         E                         R                         E                         t                         a                         b                         l                         e                         s                         p                         a                         c                                 e                            n                                  a                         m                         e                         =                                                          (                         S                         E                         L                         E                         C                         T                         U                         P                         P                         E                         R                         (                         v                         a                         l                         u                         e                         )                                                           F                         R                         O                         M                         v                              undostat)),        (SELECT block_size AS DBS           FROM dba_tablespaces          WHERE tablespace_name =                (SELECT UPPER(value)                   FROM v                  undostat)),    (SELECTblocks​izeASDBS     FROMdbat​ablespaces     WHEREtablespacen​ame=        (SELECTUPPER(value)         FROMvparameter
                 WHERE name = ‘undo_tablespace’));
2.索引相关

2.1 什么是索引分裂?

索引分裂(Index Block Split)就是索引块的分裂。当一次DML操纵修改了索引块上的数据,但是旧有的索引块没有足够的空间去容纳新修改的数据时,将分裂出一个新的索引块,旧有块的部分数据放到新开发的索引块上,这个过程就称为索引块的分裂,简称索引分裂。
3.SQL优化相关

3.1 表和表之间的关联方式有哪几种?

目前为止,无论毗连操纵符如何,典范的毗连类型共有3种:
(1)**排序合并毗连(SMJ)**假如毗连属性上都建有索引,那么可利用索引已有的排序做合并毗连。但假如在毗连属性上没有索引时,那么需要起首对两表在毗连属性上排序,对排序结果再做毗连。
(2)嵌套循环(NL) NL是一种比较高效的毗连方式,内部表循环与外部表相匹配。这个毗连方法用到了驱动表(外部表)的概念,该毗连过程是一个2层嵌套循环。
(3)哈希毗连(HJ) HJ的毗连原理如下:起首把小表的哈希操纵存放到内存中,然后用大表的每条记录做哈希,与之前小表的哈希值匹配。这种毗连是在Oracle 7.3引入的,从理论上来说比NL和SMJ更高效,而且只用在CBO(Cost Based Optimization,基于代价的优化器)优化器中。
3.2 表的访问方式有哪几种?

访问表的方式也称为优化器访问路径,主要有3种访问路径:全表扫描(FULL TABLE SCAN,FTS)、索引扫描(INDEX SCAN)和ROWID扫描。
3.2 索引扫描的类型

第一种: index unique  scan 索引唯一扫描,当可以优化器发现某个查询条件可以利用到主键、唯一键、具有外键约束的列,或者只是访问其中某行索引所在的数据的时间,优化器会选择这种扫描类型。
第二种: index range scan索引范围扫描,当优化器发现在UNIQUE列上利用了大于、小于、大于即是、小于即是以及BETWEEN等就会利用范围扫描,在组合列上只利用部分举行查询,导致查询出多行数据。对非唯一的索引列上举行任何活动都会利用 index range scan。
第三种: index full scan 全索引扫描,假如要查询的数据可以全部从索引中获取,则利用全索引扫描。
第四种:** index fast full scan索引快速扫描**,扫描索引中的全部的数据块,与全索引扫描的方式基本上雷同。两者之间的显着的区别是,索引快速扫描对查询的数据不举行排序,数据返回的时间不是排序的。“在这种存取方法中,可以利用多块读功能,也可以利用并行读入,从而得到最大的吞吐量和缩短实行时间”。
第五种:**索引跳跃式扫描(INDEX SKIP SCAN)**实用于全部类型的复合B树索引(包括唯一性索引和非唯一性索引),它使那些在where条件中没有对目的索引的前导列指定查询条件但同时又对该 索引的非前导列指定了查询条件的目的SQL依然可以用上该索引,这就像是在扫描该索引时跳过了它的前导列,直接从该索引的非前导列开始扫描一样(实际的实行过程并非云云),这也是索引跳跃式扫描中"跳跃"(SKIP)一词的含义。
3.3 Hash Join是不是有排序?Hash Join会在什么时间慢?

答案:哈希毗连(Hash Join,HJ)自身不需要排序,这是区别排序合并毗连(Sort Merge Join,SMJ)的特点之一。Hash Join原理比较复杂,但是假如HASH_AREA_SIZE过小,HASH TABLE不能完全放到内存中,那么会发生磁盘HASH运算,如许的情况下Hash Join毗连就比较慢。
3.4 什么是物理读和逻辑读?

答案:当会话所需要的数据在内存的Buffer Cache中找不到,此时就要去磁盘上的数据文件中读取,如许就产生了物理读(Physical Reads),即物理读是从磁盘文件把需要的数据读入内存(SGA中的Buffer Cache)。
需要留意的是,物理读过大体现为磁盘I/O较高,逻辑读过大体现为CPU利用率过高。
3.5 什么是直接路径访问?

答案:直接路径访问是绕过SGA,直接把数据读入到PGA中,这个过程数据不经过SGA的缓冲,以是在理论上性能更快。在 PGA 中的数据只能由当前会话历程访问,当其他会话需要访问这部分数据时需要从磁盘读取数据,会发生物理读。若多个会话同时需要相同的数据,则会导致系统物理读增大,从而影响了数据库的性能。
保存数据的方法分为通例路径加载和直接路径加载:
(1)通例路径加载 实行INSERT语句来添补数据库中的表。直接路径加载会格式化Oracle数据块,并将数据块直接写入数据库文件,从而可消除大量数据库开销。直接加载不与其他用户竞争数据库资源,因此通常可以用靠近磁盘速度的速度加载数据。通例路径加载利用SQL处理和数据库COMMIT操纵来保存数据。插入记录数组后会实行COMMIT操纵。每次数据加载可能涉及多个事务处理。
(2)直接路径加载 利用数据保存将数据块写入Oracle数据文件。这就是为什么直接路径加载比通例路径加载快很多的原因。数据保存与COMMIT的区别在于:
1)在数据保存期间,仅将整个数据库块写入数据库中。这些块是在表的高水位标记(HWM)之后写入的。
2)完成数据保存后,HWM会移动。
3)完成数据保存后不会释放内部资源。
4)完成数据保存不会竣事事务处理。
5)每次实行数据保存时不会更新索引。
3.6 实行计划里的access和filter有什么区别?

一般而言,access表示这个谓词条件的值将会影响数据的访问路径(表照旧索引);filter表示谓词条件的值不会影响数据的访问路劲,只起到过滤的作用。NOT IN或MIN函数等容易产生filter操纵。
3.7 什么是基数(Cardinality)和可选择率(Selectivity)?

答案:
**基数(Cardinality)**是Oracle预估的返回行数,即对目的SQL的某个详细实行步骤的实行结果所包含记录数的估算值。假如是针对整个目的SQL,那么此时的Cardinality就表示该SQL最终实行结果所包含记录数的估算值。
**可选择率(Selectivity)**是指施加指定谓词条件后返回结果集的记录数占未施加任何谓词条件的原始结果集的记录数的比率。可选择率的取值范围显然是0~1,它的值越小,就表明可选择性越好。
4.统计信息

4.1 什么是动态采样(Dynamic Sampling)?

对于没有网络统计信息的表,Oracle为了能够得到相对准确的实行计划,会在实行SQL之前对SQL语句涉及的表做动态采样(Dynamic Sampling,从Oracle 11gR2开始称之为Dynamic Statistic)。
有两种方法可以开启动态采样:
1)将参数OPTIMIZER_DYNAMIC_SAMPLING的值设为大于或即是1。从Oracle 10g开始,该值默认为2,若设置为0,则禁用动态采样。
2)利用动态采样的Hint:DYNAMIC_SAMPLING(T LEVEL)。该Hint表示对目的表T逼迫利用等级为参数level指定值的动态采样。
默认采样数据块数目受隐含参数“_OPTIMIZER_DYN_SMP_BLKS”的控制,其默认值是 32,表示动态采样时默认采样数据块数目为32。
4.2 什么是待定的统计信息(Pending Statistic)?

简单地说,DBA可以对一系列的数据表设置PENDING属性。设置PENDING属性之后,数据的统计信息在数据字典中相当于已经锁定。当新的统计信息天生之后,不是直接替换原有的数据,而是存放在PENDING数据字典中。在PENDING字典中的统计信息在默认情况下是不会参与SQL实行计划的天生的。只有在举行SQL测试通过的时间,经过用户手工简直定,才会将其PUBLISH出来,替换原有的统计信息。
4.3 什么是直方图(Histogram)?

直方图是一种列的特别的统计信息,主要用来描述列上的数据分布情况。当数据分布倾斜时,直方图可以有效地提升Cardinality评估的准确度。构造直方图最主要的原因就是资助优化器在表中数据严重偏斜时做出更好的规划。假如对目的列网络了直方图,那么意味着 CBO 将不再认为该目的列上的数据是均匀分布的了,CBO就会用该目的列上的直方图统计信息来计算对该列施加查询条件后的可选择率和返回结果集的Cardinality,进而据此计算本钱并选择相应的实行计划。
5.等候事件

5.1 等候事件的分类?常见等候事件?

Oracle的等候事件主要可以分为两类:空闲(Idle)等候事件和非空闲(Non-Idle)等候事件。
1)空闲等候事件是指 Oracle 正等候某种工作,在诊断和优化数据库的时间,不用过多留意这部分事件。
2)非空闲等候事件专门针对Oracle的活动,是指数据库任务或应用运行过程中发生的等候,这些等候事件是在调解数据库的时间需要关注与研究的。
一些常见的、紧张的等候事件如下:
(1)数据文件I/O相关的等候事件 db file sequential read、db file scattered read 、db file parallel read、direct path read、direct path write。
(2)控制文件I/O相关的等候事件 control file parallel write、control file sequential read、control file single write。
(3)Redo日志文件I/O相关的等候事件 log file parallel write、log file sync、log file sequential read、log file single write、switch logfile command、log file switch completion、log file switch (clearing log file)、log file switch (checkpoint incomplete)、log switch/archive、log file switch (archiving needed)。
(4)高速缓存区I/O相关的等候事件 db file parallel write、db file single write、write complete waits、free buffer waits。
6.Oracle性能相关

6.1 ROWID和ROWNUM有什么区别?

(1)ROWID ROWID是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。对每个表都有一个ROWID的伪列,但是表中并不物理存储ROWID列的值。不过可以像利用其他列那样利用它,但是不能删除该列,也不能对该列的值举行修改、插入。
(2)ROWNUM ROWNUM是一个伪列,不是真正的列,在表中并不真实存在,它是Oracle数据库从数据文件或缓冲区中读取数据的顺序。切勿理解成记录的行号
6.2 什么是死锁?

所谓死锁是指两个或两个以上的历程在实行过程中,因争夺资源而造成的一种互相等候的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等候的历程称为死锁历程。Oracle对于“死锁”是要做处理的。
6.3 在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?

当Oracle表数据量上亿时,对表实行“ALTER TABLE XXX ADD COLUMN_XX VARCHAR2(2)DEFAULT ‘XXX’;”操纵时,效率及安全性是必须要考虑的因素。若直接实行,则会在该过程中给表加上6级表锁,也就是连查询都需要等候,这在生产库上是相当伤害的操纵。由于Oracle在实行上述操纵过程中,不但要更新数据字典,还会革新全部的记录,并且会使得 Undo表空间暴涨,以是,正确的做法是将更新数据字典和更新字段值分开。
6.4 若临时表空间利用率过高有什么调优思绪?

临时表空间是Oracle数据库的紧张构成部分,尤其是对于大型的频繁操纵,如创建索引、排序等都需要在临时表空间完成来减少内存的开销。固然对于查询性能要求较高的操纵应尽可能地制止在磁盘上完成这些操纵。
若临时表空间占用过大,起首,要去查抄是什么会话占用了临时表空间,详细占用了多少,临时段的详细类型是什么。通过查询视图GV                                 S                         O                         R                                 T                            U                                  S                         A                         G                         E                         (                         G                         V                              SORT_USAGE(GV                  SORTU​SAGE(GVSORT_USAGE和GV                                 T                         E                         M                         P                         S                         E                                 G                            U                                  S                         A                         G                         E                         查询的结果是一致的)和                         G                         V                              TEMPSEG_USAGE查询的结果是一致的)和 GV                  TEMPSEGU​SAGE查询的结果是一致的)和GVSESSION 可以获取到临时表空间的占用情况和临时段的类型等信息。
6.5 如何有效地删除一个大表(即表的EXTENT数很多)?

答案:一个有很多EXTENT(100k+)的表,假如只是简单地用DROP TABLE的话,那么会大量消耗CPU(在DMT管理下,Oracle要对FET                                 、                         U                         E                         T                              、UET                  、UET数据字典举行操纵),可能会用上几天的时间,较好的方法是分多次删除EXTENT,以减轻这种消耗
6.6 Oracle 低落高水位线的方法

释放表的高水位通常有如下几种办法:
(1)对表举行MOVE操纵:ALTER TABLE TABLE_NAME MOVE;。若表上存在索引,则记得重建索引。
(2)对表举行SHRINK SPACE操纵:ALTER TABLE TABLE_NAME SHRINK SPACE;,留意,在实行该指令之前必须开启行移动:ALTER TABLE TABLE_NAME ENABLE ROW MOVEMENT;。该方法的优点是:在碎片整理竣事后,表上相关的索引仍然有效,缺点是会产生大量的UNDO和REDO。
(3)复制要保存的数据到临时表T,DROP原表,然后RENAME临时表T为原表。
(4)exp/imp或expdp/impdp重构表。
(5)若表中没有数据则直接利用TRUNCATE来释放高水位。
7.数据库诊断

7.1 数据库运行很慢,如何解决?

导致数据库运行很慢的原因非常多,比方可能是开发人员SQL语句写的不好导致实行性能比较差。以是,碰到这类题目,不能给出一个非常准确的答案,但是可以按照如下的步骤去检测清除:
1)top或topas查察系统的CPU利用率是否正常,找到最耗费资源的Oracle历程,然后进入数据库查询相关的会话,找到SQL语句再举行详细分析。假如CPU正常,那么就很可能是由于开发人员写的SQL语句不好,导致SQL实行时间过长,因此,开发人员误认为是数据库运行缓慢。
2)进入数据库查察等候事件是否正常
7.2 Undo的作用

1)事务回滚(Rollback Transaction)
2)事务恢复(Transaction Recovery)
3)提供一致性读(Consistent Read)
4)实现闪回功能
7.3 常用的10046及10053诊断事件的区别是什么?

10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强。Oracle的10046事件可以跟踪应用程序所实行的SQL语句,并且得到其解析次数、实行次数、CPU利用时间等信息。这对DBA来分析、定位数据库性能题目黑白常有效的。
10053事件是最常用的Oracle优化器跟踪Trace。10053事件解析优化器为什么选择某个实行计划但并不记录这个实行计划到底运行地如何。10046事件并不解释优化器的工作,但它记录了在SQL解析阶段所遇到的等候事件和所消耗的CPU等资源,以及实行阶段的各项指标。需要留意的是,假如一个SQL语句已经被解析过,那么就不会天生10053的trace文件,但10046的trace文件可以重复天生。
简而言之,10046事件记录SQL如何运行,而10053记录优化器为什么为这个SQL选择某个实行计划。
8.会话

9.ASM和RAC维护

9.1 集群(Cluster)特有的背景历程有哪些?

集群由若干历程构成,其中,最紧张的几个历程包括 OCSSD、CRSD、EVMD 等
9.2 集群有哪几种心跳机制?

在几乎全部高可用的环境中都故意跳的存在,心跳的主要目的是为了检测集群中节点的状态。假如检测失败,那么管理软件会认为某个节点存在故障,并根据一定的算法来做出适当地处理,制止对环境的破坏,即高可用性软件举行自动修复。
Oracle集群有3种心跳机制,分别为网络心跳(Network HeartBeat,NHB)、磁盘心跳(Disk HeartBeat, DHB)和本地心跳(Local HeartBeat,LHB)
9.3 RAC的脑裂和忘记分别指的是什么?

(1)脑裂(SplitBrain) 在集群中,节点间通过心跳来相识彼此的康健状态,以确保各节点和谐工作。假设当“心跳”出现题目,但各个节点还在正常运行,这时,每个节点都认为其他的节点宕机了,自己才是整个集群环境中的“唯一健在者”,自己应该获得整个集群的“控制权”。在集群环境中,存储设备都是共享的,这就意味着数据灾难。简单点说,就是假如由于私有网络硬件或软件的故障,导致集群节点间的私有网络在一定时间内无法举行正常的通信,这种现象称为脑裂。在发生脑裂情况后,集群的某些节点间的网络心跳丢失,但磁盘心跳依然正常,集群根据投票算法(Quorum Algorithm)将不正确的节点踢出集群。磁盘心跳的主要目的是当集群发生脑裂时可以资助指定脑裂的解决方案。
(2)忘记(Amnesia) 集群环境的设置文件不是集中存放的,而是每个节点都有一个本地副本,在集群正常运行时,用户可以在任何节点更改集群的设置,并且这种更改会自动同步到其他节点。忘记是由于某个节点更新了OCR(Oracle Cluster Registry,Oracle集群注册)中的内容,而集群中的另外一些节点此时处于关闭、维护或重启阶段,OCR Master历程来不及将其信息更新到这些非常节点缓存而导致的状态不一致。譬如,A节点发出了添加OCR镜像的命令,在这个时间B节点处于重启阶段。重启后A已经更新完毕,而此时B并不知道已经为OCR增长了一个新的镜像磁盘,忘记由此而生。OCR用于解决忘记题目。
9.4 什么是GPnP?

网格即插即用(Grid Plug and Play,GPnP)是Oracle 11gR2 RAC提供的新组件,该组件的功能由gpnpd.bin守护历程实现。GPnP可以提供一个动态的GI环境,能随着负载的增长而动态改变GI环境。GPnP能非常容易地添加、替换或者移除集群中的节点,就像电源插头一样即插即用。
9.5 oraInventory目录的作用是什么?

答案:由于Oracle支持将多个Oracle软件(或者多版本的数据库软件)安装到同一台服务器上,这就需要一个位置统一记录安装的软件信息。中央目录(Central Inventory)实际上就是一台主机上安装的Oracle产品清单。
9.6 谈谈对Oracle中RAC用到的Cache Fusion的理解。

答案:Cache Fusion即缓存融合,它能实现RAC在各个节点之间同步SGA中的缓存信息,从而达到进步访问速度的结果,也包管了数据的一致性。要发挥Cache Fusion的作用,要有一个前提条件,那就是网络的速度要比访问磁盘的速度要快。否则,没有引入Cache Fusion的意义。
9.7 假如$GRID_HOME下的权限被人为修改过,那么如何来修复该权限题目?

1)根据MOS文档提供的建议通过$GRID_HOME/crs/install/rootcrs.pl -init或roothas.pl -init举行解决。
2)采用MOS文档1515018.1上提供的脚本在正常库上天生脚本,然后将天生的脚本在非常库上实行从而来修复权限题目。
3)Oracle 11gR2可以deconfig crs的设置,然后重新运行root.sh即可。
4)MOS文档1515018.1上提供了一个修复脚本:permission.pl。可以根据该脚原来修复。
9.8 RAC等候事件gc buffer busy acquire和gc buffer busy release的区别是什么?

gc buffer busy acquire是当会话1尝试请求访问长途实例上的数据块,但是在会话1之前已经有相同实例上另外一个会话2请求访问了相同的数据块,并且没有完成,那么会话1等候gc buffer busy acquire。
gc buffer busy release是在会话1之前已经有长途实例的会话2请求访问了相同的数据块,并且没有完成,那么会话1等候gc buffer busy release。
9.9 RAC节点被踢出可能有哪些原因?

答案:可能的原因包括服务器负载严重或内核HANG住、网络心跳丢失、磁盘心跳丢失、CSSD历程HANG住。
9.10 Oracle11g RAC 启动流程梳理

启动流程步骤层次梳理:
第一层:OHASD 启动:


[*]cssdagent - 负责启动 CSSD 的 Agent。
[*]orarootagent - 负责启动全部 root 用户下的 ohasd 资源 的Agent。
[*]oraagent - 负责启动全部 oracle 用户下的 ohasd 资源的 Agent。
[*]cssdmonitor - 监控 CSSD 以及节点康健(和 cssdagent 一起)。
第二层:OHASD rootagent 启动:


[*]CRSD - 管理集群资源的主要背景历程。
[*]CTSSD - Cluster Time Synchronization Services Daemon
[*]Diskmon
[*]ACFS (ASM Cluster File System)驱动
第三层:OHASD oraagent 启动:


[*]MDNSD - 用来实现 DNS 查询
[*]GIPCD - 用来做节点间通信
[*]GPNPD - Grid Plug & Play Profile Daemon
[*]EVMD - Event Monitor Daemon
[*]ASM - ASM 资源
第四层:CRSD 启动:


[*]orarootagent - 负责启动全部 root 用户下的 crsd 资源的 Agent。
[*]oraagent - 负责启动全部 oracle 用户下的 crsd 资源的 Agent。
第五层:CRSD rootagent 启动:


[*]Network resource - 监控公共网络
[*]SCAN VIP(s) - Single Client Access Name Virtual IPs
[*]Node VIPs - 每个节点1个
[*]ACFS Registery - 挂载 ASM Cluster File System
[*]GNS VIP (optional) - VIP for GNS
第六层:CRSD oraagent 启动:


[*]ASM Resouce - ASM 资源
[*]Diskgroup - 用来管理/监控 ASM 磁盘组
[*]DB Resource - 用来管理/监控数据库和实例
[*]SCAN Listener - SCAN 监听,监听在 SCAN VIP 上
[*]Listener - 节点监听,监听在 Node VIP 上
[*]Services - 用来管理/监控 services
[*]ONS - Oracle Notification Service
[*]eONS - 增强版 Oracle Notification Service
[*]GSD - 为了向下兼容 9i
[*]GNS (optional) - Grid Naming Service - 处理域名解析
10.DG维护

10.1 DG的分类

DG 根据备库(Standby Database)重演日志方式的不同,可以分为物理 DG(PhysicalDG)、逻辑DG(LogicalDG)和快照DG(Snapshot DG),它们对应的数据库分别可以称为Physical Standby、Logical Standby和Snapshot Standby。
10.2 RFS、LNSn、MRP、LSP历程的作用分别是什么?

(1)RFS历程 RFS(Remote File Server)历程主要用来接受从主库传送过来的日志信息。
(2)LNSn(LGWR Network Server process)历程 DG可以利用ARCn、LGWR来传送日志,但它们都是把日志发送给本地的LNSn(假如有多个目的备库,那么会启动相应数目的LNSn 历程,同时发送数据)历程,然后备库的RFS历程接收数据,接收到的数据可以存储在备库的备用Redo日志文件中或备库的归档日志中,然后再应用到备库中。
(3)MRP(Managed Recovery Process)历程 该历程只针对物理备库,作用为应用从主库传递过来的Redo 日志到物理备库,称为 Redo Apply。
(4)LSP(logical standby process)历程 只有逻辑备库才会有该历程。
10.3 DG的3种掩护模式

DG 提供了 3 种数据掩护模式(Protection Mode):最大掩护(Maximum Protection)、最高性能(Maximum Performance)和最高可用(Maximum Availability)
10.4 Switchover和Failover的区别

1)Switchover是指主库转换成备库,然后将原备库转换成新主库;而Failover是指将备库转换成主库。
2)利用场所不同:Switchover用于有准备的、计划之中的切换,通常是系统升级、数据迁徙等常态任务;Failover用于意料之外的突发情况,比方非常断电、自然灾难等。
3)数据丢失水平不同:Switchover表示不会丢失数据,Failover通常意味着有部分数据丢失。
4)善后处理的不同:Switchover之后DG环境不会被破坏,仍然有Primary、Standby两种角色的系统存在,但是Failover之后,DG环境就会被破坏,一般情况下需要重建。
10.5 主库丢失归档,物理DG如何恢复?

可以通过对主库举行基于SCN的增量备份来恢复物理DG。
11.OGG维护

11.1 OGG主要包含Manager历程、Extract历程、Pump历程、Replicat历程

1)Manager历程是OGG的控制历程,运行在源端和目的端上。它的主要作用包含启动、监控、重启 OGG的其他历程;报告错误及事件;分配数据存储空间;发布阀值报告等。
2)Extract历程运行在数据库源端,负责从源端数据表或者日志中捕获数据。在初始数据装载阶段, Extract历程直接从源端的数据表中抽取数据;在初始数据同步完成以后,Extract历程负责捕获源端数据的变革(包括DML和DDL)。
3)Data Pump历程(简称Pump历程)运行在数据库源端。其作用是假如源端利用了本地的trail文件,那么Pump历程就会把trail以数据块的形式通过TCP/IP协议发送到目的端,这通常也是推荐的方式。
4)Replicat 历程也称为应用历程,运行在目的端,是数据传递的最后一站,负责读取目的端 trail文件中的内容,并将其解析为DML或DDL语句,然后应用到目的数据库中。
11.2 OGG-00446 Could not find archived log for sequence错误的处理办法

假如面试官问到维护OGG曾经碰到的一次故障处理过程,那么就可以拿这个错误作为案例来说明。OGG-00446主要是归档文件丢失引起,处理办法就是将缺失的归档日志找回来。假如找不到所需归档日志,那么可以按照如下2种办法来处理:
第一种办法是改变抽取历程的时间,但这可能会导致数据不一致
第二种办法:重新初始化,基于scn重新初始化
12.备份恢复

**RMAN可以用来备份:**① 数据库:包括数据文件、控制文件、SPFILE(Server Parameter File)文件;② 表空间;③ 归档文件;④ 备份集。
**RMAN不能用来备份:**① 联机日志文件(Online Redo Logs);② 非READ/WRITE状态的可传输表空间;③ PFILE(Parameter File)文件。
12.1 TRUNCATE恢复方法

1)是否有测试库,测试库的表数据和当前数据是否一致,若一致,则可以考虑从测试库把表数据导入到被删除的库中。
2)是否有exp或expdp逻辑备份,如有,则可以导入到被删除的库中。
3)是否有RMAN备份,如有,则可以将数据恢复到其他地方,然后将数据库exp出来,最后导入到被删除的库中。
4)数据库是否开启了闪回,假如开了闪回则可以利用闪回数据库的特性找回数据。
5)利用TSPITR,表空间基于时间点的恢复技术来恢复。
6)是否有归档,如有则可以采用LogMiner举行日志发掘。
7)若以上这些办法都不能恢复,则可以尝试无备份情况下的恢复,这里推荐两种办法, fy_recover_data包和gdul工具
12.2 Oracle的SCN是什么?

SCN(System Change Number,系统改变号)是一个由系统内部维护的序列号,SCN在数据库全局是唯一的。当系统需要更新的时间自动增长,它是系统中维持数据的一致性和顺序恢复的紧张标志,是数据库中非常紧张的一种数据结构。在数据库中,SCN作为一种时钟机制来标记数据库动作,比如,当事务发生时,数据库会用一个SCN来标记它。
12.3 实例恢复和介质恢复的区别是什么?

(1)介质恢复 介质恢复是基于物理备份恢复数据,它是Oracle数据库出现介质故障时恢复的紧张保障。介质恢复包括块恢复、数据文件恢复、表空间恢复和整个数据库的恢复。介质恢复主要是针对错误类型中的介质失败,假如是少量的块失败,那么可以利用介质恢复中的块恢复来快速修复;但假如是其他情况的丢失,那么需要根据详细情况,可利用数据文件恢复、表空间恢复乃至全库恢复
(2)实例恢复 实例恢复可确保数据库在一个实例失败后仍能回到一致性的状态。Redo日志记录了对实例的全部更改。单实例数据库拥有一个重做线程,而一个RAC数据库拥有多个重做线程,且RAC数据库的每个实例拥有一个重做线程。当事务提交时,LGWR 将内存中的重做条目和事务 SCN 同时写入联机Redo日志。但是,DBWn历程只在最有利的时机将已修改的数据块写入数据文件。以是,未提交的更改可能会临时存在于数据文件中,而已提交的更改也可能还不在数据文件中。
12.4 DELETE了一条数据并且提交了,该如何找回?

在Oracle中可以通过闪回技术来找回已经删除并且提交了的数据。固然,除了闪回技术外还可以采用LogMiner(利用该工具可以轻松获得Redo日志文件包含归档日志文件中的详细内容)举行日志发掘,找出其撤销SQL并实行就可以找回DELETE语句删除的数据。
12.5 rm-rf误操纵的恢复过程

假如实行了rm-rf操纵删除了全部的基于FS的数据文件,但是数据库还处于OPEN状态,那么,在这种情况下如何快速地恢复数据库呢?这里的前提条件是没有任何可用的RMAN 备份、数据库冷备份等,也就是说,没有任何备份。在这种情况下可以通过系统的文件句柄号来恢复数据文件。整个恢复过程可以简单分为如下几步:
(1)找到被删除文件的文件句柄所在的目录 起首通过命令“ps -ef|grep ora_lgwr”找到LGWR的历程号。假设这里的历程号为31863,则被删除的文件句柄在/proc/31863/fd目录下。
(2)采用操纵系统 cp 命令复制文件句柄到原数据库文件路径 假设这里看到的是如下的情况,被删除的文件末了一般都有deleted标识。
12.6 如那边理Oracle中的坏块?

(1)坏块的简介 Oracle数据文件的坏块可以分为物理坏块和逻辑坏块。物理坏块指的是块格式本身已经破坏,块内的数据没有任何意义。逻辑坏块指的是块内的数据在逻辑上存在题目,比如说索引块的索引值没有按顺序排列导致的逻辑坏块。物理坏块一般是由于内存题目、OS题目、I/O子系统题目或硬件引起的,逻辑坏块一般是由Oracle系统Bug等原因引起的。
(2)BMR 恢复坏块 假如数据库只有很少的数据块被破坏,那么利用块介质恢复(Block Media Recovery,BMR)是较好的块恢复方法。BMR只能用于恢复物理破坏(Physical Corruptions),在数据文件联机时即可恢复相关坏块。
12.7 LogMiner是什么?其有哪些用途?

LogMiner 工具的主要用途有:①跟踪数据库的变革:可以离线地跟踪数据库的变革,而不会影响在线系统的性能;②回退数据库的变革:回退特定的变革数据,减少Point-In-Time Recovery的实行;③优化和扩容计划:可通过分析日志文件中的数据以分析数据的增长模式;④确定数据库的逻辑破坏时间:准确定位操纵实行的时间和SCN;⑤确定事务级要实行的精细逻辑恢复操纵,可以取得相应的Undo操纵;⑥实行后续审计。
12.8 什么是BBED?它有哪些作用?

BBED(Block Brower and Editor)是用来直接查察和修改Oracle数据块的一个内部工具,它可以直接修改Oracle数据文件块的内容,在一些极端恢复场景下比较有效。由于该工具不被Oracle服务支持,以是,默认是没有天生可实行文件的,在利用前需要编译天生。
12.9 假如必须利用备份恢复数据库,但是又没有控制文件,如何解决题目?

答案:可以重建控制文件,然后利用带BACKUP CONTROL FILE子句的RECOVER命令恢复数据库。
12.10 归档和非归档模式之间的不同点是什么?它们各自的优缺点是什么?

答案:在Oracle数据库操纵中,数据库可以设置为归档模式和非归档模式。归档模式保存全部的事务日志,包括在线日志和归档日志,而非归档模式没有归档日志。归档模式是指可以备份全部的数据库事务并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点但黑白归档模式可以带来数据库性能上的少许进步,由于非归档模式没有归档日志。利用 RMAN 备份数据库,若是归档模式则可以在OPEN状态下备份,若黑白归档模式则不能在OPEN状态下备份。
12.11 在控制文件丢失且无备份的情况下如何恢复?

答案:重建控制文件,在重建控制文件之前,需要利用包DBMS_BACKUP_RESTORE来抽取数据文件
12.12 在Undo表空间数据文件丢失的情况下如何恢复?

答案:恢复大约可以分为 3 种情况:
①有备份,这种情况下直接采用备份的文件举行恢复即可。
②无备份但是有完整的归档文件存在,这种情况下可以利用命令“ALTER DATABASE CREATE DATAFILE 文件号 AS ‘/u01/app/oracle/oradata/lhrdb/undotbs01.dbf’ size 50m;”来创建丢失的Undo文件,然后利用“RECOVER DATAFILE 文件号;”举行恢复数据库文件即可。
③无备份,归档文件丢失,在这种情况下的恢复比较复杂。起首应该切换Undo表空间到一个新建的Undo表空间中,并设置原有表空间的管理模式为手动管理模式,然后将隐含参数“_OFFLINE_ROLLBACK_SEGMENTS”设置为TRUE
12.13 假如控制文件破坏如何恢复?

答案:假如控制文件有多个,而只破坏了单个控制文件,那么只需要关闭数据库,拷贝其他好的控制文件覆盖掉坏的控制文件即可。也可以修改参数文件,只保存1个控制文件。假如破坏了全部控制文件,那么需要重新创建控制文件或从备份恢复。重新创建控制文件的脚本可以通过命令“ALTER DATABASE BACKUP CONTROLFILE TO TRACE;”获取。
13.ASH/AWR/ADDM

13.1 AWR报告中主要关注哪些方面内容?

(1)DB Time/Elapsed 该部分位于AWR报告的头部
(2)Load Profile 该部分位于AWR报告的总览部分(Report Summary),AWR报告总览部分包括了5个部分:缓存尺寸(Cache Sizes)、负载性能(Load Profile)、数据库效率(Instance Efficiency Percentages)、共享池统计(Shared Pool Statistics)、TOP5事件(Top 5 Timed Events)。
(3)Instance Efficiency Percentages (Target 100%) 该部分包含了Oracle关键指标的内存命中率及其他数据库实例操纵的效率。
(4)Top 5 Timed Events 
(5)SQL Statistics SQL Statistics分别从实行时间、物理读、逻辑读、子游标个数、实行次数等方面罗列出TOP语句,从该部分可以敏捷获取有性能题目的SQL语句
(6)Segment Statistics 该部分从段(表段、索引段)的角度描述了数据库的繁忙水平,包含了逻辑读、物理读、ITL等方面。
14.审计

14.1 审计如何分类

在Oracle中分别支持以下三种尺度审计类型,或者说,可以从3个角度去启用审计:
1)语句审计(Statement Auditing),对某种类型的SQL语句审计,不指定结构或对象。审计SQL语句的成功实行或不成功实行。这里从SQL语句的角度出发,举行指定。审计只关心实行的语句。
2)权限审计(Privilege Auditing),对实行相应动作的系统特权的利用审计,对涉及某些权限的操纵举行审计,这里夸大“系统权限”
3)对象审计(Object Auditing),对一特别模式对象上的指定对象的审计。对一个特别模式对象上的DML语句举行审计。记录作用在指定对象上的操纵。
15.Oracle锁相关知识


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Oracle面试总结