今天逛itpub的精华帖,无意中看到一个帖子写着“我的面试题,大家也可以看看”,于是笔者毫不做作地进去看看了……题目有难有简,有笔者比较有 信心的,也有笔者摸不着头脑了,看了下面的评论,大多数人也没有什么想法,笔者正准备继续逛帖子的时候发现此帖发于06年……笔者瞬间被雷击,5年前的技 术贴啊!笔者到现在都有不会的啊……必须要花点时间弄懂他。

首先给出链接,大侠们可以直接忽略笔者,自己去看了。

http://www.itpub.net/viewthread.php?tid=685647&extra=page%3D3%26amp%3Bfilter%3Ddigest

(其实每个题目都可以单独写一篇文章……)

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

答: 在日志切换的时候应该从检查点队列(checkoint queue)上把脏数据写入数据库,从而发生检查点以触发DBWn进程将脏数据块从checkpoint queue中读出写入数据文件并且移除,同时将LRBA(Low Redo Block Address,这个LRBA其实就是checkpoint position)写入到控制文件中去,这样做的话,如果在写入数据时发现实例崩溃,根据LRBA来进行redo的apply,来保证数据库的恢复。

(笔者感想:关于RBA,其实远远不止这些,除了LRBA还有HRBA什么的,笔者也查了很多资料,本来想跟大家分享的,但是由于众说纷纭,大家抄来抄去,笔者得不到肯定的答案,不想忽悠大家,等笔者弄懂之后再和大家分享。)

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

答:表空间管理分成2中,数据字典管理(DMT)和本地管理表空间(LMT)。

首 先,先明确,表空间的管理也就是对表的segment大小的扩张和收缩的管理,而segment的扩张和收缩的单位是extent,而extent就是一 块连续的oracle block.(如果想做dba的话concepts是一定要看的,concepts中对于oracle的逻辑结构做了清晰详细的解释)

而 DMT就是用FET$和UET$来记录表空间所对应的可用空间和已用空间,也就是说用户在执行DML语句的时候,oracle会自动生成一些语句,或者说 产生一些事务来对这两个数据字典进行更新。那有语句,有事务,很自然的就会有锁,会生成undo和redo,而且有的时候需要连续空间则需要 oracle(smon进程)合并可用空间。

而LMT则是在数据文件头留出一片区域存放bitmap信息,根据bitmap来管理表空间。那很自然的,不会产生锁也不会生成undo和redo,也不需要oracle合并空间.所以LMT也是oracle从9i开始推荐大家使用的表空间管理方式。

(笔者感想:

1.很多东西还是必须要知道原理的,答案在现在的google上一搜就有,关键是多问问为什么。为什么DMT要产生事务?产生事务了又会怎么样?一路挖掘下去。

2.基础还是很重要的,笔者越学发现自己的基础越不牢固,这不?开始看oracle concepts了,在好高骛远的同时,必须为自己打好基础,不然将来一定会有瓶颈。

3. 是不是很多知识在OS中似曾相似?可用空间的合并啊(碎片),bitmap啊等等等等。笔者学oracle的时候就发现了,os课程上学到的原理其实被广 泛应用了,不像很多人想得学校的课程是没用的。而作为一名优秀的dba,不能仅关注数据库,os,硬件,网络,都必须有所涉猎,而基础和原理的掌握和理解 决定了你能走多远)

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

答:不知道!!!笔者很干脆,这题笔者直接懵了,所以这题留待下次笔者单独拿出来学习,然后再和大家分享,期待血案(2)吧!

(笔者感想:查了才知道,这题会先涉及到分区,然后再是索引,笔者只能脸皮很厚的放到下次了……各位见谅)