Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74766
  • 博文数量: 38
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-13 15:19
文章分类

全部博文(38)

文章存档

2009年(12)

2008年(26)

我的朋友

分类:

2008-09-03 14:35:17

piner的面试题


http://www.itpub.net/685647.html

技能问题

数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义?

表空间管理方式有哪几种,各有什么优劣。

本地索引与全局索引的差别与适用情况。

一个表a varchar2(1),b number(1),c char(2),有100000条记录,创建B-Tree索引在字段a上,那么表与索引谁大?为什么?

9i的data guard有几种模式,各有什么差别。

执行计划是什么,查看执行计划一般有哪几种方式。

简单描述一下nest loop与hash join的差别。

db file sequential read与db file scattered read等待的差别,如果以上等待比较多,证明了什么问题?

library cache pin与library cache lock是什么地方的等待事件,一般说明什么问题?

在一个24*7的应用上,需要把一个访问量很大的1000万以上数据级别的表的普通索引(a,b)修改成唯一约束(a,b,c),你一般会选择怎么做,请说出具体的操作步骤与语句。

如果一个linux上的oracle数据库系统突然变慢,你一般从哪里去查找原因。

说明一下对raid5与raid01/10的认识。

列举5个10g的新特性

(1)数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义?
触发dbwr的执行,dbwr会把和这个日志相关的所有脏队列写到数据文件去,减少数据库崩溃的时的恢复时间。
==>你所的只是普通checkpoint 该做的,而没有特指Switch log时候的checkpoint的作用。
Switch log checkpoint最主要是使当前redo log 状态由 current ==> Active ==> Inactive ,以备重用

inactive 的真实意义,应该说,当日志文件被覆盖的时候一定要确保 相关 dirty buffer 一定被写入 数据文件,
所以日志的切换必须引起 检查点


(2)表空间管理方式有哪几种,各有什么优劣。
字典管理方式和自动管理方式,自动管理方式采用位图管理extent,减少字典之间的竞争,同时避免了碎片
==>ok.

(3)本地索引与全局索引的差别与适用情况。
本地索引适用于sql语句种限定一个范围的查询比如时间之类的, 全局索引适用于在全部记录中查询,比如要查询一个手机号之类的。
全局索引总可能出现unused的情况,需要重建
==>
本地索引适合条件中包含partition key的,当然不是绝对
全局索引总可能出现unused的情况,通常我会问那该怎么办?
9i里面有update global index 的子句

(4)一个表a varchar2(1),b number(1),c char(2),有100000条记录,创建B-Tree索引在字段a上,那么表与索引谁大?为什么?
这个要考虑到rwoid所占的字节数,假设char总是占用2字节的情况,比较rowid和3
==>另外,table 和 index在segment free block的管理也有差别

(5)9i的data guard有几种模式,各有什么差别。
三种模式
maxmize performance 采用异步传送
maxmize availablity 允许采用异步传送,在两者之间摇摆
==> 不叫摇摆,正常情况maxmize availablity 传输方式等同于maxmize protection ,只是在从库Crash时允许primary继续工作
maxmize protection 采用同步传送
==>保证Standby 与 primary 绝对数据一致
个人以为采用maxmize performance好一点,对主数据库影响比较小

(6)执行计划是什么,查看执行计划一般有哪几种方式。
执行计划是数据库内部的执行步骤
set autotrace on
select * from table
alter session set event '10046 trace name context forever,level 12 '
一般采用pl/sql developer,其它的比较少用,记不住
==>差不多,再加个Explain plan , v$sql_plan
(7)简单描述一下nest loop与hash join的差别。
nest loop适用于返回结果比较小的情况。
for in 1...n loop
对小表进行遍历
根据小表的结果遍历大表(大表需要索引)
end loop
这个在数据库高效设计里面有很好的解释,一时还写不出来
==>小表称为驱动的结果集更为贴切

hash join适用在返回大结果集的情况
==>也未必一定大结果集

(8)db file sequential read与db file scattered read等待的差别,如果以上等待比较多,证明了什么问题?
db file sequential read指的是需要一个但当前不在sga中的块,等待从磁盘中读取。db file scattered read需要多个连续的数据库引起等待。
db file sequential read出现大量的等待,或许不是个问题。如果这两个事件等待比较多,根据p1,p2,p3以及sid检查sql语句,是否有调优的可能
==>db file scattered read基本可以定性为FTS/IFS
l(9)ibrary cache pin与library cache lock是什么地方的等待事件,一般说明什么问题?
一般出现在对package,procedure进行编译,add contraint的时候。
==>差不多,说明DDL过多

(10)在一个24*7的应用上,需要把一个访问量很大的1000万以上数据级别的表的普通索引(a,b)修改成唯一约束(a,b,c),你一般会选择怎么做,请说出具体的操作步骤与语句。
不能确定,是否可以采用先建索引后建立约束
create index idx_w1 on w_1 (a,b,c) online ;
alter table w_1 add constraint uni_w1 unique (a,b,c) novalidate;
==>
差不多,另外,一定要考虑非繁忙时间
如果这个让我来做的话,那么需要考虑如下因素
1.查询条件中abc,是不是全部用到,
2.原来的a,b两个索引是什么样的索引.说普通,是不是就是一般的,那么在查询的时候是ab全部用到呢,还是就是说,a或者b
3.表有分区吗?如果有,使用的是什么索引
4.还需要考虑abc三个条件全部用到后,返回的数据量是多大?
在理想的情况下,如果abc全部用到,而且oracle版本是9i以上,abc的顺序不变的话,可以考虑增加sort_area_size,然后增加abc联合索引,a,b的普通索引暂时不删除,

(11)如果一个linux上的oracle数据库系统突然变慢,你一般从哪里去查找原因。
先top看看是哪些进程,看看这些进程在做什么
看看v$session_wait
==>
差不多,能加上vmstat , iostat就更好了

(12)说明一下对raid5与raid01/10的认识。
raid5采用校验信息,硬盘的利用率n-1/n, raid10先采用先镜像在进行条带化,是最高效的硬盘利用方式,硬盘的利用率50%
==> 通常会提一下redo log 不能 in raid5. 还有 01/10的区别及优劣。

(13)列举5个10g的新特性
1.rename tablespace
2.新的em
3.asm
4.bigfile tablespace
5.真正的增量rman
6.flashback table
7.expdp、impdp

阅读(460) | 评论(0) | 转发(0) |
0

上一篇:悲哀

下一篇:梦想~

给主人留下些什么吧!~~