DBA面试题答案,经过一定的整理
数据库切换日志的时候,为什么一定要发生检查点?这个检查点有什么意义?
Switch log checkpoint最主要是使当前redo log 状态由 current ==> Active ==> Inactive ,以备重用。
更直接点,当日志文件被覆盖的时候一定要确保相关dirty buffer 一定被写入 数据文件, 所以日志的切换必须引起 检查点。
alter system set log_checkpoints_to_alert=TRUE;
然后你执行切换,就可以看到checkpoint的启动和结束时间
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条。
简单描述一下nest loop与hash join的差别。
nest loop 内循环:一般是连接表对驱动表的数据进行全表扫描引起,例如not in,<>之类的连接;
hash join 内连接:一般就是两个表的等值连接
一般来说nest loop只适合于少量的数据,内外表都不超过1000条。
hash join只要内存足够,hash join可以比任何连接都好,通常数据量很大的情况下都是用这种方法。
0
