oracle面试基础

Posted vmsysjack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle面试基础相关的知识,希望对你有一定的参考价值。

1. 对于一个存在系统性能的系统,说出你的诊断处理思路

1). 做statspack收集系统相关信息   了解系统大致情况/确定是否存在参数设置不合适的地方/查看top 5 event/查看top sql等

2). 查v$system_event/v$session_event/v$session_wait 从v$system_event开始,确定需要什么资源(db file sequential read)等,
深入研究v$session_event,确定等待事件涉及的会话,从v$session_wait确定详细的资源争用情况(p1-p3的值:file_id/block_id/blocks等) 3). 通过v$sql/v$sqltext/v$sqlarea表确定disk_reads、(buffer_gets/executions)值较大的SQL
2.  列举几种诊断IO、CPU、性能状况的方法

top   uptime   vmstat   iostat   statspack   sql_trace/tkprof

查v$system_event/v$session_event/v$session_wait

查v$sqlarea(disk_reads或buffer_gets/executions较大的SQL)

或者第三方的监视工具,TOAD就不错。
3. 对statspack有何认识

StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包。可以做数据库健康检查报告。
StapSpack是Oracle公司提供的一个收集数据库运行性能指标的软件包,该软件包从8i起,在9i、10g都有显著的增强
该软件包的辅助表(存储相关参数与收集的性能指标的表)由最初的25个增长到43个

收集级别参数由原来的3个(0510)增加到5个(056710
通过分析收集的性能指标,数据库管理员可以详细地了解数据库目前的运行情况,对数据库实例、等待事件、SQL等进行优化调整
利用statspack收集的snapshot,可以统计制作数据库的各种性能指标的统计趋势图表
4.如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响

可以先表分析一下,然后测试创建索引前后对应用的性能影响;
需要考虑的是该索引列不经常更新,不是有很多重复值的情况时, 
在大表中使用索引特别有效. 创建的索引可以跟数据表分不同表空间存储。
在系统比较空闲时nologging选项(如果有dataguard则不可以使用nologging)大的sort_ared_size或pga_aggregate_target较大
5. 解释冷备份和热备份的不同点以及各自的优点

热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。
冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。

热备份的优点:在于当备份时,数据库仍旧可以被使用并且,可以将数据库恢复到任意一个时间点。
冷备份的优点:在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。
(因为不必将archive log写入硬盘)
6. 比较truncate和delete 命令
两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要 rollback segment .
Delete是DML操作, 需要rollback segment 且花费较长时间.

7. 如何增加buffer cache的命中率?

在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice . 
如果有必要更改,可以使用 alter system set db_cache_size 命令
8. 绑定变量是什么?绑定变量有什么优缺点?

绑定变量是指在SQL语句中使用变量,改变变量的值来改变SQL语句的执行结果。

优点:使用绑定变量,可以减少SQL语句的解析,能减少数据库引擎消耗在SQL语句解析上的资源。提高了编程效率和可靠性。
减少访问数据库的次数, 就能实际上减少ORACLE的工作量。 缺点:经常需要使用动态SQL的写法,由于参数的不同,可能SQL的执行效率不同; 绑定变量是相对文本变量来讲的,所谓文本变量是指在SQL直接书写查询条件, 这样的SQL在不同条件下需要反复解析,绑定变量是指使用变量来代替直接书写条件,查询bind value在运行时传递,然后绑定执行。 优点: 减少硬解析,降低CPU的争用,节省shared_pool 缺点: 不能使用histogram,sql优化比较困难
9.  Pctused and pctfree 表示什么含义有什么作用

pctused与pctfree控制数据块是否出现在freelist中,   
pctfree控制数据块中保留用于update的空间,
当数据块中的free space小于pctfree设置的空间时,该数据块从freelist中去掉,
当块由于dml操作free space大于pct_used设置的空间时,该数据库块将被添加在freelist链表中。

10.  回滚段的作用是什么

回滚段用于保存数据修改前的映象,这些信息用于生成读一致性数据库信息、在数据库恢复和Rollback时使用。一个事务只能使用一个回滚段。

事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利
用回滚段中的数据前影像来将修改的数据恢复到原来的值。 事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在undo表空间中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。 读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。 当一个语句正在执行时,该语句将看不到从该语句开始执行后
的未提交的修改(语句级读一致性) 当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEM CHANGE NUMBER
-SCN) 来保证任何前于当前SCN的未提交的改变不被
该语句处理。可以想象:当一个长时间的查询正在执行时, 若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来
构造一个读一致性视图
11.SGA主要有那些部分,主要作用是什么

系统全局区(SGA):是ORACLE为实例分配的一组共享缓冲存储区,用于存放数据库数据和控制信息,以实现对数据库数据的管理和操作。

SGA主要包括:

    a)共享池(shared pool) :用来存储最近执行的SQL语句和最近使用的数据字典的数据。
    b)数据缓冲区 (database buffer cache):用来存储最近从数据文件中读写过的数据。
    c)重作日志缓冲区(redo log buffer):用来记录服务或后台进程对数据库的操作。

另外在SGA中还有两个可选的内存结构:

    d)Java pool:   用来存储Java代码。
    e)Large pool: 用来存储不与SQL直接相关的大型内存结构。备份、恢复使用。
    GA:db_cache/shared_pool/large_pool/java_pool

