5年前面试题引发的“血案”(番外篇)(总结和乱侃)

这货是说好的番外篇……

所谓的番外篇其实就是对前面的各个知识点做一些总结。

血案(1)中的两个内容主要是日志切换时的检查点和表空间管理。

日志切换其实远远没有简单,有关于检查点和日志文件的内容太多了,这题也牵涉到了进程之间的协作以及管理方式,不是一篇文章能说清楚的,那这里主要补充关于日志文件状态的一些理解。

日志文件分三个常用状态,current,active和inactive,还有unused,clearing,clearing_current,invalidated。

那关于日志的状态可以查看v$log这个视图:

current:当前的日志文件,也就是说当前正在被使用的日志文件,显然如果要完全恢复的话那是必须要使用的。

active:活动的日志文件,也就是说虽然当前的日志文件没有被使用,但是它所对应的脏数据尚未完全被写入,那在完全恢复的时候当然也是需要的。

inactive:所有的脏数据块都写入了以后那日志就会变成inactive的状态,也就是说完全恢复的时候是用不到的,但是如果是在做不完全恢复的时候还是需要用到的。在o小白学ocp的时代,常常把这些状态和归档搞起来,但是现在看来,两者是毫无关系的。

unused :也就是说从来没有被写入过的日志文件,刚刚添加的日志文件或者在restlogs以后可能会出现这个状态。

clearing:发出alter database clear log file的时候出现的状态,之后立刻会变为unused,应该不常见到。

clearing_current:如果在对当前日志进行操作的时候由于磁盘io或者是写入文件头失败的时候会出现的状态。

invalidate:当前日志在被归档但是却没有引起日志的切换出现的状态,比较诡异,通常是由于归档日志文件出错而导致的状态(没有实验过,o小白看别人的提问得出的结论)

表空间管理也可以说很多,根据面试题的原作者的话,如果你能答出DMT和LMT,那他会继续问类似于LMT extent有哪些分配方式(自动Automatic和统一Uniform)之类更深层次的题目,以后面试dba的时候是不是也会被大牛给qj掉……惊恐

血案(2)单独一篇说的是oracle的分区表和他的索引,那关于分区表说得还是比较详细了,篇幅也比较长,本想就索引再开一篇的,但是貌似太理论了,索引目前还讲不出清楚,所以留待下次吧。

血 案(3)关键的部分是rowid,那需要注意的是rowid在实际的表中是以伪列的形式存在的,虽然你可以查阅到,但是他并不占用表的空间,这个概念要搞 清楚。另外rownum和rowid要分清楚,rownum就是类似于行号,用于top分析的时候用,rowid则是oracle定位一条数据的唯一标 识,具体组成以后有空和大家分享,如果大家等不及的话可以去搜一下,有个被庄老师说成圈圈的大牛写得很详细了。

血案(4)的东西蛮多的,有 关于nested loop和hash join不知道o小白说清楚了没有……wait event相信通过数据库的简单监控和血案(4)大家应该有个模糊的印象了,其实o小白也只是知道一个理论,调优涉及得太少。最后那题应用题被pub上很 多人说很经典(注意……是5年前……),那o小白也是看别人看来的,实战经验神马的对我们还没工作的人来说最讨厌了……

血案(5)开放题也 只能这样了,能力不足,这种都是经验的积累,你说自己做做实验也能把数据库给跑慢么……就算跑慢了也顶多就是重装一次……有关于raid再抱歉一次,确实 是对raid的理解有了偏差,幸好羊习习提醒,最后应该是……改对了吧……不过也好,这样也不会忘记了,犯错不可怕,还坚持以为自己是对的就尴尬了。另外 么raid3啊神马的大家有兴趣也可以去看看,对于读写效率啊,容错啊这些自己做个总结,这块无论是做什么应该都要知道的吧,自己动动手列张表格没坏处 的。

番外篇也就总结一下吧,把那些因为篇幅或者比较偏的东西放出来了,不算是偷懒吧……汗

你可能感兴趣的:(oracle,数据库,职场,休闲)