Oracle面试常见的二十个问题及回答
1.冷备份和热备份的不同点以及各自的优点
解答:热备份针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份。而冷备份指在数据库关闭后,进行备份,适用于所有模式的数据库。热备份的优点在于当备份时,数据库仍旧可以被使用并且可以将数据库恢复到任意一个时间点。冷备份的优点在于它的备份和恢复操作相当简单,并且由于冷备份的数据库可以工作在非归档模式下,数据库性能会比归档模式稍好。(因为不必将archive log写入硬盘)
2.如果你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题呢?
解答:重建控制文件,用带backup control file 子句的recover 命令恢复数据库。
3.如何转换init.ora到spfile?
解答:使用create spfile from pfile 命令.
4.解释data block , extent 和 segment的区别(这里建议用英文术语)
解答:data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
5.给出两个检查表结构的方法
解答:1.DESCRIBE命令
2.DBMS_METADATA.GET_DDL 包
6.怎样查看数据库引擎的报错
解答:alert log.
7.比较truncate和delete 命令
解答:两者都可以用来删除表中所有的记录。区别在于:truncate是DDL操作,它移动HWK,不需要rollback segment .而Delete是DML操作, 需要rollback segment 且花费较长时间.
8.使用索引的理由
解答:快速访问表中的data block
9.给出在STAR SCHEMA中的两种表及它们分别含有的数据
解答:Fact tables 和dimension tables. fact table包含大量的主要的信息而dime nsion tables 存放对fact table 某些属性描述的信息
10.FACT Table上需要建立何种索引?
解答:位图索引 (bitmap index)
11. 给出两种相关约束?
解答:主键和外键
12. 如何在不影响子表的前提下,重建一个母表
解答:子表的外键强制实效,重建母表,激活外键
13. 解释归档和非归档模式之间的不同和它们各自的优缺点
解答:归档模式是指你可以备份所有的数据库 transactions并恢复到任意一个时间点。非归档模式则相反,不能恢复到任意一个时间点。但是非归档模式可以带来数据库性能上的少许提高.
14. 如何建立一个备份控制文件?
解答:Alter database backup control file to trace.
15. 给出数据库正常启动所经历的几种状态?
解答:
STARTUP NOMOUNT ?C 数据库实例启动
STARTUP MOUNT - 数据库装载
STARTUP OPEN ?C 数据库打开
16. 哪个column可以用来区别V$视图和GV$视图?
解答:INST_ID 指明集群环境中具体的 某个instance 。
17. 如何生成explain plan?
解答:运行utlxplan.sql. 建立plan 表
针对特定SQL语句,使用 explain plan set statement_id = 'tst1' into plan_table
运行utlxplp.sql 或 utlxpls.sql察看explain plan
18. 如何增加buffer cache的命中率?
解答:在数据库较繁忙时,适用buffer cache advisory 工具,查询v$db_cache_advice.如果有必要更改,可以使用 alter sys
tem set db_cache_size 命令
19. ORA-01555的应对方法?
解答:具体的出错信息是snapshot too old within rollback seg , 通常可以通过增大rollback seg来解决问题。当然也需要察看一下具体造成错误的SQL文本
20. 解释$ORACLE_HOME和$ORACLE_BASE的区别?
解答:ORACLE_BASE是oracle的根目录,ORACLE_HOME是oracle产品的目录。
--------------------------------------------------------------------------------------------------
一:SQL tuning 类
1:列举几种表连接方式
答:merge join,hash join,nested loop
2:不借助第三方工具,怎样查看sql的执行计划
答:sqlplus
set autotrace ...
utlxplan.sql创建plan_table表
3:如何使用CBO,CBO与RULE的区别
答:在初始化参数里面设置optimizer_mode=choose/all_rows/first_row等可以使用cbo.<br />rbo会选择不合适的索引,cbo需要统计信息。
4:如何定位重要(消耗资源多)的SQL
答:根据v$sqlarea 中的逻辑读/disk_read。以及寻找CPU使用过量的session,查出当前session的当前SQL语句,或者:监控WIN平台Oracle的运行
5:如何跟踪某个session的SQL
答:先找出对应的'sid,serial',然后调用system_system.set_sql_trace_in_session(sid,serial,true);参考:跟踪某个会话
6:SQL调整最关注的是什么
答:逻辑读。IO量
7:说说你对索引的认识(索引的结构、对dml影响、对查询影响、为什么提高查询性能
答:默认的索引是b-tree.
对insert的影响.(分裂,要保证tree的平衡)
对delete的影响.(删除行的时候要标记改节点为删除).
对update的影响,如果更新表中的索引字段,则要相应的更新索引中的键值。
查询中包含索引字段的键值和行的物理地址。
8:使用索引查询一定能提高查询的性能吗?为什么
答:不能。如果返回的行数目较大,使用全表扫描的性能较好。
9:绑定变量是什么?绑定变量有什么优缺点
答:通俗的说,绑定变量就是变量的一个占位符,使用绑定变量可以减少只有变量值不同的
语句的解析。
10:如何稳定(固定)执行计划
答:使用stored outline.
11:和排序相关的内存在8i和9i分别怎样调整,临时表空间的作用是什么
答:8i:使用sort_area_size,hash_area_size,每个session分配相同的值,不管有无使用。
9i: 使用pga_aggregate来统一管理。
临时表空间的作用:
在sort_area_size中不能完成的部分在临时表空间完成,临时表空间在重建索引,创建临时表等都要用到。
还有hash join不能完成的也在临时表空间中做。
12:存在表T(a,b,c,d),要根据字段c排序后取第21—30条记录显示,请给出sql
select a,b,c,d from (select a,b,c,d from T order by c) where rownum<=30
minus
select a,b,c,d from (select a,b,c,d from T order by c) where rownum <=20;
或者:
select * from (select rownum rn,a.* from (select a,b,c,d from T order by c) a )where rn between 21 and 30;
二:数据库基本概念类
1pctused and pctfree 表示什么含义有什么作用
答:表示数据块什么时候移入和移出freelist。
pctused:如果数据块的使用率小于pctused的值,则该数据块重新加入到fresslist中。
pctfree:如果数据块的使用率高于pctfree的值,则该数据块从freelist中移出。
2:简单描述table / segment / extent / block之间的关系
答:一个table至少是一个segment,如果分区表,则每个分区是一个segment,table可以看成是一个逻辑上的概念,segment可以看成是这个逻辑概念的物理实现;
segment由一个或多个extents组成,segment不可以跨表空间但可以跨数据文件;
extent由多个连续的blocks组成,不可以跨数据文件;
block由1-多个os块组成,是oracle i/o的最小存储单位。
3:描述tablespace和datafile之间的关系
答:tablespace是逻辑上的概念,datafile是物理上的概念。
一个tablespace可以由多个datafile组成,一个datafile不能跨越多个tablespace。
4:本地管理表空间和字典管理表空间的特点,ASSM有什么特点
答:一个使用freelist管理,一个使用位图管理。
5:回滚段的作用是什么
答:保存数据的前像,保证数据读取的时间点一致性。Oracle里数据的多版本特性就是通过回滚段来实现的,正因为此,Oracle数据库实现了读写不竞争的性能优势!
6:日志的作用是什么
答:纪录对数据库的操作,便与恢复。
7:SGA主要有那些部分,主要作用是什么
答:db_cache(缓存数据块),shared_pool(缓存sql,执行计划,数据字典信息等),large_pool(MTS模式、parallel 、rman等要用到),java pool(java程序如SQLJ存储过程运行时要用到)
8:racle系统进程主要有哪些,作用是什么
答:smon(合并空间,实例恢复),pmon(清理失败的进程),归档进程(负责在日志切换的时候归档日志文件),lgmr(日志书写器进程,负责写日志),ckpt(检查点进程,触发检查点),dbwr(数据库写入器,负责把数据写入导datafile)
三:备份恢复类
1:备份如何分类
答:逻辑备份(exp)与物理备份。
或者冷备份与热备份。
2:归档是什么含义
答:把日志文件放到另一个地方。
3:如果一个表在2004-08-04 10:30:00 被drop,在有完善的归档和备份的情况下,如何恢复
答:拷贝备份,
recover database until time 2004-08-04 10:30:00
alter database open resetlogs;
4:rman是什么,有何特点
答:rman叫恢复管理器.
特点很多。可以在线备份,到少目标数据库是mount状态。
1:热备份。
2:可以存储脚本。
3:可以增量备份。
4:自动管理备份集。
5:standby的特点
答:利用传输重做日志来达到同步的目的。可以设定多个保护级别,9i后支持逻辑standbyDB。
6:对于一个要求恢复时间比较短的系统(数据库50G,每天归档5G),你如何设计备份策略
答:每天一个全备份。
四:系统管理类
1:对于一个存在系统性能的系统,说出你的诊断处理思路
答:做一个statspack,根据top 5,system load,top sql等来做相应的调整。
2:列举几种诊断IO、CPU、性能状况的方法
答:hp-unix:iostat -x 1 5;
top/vmstat/glance
3:对statspack有何认识
答:一个性能诊断工具而已,其本质就是在两个时间点采样两个系统数据。(动态性能视图),然后根据两个snapshot,产生一个报告。
4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响
答:1:增大sort_area_size(8i)/pga_aggregate_target(9i)值。
2:如果表有分区(一般大表都要用到分区的),按分区逐个建索引,如果是本地索引的话;
3:系统空闲的时候建。
5:对raid10 和raid5有何认识
答:raid10是先镜像后条带,适合对写入速度要求较高的数据库系统,特别是online redolog文件,raid5适合大部分的数据库系统和数据仓库系统,读性能优于写性能。
五:综合随意类
1:你最擅长的是oracle哪部分?
答:性能/sql 调优、备份恢复。
2:喜欢oracle吗?喜欢上论坛吗?或者偏好oracle的哪一部分?
答:http://www.itpub.net/,Oracle的SQL 优化。
3:随意说说你觉得oracle最有意思的部分或者最困难的部分
答:SQL调优,最困难的是Oracle的网络管理,Oracle的Connect Manager没用过。
4:为何要选择做DBA呢?
答:爱好加职业历史积累。
4:如果系统现在需要在一个很大的表上创建一个索引,你会考虑那些因素,如何做以尽量减小对应用的影响
答:1:增大sort_area_size(8i)/pga_aggregate_target(9i)值。
2:用并行的方式来建。
3:系统空闲的时候建。
其他:------------------------------------------------------------------------------------
什么是聚集索引,什么是非聚集索引,什么又是主键?聚簇索引的顺序就是数据的物理存储顺序,叶节点就是数据节点。
非聚簇索引的顺序与数据物理排列顺序无关,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。
能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键,通过它可强制表的实体完整性。
1、事务是什么?A:所谓事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
2、oracle中truncate和delete命令有何区别?A:
(1)delete将在回滚段中产生回滚信息,truncate不产生,因此无论表中的记录多少,truncate执行都很快。
(2)truncate 是 DDL,执行隐含的commit,truncate不能回滚。任何没有提交的 DML 改变也将会和truncate一起提交。
(3)truncate 重置表及其索引高水位标志。全表扫描和索引快速全扫描读高水位标志下的所有数据块,因此在delete后全扫描性能没有提高,但truncate后将会变快。
(4)truncate 不触发 delete 触发器。
(5)没有对象权限允许一个用户 truncate 另一个用户的表。这样做需要 DROP ANY TABLE 系统权限。
(6)当一个表被 truncate,表及其索引的存储将被重置回初始大小。而 delete 不收缩表及其索引的大小。
(7)当父表有一个可用的引用完整性约束时不能被 truncate。必须先disable引用父表的外键约束,再truncate。
3、Oracle中char和varchar2数据类型有什么区别?有数据”test”分别存放到char(10)和varchar2(10)类型的字段中,其存储长度及类型有何区别?A:char是定长字符类型,varchar2是变长字符类型。“test”在char(10)中被补齐空格,存储长度是10字节,在varchar2(10)中存储长度是4字节。