db_cache: 数据库缓存(Block Buffer)对于Oracle数据库的运转和性能起着非常关键的作用,它占据Oracle数据库SGA(系统共享内存区)
的主要部分。Oracle数据库通过使用LRU算法,将最近访问的数据块存放到缓存中,从而优化对磁盘数据的访问. shared_pool: 共享池的大小对于Oracle 性能来说都是很重要的。共享池中保存数据字典高速缓冲和完全解析或编译的的PL
/SQL 块和SQL 语句
及控制结构 large_pool: 使用MTS配置时,因为要在SGA中分配UGA来保持用户的会话,就是用Large_pool来保持这个会话内存使用RMAN做备份的时候,
要使用Large_pool这个内存结构来做磁盘I
/O缓存器 java_pool: 为java procedure预备的内存区域,如果没有使用java proc,java_pool不是必须的
12.  备份如何分类

逻辑备份:exp/imp 指定表的逻辑备份

物理备份:

                热备份:alter tablespace begin/end backup;
                冷备份:脱机备份(database shutdown)

RMAN备份
        full backup/incremental backup(累积/差异)

物理备份

      物理备份是最主要的备份方式。用于保证数据库在最小的数据库丢失或没有数据丢失的情况下得到恢复。
=============================================================================================
冷物理

      冷物理备份提供了最简单和最直接的方法保护数据库因物理损坏丢失。建议在以下几种情况中使用。
      对一个已经存在大最数据量的数据库,在晚间数据库可以关闭,此时应用冷物理备份。
      对需对数据库服务器进行升级,(如更换硬盘),此时需要备份数据库信息,并在新的
      硬盘中恢复这些数据信息,建议采用冷物理备份。 热物理       主要是指备份过程在数据库打开并且用户可以使用的情况下进行。需要执行热物理备份的情况有:       由于数据库性质要求不间断工作,因而此时只能采用热物理备份。       由于备份的要求的时间过长,而数据库只能短时间关闭时。 逻辑备份 (EXP
/IMP)       逻辑备份用于实现数据库对象的恢复。但不是基于时间点可完全恢复的备份策略。只能作为联机备份和脱机备份的一种补充。 完全逻辑备份       完全逻辑备份是将整个数据库导出到一个数据库的格式文件中,该文件可以在不同的数据库版本、操作系统和硬件平台之间进行移植。 指定表的逻辑备份       通过备份工具,可以将指定的数据库表备份出来,这可以避免完全逻辑备份所带来的时间和财力上的浪费。
12.standby的特点

备用数据库(standby database):ORACLE推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志
同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复
standby三种数据保护模式分别是:
1)、MAXIMIZE PROTECTION :最大数据保护与无数据分歧,LGWR将同时传送到备用节点,在主节点事务确认之前,备用节点也必须完全
               收到日志数据。如果网络不好,引起LGWR不能传送数据,将引起严重的性能问题,导致主节点DOWN机。
2)、MAXIMIZE AVAILABILITY :无数据丢失模式,允许数据分歧,允许异步传送。                 正常情况下运行在最大保护模式,在主节点与备用节点的网络断开或连接不正常时,自动切换到最大性能模式
                主节点的操作还是可以继续的。在网络不好的情况下有较大的性能影响。
3)、MAXIMIZE PERFORMANCE:这种模式应当可以说是从8i继承过来的备用服务器模式,异步传送,无数据同步检查,可能丢失数据,
               但是能获得主节点的最大性能。9i在配置DATA GUARD的时候默认就是MAXIMIZE PERFORMANCE
13. 事务是什么?

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,
称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务: 原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。 一致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,
    以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。 隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是
    另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,
    因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。 持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

14.表的垂直拆分
  把含有多个列的表拆分成多个表,解决表宽度问题,具体包括以下几种拆分手段:       把不常用的字段单独放在同一个表中;       把大字段独立放入一个表中;       把经常使用的字段放在一起;  这样做的好处是非常明显的,具体包括:拆分后业务清晰,拆分规则明确、系统之间整合或扩展容易、数据维护简单。 (
1). 表的水平拆分   表的水平拆分用于解决数据表中数据过大的问题,水平拆分每一个表的结构都是完全一致的。一般地,将数据平分到N张表中的
常用方法包括以下两种:     对ID进行hash运算,如果要拆分成5个表,mod(id,
5)取出0~4个值;     针对不同的hashID将数据存入不同的表中;

表的水平拆分会带来一些问题和挑战,包括跨分区表的数据查询、统计及后台报表的操作等问题,但也带来了一些切实的好处: 表分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度; 表中的数据本来就有独立性,例如表中分别记录各个地区的数据或不同时期的数据,特别是有些数据常用,而另外一些数据不常用。 需要把数据存放到多个数据库中,提高系统的总体可用性。

以上是关于oracle面试基础的主要内容,如果未能解决你的问题,请参考以下文章

sql Oracle代码片段

Oracle面试题(基础篇)

Oracle面试题(基础篇)

Oracle面试题(基础篇)

如何在 Toad for Oracle 中使用自定义代码片段?

oracle面试基础