DBA面试题答案,经过一定的整理
数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义?
Switch log checkpoint最主要是使当前redo log 状态由 current ==> Active ==> Inactive ,以备重用。
更直接点,当日志文件被覆盖的时候一定要确保相关dirty buffer 一定被写入 数据文件, 所以日志的切换必须引起 检查点。
alter system set log_checkpoints_to_alert=TRUE;
然后你执行切换,就可以看到checkpoint的启动和结束时间
ACTIVE - It is needed for crash recovery. It may be in use for block recovery.
因为我们在切换日志的时候,就产生了 checkpoint,这就表示这个checkpoint以前的日志,在数据库重起时是不需要恢复的,那这个文档上为什么解释active是为了crash recovery????
==>check point没完成,cache里还有RBA处于那个active 的redo log中的 dirty buffer ,这时候,要是crash ,Instance recovery就需要这个redo log中的数据
如果说是因为切换后产生checkpoint,还没有执行完,这个日志文件暂时标记为active,但在很多情况下我看到有多组连续的日志文件是active的,难道这些都是checkpoint没有执行完造成的?
==>这个redo log 是active, 不影响别的redo log , 这就是为什么我们要求至少需要3组redo log 的原因了。
active的redo log不能被覆盖,其他的可以
不同的redo log,不会互相影响。
ORACLE不会保证这个checkpoint正常结束了才会在新的日志文件里面写日志。
Switch log 触发checkpoint ,当时并不需要等待 checkpoint完成。如果说 Switch log调用checkpoint ,那么,这是一个异步调用。
表空间管理方式有哪几种,各有什么优劣。
本地管理的主要优势是减少数据字典的争用,并且使得表空间的碎片减少。有自动分区和统一分区。一个位包含64kb。
本地索引与全局索引的差别与适用情况。
本地索引适用于sql语句种限定一个范围的查询比如时间之类的, 全局索引适用于在全部记录中查询,比如要查询一个手机号之类的。
全局索引总可能出现unused的情况,需要重建
==>
本地索引适合条件中包含partition key的,当然不是绝对
全局索引总可能出现unused的情况,通常我会问那该怎么办?
9i里面有update global index 的子句
一个表a varchar2(1),b number(1),c char(2),有100000条记录,创建B-Tree索引在字段a上,那么表与索引谁大?为什么?
索引大,原因是一个索引条目有一个rowid,rowid占6个字节,可以通过dump索引块看到结果。唯一索引条目rowid 5个字节,全局索引10个字节。
9i的data guard有几种模式,各有什么差别。
最大保护和最大性能模式,最大保护模式是主库一个事务提交后,必须等到dg完全同步才能提交成功;最大性能模式则不必这样。
执行计划是什么,查看执行计划一般有哪几种方式。
explain_plan,set autotrace,查讯v$sql_plan,一般后两种才能看到一个sql的实际执行计划
简单描述一下nest loop与hash join的差别。
nest loop 内循环:一般是连接表对驱动表的数据进行全表扫描引起,例如not in,<>之类的连接;
hash join 内连接:一般就是两个表的等值连接
一般来说nest loop只适合于少量的数据,内外表都不超过1000条。
hash join只要内存足够,hash join可以比任何连接都好,通常数据量很大的情况下都是用这种方法。
db file sequential read与db file scattered read等待的差别,如果以上等待比较多,证明了什么问题?
db file sequential read一般表示全范围索引扫描,db file scattered read就是全表扫描,如果这两种等待比较多表明对相关表没有建合适的索引
library cache pin与library cache lock是什么地方的等待事件,一般说明什么问题?
这个基本上没说到点上这两个latch主要是library cache中的object的组织方式是这样的,首先一个相当于头信息的handle,然后指向object具体的heap,library cache lock加在handle上,library cache pin则加在heap上,获得pin之前必须先获得对handle的锁定。这两种等待较多,一般是由于DDL引起的,比如重编译对象,授予/撤销权限等,这个pin可不是获得latch失败之后pin在cpu里的pin,这个pin就是latch一种,是名词
主要问题:
ddl比较多
语句严重的不绑定
在一个24*7的应用上,需要把一个访问量很大的1000万以上数据级别的表的普通索引(a,b)修改成唯一约束(a,b,c),你一般会选择怎么做,请说出具体的操作步骤与语句。
alter table big_table add constraint uk unique(a,b,c) using index ind_1 novalidate;
如果一个linux上的oracle数据库系统突然变慢,你一般从哪里去查找原因。
(1) top 一下 , 找到相应session ,跟踪该session ,结合 autotrace ,sql_trace, dbms_system.set_sql_trace_in_session(sid,serial#,true) 等应用优化工具
(2) v$session_wait , 找出等待事件
(3)v$sql,v$sqlarea 找出性能不好的sql等
(4),作statspack , 分析
能加上vmstat , iostat就更好了
说明一下对raid5与raid01/10的认识。
raid5是对硬盘进行条带化管理,需要拿一个盘出来保存校验信息,既增强了硬盘的I/0性能,又使得在某个硬盘(非校验盘)crash的时候可以完全恢复;
raid0拥有最高的I/O性能,但是不能进行灾难恢复;raid1就是两个硬盘的完全镜像,有最大的可靠性。
raid10就是raid0和raid1地结合。
redo log 不能 in raid5
列举5个10g的新特性
1.rename tablespace
2.新的em
3.asm
4.bigfile tablespace
5.真正的增量rman
6.flashback table
7.expdp、impdp
8.shrink
阅读(853) | 评论(0) | 转发(0) |